Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17060 | Rev 17063 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 17060 Rev 17062
Línea 76... Línea 76...
76
        $this->config       = $config;
76
        $this->config       = $config;
77
        $this->translator   = $translator;
77
        $this->translator   = $translator;
78
    }
78
    }
Línea 79... Línea 79...
79
    
79
    
80
    /**
-
 
81
     * 
80
    /**
82
     * Generación del listado de perfiles
-
 
83
     * {@inheritDoc}
81
     * Main action for listing capsules
84
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
82
     * @return \Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
85
     */
83
     */
86
    public function indexAction()
84
    public function indexAction()
87
    {
85
    {
88
        try {
86
        try {
Línea -... Línea 87...
-
 
87
            $request = $this->getRequest();
-
 
88
            
-
 
89
            if (!$request->isGet()) {
-
 
90
                return $this->createErrorResponse('ERROR_METHOD_NOT_ALLOWED');
89
            $request = $this->getRequest();
91
            }
90
            
92
 
91
            $currentUserPlugin = $this->plugin('currentUserPlugin');
93
            $currentUserPlugin = $this->plugin('currentUserPlugin');
92
            $currentUser = $currentUserPlugin->getUser();
94
            $currentUser = $currentUserPlugin->getUser();
93
            $currentCompany = $currentUserPlugin->getCompany(); 
-
 
94
            
95
            $currentCompany = $currentUserPlugin->getCompany();
95
            $request = $this->getRequest();
-
 
96
            if($request->isGet()) {
-
 
97
                $headers  = $request->getHeaders();
-
 
98
                
-
 
99
                $isJson = false;
-
 
100
                if($headers->has('Accept')) {
-
 
101
                    $accept = $headers->get('Accept');
-
 
102
                    
-
 
103
                    $prioritized = $accept->getPrioritized();
-
 
104
                    
-
 
105
                    foreach($prioritized as $key => $value) {
-
 
106
                        $raw = trim($value->getRaw());
-
 
107
                        
-
 
108
                        if(!$isJson) {
-
 
109
                            $isJson = strpos($raw, 'json');
-
 
110
                        }
-
 
111
                    }
-
 
112
                }
-
 
113
                
-
 
114
                if($isJson) {
-
 
115
                    try {
-
 
116
                        $search = $this->params()->fromQuery('search', []);
-
 
117
                        $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
-
 
118
                        
-
 
119
                        $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
-
 
120
                        $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
-
 
121
                        $order =  $this->params()->fromQuery('order', []);
-
 
122
                        $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
-
 
123
                        $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
-
 
124
                        
-
 
125
                        $fields =  ['name'];
-
 
126
                        $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
-
 
127
                        
-
 
128
                        if(!in_array($order_direction, ['ASC', 'DESC'])) {
-
 
129
                            $order_direction = 'ASC';
-
 
130
                        }
-
 
131
                        
-
 
132
                        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
-
 
133
                        $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/add');
-
 
134
                        $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/edit');
-
 
135
                        $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/delete');
-
 
136
                        $allowUsers = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/users');
-
 
137
                   
-
 
138
                        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
-
 
139
                        $paginator = $capsuleMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
-
 
140
                        
-
 
141
                        $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
-
 
142
                        $records = $paginator->getCurrentItems(); 
-
 
143
                    
-
 
144
                        $storage = Storage::getInstance($this->config, $this->adapter);
-
 
145
                        $path = $storage->getPathMicrolearningCapsule();
-
 
146
                        
-
 
147
                        $items = [];
-
 
148
                        foreach($records as $record) {
-
 
149
                            $total_users        = $microlearningCapsuleUserMapper->fetchCountUsersByCompanyIdAndCapsuleId($currentCompany->id,  $record->id);
-
 
150
                            $total_users_active = $microlearningCapsuleUserMapper->fetchCountUsersActiveByCompanyIdAndCapsuleId($currentCompany->id, $record->id);
-
 
151
                            
-
 
152
                            switch($record->status) {
-
 
153
                                case  MicrolearningCapsule::STATUS_ACTIVE :
-
 
154
                                    $status = 'LABEL_ACTIVE';
-
 
155
                                    break;
-
 
156
                                    
-
 
157
                                case  MicrolearningCapsule::STATUS_INACTIVE :
-
 
158
                                    $status = 'LABEL_INACTIVE';
-
 
159
                                    break;
-
 
160
                                    
-
 
161
                                default : 
-
 
162
                                    $status = '';
-
 
163
                                    break;
-
 
164
                            }
-
 
165
                            
-
 
166
                            switch($record->privacy) {
-
 
167
                                case  MicrolearningCapsule::PRIVACY_PUBLIC :
-
 
168
                                    $privacy = 'LABEL_PUBLIC';
-
 
169
                                    break;
-
 
170
                                    
-
 
171
                                case  MicrolearningCapsule::PRIVACY_PRIVATE :
-
 
172
                                    $privacy = 'LABEL_PRIVATE';
-
 
173
                                    break;
-
 
174
                                    
-
 
175
                                default :
-
 
176
                                    $privacy = '';
-
 
177
                                    break;
-
 
178
                            }
-
 
179
                            
-
 
180
                            switch($record->type) {
-
 
181
                                case  MicrolearningCapsule::TYPE_FREE :
-
 
182
                                    $type = 'LABEL_FREE';
-
 
183
                                    break;
-
 
184
                                    
-
 
185
                                case  MicrolearningCapsule::TYPE_PRIVATE :
-
 
186
                                    $type = 'LABEL_PRIVATE';
-
 
187
                                    break;
-
 
188
                                    
-
 
189
                                case  MicrolearningCapsule::TYPE_SELLING :
-
 
190
                                    $type = 'LABEL_SELLING';
-
 
191
                                    break;
-
 
192
                                    
-
 
193
                                default :
-
 
194
                                    $privacy = '';
-
 
195
                                    break;
-
 
196
                            }
-
 
197
 
-
 
198
                            $params = [
-
 
199
                                'capsule_uuid'  => $record->uuid
-
 
200
                            ];
-
 
201
                            
-
 
202
                            $item = [
-
 
203
                                'name' => $record->name,
-
 
204
                                'details' => [
-
 
205
                                    'status' => $status,
-
 
206
                                    'privacy' => $privacy,
-
 
207
                                    'type' => $type,
-
 
208
                                    'cost' => $record->cost,
-
 
209
                                    'total_users' => $total_users,
-
 
210
                                    'total_users_active' => $total_users_active,
-
 
211
                                ],    
-
 
212
                                'images' => [
-
 
213
                                    'image' =>  $storage->getGenericImage($path, $record->uuid, $record->image),
-
 
214
                                    'marketplace' => $record->marketplace ?  $storage->getGenericImage($path, $record->uuid, $record->marketplace) : '',
-
 
215
                                ],
-
 
216
                                'actions' => [ 
-
 
217
                                    'link_edit' => $allowEdit ? $this->url()->fromRoute('microlearning/content/capsules/edit', $params)  : '', 
-
 
218
                                    'link_delete' => $allowDelete ? $this->url()->fromRoute('microlearning/content/capsules/delete', $params)  : '', 
-
 
219
                                    'link_total_users' => $allowUsers && $total_users ? $this->url()->fromRoute('microlearning/content/capsules/users', [
-
 
220
                                        'capsule_uuid'  => $record->uuid,
-
 
221
                                        'type' => 'all'
-
 
222
                                    ])  : '',
-
 
223
                                    'link_total_users_actives' => $allowUsers && $total_users_active ? $this->url()->fromRoute('microlearning/content/capsules/users', [
-
 
224
                                        'capsule_uuid'  => $record->uuid,
-
 
225
                                        'type' => 'active'
-
 
226
                                    ])  : '', 
-
 
227
                                ],
-
 
228
                            ];
-
 
229
                            
-
 
230
                            array_push($items, $item);
-
 
231
                        }
-
 
232
                        
-
 
233
                        return new JsonModel([
-
 
234
                            'success' => true,
-
 
235
                            'data' => [
-
 
236
                                'link_add' => $allowAdd ? $this->url()->fromRoute('microlearning/content/capsules/add' )  : '', 
-
 
237
                                'items' => $items,
-
 
238
                                'total' => $paginator->getTotalItemCount(),
-
 
239
                            ]
-
 
240
                        ]);
-
 
241
                    } catch (\Exception $e) {
-
 
242
                        $this->logger->err('Error in indexAction: ' . $e->getMessage());
-
 
243
                        return new JsonModel([
-
 
244
                            'success' => false,
-
 
245
                            'data' => 'ERROR_INTERNAL_SERVER_ERROR'
-
 
246
                        ]);
-
 
247
                    }
-
 
248
                } else {
-
 
249
                    $image_size = $this->config['leaderslinked.image_sizes.microlearning_image_upload'];
-
 
250
                    $marketplace_size = $this->config['leaderslinked.image_sizes.marketplace'];
96
 
251
                    
-
 
252
                    $form = new CapsuleForm($this->adapter, $currentCompany->id);
-
 
253
                    $formAdd = new CapsuleAddForm($currentCompany->internal);
-
 
254
                    $formEdit = new CapsuleEditForm($currentCompany->internal);
-
 
255
 
-
 
256
                    $this->layout()->setTemplate('layout/layout-backend.phtml');
-
 
257
                    $viewModel = new ViewModel();
-
 
258
                    $viewModel->setTemplate('leaders-linked/microlearning-capsules/index.phtml');
-
 
259
                    $viewModel->setVariables([
-
 
260
                       'form' => $form,
-
 
261
                       'formAdd' => $formAdd,
-
 
262
                       'formEdit' => $formEdit,
-
 
263
                       'company_uuid' => $currentCompany->uuid,
-
 
264
                       'image_size' => $image_size,
-
 
265
                       'marketplace_size' => $marketplace_size,
-
 
266
                    ]);
-
 
267
                    return $viewModel;
-
 
268
                }
-
 
269
            } else {
-
 
270
                return new JsonModel([
-
 
271
                    'success' => false,
-
 
272
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
97
            if ($this->isJsonRequest($request)) {
-
 
98
                return $this->handleJsonRequest($currentUser, $currentCompany);
-
 
99
            }
273
                ]);
100
 
274
            }
101
            return $this->handleHtmlRequest($currentCompany);
-
 
102
        } catch (\Exception $e) {
-
 
103
            $this->logger->err('Error in indexAction: ' . $e->getMessage());
-
 
104
            return $this->createErrorResponse('ERROR_INTERNAL_SERVER_ERROR');
-
 
105
        }
-
 
106
    }
-
 
107
 
-
 
108
    /**
-
 
109
     * Check if request is JSON
-
 
110
     * @param \Laminas\Http\Request $request
-
 
111
     * @return bool
-
 
112
     */
-
 
113
    private function isJsonRequest($request)
-
 
114
    {
-
 
115
        $headers = $request->getHeaders();
-
 
116
        if (!$headers->has('Accept')) {
-
 
117
            return false;
-
 
118
        }
-
 
119
 
-
 
120
        $accept = $headers->get('Accept');
-
 
121
        $prioritized = $accept->getPrioritized();
-
 
122
        
-
 
123
        foreach ($prioritized as $value) {
-
 
124
            if (strpos(trim($value->getRaw()), 'json') !== false) {
-
 
125
                return true;
-
 
126
            }
-
 
127
        }
-
 
128
        
-
 
129
        return false;
-
 
130
    }
-
 
131
 
-
 
132
    /**
-
 
133
     * Handle JSON request for datatable
-
 
134
     * @param \LeadersLinked\Model\User $currentUser
-
 
135
     * @param \LeadersLinked\Model\Company $currentCompany
-
 
136
     * @return \Laminas\View\Model\JsonModel
-
 
137
     */
-
 
138
    private function handleJsonRequest($currentUser, $currentCompany)
-
 
139
    {
-
 
140
        try {
-
 
141
            $search = $this->params()->fromQuery('search', []);
-
 
142
            $search = empty($search['value']) ? '' : Functions::sanitizeFilterString($search['value']);
-
 
143
            
-
 
144
            $recordsPerPage = intval($this->params()->fromQuery('length', 10), 10);
-
 
145
            $page = (intval($this->params()->fromQuery('start', 1), 10) / $recordsPerPage) + 1;
-
 
146
            
-
 
147
            $order = $this->params()->fromQuery('order', []);
-
 
148
            $orderField = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
-
 
149
            $orderDirection = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
-
 
150
            
-
 
151
            $fields = ['name'];
-
 
152
            $orderField = isset($fields[$orderField]) ? $fields[$orderField] : 'name';
-
 
153
            
-
 
154
            if (!in_array($orderDirection, ['ASC', 'DESC'])) {
-
 
155
                $orderDirection = 'ASC';
-
 
156
            }
-
 
157
 
-
 
158
            $acl = $this->getEvent()->getViewModel()->getVariable('acl');
-
 
159
            $permissions = $this->getUserPermissions($acl, $currentUser);
-
 
160
            
-
 
161
            $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
-
 
162
            $paginator = $capsuleMapper->fetchAllDataTableByCompanyId(
-
 
163
                $currentCompany->id, 
-
 
164
                $search, 
-
 
165
                $page, 
-
 
166
                $recordsPerPage, 
-
 
167
                $orderField, 
-
 
168
                $orderDirection
-
 
169
            );
-
 
170
 
275
        } catch (\Exception $e) {
171
            $items = $this->prepareCapsuleItems($paginator->getCurrentItems(), $currentCompany, $permissions);
276
            $this->logger->err('Error in indexAction: ' . $e->getMessage());
172
 
-
 
173
            return new JsonModel([
-
 
174
                'success' => true,
-
 
175
                'data' => [
277
            return new JsonModel([
176
                    'link_add' => $permissions['allowAdd'] ? $this->url()->fromRoute('microlearning/content/capsules/add') : '',
-
 
177
                    'items' => $items,
278
                'success' => false,
178
                    'total' => $paginator->getTotalItemCount(),
-
 
179
                ]
-
 
180
            ]);
-
 
181
 
-
 
182
        } catch (\Exception $e) {
279
                'data' => 'ERROR_INTERNAL_SERVER_ERROR'
183
            $this->logger->err('Error in handleJsonRequest: ' . $e->getMessage());
280
            ]);
184
            return $this->createErrorResponse('ERROR_INTERNAL_SERVER_ERROR');
Línea -... Línea 185...
-
 
185
        }
-
 
186
    }
-
 
187
 
-
 
188
    /**
-
 
189
     * Get user permissions for capsule actions
-
 
190
     * @param \Laminas\Permissions\Acl\Acl $acl
-
 
191
     * @param \LeadersLinked\Model\User $currentUser
-
 
192
     * @return array
-
 
193
     */
-
 
194
    private function getUserPermissions($acl, $currentUser)
-
 
195
    {
-
 
196
        return [
-
 
197
            'allowAdd' => $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/add'),
-
 
198
            'allowEdit' => $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/edit'),
-
 
199
            'allowDelete' => $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/delete'),
-
 
200
            'allowUsers' => $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/capsules/users')
-
 
201
        ];
-
 
202
    }
-
 
203
 
-
 
204
    /**
-
 
205
     * Prepare capsule items for datatable
-
 
206
     * @param array $records
-
 
207
     * @param \LeadersLinked\Model\Company $currentCompany
-
 
208
     * @param array $permissions
-
 
209
     * @return array
-
 
210
     */
-
 
211
    private function prepareCapsuleItems($records, $currentCompany, $permissions)
-
 
212
    {
-
 
213
        $items = [];
-
 
214
        $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
-
 
215
        $storage = Storage::getInstance($this->config, $this->adapter);
-
 
216
        $path = $storage->getPathMicrolearningCapsule();
-
 
217
 
-
 
218
        foreach ($records as $record) {
-
 
219
            $totalUsers = $microlearningCapsuleUserMapper->fetchCountUsersByCompanyIdAndCapsuleId($currentCompany->id, $record->id);
-
 
220
            $totalUsersActive = $microlearningCapsuleUserMapper->fetchCountUsersActiveByCompanyIdAndCapsuleId($currentCompany->id, $record->id);
-
 
221
 
-
 
222
            $status = $this->getCapsuleStatus($record->status);
-
 
223
            $privacy = $this->getCapsulePrivacy($record->privacy);
-
 
224
            $type = $this->getCapsuleType($record->type);
-
 
225
 
-
 
226
            $params = ['capsule_uuid' => $record->uuid];
-
 
227
 
-
 
228
            $items[] = [
-
 
229
                'name' => $record->name,
-
 
230
                'details' => [
-
 
231
                    'status' => $status,
-
 
232
                    'privacy' => $privacy,
-
 
233
                    'type' => $type,
-
 
234
                    'cost' => $record->cost,
-
 
235
                    'total_users' => $totalUsers,
-
 
236
                    'total_users_active' => $totalUsersActive,
-
 
237
                ],
-
 
238
                'images' => [
-
 
239
                    'image' => $storage->getGenericImage($path, $record->uuid, $record->image),
-
 
240
                    'marketplace' => $record->marketplace ? $storage->getGenericImage($path, $record->uuid, $record->marketplace) : '',
-
 
241
                ],
-
 
242
                'actions' => $this->prepareCapsuleActions($record, $permissions, $totalUsers, $totalUsersActive)
-
 
243
            ];
-
 
244
        }
-
 
245
 
-
 
246
        return $items;
-
 
247
    }
-
 
248
 
-
 
249
    /**
-
 
250
     * Get capsule status label
-
 
251
     * @param int $status
-
 
252
     * @return string
-
 
253
     */
-
 
254
    private function getCapsuleStatus($status)
-
 
255
    {
-
 
256
        switch ($status) {
-
 
257
            case MicrolearningCapsule::STATUS_ACTIVE:
-
 
258
                return 'LABEL_ACTIVE';
-
 
259
            case MicrolearningCapsule::STATUS_INACTIVE:
-
 
260
                return 'LABEL_INACTIVE';
-
 
261
            default:
-
 
262
                return '';
-
 
263
        }
-
 
264
    }
-
 
265
 
-
 
266
    /**
-
 
267
     * Get capsule privacy label
-
 
268
     * @param int $privacy
-
 
269
     * @return string
-
 
270
     */
-
 
271
    private function getCapsulePrivacy($privacy)
-
 
272
    {
-
 
273
        switch ($privacy) {
-
 
274
            case MicrolearningCapsule::PRIVACY_PUBLIC:
-
 
275
                return 'LABEL_PUBLIC';
-
 
276
            case MicrolearningCapsule::PRIVACY_PRIVATE:
-
 
277
                return 'LABEL_PRIVATE';
-
 
278
            default:
-
 
279
                return '';
-
 
280
        }
-
 
281
    }
-
 
282
 
-
 
283
    /**
-
 
284
     * Get capsule type label
-
 
285
     * @param int $type
-
 
286
     * @return string
-
 
287
     */
-
 
288
    private function getCapsuleType($type)
-
 
289
    {
-
 
290
        switch ($type) {
-
 
291
            case MicrolearningCapsule::TYPE_FREE:
-
 
292
                return 'LABEL_FREE';
-
 
293
            case MicrolearningCapsule::TYPE_PRIVATE:
-
 
294
                return 'LABEL_PRIVATE';
-
 
295
            case MicrolearningCapsule::TYPE_SELLING:
-
 
296
                return 'LABEL_SELLING';
-
 
297
            default:
-
 
298
                return '';
-
 
299
        }
-
 
300
    }
-
 
301
 
-
 
302
    /**
-
 
303
     * Prepare capsule actions
-
 
304
     * @param \LeadersLinked\Model\MicrolearningCapsule $record
-
 
305
     * @param array $permissions
-
 
306
     * @param int $totalUsers
-
 
307
     * @param int $totalUsersActive
-
 
308
     * @return array
-
 
309
     */
-
 
310
    private function prepareCapsuleActions($record, $permissions, $totalUsers, $totalUsersActive)
-
 
311
    {
-
 
312
        $params = ['capsule_uuid' => $record->uuid];
-
 
313
        
-
 
314
        return [
-
 
315
            'link_edit' => $permissions['allowEdit'] ? $this->url()->fromRoute('microlearning/content/capsules/edit', $params) : '',
-
 
316
            'link_delete' => $permissions['allowDelete'] ? $this->url()->fromRoute('microlearning/content/capsules/delete', $params) : '',
-
 
317
            'link_total_users' => $permissions['allowUsers'] && $totalUsers ? 
-
 
318
                $this->url()->fromRoute('microlearning/content/capsules/users', [
-
 
319
                    'capsule_uuid' => $record->uuid,
-
 
320
                    'type' => 'all'
-
 
321
                ]) : '',
-
 
322
            'link_total_users_actives' => $permissions['allowUsers'] && $totalUsersActive ? 
-
 
323
                $this->url()->fromRoute('microlearning/content/capsules/users', [
-
 
324
                    'capsule_uuid' => $record->uuid,
-
 
325
                    'type' => 'active'
-
 
326
                ]) : ''
-
 
327
        ];
-
 
328
    }
-
 
329
 
-
 
330
    /**
-
 
331
     * Handle HTML request for view
-
 
332
     * @param \LeadersLinked\Model\Company $currentCompany
-
 
333
     * @return \Laminas\View\Model\ViewModel
-
 
334
     */
-
 
335
    private function handleHtmlRequest($currentCompany)
-
 
336
    {
-
 
337
        $imageSize = $this->config['leaderslinked.image_sizes.microlearning_image_upload'];
-
 
338
        $marketplaceSize = $this->config['leaderslinked.image_sizes.marketplace'];
-
 
339
        
-
 
340
        $formAdd = new CapsuleAddForm($currentCompany->internal);
-
 
341
        $formEdit = new CapsuleEditForm($currentCompany->internal);
-
 
342
 
-
 
343
        $this->layout()->setTemplate('layout/layout-backend.phtml');
-
 
344
        $viewModel = new ViewModel();
-
 
345
        $viewModel->setTemplate('leaders-linked/microlearning-capsules/index.phtml');
-
 
346
        $viewModel->setVariables([
-
 
347
            'formAdd' => $formAdd,
-
 
348
            'formEdit' => $formEdit,
-
 
349
            'company_uuid' => $currentCompany->uuid,
-
 
350
            'image_size' => $imageSize,
-
 
351
            'marketplace_size' => $marketplaceSize,
-
 
352
        ]);
-
 
353
        
-
 
354
        return $viewModel;
-
 
355
    }
-
 
356
 
-
 
357
    /**
-
 
358
     * Create error response
-
 
359
     * @param string $message
-
 
360
     * @return \Laminas\View\Model\JsonModel
-
 
361
     */
-
 
362
    private function createErrorResponse($message)
-
 
363
    {
-
 
364
        return new JsonModel([
-
 
365
            'success' => false,
-
 
366
            'data' => $message
281
        }
367
        ]);
282
    }
368
    }
283
 
369
 
284
    public function addAction()
370
    public function addAction()
285
    {
371
    {