Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15460 | Rev 16768 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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