Merge pull request #2 from wiosna-dev/bugfix/UW-2538

Bugfix/uw 2538
This commit is contained in:
Michał Frankiewicz
2021-06-30 08:36:41 +02:00
committed by GitHub

View File

@@ -12,6 +12,8 @@ use Meritoo\Common\Collection\Collection;
use Meritoo\LimeSurvey\ApiClient\Client\Client; use Meritoo\LimeSurvey\ApiClient\Client\Client;
use Meritoo\LimeSurvey\ApiClient\Exception\CannotProcessDataException; use Meritoo\LimeSurvey\ApiClient\Exception\CannotProcessDataException;
use Meritoo\LimeSurvey\ApiClient\Exception\MissingSurveySummaryException; use Meritoo\LimeSurvey\ApiClient\Exception\MissingSurveySummaryException;
use Meritoo\LimeSurvey\ApiClient\Exception\UnknownInstanceOfResultItem;
use Meritoo\LimeSurvey\ApiClient\Exception\UnknownMethodException;
use Meritoo\LimeSurvey\ApiClient\Result\Collection\Participants; use Meritoo\LimeSurvey\ApiClient\Result\Collection\Participants;
use Meritoo\LimeSurvey\ApiClient\Result\Collection\Surveys; use Meritoo\LimeSurvey\ApiClient\Result\Collection\Surveys;
use Meritoo\LimeSurvey\ApiClient\Result\Collection\SurveysSummaries; use Meritoo\LimeSurvey\ApiClient\Result\Collection\SurveysSummaries;
@@ -126,6 +128,8 @@ class SurveyService
* @return Surveys * @return Surveys
* *
* @throws CannotProcessDataException * @throws CannotProcessDataException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function getAllSurveys($onlyActive = false) public function getAllSurveys($onlyActive = false)
{ {
@@ -160,10 +164,13 @@ class SurveyService
/** /**
* Returns information if survey with given ID exists * Returns information if survey with given ID exists
* *
* @param int $surveyId ID of survey to verify * @param int $surveyId ID of survey to verify
* @param bool $shouldBeActive (optional) If is set to true, survey should be active. If it's not, it shouldn't * @param bool $shouldBeActive (optional) If is set to true, survey should be active. If it's not, it shouldn't
* be returned, even if exists. Otherwise - it doesn't matter (default behaviour). * be returned, even if exists. Otherwise - it doesn't matter (default behaviour).
* @return bool * @return bool
* @throws CannotProcessDataException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function isExistingSurvey($surveyId, $shouldBeActive = false) public function isExistingSurvey($surveyId, $shouldBeActive = false)
{ {
@@ -221,14 +228,17 @@ class SurveyService
/** /**
* Returns participants of given survey * Returns participants of given survey
* *
* @param int $surveyId ID of survey * @param int $surveyId ID of survey
* @param bool $onlyCompleted (optional) If is set to true, participants who completed survey are returned only. * @param bool $onlyCompleted (optional) If is set to true, participants who completed survey are returned only.
* Otherwise - all (default behaviour). * Otherwise - all (default behaviour).
* @return Collection * @return Collection
* *
* @throws CannotProcessDataException * @throws CannotProcessDataException
* @throws MissingSurveySummaryException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function getSurveyParticipants($surveyId, $onlyCompleted = false, array $criteria = []) public function getSurveyParticipants($surveyId, $onlyCompleted = false)
{ {
$hasSurvey = $this $hasSurvey = $this
->allParticipants ->allParticipants
@@ -244,8 +254,6 @@ class SurveyService
$offset, $offset,
$limit, $limit,
$includeUnused, $includeUnused,
$attributes = false,
$criteria
]; ];
try { try {
@@ -277,11 +285,14 @@ class SurveyService
/** /**
* Adds participant with given data to survey with given ID * Adds participant with given data to survey with given ID
* *
* @param int $surveyId ID of survey * @param int $surveyId ID of survey
* @param string $firstName First name of the participant to add * @param string $firstName First name of the participant to add
* @param string $lastName Last ame of the participant to add * @param string $lastName Last ame of the participant to add
* @param string $email E-mail address of the participant to add * @param string $email E-mail address of the participant to add
* @return Participant * @return Participant
* @throws CannotProcessDataException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function addParticipant($surveyId, $firstName, $lastName, $email) public function addParticipant($surveyId, $firstName, $lastName, $email)
{ {
@@ -320,9 +331,13 @@ class SurveyService
/** /**
* Returns short data of one participant with given e-mail (participant of given survey) * Returns short data of one participant with given e-mail (participant of given survey)
* *
* @param int $surveyId ID of survey * @param int $surveyId ID of survey
* @param string $email E-mail address of the participant * @param string $email E-mail address of the participant
* @return ParticipantShort|null * @return ParticipantShort|null
* @throws CannotProcessDataException
* @throws MissingSurveySummaryException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function getParticipant($surveyId, $email) public function getParticipant($surveyId, $email)
{ {
@@ -345,7 +360,10 @@ class SurveyService
* @param int $surveyId ID of survey * @param int $surveyId ID of survey
* @return int * @return int
* *
* @throws CannotProcessDataException
* @throws MissingSurveySummaryException * @throws MissingSurveySummaryException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
public function getSurveyTokenCount($surveyId) public function getSurveyTokenCount($surveyId)
{ {
@@ -376,6 +394,9 @@ class SurveyService
* *
* @param int $surveyId ID of survey * @param int $surveyId ID of survey
* @return SurveySummary|null * @return SurveySummary|null
* @throws CannotProcessDataException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/ */
private function getSurveySummary($surveyId) private function getSurveySummary($surveyId)
{ {
@@ -397,4 +418,40 @@ class SurveyService
return $surveySummary; return $surveySummary;
} }
/**
* @param $surveyId
* @param $email
* @return bool
* @throws CannotProcessDataException
* @throws UnknownInstanceOfResultItem
* @throws UnknownMethodException
*/
public function hasSurveyBeenCompletedByEmail($surveyId, $email)
{
$arguments = [
$surveyId,
$offset = 0,
$limit = 1,
$includeUnused = false,
$attributes = false,
['email' => $email]
];
try {
/** @var Collection $participants */
$participants = $this
->client
->run(MethodType::LIST_PARTICIPANTS, $arguments)
->getData();
return $participants->count() > 0;
} catch (CannotProcessDataException $exception) {
if (ReasonType::NO_PARTICIPANTS_FOUND !== $exception->getReason()) {
throw $exception;
}
}
return false;
}
} }