Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
16768 efrain 6
 
1 www 7
use Laminas\Db\Adapter\AdapterInterface;
15351 efrain 8
use Laminas\Log\LoggerInterface;
1 www 9
use Laminas\Mvc\Controller\AbstractActionController;
15351 efrain 10
use Laminas\View\Model\JsonModel;
1 www 11
use Laminas\View\Model\ViewModel;
17021 efrain 12
use LeadersLinked\Form\JobCategory\JobCategoryForm;
15351 efrain 13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
1 www 14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Mapper\JobCategoryMapper;
16
use LeadersLinked\Model\JobCategory;
17
 
18
class JobCategoryController extends AbstractActionController
19
{
20
    /**
21
     *
16769 efrain 22
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 23
     */
24
    private $adapter;
25
 
26
    /**
27
     *
16769 efrain 28
     * @var \LeadersLinked\Cache\CacheInterface
1 www 29
     */
16769 efrain 30
    private $cache;
31
 
32
 
33
    /**
34
     *
35
     * @var \Laminas\Log\LoggerInterface
36
     */
1 www 37
    private $logger;
38
 
39
    /**
40
     *
41
     * @var array
42
     */
43
    private $config;
44
 
16769 efrain 45
 
1 www 46
    /**
47
     *
16769 efrain 48
     * @var \Laminas\Mvc\I18n\Translator
49
     */
50
    private $translator;
51
 
52
 
53
    /**
54
     *
55
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
56
     * @param \LeadersLinked\Cache\CacheInterface $cache
57
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 58
     * @param array $config
16769 efrain 59
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 60
     */
16769 efrain 61
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 62
    {
16769 efrain 63
        $this->adapter      = $adapter;
64
        $this->cache        = $cache;
65
        $this->logger       = $logger;
66
        $this->config       = $config;
67
        $this->translator   = $translator;
1 www 68
    }
69
 
70
    public function indexAction()
71
    {
72
        $request = $this->getRequest();
73
 
74
        $request = $this->getRequest();
75
        if($request->isGet()) {
76
 
77
 
78
            $headers  = $request->getHeaders();
79
 
80
            $isJson = false;
81
            if($headers->has('Accept')) {
82
                $accept = $headers->get('Accept');
83
 
84
                $prioritized = $accept->getPrioritized();
85
 
86
                foreach($prioritized as $key => $value) {
87
                    $raw = trim($value->getRaw());
88
 
89
                    if(!$isJson) {
90
                        $isJson = strpos($raw, 'json');
91
                    }
92
 
93
                }
94
            }
95
 
96
            if($isJson) {
97
                $search = $this->params()->fromQuery('search', []);
16766 efrain 98
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
1 www 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);
16766 efrain 104
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
1 www 105
 
106
                $fields =  ['name'];
107
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
108
 
109
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
110
                    $order_direction = 'ASC';
111
                }
112
 
113
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
114
                $paginator = $jobCategoryMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
115
 
116
                $items = [];
117
                $records = $paginator->getCurrentItems();
118
                foreach($records as $record)
119
                {
120
                    $item = [
121
                        'id' => $record->id,
122
                        'name' => $record->name,
123
                        'status' => $record->status,
124
                        'actions' => [
125
                            'link_edit' => $this->url()->fromRoute('settings/job-categories/edit', ['id' => $record->uuid ]),
126
                            'link_delete' => $this->url()->fromRoute('settings/job-categories/delete', ['id' => $record->uuid ])
127
                        ]
128
                    ];
129
 
130
                    array_push($items, $item);
131
                }
132
 
133
                return new JsonModel([
134
                    'success' => true,
135
                    'data' => [
136
                        'items' => $items,
137
                        'total' => $paginator->getTotalItemCount(),
138
                    ]
139
                ]);
140
 
141
 
142
            }  else  {
143
                $form = new JobCategoryForm();
144
 
145
                $this->layout()->setTemplate('layout/layout-backend');
146
                $viewModel = new ViewModel();
147
                $viewModel->setTemplate('leaders-linked/job-categories/index.phtml');
148
                $viewModel->setVariable('form', $form);
149
                return $viewModel ;
150
            }
151
        } else {
152
            return new JsonModel([
153
                'success' => false,
154
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
155
            ]);;
156
        }
157
    }
158
 
159
    public function addAction()
