Skip to content

Instantly share code, notes, and snippets.

@olleharstedt
Created July 12, 2023 10:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save olleharstedt/a32d29969bdb5db09b39e970bfeff627 to your computer and use it in GitHub Desktop.
Save olleharstedt/a32d29969bdb5db09b39e970bfeff627 to your computer and use it in GitHub Desktop.
Inject survey directly
<?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