Proyectos de Subversion LeadersLinked - Backend

Rev

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