Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
1 www 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Library\Functions;
13
use LeadersLinked\Mapper\PushTemplateMapper;
14
use LeadersLinked\Form\PushTemplateForm;
15
use LeadersLinked\Model\PushTemplate;
16
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
17
 
18
class PushTemplateController extends AbstractActionController
19
{
20
    /**
21
     *
22
     * @var AdapterInterface
23
     */
24
    private $adapter;
25
 
26
    /**
27
     *
28
     * @var  LoggerInterface
29
     */
30
    private $logger;
31
 
32
    /**
33
     *
34
     * @var array
35
     */
36
    private $config;
16768 efrain 37
 
1 www 38
    /**
39
     *
40
     * @param AdapterInterface $adapter
41
     * @param LoggerInterface $logger
42
     * @param array $config
43
     */
16768 efrain 44
    public function __construct($adapter, $logger, $config)
1 www 45
    {
16768 efrain 46
        $this->adapter = $adapter;
47
        $this->logger = $logger;
48
        $this->config = $config;
1 www 49
    }
50
 
51
    public function indexAction()
52
    {
15355 efrain 53
        $currentUserPlugin = $this->plugin('currentUserPlugin');
54
        $company = $currentUserPlugin->getCompany();
55
 
56
 
1 www 57
        $request = $this->getRequest();
58
 
59
        $request = $this->getRequest();
60
        if($request->isGet()) {
61
 
62
 
63
            $headers  = $request->getHeaders();
64
 
65
            $isJson = false;
66
            if($headers->has('Accept')) {
67
                $accept = $headers->get('Accept');
68
 
69
                $prioritized = $accept->getPrioritized();
70
 
71
                foreach($prioritized as $key => $value) {
72
                    $raw = trim($value->getRaw());
73
 
74
                    if(!$isJson) {
75
                        $isJson = strpos($raw, 'json');
76
                    }
77
 
78
                }
79
            }
80
 
81
            if($isJson) {
15355 efrain 82
 
83
 
84
 
1 www 85
                $search = $this->params()->fromQuery('search', []);
16766 efrain 86
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
1 www 87
 
88
                $page               = intval($this->params()->fromQuery('start', 1), 10);
89
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
90
                $order =  $this->params()->fromQuery('order', []);
91
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 92
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
1 www 93
 
94
                $fields =  ['name'];
95
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
96
 
97
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
98
                    $order_direction = 'ASC';
99
                }
100
 
15355 efrain 101
                $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
1 www 102
 
15355 efrain 103
 
104
                if($company) {
105
                    $paginator = $pushTemplateMapper->fetchAllDataTableByCompanyId($search, $company->id, $page, $records_x_page, $order_field, $order_direction);
106
 
107
                } else {
108
                    $paginator = $pushTemplateMapper->fetchAllDataTableForDefault($search, $page, $records_x_page, $order_field, $order_direction);
109
                }
110
 
1 www 111
                $items = [];
112
                $records = $paginator->getCurrentItems();
113
                foreach($records as $record)
114
                {
115
 
116
                    switch ($record->type)
117
                    {
118
                        case PushTemplate::TYPE_SYSTEM :
119
                            $type = 'LABEL_SYSTEM';
120
                            break;
121
 
122
                        case PushTemplate::TYPE_MICRO_LEARNING :
123
                            $type = 'LABEL_MICRO_LEARNING';
124
                            break;
125
 
126
                        default :
127
                            $type = '';
128
                            break;
129
 
130
                    }
131
 
132
 
133
                    $item = [
15355 efrain 134
                        'id' => $record->code,
1 www 135
                        'title' => $record->title,
136
                        'status' => $record->status,
137
                        'type' => $type,
138
                        'actions' => [
139
                            'link_edit' => $this->url()->fromRoute('settings/push-templates/edit', ['id' => $record->id ]),
140
                        ]
141
                    ];
142
 
143
                    array_push($items, $item);
144
                }
145
 
146
                return new JsonModel([
147
                    'success' => true,
148
                    'data' => [
149
                        'items' => $items,
150
                        'total' => $paginator->getTotalItemCount(),
151
                    ]
152
                ]);
153
            } else  {
15355 efrain 154
 
1 www 155
                $form = new PushTemplateForm($this->adapter);
156
 
157
                $this->layout()->setTemplate('layout/layout-backend');
158
                $viewModel = new ViewModel();
159
                $viewModel->setTemplate('leaders-linked/push-templates/index.phtml');
160
                $viewModel->setVariable('form', $form);
161
                return $viewModel ;
162
            }
163
        } else {
164
            return new JsonModel([
165
                'success' => false,
166
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
167
            ]);;
168
        }
169
    }
170
 
171
 
172
 
173
    public function editAction()
