Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
244 geraldo 1
<?php
2
 
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\CompanySelfEvaluationFormMapper;
260 geraldo 15
use LeadersLinked\Mapper\CompanySelfEvaluationTestMapper;
244 geraldo 16
use LeadersLinked\Form\CompanySelfEvaluationFormForm;
17
use LeadersLinked\Model\CompanySelfEvaluationForm;
18
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
19
use LeadersLinked\Mapper\CompanySelfEvaluationFormUserMapper;
20
 
21
class SelfEvaluationReviewController extends AbstractActionController {
22
 
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
    /**
30
     *
31
     * @var AbstractAdapter
32
     */
33
    private $cache;
34
 
35
    /**
36
     *
37
     * @var  LoggerInterface
38
     */
39
    private $logger;
40
 
41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
46
 
47
    /**
48
     *
49
     * @param AdapterInterface $adapter
50
     * @param AbstractAdapter $cache
51
     * @param LoggerInterface $logger
52
     * @param array $config
53
     */
54
    public function __construct($adapter, $cache, $logger, $config) {
55
        $this->adapter = $adapter;
56
        $this->cache = $cache;
57
        $this->logger = $logger;
58
        $this->config = $config;
59
    }
60
 
61
    public function indexAction() {
62
        $request = $this->getRequest();
63
        $currentUserPlugin = $this->plugin('currentUserPlugin');
64
        $currentCompany = $currentUserPlugin->getCompany();
65
        $currentUser = $currentUserPlugin->getUser();
66
 
67
 
68
        $request = $this->getRequest();
69
        if ($request->isGet()) {
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
                $search = $this->params()->fromQuery('search', []);
90
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
91
 
92
                $page = intval($this->params()->fromQuery('start', 1), 10);
93
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
94
                $order = $this->params()->fromQuery('order', []);
95
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
96
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
97
 
98
                $fields = ['name'];
99
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
100
 
101
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
102
                    $order_direction = 'ASC';
103
                }
104
 
105
                $companySelfEvaluationMapper = CompanySelfEvaluationFormMapper::getInstance($this->adapter);
106
                $paginator = $companySelfEvaluationMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
107
 
108
                $items = [];
109
                $records = $paginator->getCurrentItems();
110
                foreach ($records as $record) {
111
 
112
                    if ($record->language == CompanySelfEvaluationForm::LANGUAGE_SPANISH) {
113
                        $language = 'LABEL_SPANISH';
114
                    } else if ($record->language == CompanySelfEvaluationForm::LANGUAGE_ENGLISH) {
115
                        $language = 'LABEL_ENGLISH';
116
                    } else {
117
                        $language = '';
118
                    }
119
 
120
                    $item = [
121
                        'id' => $record->id,
122
                        'name' => $record->name,
123
                        'language' => $language,
124
                        'status' => $record->status,
125
                        'actions' => [
126
                            'link_edit' => $this->url()->fromRoute('self-evaluation/forms/edit', ['id' => $record->uuid]),
127
                            'link_delete' => $this->url()->fromRoute('self-evaluation/forms/delete', ['id' => $record->uuid])
128
                        ]
129
                    ];
130
 
131
                    array_push($items, $item);
132
                }
133
 
134
                return new JsonModel([
135
                    'success' => true,
136
                    'data' => [
137
                        'items' => $items,
138
                        'total' => $paginator->getTotalItemCount(),
139
                    ]
140
                ]);
141
            } else {
142
 
143
                $form = new CompanySelfEvaluationFormForm();
144
 
145
                $this->layout()->setTemplate('layout/layout-backend');
146
                $viewModel = new ViewModel();
250 geraldo 147
                $viewModel->setTemplate('leaders-linked/self-evaluation-reviews/index.phtml');
244 geraldo 148
                $viewModel->setVariable('form', $form);
149
                return $viewModel;
150
            }
151
        } else {
152
            return new JsonModel([
153
                'success' => false,
154
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
155
            ]);
156
            ;
157
        }
158
    }
159
 
