Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16778 | | 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
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
 
16768 efrain 8
 
1 www 9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
 
12
use Laminas\View\Model\ViewModel;
13
use Laminas\View\Model\JsonModel;
14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Mapper\SkillMapper;
17002 efrain 16
use LeadersLinked\Form\Skill\SkillForm;
1 www 17
use LeadersLinked\Model\Skill;
18
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
19
 
20
class SkillController extends AbstractActionController
21
{
22
    /**
23
     *
16769 efrain 24
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 25
     */
26
    private $adapter;
27
 
28
    /**
29
     *
16769 efrain 30
     * @var \LeadersLinked\Cache\CacheInterface
1 www 31
     */
16769 efrain 32
    private $cache;
33
 
34
 
35
    /**
36
     *
37
     * @var \Laminas\Log\LoggerInterface
38
     */
1 www 39
    private $logger;
40
 
41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
46
 
16769 efrain 47
 
1 www 48
    /**
49
     *
16769 efrain 50
     * @var \Laminas\Mvc\I18n\Translator
51
     */
52
    private $translator;
53
 
54
 
55
    /**
56
     *
57
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
58
     * @param \LeadersLinked\Cache\CacheInterface $cache
59
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 60
     * @param array $config
16769 efrain 61
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 62
     */
16769 efrain 63
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 64
    {
16769 efrain 65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
        $this->translator   = $translator;
1 www 70
    }
71
 
72
    public function indexAction()
73
    {
74
        $request = $this->getRequest();
75
 
76
        $request = $this->getRequest();
77
        if($request->isGet()) {
78
 
79
 
80
            $headers  = $request->getHeaders();
81
 
82
            $isJson = false;
83
            if($headers->has('Accept')) {
84
                $accept = $headers->get('Accept');
85
 
86
                $prioritized = $accept->getPrioritized();
87
 
88
                foreach($prioritized as $key => $value) {
89
                    $raw = trim($value->getRaw());
90
 
91
                    if(!$isJson) {
92
                        $isJson = strpos($raw, 'json');
93
                    }
94
 
95
                }
96
            }
97
 
98
            if($isJson) {
5675 stevensc 99
                $search = $this->params()->fromQuery('search');
16778 efrain 100
                $search = empty($search['value']) ? '' : Functions::sanitizeFilterString($search['value']);
1 www 101
 
102
                $page               = intval($this->params()->fromQuery('start', 1), 10);
103
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
104
                $order =  $this->params()->fromQuery('order', []);
105
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 106
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
1 www 107
 
108
                $fields =  ['name'];
109
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
110
 
111
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
112
                    $order_direction = 'ASC';
113
                }
114
 
115
                $skillMapper = SkillMapper::getInstance($this->adapter);
116
                $paginator = $skillMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
117
 
118
                $items = [];
119
                $records = $paginator->getCurrentItems();
120
                foreach($records as $record)
121
                {
122
                    $item = [
123
                        'name' => $record->name,
124
                        'status' => $record->status,
125
                        'actions' => [
126
                            'link_edit' => $this->url()->fromRoute('settings/skills/edit', ['id' => $record->uuid ]),
127
                            'link_delete' => $this->url()->fromRoute('settings/skills/delete', ['id' => $record->uuid ])
128
                        ],
129
                    ];
130
 
131
                    array_push($items, $item);
132
                }
133
 
134
                return new JsonModel([
135
                    'success' => true,
136
                    'data' => [
137
                        'items' => $items,
138
                        'total' => $paginator->getTotalItemCount(),
139
                    ]
140
                ]);
141
 
142
 
143
            } else {
144
                $form = new SkillForm();
145
 
146
                $this->layout()->setTemplate('layout/layout-backend');
147
                $viewModel = new ViewModel();
148
                $viewModel->setTemplate('leaders-linked/skills/index.phtml');
149
                $viewModel->setVariable('form', $form);
150
                return $viewModel ;
151
            }
152
        } else {
153
            return new JsonModel([
154
                'success' => false,
155
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
156
            ]);;
157
        }
158
    }
159
 
160
    public function addAction()
