Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
1102 geraldo 1
<?php
1115 geraldo 2
 
1102 geraldo 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
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;
1320 efrain 14
use LeadersLinked\Mapper\BehaviorMapper;
15
use LeadersLinked\Form\BehaviorForm;
16
use LeadersLinked\Model\Behavior;
1102 geraldo 17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
18
 
1115 geraldo 19
class BehaviorsController extends AbstractActionController {
20
 
1102 geraldo 21
    /**
22
     *
23
     * @var AdapterInterface
24
     */
25
    private $adapter;
1115 geraldo 26
 
1102 geraldo 27
    /**
28
     *
29
     * @var AbstractAdapter
30
     */
31
    private $cache;
1115 geraldo 32
 
1102 geraldo 33
    /**
34
     *
35
     * @var  LoggerInterface
36
     */
37
    private $logger;
38
 
39
    /**
40
     *
41
     * @var array
42
     */
43
    private $config;
1115 geraldo 44
 
1102 geraldo 45
    /**
46
     *
47
     * @param AdapterInterface $adapter
48
     * @param AbstractAdapter $cache
49
     * @param LoggerInterface $logger
50
     * @param array $config
51
     */
1115 geraldo 52
    public function __construct($adapter, $cache, $logger, $config) {
53
        $this->adapter = $adapter;
54
        $this->cache = $cache;
55
        $this->logger = $logger;
56
        $this->config = $config;
1102 geraldo 57
    }
58
 
1115 geraldo 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
            if ($isJson) {
89
 
1320 efrain 90
                $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1115 geraldo 91
 
92
                $records = $currentCompany ?
93
                        $behaviorMapper->fetchAllCompanyId($currentCompany->id) :
94
                        $behaviorMapper->fetchAllByDefault();
95
 
96
                $items = [];
97
                foreach ($records as $record) {
98
                    $item = [
99
                        'uuid' => $record->uuid,
1121 geraldo 100
                        'description' => $record->description,
1115 geraldo 101
                    ];
102
 
103
                    array_push($items, $item);
104
                }
105
 
106
                return new JsonModel([
107
                    'success' => true,
1122 geraldo 108
                    'data' => $items
1115 geraldo 109
                ]);
110
            } else {
111
 
112
                return new JsonModel([
113
                    'success' => false,
114
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
115
                ]);
116
                ;
117
            }
118
        } else {
1102 geraldo 119
            return new JsonModel([
120
                'success' => false,
121
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
122
            ]);
1115 geraldo 123
            ;
124
        }
125
    }
1102 geraldo 126
 
