Proyectos de Subversion LeadersLinked - Backend

Rev

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