Proyectos de Subversion LeadersLinked - Backend

Rev

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