174
    {
175
        $currentUserPlugin = $this->plugin('currentUserPlugin');
176
        $currentUser = $currentUserPlugin->getUser();
177
 
178
        $request = $this->getRequest();
179
        $id = $this->params()->fromRoute('id');
180
 
181
 
182
        if(!$id) {
183
            $data = [
184
                'success'   => false,
185
                'data'   => 'ERROR_INVALID_PARAMETER'
186
            ];
187
 
188
            return new JsonModel($data);
189
        }
190
 
15355 efrain 191
        $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
192
        $emailTemplate = $pushTemplateMapper->fetchOne($id);
1 www 193
        if(!$emailTemplate) {
194
            $data = [
195
                'success'   => false,
196
                'data'   => 'ERROR_RECORD_NOT_FOUND'
197
            ];
198
 
199
            return new JsonModel($data);
200
        }
201
 
202
        if($request->isPost()) {
203
            $form = new  PushTemplateForm($this->adapter, $id);
204
            $dataPost = $request->getPost()->toArray();
205
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PushTemplate::STATUS_INACTIVE;
206
 
207
            $form->setData($dataPost);
208
 
209
            if($form->isValid()) {
210
                $dataPost = (array) $form->getData();
211
 
212
                $hydrator = new ObjectPropertyHydrator();
213
                $hydrator->hydrate($dataPost, $emailTemplate);
15355 efrain 214
                $result = $pushTemplateMapper->update($emailTemplate);
1 www 215
 
216
                if($result) {
217
                    $this->logger->info('Se actualizo el modelo del push ' . $emailTemplate->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
218
 
219
                    $data = [
220
                        'success' => true,
221
                        'data' => 'LABEL_RECORD_UPDATED'
222
                    ];
223
                } else {
224
                    $data = [
225
                        'success'   => false,
15355 efrain 226
                        'data'      => $pushTemplateMapper->getError()
1 www 227
                    ];
228
                }
229
 
230
                return new JsonModel($data);
231
 
232
            } else {
233
                $messages = [];
234
                $form_messages = (array) $form->getMessages();
235
                foreach($form_messages  as $fieldname => $field_messages)
236
                {
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' => $hydrator->extract($emailTemplate)
251
            ];
252
 
253
            return new JsonModel($data);
254
        } else {
255
            $data = [
256
                'success' => false,
257
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
258
            ];
259
 
260
            return new JsonModel($data);
261
        }
262
 
263
        return new JsonModel($data);
264
    }
265
 
15355 efrain 266
    public function importAction() {
267
        $currentUserPlugin = $this->plugin('currentUserPlugin');
268
        $currentUser = $currentUserPlugin->getUser();
269
        $currentCompany = $currentUserPlugin->getCompany();
270
 
271
        if (!$currentCompany) {
272
            $data = [
273
                'success' => false,
274
                'data' => 'ERROR_UNAUTHORIZED'
275
            ];
276
 
277
            return new JsonModel($data);
278
        }
279
 
280
        $request = $this->getRequest();
281
 
282
        if ($request->isPost()) {
283
 
284
            $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
285
            $pushTemplatesDefault = $pushTemplateMapper->fetchAllDefault();
286
 
287
            $new_records = 0;
288
            foreach ($pushTemplatesDefault as $pushTemplateDefault) {
289
 
290
                if ($pushTemplateDefault->status == PushTemplate::STATUS_INACTIVE) {
291
                    continue;
292
                }
293
 
294
                $pushTemplate = $pushTemplateMapper->fetchOneByCodeAndCompanyId($pushTemplateDefault->code, $currentCompany->id);
295
                if(!$pushTemplate) {
296
 
297
                    $pushTemplate = new PushTemplate();
298
                    $pushTemplate->push_template_default_id = $pushTemplateDefault->id;
299
                    $pushTemplate->code  = $pushTemplateDefault->code;
300
                    $pushTemplate->title = $pushTemplateDefault->title;
301
                    $pushTemplate->body = $pushTemplateDefault->body;
302
                    $pushTemplate->status = $pushTemplateDefault->status;
303
                    $pushTemplate->type = $pushTemplateDefault->type;
304
                    $pushTemplate->network_id = $currentUser->network_id;
305
                    $pushTemplate->company_id = $currentCompany->id;
306
 
307
                    if ($pushTemplateMapper->insert($pushTemplate)) {
308
                        $new_records++;
309
                    } else {
310
                        $data = [
311
                            'success' => false,
312
                            'data' => $pushTemplateMapper->getError()
313
                        ];
314
 
315
                        return new JsonModel($data);
316
                    }
317
 
318
                }
319
            }
320
 
321
            if ($new_records) {
322
 
323
                if (1 == $new_records) {
324
                    $data = [
325
                        'success' => true,
326
                        'data' => 'LABEL_1_PUSH_TEMPLATE_IMPORTED'
327
                    ];
328
 
329
                    return new JsonModel($data);
330
                } else {
331
                    $data = [
332
                        'success' => true,
333
                        'data' => $new_records . ' LABEL_MULTI_PUSH_TEMPLATES_IMPORTED'
334
                    ];
335
 
336
                    return new JsonModel($data);
337
                }
338
            } else {
339
                $data = [
340
                    'success' => true,
341
                    'data' => 'LABEL_NO_PUSH_TEMPLATE_IMPORTED'
342
                ];
343
 
344
                return new JsonModel($data);
345
            }
346
        } else {
347
            $data = [
348
                'success' => false,
349
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
350
            ];
351
 
352
            return new JsonModel($data);
353
        }
354
 
355
        return new JsonModel($data);
356
    }
1 www 357
 
15355 efrain 358
 
1 www 359
}