160
    {
161
        $currentUserPlugin = $this->plugin('currentUserPlugin');
162
        $currentUser = $currentUserPlugin->getUser();
163
        $request = $this->getRequest();
164
 
165
 
166
        if($request->isPost()) {
167
            $form = new  JobCategoryForm();
168
            $dataPost = $request->getPost()->toArray();
169
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : JobCategory::STATUS_INACTIVE;
170
 
171
            $form->setData($dataPost);
172
 
173
            if($form->isValid()) {
174
                $dataPost = (array) $form->getData();
175
 
176
                $hydrator = new ObjectPropertyHydrator();
177
                $jobCategory = new JobCategory();
178
                $hydrator->hydrate($dataPost, $jobCategory);
179
 
180
 
181
 
182
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
183
                $result = $jobCategoryMapper->insert($jobCategory);
184
 
185
                if($result) {
186
                    $this->logger->info('Se agrego la categoría de empleo ' . $jobCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
187
 
188
                    $data = [
189
                        'success'   => true,
190
                        'data'   => 'LABEL_RECORD_ADDED'
191
                    ];
192
                } else {
193
                    $data = [
194
                        'success'   => false,
195
                        'data'      => $jobCategoryMapper->getError()
196
                    ];
197
 
198
                }
199
 
200
                return new JsonModel($data);
201
 
202
            } else {
203
                $messages = [];
204
                $form_messages = (array) $form->getMessages();
205
                foreach($form_messages  as $fieldname => $field_messages)
206
                {
207
 
208
                    $messages[$fieldname] = array_values($field_messages);
209
                }
210
 
211
                return new JsonModel([
212
                    'success'   => false,
213
                    'data'   => $messages
214
                ]);
215
            }
216
 
217
        } else {
218
            $data = [
219
                'success' => false,
220
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
221
            ];
222
 
223
            return new JsonModel($data);
224
        }
225
 
226
        return new JsonModel($data);
227
    }
228
 
229
    public function editAction()
230
    {
231
        $currentUserPlugin = $this->plugin('currentUserPlugin');
232
        $currentUser = $currentUserPlugin->getUser();
233
 
234
        $request = $this->getRequest();
235
        $uuid = $this->params()->fromRoute('id');
236
        if(!$uuid) {
237
            $data = [
238
                'success'   => false,
239
                'data'   => 'ERROR_INVALID_PARAMETER'
240
            ];
241
 
242
            return new JsonModel($data);
243
        }
244
 
245
        $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
246
        $jobCategory = $jobCategoryMapper->fetchOneByUuid($uuid);
247
        if(!$jobCategory) {
248
            $data = [
249
                'success'   => false,
250
                'data'   => 'ERROR_RECORD_NOT_FOUND'
251
            ];
252
 
253
            return new JsonModel($data);
254
        }
255
 
256
        if($request->isPost()) {
257
            $form = new  JobCategoryForm();
258
            $dataPost = $request->getPost()->toArray();
259
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : JobCategory::STATUS_INACTIVE;
260
 
261
            $form->setData($dataPost);
262
 
263
            if($form->isValid()) {
264
                $dataPost = (array) $form->getData();
265
 
266
                $hydrator = new ObjectPropertyHydrator();
267
                $hydrator->hydrate($dataPost, $jobCategory);
268
                $result = $jobCategoryMapper->update($jobCategory);
269
 
270
                if($result) {
271
                    $this->logger->info('Se actualizo la categoría de empleo ' . $jobCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
272
 
273
                    $data = [
274
                        'success' => true,
275
                        'data' => 'LABEL_RECORD_UPDATED'
276
                    ];
277
                } else {
278
                    $data = [
279
                        'success'   => false,
280
                        'data'      => $jobCategoryMapper->getError()
281
                    ];
282
                }
283
 
284
                return new JsonModel($data);
285
 
286
            } else {
287
                $messages = [];
288
                $form_messages = (array) $form->getMessages();
289
                foreach($form_messages  as $fieldname => $field_messages)
290
                {
291
                    $messages[$fieldname] = array_values($field_messages);
292
                }
293
 
294
                return new JsonModel([
295
                    'success'   => false,
296
                    'data'   => $messages
297
                ]);
298
            }
299
        } else if ($request->isGet()) {
300
            $hydrator = new ObjectPropertyHydrator();
301
 
302
            $data = [
303
                'success' => true,
304
                'data' => $hydrator->extract($jobCategory)
305
            ];
306
 
307
            return new JsonModel($data);
308
        } else {
309
            $data = [
310
                'success' => false,
311
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
312
            ];
313
 
314
            return new JsonModel($data);
315
        }
316
 
317
        return new JsonModel($data);
318
    }
319
 
320
    public function deleteAction()
321
    {
322
        $currentUserPlugin = $this->plugin('currentUserPlugin');
323
        $currentUser = $currentUserPlugin->getUser();
324
 
325
        $request = $this->getRequest();
326
        $uuid = $this->params()->fromRoute('id');
327
 
328
        if(!$uuid) {
329
            $data = [
330
                'success'   => false,
331
                'data'   => 'ERROR_INVALID_PARAMETER'
332
            ];
333
 
334
            return new JsonModel($data);
335
        }
336
 
337
 
338
 
339
        $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
340
        $jobCategory = $jobCategoryMapper->fetchOneByUuid($uuid);
341
        if(!$jobCategory) {
342
            $data = [
343
                'success'   => false,
344
                'data'   => 'ERROR_RECORD_NOT_FOUND'
345
            ];
346
 
347
            return new JsonModel($data);
348
        }
349
 
350
        if($request->isPost()) {
351
            $result = $jobCategoryMapper->delete($jobCategory);
352
            if($result) {
353
                $this->logger->info('Se borro la categoría de empleo ' . $jobCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
354
 
355
                $data = [
356
                    'success' => true,
357
                    'data' => 'LABEL_RECORD_DELETED'
358
                ];
359
            } else {
360
 
361
                $data = [
362
                    'success'   => false,
363
                    'data'      => $jobCategoryMapper->getError()
364
                ];
365
 
366
                return new JsonModel($data);
367
            }
368
 
369
        } else {
370
            $data = [
371
                'success' => false,
372
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
373
            ];
374
 
375
            return new JsonModel($data);
376
        }
377
 
378
        return new JsonModel($data);
379
    }
380
}