160
    public function editAction() {
161
        $request = $this->getRequest();
162
        $currentUserPlugin = $this->plugin('currentUserPlugin');
163
        $currentCompany = $currentUserPlugin->getCompany();
164
        $currentUser = $currentUserPlugin->getUser();
165
 
166
        $request = $this->getRequest();
167
        $uuid = $this->params()->fromRoute('id');
168
 
169
 
170
        if (!$uuid) {
171
            $data = [
172
                'success' => false,
173
                'data' => 'ERROR_INVALID_PARAMETER'
174
            ];
175
 
176
            return new JsonModel($data);
177
        }
178
 
179
        $companySelfEvaluationMapper = CompanySelfEvaluationFormMapper::getInstance($this->adapter);
180
        $companySelfEvaluation = $companySelfEvaluationMapper->fetchOneByUuid($uuid);
181
        if (!$companySelfEvaluation) {
182
            $data = [
183
                'success' => false,
184
                'data' => 'ERROR_RECORD_NOT_FOUND'
185
            ];
186
 
187
            return new JsonModel($data);
188
        }
189
 
190
        if ($companySelfEvaluation->company_id != $currentCompany->id) {
191
            return new JsonModel([
192
                'success' => false,
193
                'data' => 'ERROR_UNAUTHORIZED'
194
            ]);
195
        }
196
 
197
 
198
        if ($request->isPost()) {
199
            $form = new CompanySelfEvaluationFormForm();
200
            $dataPost = $request->getPost()->toArray();
201
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : CompanySelfEvaluationForm::STATUS_INACTIVE;
202
 
203
            $form->setData($dataPost);
204
 
205
            if ($form->isValid()) {
206
                $dataPost = (array) $form->getData();
207
 
208
                $hydrator = new ObjectPropertyHydrator();
209
                $hydrator->hydrate($dataPost, $companySelfEvaluation);
210
 
211
                if (!$companySelfEvaluation->status) {
212
                    $companySelfEvaluation->status = CompanySelfEvaluationForm::STATUS_INACTIVE;
213
                }
214
 
215
                $result = $companySelfEvaluationMapper->update($companySelfEvaluation);
216
 
217
                if ($result) {
218
                    $this->logger->info('Se actualizo el tamaño de empresa ' . $companySelfEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
219
                    $data = [
220
                        'success' => true,
221
                        'id' => $companySelfEvaluation->id,
222
                        'action_edit' => $this->url()->fromRoute('self-evaluation/forms/edit', ['id' => $companySelfEvaluation->uuid]),
223
                        'data' => 'LABEL_RECORD_UPDATED'
224
                    ];
225
                } else {
226
                    $data = [
227
                        'success' => false,
228
                        'data' => $companySelfEvaluationMapper->getError()
229
                    ];
230
                }
231
 
232
                return new JsonModel($data);
233
            } else {
234
                $messages = [];
235
                $form_messages = (array) $form->getMessages();
236
                foreach ($form_messages as $fieldname => $field_messages) {
237
                    $messages[$fieldname] = array_values($field_messages);
238
                }
239
 
240
                return new JsonModel([
241
                    'success' => false,
242
                    'data' => $messages
243
                ]);
244
            }
245
        } else if ($request->isGet()) {
246
            $hydrator = new ObjectPropertyHydrator();
247
 
248
            $data = [
249
                'success' => true,
250
                'data' => [
251
                    'id' => $companySelfEvaluation->uuid,
252
                    'name' => $companySelfEvaluation->name,
253
                    'description' => $companySelfEvaluation->description,
254
                    'text' => $companySelfEvaluation->text,
255
                    'language' => $companySelfEvaluation->language,
256
                    'status' => $companySelfEvaluation->status,
257
                    'content' => $companySelfEvaluation->content ? json_decode($companySelfEvaluation->content) : [],
258
                ]
259
            ];
260
 
261
            return new JsonModel($data);
262
        } else {
263
            $data = [
264
                'success' => false,
265
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
266
            ];
267
 
268
            return new JsonModel($data);
269
        }
270
 
271
        return new JsonModel($data);
272
    }
273
 
274
 
275
 
276
}