Created
July 12, 2023 10:26
-
-
Save olleharstedt/a32d29969bdb5db09b39e970bfeff627 to your computer and use it in GitHub Desktop.
Inject survey directly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace LimeSurvey\Models\Services; | |
use DI\DependencyException; | |
use LimeSurvey\DI; | |
use LSYii_Application; | |
use Survey; | |
use Permission; | |
use Question; | |
use QuestionGroup; | |
use QuestionGroupL10n; | |
use Exception; | |
use LimeSurvey\Models\Services\Exception\{ | |
PersistErrorException, | |
NotFoundException, | |
PermissionDeniedException | |
}; | |
class QuestionGroupService | |
{ | |
private Permission $modelPermission; | |
private Survey $modelSurvey; | |
private QuestionGroup $modelQuestionGroup; | |
public function __construct( | |
Permission $modelPermission, | |
?Survey $survey, | |
QuestionGroup $modelQuestionGroup, | |
) { | |
if (empty($survey)) { | |
throw new Exception('Survey is required'); | |
} | |
$this->survey = $survey; | |
$this->modelPermission = $modelPermission; | |
$this->modelQuestionGroup = $modelQuestionGroup; | |
} | |
/** | |
* Updates a question group and all the languages. | |
* | |
* @param int $questionGroupId the question group id | |
* @param array $input has the data for a question group, including an array for languages | |
* ['questionGroup'] | |
* [gid] | |
* [sid] | |
* [group_order] | |
* [randomization_group] | |
* [grelevance] | |
* ['questionGroupI10N'] | |
* [en] | |
* [group_name] | |
* [description] | |
* [...] //more languages | |
* @return QuestionGroup | |
* @throws NotFoundException | |
* @throws PermissionDeniedException | |
* @throws PersistErrorException | |
*/ | |
public function updateGroup(int $questionGroupId, array $input) | |
{ | |
if (!$this->modelPermission->hasSurveyPermission($survey->sid, 'surveycontent', 'update')) { | |
throw new PermissionDeniedException( | |
'Permission denied' | |
); | |
} | |
$questionGroup = $this->modelQuestionGroup->findByPk($questionGroupId); | |
if (!$questionGroup) { | |
throw new NotFoundException( | |
'Group not found' | |
); | |
} | |
$questionGroup = $this->updateQuestionGroup($questionGroup, $input['questionGroup']); | |
$this->updateQuestionGroupLanguages($questionGroup, $input['questionGroupI10N']); | |
return $questionGroup; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment