Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5287 eleazar 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
5572 eleazar 12
use LeadersLinked\Form\RecruitmentSelectionCandidateFormForm;
5287 eleazar 13
use LeadersLinked\Library\Functions;
5572 eleazar 14
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
15
use LeadersLinked\Mapper\UserMapper;
16
use LeadersLinked\Mapper\CompanyMapper;
17
use LeadersLinked\Model\Company;
18
use Laminas\Hydrator\ArraySerializableHydrator;
19
use Laminas\Db\ResultSet\HydratingResultSet;
20
use LeadersLinked\Mapper\QueryMapper;
21
use Laminas\Paginator\Adapter\DbSelect;
22
use Laminas\Paginator\Paginator;
23
use Laminas\Db\Adapter\AdapterInterface;
5287 eleazar 24
use LeadersLinked\Mapper\SurveyTestMapper;
5557 eleazar 25
use LeadersLinked\Mapper\SurveyMapper;
26
use LeadersLinked\Mapper\SurveyFormMapper;
5287 eleazar 27
use LeadersLinked\Form\SurveyTestForm;
28
use LeadersLinked\Model\SurveyTest;
29
class SurveyTestController extends AbstractActionController {
30
 
31
    /**
32
     *
33
     * @var AdapterInterface
34
     */
35
    private $adapter;
36
 
37
    /**
38
     *
39
     * @var AbstractAdapter
40
     */
41
    private $cache;
42
 
43
    /**
44
     *
45
     * @var  LoggerInterface
46
     */
47
    private $logger;
48
 
49
    /**
50
     *
51
     * @var array
52
     */
53
    private $config;
54
 
55
    /**
56
     *
57
     * @param AdapterInterface $adapter
58
     * @param AbstractAdapter $cache
59
     * @param LoggerInterface $logger
60
     * @param array $config
61
     */
62
    public function __construct($adapter, $cache, $logger, $config) {
63
        $this->adapter = $adapter;
64
        $this->cache = $cache;
65
        $this->logger = $logger;
66
        $this->config = $config;
67
    }
68
 
69
    public function indexAction() {
70
        $request = $this->getRequest();
71
        $currentUserPlugin = $this->plugin('currentUserPlugin');
72
        $currentCompany = $currentUserPlugin->getCompany();
73
        $currentUser = $currentUserPlugin->getUser();
74
 
75
 
76
        $request = $this->getRequest();
77
        if ($request->isGet()) {
78
 
79
            $headers = $request->getHeaders();
80
 
81
            $isJson = false;
82
            if ($headers->has('Accept')) {
83
                $accept = $headers->get('Accept');
84
 
85
                $prioritized = $accept->getPrioritized();
86
 
87
                foreach ($prioritized as $key => $value) {
88
                    $raw = trim($value->getRaw());
89
 
90
                    if (!$isJson) {
91
                        $isJson = strpos($raw, 'json');
92
                    }
93
                }
94
            }
95
 
96
            if ($isJson) {
5607 eleazar 97
                $search = $this->params()->fromQuery('search', []);
5287 eleazar 98
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
99
 
100
                $page = intval($this->params()->fromQuery('start', 1), 10);
101
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
102
                $order = $this->params()->fromQuery('order', []);
103
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
104
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
105
 
5613 eleazar 106
                $fields = ['first_name'];
107
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
108
 
5614 eleazar 109
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
110
                    $order_direction = 'ASC';
111
                }
112
 
5620 eleazar 113
                $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
5615 eleazar 114
                $paginator = $surveyTestMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
5619 eleazar 115
 
5287 eleazar 116
                $items = [];
117
                $records = $paginator->getCurrentItems();
5605 eleazar 118
 
5566 eleazar 119
 
5287 eleazar 120
                foreach ($records as $record) {
5569 eleazar 121
                    $params = [
122
                        'vacancy_uuid' => $vacancy->uuid,
123
                        'id' => $record['uuid'],
124
                    ];
125
 
5287 eleazar 126
                    $item = [
127
                        'id' => $record->id,
5557 eleazar 128
                        'first_name' => $record->first_name,
5288 eleazar 129
 
5287 eleazar 130
                        'actions' => [
131
                            'link_delete' => $this->url()->fromRoute('survey/test/delete', ['id' => $record->uuid])
132
                        ]
133
                    ];
134
 
135
                    array_push($items, $item);
136
                }
137
 
138
                return new JsonModel([
139
                    'success' => true,
140
                    'data' => [
141
                        'items' => $items,
142
                        'total' => $paginator->getTotalItemCount(),
143
                    ]
144
                ]);
145
            } else {
5564 eleazar 146
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
147
                $survies = $surveyMapper->fetchAllByCompanyId($currentCompany->id);
148
 
5287 eleazar 149
                $form = new SurveyTestForm($this->adapter, $currentCompany->id);
150
 
151
                $this->layout()->setTemplate('layout/layout-backend');
152
                $viewModel = new ViewModel();
153
                $viewModel->setTemplate('leaders-linked/survey-test/index.phtml');
5564 eleazar 154
                $viewModel->setVariables([
155
                    'form'      => $form,
156
                    'survies' => $survies
157
                ]);
5287 eleazar 158
                return $viewModel;
159
            }
160
        } else {
161
            return new JsonModel([
162
                'success' => false,
163
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
164
            ]);
5663 eleazar 165
 
5287 eleazar 166
        }
167
    }
168
 
