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) {
97
                $search = $this->params()->fromQuery('search', []);
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
 
5556 eleazar 106
                $fields = ['first_name'];
107
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
5287 eleazar 108
 
109
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
110
                    $order_direction = 'ASC';
111
                }
112
 
5571 eleazar 113
                $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
114
                $paginator = $surveyTestMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
5287 eleazar 115
 
116
                $items = [];
117
                $records = $paginator->getCurrentItems();
5566 eleazar 118
 
119
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
120
                $survies = $surveyMapper->fetchAllByCompanyId($currentCompany->id);
5287 eleazar 121
 
122
                foreach ($records as $record) {
5569 eleazar 123
                    $params = [
124
                        'vacancy_uuid' => $vacancy->uuid,
125
                        'id' => $record['uuid'],
126
                    ];
127
 
5287 eleazar 128
                    $item = [
129
                        'id' => $record->id,
5557 eleazar 130
                        'first_name' => $record->first_name,
5288 eleazar 131
 
5287 eleazar 132
                        'actions' => [
133
                            'link_delete' => $this->url()->fromRoute('survey/test/delete', ['id' => $record->uuid])
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
                ]);
147
            } else {
5564 eleazar 148
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
149
                $survies = $surveyMapper->fetchAllByCompanyId($currentCompany->id);
150
 
5287 eleazar 151
                $form = new SurveyTestForm($this->adapter, $currentCompany->id);
152
 
153
                $this->layout()->setTemplate('layout/layout-backend');
154
                $viewModel = new ViewModel();
155
                $viewModel->setTemplate('leaders-linked/survey-test/index.phtml');
5564 eleazar 156
                $viewModel->setVariables([
157
                    'form'      => $form,
158
                    'survies' => $survies
159
                ]);
5287 eleazar 160
                return $viewModel;
161
            }
162
        } else {
163
            return new JsonModel([
164
                'success' => false,
165
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
166
            ]);
167
            ;
168
        }
169
    }
170
 
171
    public function addAction() {
172
        $request = $this->getRequest();
173
        $currentUserPlugin = $this->plugin('currentUserPlugin');
174
        $currentCompany = $currentUserPlugin->getCompany();
175
        $currentUser = $currentUserPlugin->getUser();
176
 
177
        $request = $this->getRequest();
178
 
5452 eleazar 179
        $survey_uuid = $this->params()->fromRoute('survey_uuid');
180
 
181
        if ($request->isGet()) {
5561 eleazar 182
 
5570 eleazar 183
 
5452 eleazar 184
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
185
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
5570 eleazar 186
 
5452 eleazar 187
            $data = [
188
                'survey' => [
189
                    'id' => $survey->uuid,
190
                    'content' => $surveyForm->content ? json_decode($surveyForm->content) : [],
191
                    'description' => $surveyForm->description,
192
                    'text' => $surveyForm->text,
193
                ],
194
            ];
195
 
5563 eleazar 196
 
5452 eleazar 197
 
198
        } else if ($request->isPost()) {
5287 eleazar 199
 
200
            $form = new SurveyTestForm($this->adapter, $currentCompany->id);
201
 
202
            $dataPost = $request->getPost()->toArray();
203
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
204
 
205
 
206
 
207
 
208
            $form->setData($dataPost);
209
 
210
            if ($form->isValid()) {
211
                $dataPost = (array) $form->getData();
212
 
213
                $hydrator = new ObjectPropertyHydrator();
214
                $survey = new SurveyTest();
215
                $hydrator->hydrate($dataPost, $survey);
216
 
217
                $survey->company_id = $currentCompany->id;
218
 
219
 
220
                $surveyMapper = SurveyTestMapper::getInstance($this->adapter);
221
                $result = $surveyMapper->insert($survey);
222
 
223
                if ($result) {
224
                    $this->logger->info('Se agrego el formulario' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
225
 
226
                    // Get record by id
227
                    $record = $surveyMapper->fetchOne($survey->id);
228
 
229
                    if ($record) {
230
 
231
                        $data = [
232
                            'success' => true,
233
                            'id' => $record->id,
234
                            'data' => 'LABEL_RECORD_ADDED'
235
                        ];
236
                    } else {
237
 
238
                        $data = [
239
                            'success' => false,
240
                            'data' => 'ERROR_RECORD_NOT_FOUND'
241
                        ];
242
                    }
243
                } else {
244
                    $data = [
245
                        'success' => false,
246
                        'data' => $surveyMapper->getError()
247
                    ];
248
                }
249
 
250
                return new JsonModel($data);
251
            } else {
252
                $messages = [];
253
                $form_messages = (array) $form->getMessages();
254
                foreach ($form_messages as $fieldname => $field_messages) {
255
 
256
                    $messages[$fieldname] = array_values($field_messages);
257
                }
258
 
259
                return new JsonModel([
260
                    'success' => false,
261
                    'data' => $messages
262
                ]);
263
            }
264
        } else {
265
            $data = [
266
                'success' => false,
267
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
268
            ];
269
 
270
            return new JsonModel($data);
271
        }
272
 
273
        return new JsonModel($data);
274
    }
275
 
276
    public function deleteAction() {
277
        $request = $this->getRequest();
278
        $currentUserPlugin = $this->plugin('currentUserPlugin');
279
        $currentCompany = $currentUserPlugin->getCompany();
280
        $currentUser = $currentUserPlugin->getUser();
281
 
282
        $request = $this->getRequest();
283
        $uuid = $this->params()->fromRoute('id');
284
 
285
        if (!$uuid) {
286
            $data = [
287
                'success' => false,
288
                'data' => 'ERROR_INVALID_PARAMETER'
289
            ];
290
 
291
            return new JsonModel($data);
292
        }
293
 
294
        $surveyMapper = SurveyFormMapper::getInstance($this->adapter);
295
        $survey = $surveyMapper->fetchOneByUuid($uuid);
296
        if (!$survey) {
297
            $data = [
298
                'success' => false,
299
                'data' => 'ERROR_RECORD_NOT_FOUND'
300
            ];
301
 
302
            return new JsonModel($data);
303
        }
304
 
305
        if ($survey->company_id != $currentCompany->id) {
306
            return new JsonModel([
307
                'success' => false,
308
                'data' => 'ERROR_UNAUTHORIZED'
309
            ]);
310
        }
311
 
312
        if ($request->isPost()) {
313
 
314
            $result = $surveyMapper->delete($survey->id);
315
            if ($result) {
316
                $this->logger->info('Se borro el formulario ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
317
 
318
                $data = [
319
                    'success' => true,
320
                    'data' => 'LABEL_RECORD_DELETED'
321
                ];
322
            } else {
323
 
324
                $data = [
325
                    'success' => false,
326
                    'data' => $surveyMapper->getError()
327
                ];
328
 
329
                return new JsonModel($data);
330
            }
331
        } else {
332
            $data = [
333
                'success' => false,
334
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
335
            ];
336
 
337
            return new JsonModel($data);
338
        }
339
 
340
        return new JsonModel($data);
341
    }
342
 
343
}