Proyectos de Subversion LeadersLinked - Backend

Rev

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