1115 geraldo 127
    public function addAction() {
1102 geraldo 128
        $currentUserPlugin = $this->plugin('currentUserPlugin');
129
        $currentUser = $currentUserPlugin->getUser();
130
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 131
 
1102 geraldo 132
        $request = $this->getRequest();
1115 geraldo 133
 
134
 
135
        if ($request->isPost()) {
1320 efrain 136
            $form = new BehaviorForm();
1102 geraldo 137
            $dataPost = $request->getPost()->toArray();
1115 geraldo 138
 
1102 geraldo 139
            $form->setData($dataPost);
1115 geraldo 140
 
141
            if ($form->isValid()) {
1102 geraldo 142
                $dataPost = (array) $form->getData();
143
 
144
                $hydrator = new ObjectPropertyHydrator();
1320 efrain 145
                $behavior = new Behavior();
1102 geraldo 146
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 147
 
148
                if (!$behavior->status) {
1320 efrain 149
                    $behavior->status = Behavior::STATUS_INACTIVE;
1102 geraldo 150
                }
1115 geraldo 151
 
152
 
153
                if ($currentCompany) {
1102 geraldo 154
                    $behavior->company_id = $currentCompany->id;
155
                }
156
 
1320 efrain 157
                $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1133 geraldo 158
 
1225 geraldo 159
                $recordExists = $behaviorMapper->fetchOneByDescription($dataPost['description'], $currentCompany ? $currentCompany->id : null);
1115 geraldo 160
 
1134 geraldo 161
                if ($recordExists) {
1138 geraldo 162
 
1102 geraldo 163
                    $data = [
1134 geraldo 164
                        'success' => false,
165
                        'message' => 'El registro ya existe'
1102 geraldo 166
                    ];
167
                } else {
1134 geraldo 168
 
169
                    $result = $behaviorMapper->insert($behavior);
170
 
171
                    if ($result) {
1138 geraldo 172
 
1134 geraldo 173
                        $this->logger->info('Se agrego la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
174
 
1225 geraldo 175
                        $recordExists = $behaviorMapper->fetchOneByDescription($dataPost['description'], $currentCompany ? $currentCompany->id : null);
1138 geraldo 176
 
1134 geraldo 177
                        if ($recordExists) {
178
                            $data = [
179
                                'success' => true,
180
                                'uuid' => $recordExists->uuid
181
                            ];
182
                        }
183
                    } else {
184
                        $data = [
185
                            'success' => false,
186
                            'data' => $behaviorMapper->getError()
187
                        ];
188
                    }
1102 geraldo 189
                }
1115 geraldo 190
 
1102 geraldo 191
                return new JsonModel($data);
192
            } else {
193
                $messages = [];
194
                $form_messages = (array) $form->getMessages();
1115 geraldo 195
                foreach ($form_messages as $fieldname => $field_messages) {
196
 
1102 geraldo 197
                    $messages[$fieldname] = array_values($field_messages);
198
                }
1115 geraldo 199
 
1102 geraldo 200
                return new JsonModel([
1115 geraldo 201
                    'success' => false,
202
                    'data' => $messages
1102 geraldo 203
                ]);
204
            }
205
        } else {
206
            $data = [
207
                'success' => false,
208
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
209
            ];
1115 geraldo 210
 
1102 geraldo 211
            return new JsonModel($data);
212
        }
1115 geraldo 213
 
1102 geraldo 214
        return new JsonModel($data);
215
    }
1115 geraldo 216
 
217
    public function editAction() {
1102 geraldo 218
        $currentUserPlugin = $this->plugin('currentUserPlugin');
219
        $currentUser = $currentUserPlugin->getUser();
1115 geraldo 220
 
1102 geraldo 221
        $request = $this->getRequest();
222
        $id = $this->params()->fromRoute('id');
223
 
1115 geraldo 224
 
225
        if (!$id) {
1102 geraldo 226
            $data = [
1115 geraldo 227
                'success' => false,
228
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 229
            ];
1115 geraldo 230
 
1102 geraldo 231
            return new JsonModel($data);
232
        }
233
 
1320 efrain 234
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1102 geraldo 235
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 236
        if (!$behavior) {
1102 geraldo 237
            $data = [
1115 geraldo 238
                'success' => false,
239
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 240
            ];
1115 geraldo 241
 
1102 geraldo 242
            return new JsonModel($data);
243
        }
1115 geraldo 244
 
245
        if ($request->isPost()) {
1320 efrain 246
            $form = new BehaviorForm();
1102 geraldo 247
            $dataPost = $request->getPost()->toArray();
1115 geraldo 248
 
1102 geraldo 249
            $form->setData($dataPost);
1115 geraldo 250
 
251
            if ($form->isValid()) {
1102 geraldo 252
                $dataPost = (array) $form->getData();
1115 geraldo 253
 
1102 geraldo 254
                $hydrator = new ObjectPropertyHydrator();
255
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 256
 
257
                if (!$behavior->status) {
1320 efrain 258
                    $behavior->status = Behavior::STATUS_INACTIVE;
1102 geraldo 259
                }
1115 geraldo 260
 
1102 geraldo 261
                $result = $behaviorMapper->update($behavior);
1115 geraldo 262
 
263
                if ($result) {
1114 geraldo 264
                    $this->logger->info('Se actualizo la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 265
 
1102 geraldo 266
                    $data = [
267
                        'success' => true,
268
                        'data' => 'LABEL_RECORD_UPDATED'
269
                    ];
270
                } else {
271
                    $data = [
1115 geraldo 272
                        'success' => false,
273
                        'data' => $behaviorMapper->getError()
1102 geraldo 274
                    ];
275
                }
1115 geraldo 276
 
1102 geraldo 277
                return new JsonModel($data);
278
            } else {
279
                $messages = [];
280
                $form_messages = (array) $form->getMessages();
1115 geraldo 281
                foreach ($form_messages as $fieldname => $field_messages) {
1102 geraldo 282
                    $messages[$fieldname] = array_values($field_messages);
283
                }
1115 geraldo 284
 
1102 geraldo 285
                return new JsonModel([
1115 geraldo 286
                    'success' => false,
287
                    'data' => $messages
1102 geraldo 288
                ]);
289
            }
290
        } else if ($request->isGet()) {
291
            $hydrator = new ObjectPropertyHydrator();
1115 geraldo 292
 
1102 geraldo 293
            $data = [
294
                'success' => true,
295
                'data' => $hydrator->extract($behavior)
296
            ];
1115 geraldo 297
 
1102 geraldo 298
            return new JsonModel($data);
299
        } else {
300
            $data = [
301
                'success' => false,
302
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
303
            ];
1115 geraldo 304
 
1102 geraldo 305
            return new JsonModel($data);
306
        }
1115 geraldo 307
 
1102 geraldo 308
        return new JsonModel($data);
309
    }
1115 geraldo 310
 
311
    public function deleteAction() {
14281 kerby 312
        $currentUserPlugin = $this->plugin('currentUserPlugin');
313
        $currentUser = $currentUserPlugin->getUser();
1115 geraldo 314
 
14281 kerby 315
        $request = $this->getRequest();
316
        $id = $this->params()->fromRoute('id');
1115 geraldo 317
 
14281 kerby 318
        if (!$id) {
319
            $data = [
320
                'success' => false,
321
                'data' => 'ERROR_INVALID_PARAMETER'
322
            ];
1115 geraldo 323
 
14281 kerby 324
            return new JsonModel($data);
325
        }
1115 geraldo 326
 
327
 
14281 kerby 328
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
329
        $behavior = $behaviorMapper->fetchOneByUuid($id);
330
        if (!$behavior) {
331
            $data = [
332
                'success' => false,
333
                'data' => 'ERROR_RECORD_NOT_FOUND'
334
            ];
1115 geraldo 335
 
14281 kerby 336
            return new JsonModel($data);
337
        }
338
        if ($request->isPost()) {
14286 kerby 339
            // $result = $behaviorMapper->delete($behavior);
14287 kerby 340
            $result= true;
14281 kerby 341
            if ($result) {
342
                $this->logger->info('Se borro el tipo de competencia ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 343
 
14281 kerby 344
                $data = [
345
                    'success' => true,
346
                    'data' => 'LABEL_RECORD_DELETED'
347
                ];
348
            } else {
1102 geraldo 349
 
14281 kerby 350
                $data = [
351
                    'success' => false,
352
                    'data' => $behaviorMapper->getError()
353
                ];
1102 geraldo 354
 
14281 kerby 355
                return new JsonModel($data);
356
            }
357
        } else {
1102 geraldo 358
            $data = [
359
                'success' => false,
360
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
361
            ];
1115 geraldo 362
 
14281 kerby 363
            return new JsonModel($data);
364
        }
1115 geraldo 365
 
1102 geraldo 366
        return new JsonModel($data);
367
    }
1115 geraldo 368
 
1102 geraldo 369
}