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