Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1114 | Rev 1120 | 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
 
90
                $behaviorMapper = CompetencyTypeMapper::getInstance($this->adapter);
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,
100
                        'name' => $record->name,
101
                    ];
102
 
103
                    array_push($items, $item);
104
                }
105
 
106
                return new JsonModel([
107
                    'success' => true,
108
                    'data' => [
109
                        'items' => $items,
110
                    ]
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()) {
138
            $form = new BehaviorsForm();
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();
147
                $behavior = new Behaviors();
148
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 149
 
150
                if (!$behavior->status) {
1102 geraldo 151
                    $behavior->status = Behaviors::STATUS_INACTIVE;
152
                }
1115 geraldo 153
 
154
 
155
                if ($currentCompany) {
1102 geraldo 156
                    $behavior->company_id = $currentCompany->id;
157
                }
158
 
1115 geraldo 159
 
1102 geraldo 160
                $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
161
                $result = $behaviorMapper->insert($behavior);
1115 geraldo 162
 
163
                if ($result) {
1114 geraldo 164
                    $this->logger->info('Se agrego la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 165
 
1102 geraldo 166
                    $data = [
1115 geraldo 167
                        'success' => true,
168
                        'data' => $behavior
1102 geraldo 169
                    ];
170
                } else {
171
                    $data = [
1115 geraldo 172
                        'success' => false,
173
                        'data' => $behaviorMapper->getError()
1102 geraldo 174
                    ];
175
                }
1115 geraldo 176
 
1102 geraldo 177
                return new JsonModel($data);
178
            } else {
179
                $messages = [];
180
                $form_messages = (array) $form->getMessages();
1115 geraldo 181
                foreach ($form_messages as $fieldname => $field_messages) {
182
 
1102 geraldo 183
                    $messages[$fieldname] = array_values($field_messages);
184
                }
1115 geraldo 185
 
1102 geraldo 186
                return new JsonModel([
1115 geraldo 187
                    'success' => false,
188
                    'data' => $messages
1102 geraldo 189
                ]);
190
            }
191
        } else {
192
            $data = [
193
                'success' => false,
194
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
195
            ];
1115 geraldo 196
 
1102 geraldo 197
            return new JsonModel($data);
198
        }
1115 geraldo 199
 
1102 geraldo 200
        return new JsonModel($data);
201
    }
1115 geraldo 202
 
