Proyectos de Subversion LeadersLinked - Backend

Rev

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