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