169
    public function addAction() {
170
        $request = $this->getRequest();
171
        $currentUserPlugin = $this->plugin('currentUserPlugin');
172
        $currentCompany = $currentUserPlugin->getCompany();
173
        $currentUser = $currentUserPlugin->getUser();
174
 
175
        $request = $this->getRequest();
176
 
5657 eleazar 177
        $survey_uuid = $this->params()->fromRoute('survey_id');
5452 eleazar 178
 
179
        if ($request->isGet()) {
5649 eleazar 180
            $surveyMapper = SurveyMapper::getInstance($this->adapter);
181
            $survey = $surveyMapper->fetchOneByUuid($survey_uuid);
5570 eleazar 182
 
5452 eleazar 183
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
184
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
5570 eleazar 185
 
5452 eleazar 186
            $data = [
187
                'survey' => [
188
                    'id' => $survey->uuid,
189
                    'content' => $surveyForm->content ? json_decode($surveyForm->content) : [],
190
                    'description' => $surveyForm->description,
191
                    'text' => $surveyForm->text,
192
                ],
193
            ];
5663 eleazar 194
            return new JsonModel([
195
                'success' => true,
196
                'data' => $data,
197
            ]);
5563 eleazar 198
 
5452 eleazar 199
 
200
        } else if ($request->isPost()) {
5287 eleazar 201
 
202
            $form = new SurveyTestForm($this->adapter, $currentCompany->id);
203
 
204
            $dataPost = $request->getPost()->toArray();
205
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
206
 
207
 
208
 
209
 
210
            $form->setData($dataPost);
211
 
212
            if ($form->isValid()) {
213
                $dataPost = (array) $form->getData();
214
 
215
                $hydrator = new ObjectPropertyHydrator();
216
                $survey = new SurveyTest();
217
                $hydrator->hydrate($dataPost, $survey);
218
 
219
                $survey->company_id = $currentCompany->id;
220
 
221
 
222
                $surveyMapper = SurveyTestMapper::getInstance($this->adapter);
223
                $result = $surveyMapper->insert($survey);
224
 
225
                if ($result) {
226
                    $this->logger->info('Se agrego el formulario' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
227
 
228
                    // Get record by id
229
                    $record = $surveyMapper->fetchOne($survey->id);
230
 
231
                    if ($record) {
232
 
233
                        $data = [
234
                            'success' => true,
235
                            'id' => $record->id,
236
                            'data' => 'LABEL_RECORD_ADDED'
237
                        ];
238
                    } else {
239
 
240
                        $data = [
241
                            'success' => false,
242
                            'data' => 'ERROR_RECORD_NOT_FOUND'
243
                        ];
244
                    }
245
                } else {
246
                    $data = [
247
                        'success' => false,
248
                        'data' => $surveyMapper->getError()
249
                    ];
250
                }
251
 
252
                return new JsonModel($data);
253
            } else {
254
                $messages = [];
255
                $form_messages = (array) $form->getMessages();
256
                foreach ($form_messages as $fieldname => $field_messages) {
257
 
258
                    $messages[$fieldname] = array_values($field_messages);
259
                }
260
 
261
                return new JsonModel([
262
                    'success' => false,
263
                    'data' => $messages
264
                ]);
265
            }
266
        } else {
267
            $data = [
268
                'success' => false,
269
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
270
            ];
271
 
272
            return new JsonModel($data);
273
        }
274
 
275
        return new JsonModel($data);
276
    }
277
 
278
    public function deleteAction() {
279
        $request = $this->getRequest();
280
        $currentUserPlugin = $this->plugin('currentUserPlugin');
281
        $currentCompany = $currentUserPlugin->getCompany();
282
        $currentUser = $currentUserPlugin->getUser();
283
 
284
        $request = $this->getRequest();
285
        $uuid = $this->params()->fromRoute('id');
286
 
287
        if (!$uuid) {
288
            $data = [
289
                'success' => false,
290
                'data' => 'ERROR_INVALID_PARAMETER'
291
            ];
292
 
293
            return new JsonModel($data);
294
        }
295
 
296
        $surveyMapper = SurveyFormMapper::getInstance($this->adapter);
297
        $survey = $surveyMapper->fetchOneByUuid($uuid);
298
        if (!$survey) {
299
            $data = [
300
                'success' => false,
301
                'data' => 'ERROR_RECORD_NOT_FOUND'
302
            ];
303
 
304
            return new JsonModel($data);
305
        }
306
 
307
        if ($survey->company_id != $currentCompany->id) {
308
            return new JsonModel([
309
                'success' => false,
310
                'data' => 'ERROR_UNAUTHORIZED'
311
            ]);
312
        }
313
 
314
        if ($request->isPost()) {
315
 
316
            $result = $surveyMapper->delete($survey->id);
317
            if ($result) {
318
                $this->logger->info('Se borro el formulario ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
319
 
320
                $data = [
321
                    'success' => true,
322
                    'data' => 'LABEL_RECORD_DELETED'
323
                ];
324
            } else {
325
 
326
                $data = [
327
                    'success' => false,
328
                    'data' => $surveyMapper->getError()
329
                ];
330
 
331
                return new JsonModel($data);
332
            }
333
        } else {
334
            $data = [
335
                'success' => false,
336
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
337
            ];
338
 
339
            return new JsonModel($data);
340
        }
341
 
342
        return new JsonModel($data);
343
    }
344
 
345
}