Proyectos de Subversion LeadersLinked - Backend

Rev

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