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
            ]);
165
            ;
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
 
5452 eleazar 177
        $survey_uuid = $this->params()->fromRoute('survey_uuid');
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
            ];
194
 
5563 eleazar 195
 
5452 eleazar 196
 
197
        } else if ($request->isPost()) {
5287 eleazar 198
 
199
            $form = new SurveyTestForm($this->adapter, $currentCompany->id);
200
 
201
            $dataPost = $request->getPost()->toArray();
202
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
203
 
204
 
205
 
206
 
207
            $form->setData($dataPost);
208
 
209
            if ($form->isValid()) {
210
                $dataPost = (array) $form->getData();
211
 
212
                $hydrator = new ObjectPropertyHydrator();
213
                $survey = new SurveyTest();
214
                $hydrator->hydrate($dataPost, $survey);
215
 
216
                $survey->company_id = $currentCompany->id;
217
 
218
 
219
                $surveyMapper = SurveyTestMapper::getInstance($this->adapter);
220
                $result = $surveyMapper->insert($survey);
221
 
222
                if ($result) {
223
                    $this->logger->info('Se agrego el formulario' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
224
 
225
                    // Get record by id
226
                    $record = $surveyMapper->fetchOne($survey->id);
227
 
228
                    if ($record) {
229
 
230
                        $data = [
231
                            'success' => true,
232
                            'id' => $record->id,
233
                            'data' => 'LABEL_RECORD_ADDED'
234
                        ];
235
                    } else {
236
 
237
                        $data = [
238
                            'success' => false,
239
                            'data' => 'ERROR_RECORD_NOT_FOUND'
240
                        ];
241
                    }
242
                } else {
243
                    $data = [
244
                        'success' => false,
245
                        'data' => $surveyMapper->getError()
246
                    ];
247
                }
248
 
249
                return new JsonModel($data);
250
            } else {
251
                $messages = [];
252
                $form_messages = (array) $form->getMessages();
253
                foreach ($form_messages as $fieldname => $field_messages) {
254
 
255
                    $messages[$fieldname] = array_values($field_messages);
256
                }
257
 
258
                return new JsonModel([
259
                    'success' => false,
260
                    'data' => $messages
261
                ]);
262
            }
263
        } else {
264
            $data = [
265
                'success' => false,
266
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
267
            ];
268
 
269
            return new JsonModel($data);
270
        }
271
 
272
        return new JsonModel($data);
273
    }
274
 
275
    public function deleteAction() {
276
        $request = $this->getRequest();
277
        $currentUserPlugin = $this->plugin('currentUserPlugin');
278
        $currentCompany = $currentUserPlugin->getCompany();
279
        $currentUser = $currentUserPlugin->getUser();
280
 
281
        $request = $this->getRequest();
282
        $uuid = $this->params()->fromRoute('id');
283
 
284
        if (!$uuid) {
285
            $data = [
286
                'success' => false,
287
                'data' => 'ERROR_INVALID_PARAMETER'
288
            ];
289
 
290
            return new JsonModel($data);
291
        }
292
 
293
        $surveyMapper = SurveyFormMapper::getInstance($this->adapter);
294
        $survey = $surveyMapper->fetchOneByUuid($uuid);
295
        if (!$survey) {
296
            $data = [
297
                'success' => false,
298
                'data' => 'ERROR_RECORD_NOT_FOUND'
299
            ];
300
 
301
            return new JsonModel($data);
302
        }
303
 
304
        if ($survey->company_id != $currentCompany->id) {
305
            return new JsonModel([
306
                'success' => false,
307
                'data' => 'ERROR_UNAUTHORIZED'
308
            ]);
309
        }
310
 
311
        if ($request->isPost()) {
312
 
313
            $result = $surveyMapper->delete($survey->id);
314
            if ($result) {
315
                $this->logger->info('Se borro el formulario ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
316
 
317
                $data = [
318
                    'success' => true,
319
                    'data' => 'LABEL_RECORD_DELETED'
320
                ];
321
            } else {
322
 
323
                $data = [
324
                    'success' => false,
325
                    'data' => $surveyMapper->getError()
326
                ];
327
 
328
                return new JsonModel($data);
329
            }
330
        } else {
331
            $data = [
332
                'success' => false,
333
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
334
            ];
335
 
336
            return new JsonModel($data);
337
        }
338
 
339
        return new JsonModel($data);
340
    }
341
 
342
}