Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5866 eleazar 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Mapper\QueryMapper;
14
use Laminas\Db\Sql\Select;
15
use LeadersLinked\Library\Functions;
16
use LeadersLinked\Mapper\SurveyTestMapper;
17
use LeadersLinked\Mapper\SurveyMapper;
18
use LeadersLinked\Mapper\SurveyFormMapper;
19
use LeadersLinked\Form\SurveyTestForm;
20
use LeadersLinked\Model\SurveyTest;
21
use LeadersLinked\Mapper\UserMapper;
22
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
23
use LeadersLinked\Library\SurveyReport;
24
 
25
class SurveyReportController extends AbstractActionController {
26
 
27
    /**
28
     *
29
     * @var AdapterInterface
30
     */
31
    private $adapter;
32
 
33
    /**
34
     *
35
     * @var AbstractAdapter
36
     */
37
    private $cache;
38
 
39
    /**
40
     *
41
     * @var  LoggerInterface
42
     */
43
    private $logger;
44
 
45
    /**
46
     *
47
     * @var array
48
     */
49
    private $config;
50
 
51
    /**
52
     *
53
     * @param AdapterInterface $adapter
54
     * @param AbstractAdapter $cache
55
     * @param LoggerInterface $logger
56
     * @param array $config
57
     */
58
    public function __construct($adapter, $cache, $logger, $config) {
59
        $this->adapter = $adapter;
60
        $this->cache = $cache;
61
        $this->logger = $logger;
62
        $this->config = $config;
63
    }
64
 
65
    public function indexAction() {
5911 eleazar 66
 
5866 eleazar 67
        $request = $this->getRequest();
68
        $currentUserPlugin = $this->plugin('currentUserPlugin');
69
        $currentCompany = $currentUserPlugin->getCompany();
70
        $currentUser = $currentUserPlugin->getUser();
71
 
5911 eleazar 72
        try{
5866 eleazar 73
        $request = $this->getRequest();
74
        if ($request->isGet()) {
75
 
76
            $headers = $request->getHeaders();
77
 
78
            $isJson = false;
79
            if ($headers->has('Accept')) {
80
                $accept = $headers->get('Accept');
81
 
82
                $prioritized = $accept->getPrioritized();
83
 
84
                foreach ($prioritized as $key => $value) {
85
                    $raw = trim($value->getRaw());
86
 
87
                    if (!$isJson) {
88
                        $isJson = strpos($raw, 'json');
89
                    }
90
                }
91
            }
92
 
93
            if ($isJson) {
5911 eleazar 94
                $survey_uuid = $this->params()->fromRoute('survey_id');
95
 
96
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
97
                $survey = $surveyMapper->fetchOneByUuid($survey_uuid);
98
 
5866 eleazar 99
                $search = $this->params()->fromQuery('search', []);
100
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
101
 
102
                $page = intval($this->params()->fromQuery('start', 1), 10);
103
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
104
                $order = $this->params()->fromQuery('order', []);
105
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
106
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
107
 
108
                $fields = ['first_name'];
109
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
110
 
111
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
112
                    $order_direction = 'ASC';
113
                }
114
 
115
                $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
116
                $paginator = $surveyTestMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
117
 
118
                $items = [];
119
                $records = $paginator->getCurrentItems();
120
 
121
                foreach ($records as $record) {
5911 eleazar 122
                    $params = [
123
                        'survey_id' => $survey->uuid,
124
                        'id' => $record->uuid,
125
                    ];
5866 eleazar 126
 
127
                    $item = [
128
                        'id' => $record->id,
129
                        'first_name' => $record->first_name,
5911 eleazar 130
                        'form' => $survey->name,
131
 
5866 eleazar 132
                        'actions' => [
5911 eleazar 133
                            'link_delete' => $this->url()->fromRoute('survey/test/delete', ['id' => $record->uuid])
5866 eleazar 134
                        ]
135
                    ];
136
 
137
                    array_push($items, $item);
138
                }
139
 
140
                return new JsonModel([
141
                    'success' => true,
142
                    'data' => [
143
                        'items' => $items,
144
                        'total' => $paginator->getTotalItemCount(),
145
                    ]
146
                ]);
5911 eleazar 147
            } else {
148
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
149
                $survies = $surveyMapper->fetchAllByCompanyId($currentCompany->id);
150
 
5866 eleazar 151
                $form = new SurveyTestForm($this->adapter, $currentCompany->id);
152
 
153
                $this->layout()->setTemplate('layout/layout-backend');
154
                $viewModel = new ViewModel();
5911 eleazar 155
                $viewModel->setTemplate('leaders-linked/survey-test/index.phtml');
5866 eleazar 156
                $viewModel->setVariables([
5911 eleazar 157
                    'form'      => $form,
158
                    'survies' => $survies
5866 eleazar 159
                ]);
160
                return $viewModel;
161
            }
162
        } else {
163
            return new JsonModel([
164
                'success' => false,
165
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
166
            ]);
167
 
168
        }
5911 eleazar 169
        } catch (\Throwable $e) {
170
            $e->getMessage();
171
            return new JsonModel([
172
                'success' => false,
173
                'data' => $e
174
            ]);
175
        }
5866 eleazar 176
    }
5911 eleazar 177
 
5866 eleazar 178
}