Proyectos de Subversion LeadersLinked - Backend

Rev

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

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