203
    public function editAction() {
1102 geraldo 204
        $currentUserPlugin = $this->plugin('currentUserPlugin');
205
        $currentUser = $currentUserPlugin->getUser();
1115 geraldo 206
 
1102 geraldo 207
        $request = $this->getRequest();
208
        $id = $this->params()->fromRoute('id');
209
 
1115 geraldo 210
 
211
        if (!$id) {
1102 geraldo 212
            $data = [
1115 geraldo 213
                'success' => false,
214
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 215
            ];
1115 geraldo 216
 
1102 geraldo 217
            return new JsonModel($data);
218
        }
219
 
220
        $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
221
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 222
        if (!$behavior) {
1102 geraldo 223
            $data = [
1115 geraldo 224
                'success' => false,
225
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 226
            ];
1115 geraldo 227
 
1102 geraldo 228
            return new JsonModel($data);
229
        }
1115 geraldo 230
 
231
        if ($request->isPost()) {
232
            $form = new BehaviorsForm();
1102 geraldo 233
            $dataPost = $request->getPost()->toArray();
1115 geraldo 234
 
1102 geraldo 235
            $form->setData($dataPost);
1115 geraldo 236
 
237
            if ($form->isValid()) {
1102 geraldo 238
                $dataPost = (array) $form->getData();
1115 geraldo 239
 
1102 geraldo 240
                $hydrator = new ObjectPropertyHydrator();
241
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 242
 
243
                if (!$behavior->status) {
1102 geraldo 244
                    $behavior->status = Behaviors::STATUS_INACTIVE;
245
                }
1115 geraldo 246
 
1102 geraldo 247
                $result = $behaviorMapper->update($behavior);
1115 geraldo 248
 
249
                if ($result) {
1114 geraldo 250
                    $this->logger->info('Se actualizo la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 251
 
1102 geraldo 252
                    $data = [
253
                        'success' => true,
254
                        'data' => 'LABEL_RECORD_UPDATED'
255
                    ];
256
                } else {
257
                    $data = [
1115 geraldo 258
                        'success' => false,
259
                        'data' => $behaviorMapper->getError()
1102 geraldo 260
                    ];
261
                }
1115 geraldo 262
 
1102 geraldo 263
                return new JsonModel($data);
264
            } else {
265
                $messages = [];
266
                $form_messages = (array) $form->getMessages();
1115 geraldo 267
                foreach ($form_messages as $fieldname => $field_messages) {
1102 geraldo 268
                    $messages[$fieldname] = array_values($field_messages);
269
                }
1115 geraldo 270
 
1102 geraldo 271
                return new JsonModel([
1115 geraldo 272
                    'success' => false,
273
                    'data' => $messages
1102 geraldo 274
                ]);
275
            }
276
        } else if ($request->isGet()) {
277
            $hydrator = new ObjectPropertyHydrator();
1115 geraldo 278
 
1102 geraldo 279
            $data = [
280
                'success' => true,
281
                'data' => $hydrator->extract($behavior)
282
            ];
1115 geraldo 283
 
1102 geraldo 284
            return new JsonModel($data);
285
        } else {
286
            $data = [
287
                'success' => false,
288
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
289
            ];
1115 geraldo 290
 
1102 geraldo 291
            return new JsonModel($data);
292
        }
1115 geraldo 293
 
1102 geraldo 294
        return new JsonModel($data);
295
    }
1115 geraldo 296
 
297
    public function deleteAction() {
1102 geraldo 298
        $currentUserPlugin = $this->plugin('currentUserPlugin');
299
        $currentUser = $currentUserPlugin->getUser();
1115 geraldo 300
 
1102 geraldo 301
        $request = $this->getRequest();
302
        $id = $this->params()->fromRoute('id');
1115 geraldo 303
 
304
        if (!$id) {
1102 geraldo 305
            $data = [
1115 geraldo 306
                'success' => false,
307
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 308
            ];
1115 geraldo 309
 
1102 geraldo 310
            return new JsonModel($data);
311
        }
1115 geraldo 312
 
313
 
1102 geraldo 314
        $behaviorMapper = BehaviorsMapper::getInstance($this->adapter);
315
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 316
        if (!$behavior) {
1102 geraldo 317
            $data = [
1115 geraldo 318
                'success' => false,
319
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 320
            ];
1115 geraldo 321
 
1102 geraldo 322
            return new JsonModel($data);
323
        }
1115 geraldo 324
 
325
        if ($request->isPost()) {
1102 geraldo 326
            $result = $behaviorMapper->delete($behavior);
1115 geraldo 327
            if ($result) {
1114 geraldo 328
                $this->logger->info('Se borro el tipo de competencia ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 329
 
1102 geraldo 330
                $data = [
331
                    'success' => true,
332
                    'data' => 'LABEL_RECORD_DELETED'
333
                ];
334
            } else {
335
 
336
                $data = [
1115 geraldo 337
                    'success' => false,
338
                    'data' => $behaviorMapper->getError()
1102 geraldo 339
                ];
340
 
341
                return new JsonModel($data);
342
            }
343
        } else {
344
            $data = [
345
                'success' => false,
346
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
347
            ];
1115 geraldo 348
 
1102 geraldo 349
            return new JsonModel($data);
350
        }
1115 geraldo 351
 
1102 geraldo 352
        return new JsonModel($data);
353
    }
1115 geraldo 354
 
1102 geraldo 355
}