161
    {
162
        $currentUserPlugin = $this->plugin('currentUserPlugin');
163
        $currentUser = $currentUserPlugin->getUser();
164
 
165
        $request = $this->getRequest();
166
        if($request->isPost()) {
167
            $form = new  SkillForm();
168
            $dataPost = $request->getPost()->toArray();
169
 
170
            $form->setData($dataPost);
171
 
172
            if($form->isValid()) {
173
                $dataPost = (array) $form->getData();
174
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Skill::STATUS_INACTIVE;
175
 
176
                $hydrator = new ObjectPropertyHydrator();
177
                $skill = new Skill();
178
                $hydrator->hydrate($dataPost, $skill);
179
 
180
 
181
 
182
                $skillMapper = SkillMapper::getInstance($this->adapter);
183
                $result = $skillMapper->insert($skill);
184
 
185
                if($result) {
186
                    $this->logger->info('Se agrego la habilidad ' . $skill->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'      => $skillMapper->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
 
237
 
238
        if(!$uuid) {
239
            $data = [
240
                'success'   => false,
241
                'data'   => 'ERROR_INVALID_PARAMETER'
242
            ];
243
 
244
            return new JsonModel($data);
245
        }
246
 
247
        $skillMapper = SkillMapper::getInstance($this->adapter);
248
        $skill = $skillMapper->fetchOneByUuid($uuid);
249
        if(!$skill) {
250
            $data = [
251
                'success'   => false,
252
                'data'   => 'ERROR_RECORD_NOT_FOUND'
253
            ];
254
 
255
            return new JsonModel($data);
256
        }
257
 
258
        if($request->isPost()) {
259
            $form = new  SkillForm();
260
            $dataPost = $request->getPost()->toArray();
261
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Skill::STATUS_INACTIVE;
262
 
263
            $form->setData($dataPost);
264
 
265
            if($form->isValid()) {
266
                $dataPost = (array) $form->getData();
267
 
268
                $hydrator = new ObjectPropertyHydrator();
269
                $hydrator->hydrate($dataPost, $skill);
270
                $result = $skillMapper->update($skill);
271
 
272
                if($result) {
273
                    $this->logger->info('Se actualizo la habilidad ' . $skill->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
274
 
275
                    $data = [
276
                        'success' => true,
277
                        'data' => 'LABEL_RECORD_UPDATED'
278
                    ];
279
                } else {
280
                    $data = [
281
                        'success'   => false,
282
                        'data'      => $skillMapper->getError()
283
                    ];
284
                }
285
 
286
                return new JsonModel($data);
287
 
288
            } else {
289
                $messages = [];
290
                $form_messages = (array) $form->getMessages();
291
                foreach($form_messages  as $fieldname => $field_messages)
292
                {
293
                    $messages[$fieldname] = array_values($field_messages);
294
                }
295
 
296
                return new JsonModel([
297
                    'success'   => false,
298
                    'data'   => $messages
299
                ]);
300
            }
301
        } else if ($request->isGet()) {
302
            $hydrator = new ObjectPropertyHydrator();
303
 
304
            $data = [
305
                'success' => true,
306
                'data' => $hydrator->extract($skill)
307
            ];
308
 
309
            return new JsonModel($data);
310
        } else {
311
            $data = [
312
                'success' => false,
313
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
314
            ];
315
 
316
            return new JsonModel($data);
317
        }
318
 
319
        return new JsonModel($data);
320
    }
321
 
322
    public function deleteAction()
323
    {
324
        $currentUserPlugin = $this->plugin('currentUserPlugin');
325
        $currentUser = $currentUserPlugin->getUser();
326
 
327
        $request = $this->getRequest();
328
        $uuid = $this->params()->fromRoute('id');
329
 
330
        if(!$uuid) {
331
            $data = [
332
                'success'   => false,
333
                'data'   => 'ERROR_INVALID_PARAMETER'
334
            ];
335
 
336
            return new JsonModel($data);
337
        }
338
 
339
        $skillMapper = SkillMapper::getInstance($this->adapter);
340
        $skill = $skillMapper->fetchOneByUuid($uuid);
341
        if(!$skill) {
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 = $skillMapper->delete($skill);
352
            if($result) {
353
                $this->logger->info('Se borro la habilidad ' . $skill->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'      => $skillMapper->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
}