Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1138 | Rev 1225 | 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;
14
use LeadersLinked\Mapper\BehaviorsMapper;
15
use LeadersLinked\Form\BehaviorsForm;
16
use LeadersLinked\Model\Behaviors;
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
 
1120 geraldo 90
                $behaviorMapper = BehaviorsMapper::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()) {
136
            $form = new BehaviorsForm();
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();
145
                $behavior = new Behaviors();
146
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 147
 
148
                if (!$behavior->status) {
1102 geraldo 149
                    $behavior->status = Behaviors::STATUS_INACTIVE;
150
                }
1115 geraldo 151
 
152
 
153
                if ($currentCompany) {
1102 geraldo 154
                    $behavior->company_id = $currentCompany->id;
155
                }
156
 
157
                $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
1133 geraldo 158
 
1224 geraldo 159
                $recordExists = $currentCompany ? $behaviorMapper->fetchOneByDescription($dataPost['description'], $currentCompany->id) :
160
                        $behaviorMapper->fetchOneByDescriptionDefault($dataPost['description']);
1115 geraldo 161
 
1134 geraldo 162
                if ($recordExists) {
1138 geraldo 163
 
1102 geraldo 164
                    $data = [
1134 geraldo 165
                        'success' => false,
166
                        'message' => 'El registro ya existe'
1102 geraldo 167
                    ];
168
                } else {
1134 geraldo 169
 
170
                    $result = $behaviorMapper->insert($behavior);
171
 
172
                    if ($result) {
1138 geraldo 173
 
1134 geraldo 174
                        $this->logger->info('Se agrego la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
175
 
1224 geraldo 176
                        $recordExists = $currentCompany ? $behaviorMapper->fetchOneByDescription($dataPost['description'], $currentCompany->id) :
177
                        $behaviorMapper->fetchOneByDescriptionDefault($dataPost['description']);
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
 
236
        $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
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()) {
248
            $form = new BehaviorsForm();
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) {
1102 geraldo 260
                    $behavior->status = Behaviors::STATUS_INACTIVE;
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() {
1102 geraldo 314
        $currentUserPlugin = $this->plugin('currentUserPlugin');
315
        $currentUser = $currentUserPlugin->getUser();
1115 geraldo 316
 
1102 geraldo 317
        $request = $this->getRequest();
318
        $id = $this->params()->fromRoute('id');
1115 geraldo 319
 
320
        if (!$id) {
1102 geraldo 321
            $data = [
1115 geraldo 322
                'success' => false,
323
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 324
            ];
1115 geraldo 325
 
1102 geraldo 326
            return new JsonModel($data);
327
        }
1115 geraldo 328
 
329
 
1102 geraldo 330
        $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
331
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 332
        if (!$behavior) {
1102 geraldo 333
            $data = [
1115 geraldo 334
                'success' => false,
335
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 336
            ];
1115 geraldo 337
 
1102 geraldo 338
            return new JsonModel($data);
339
        }
1115 geraldo 340
 
341
        if ($request->isPost()) {
1102 geraldo 342
            $result = $behaviorMapper->delete($behavior);
1115 geraldo 343
            if ($result) {
1114 geraldo 344
                $this->logger->info('Se borro el tipo de competencia ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 345
 
1102 geraldo 346
                $data = [
347
                    'success' => true,
348
                    'data' => 'LABEL_RECORD_DELETED'
349
                ];
350
            } else {
351
 
352
                $data = [
1115 geraldo 353
                    'success' => false,
354
                    'data' => $behaviorMapper->getError()
1102 geraldo 355
                ];
356
 
357
                return new JsonModel($data);
358
            }
359
        } else {
360
            $data = [
361
                'success' => false,
362
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
363
            ];
1115 geraldo 364
 
1102 geraldo 365
            return new JsonModel($data);
366
        }
1115 geraldo 367
 
1102 geraldo 368
        return new JsonModel($data);
369
    }
1115 geraldo 370
 
1102 geraldo 371
}