/
SurveyList.php
77 lines (67 loc) · 2.1 KB
/
SurveyList.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace LimeSurvey\Api\Command\V1;
use Survey;
use LimeSurvey\Api\Command\V1\Transformer\Output\TransformerOutputSurvey;
use LimeSurvey\Api\Command\{
CommandInterface,
Request\Request,
Response\Response,
Response\ResponseFactory
};
use LimeSurvey\Api\Auth\AuthSession;
use LimeSurvey\Api\Command\Mixin\Auth\AuthPermissionTrait;
class SurveyList implements CommandInterface
{
use AuthPermissionTrait;
protected Survey $survey;
protected AuthSession $authSession;
protected TransformerOutputSurvey $transformerOutputSurvey;
protected ResponseFactory $responseFactory;
/**
* Constructor
*
* @param Survey $survey
* @param AuthSession $authSession
* @param TransformerOutputSurvey $transformerOutputSurvey
* @param ResponseFactory $responseFactory
*/
public function __construct(
Survey $survey,
AuthSession $authSession,
TransformerOutputSurvey $transformerOutputSurvey,
ResponseFactory $responseFactory
) {
$this->survey = $survey;
$this->authSession = $authSession;
$this->transformerOutputSurvey = $transformerOutputSurvey;
$this->responseFactory = $responseFactory;
}
/**
* Run survey list command
*
* @param Request $request
* @return Response
*/
public function run(Request $request)
{
$sessionKey = (string) $request->getData('sessionKey');
if (
!$this->authSession
->checkKey($sessionKey)
) {
return $this->responseFactory
->makeErrorUnauthorised();
}
$dataProvider = $this->survey
->with('defaultlanguage')
->search([
'pageSize' => $request->getData('pageSize'),
// Yii pagination is zero based - so we must add 1
'currentPage' => $request->getData('page') + 1,
]);
$data = $this->transformerOutputSurvey
->transformAll($dataProvider->getData());
return $this->responseFactory
->makeSuccess(['surveys' => $data]);
}
}