Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15355 | Ir a la última revisión | | 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;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
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
     *
29
     * @var AbstractAdapter
30
     */
31
    private $cache;
32
 
33
    /**
34
     *
35
     * @var  LoggerInterface
36
     */
37
    private $logger;
38
 
39
 
40
    /**
41
     *
42
     * @var array
43
     */
44
    private $config;
45
 
46
    /**
47
     *
48
     * @param AdapterInterface $adapter
49
     * @param AbstractAdapter $cache
50
     * @param LoggerInterface $logger
51
     * @param array $config
52
     */
53
    public function __construct($adapter, $cache , $logger, $config)
54
    {
55
        $this->adapter      = $adapter;
56
        $this->cache        = $cache;
57
        $this->logger       = $logger;
58
        $this->config       = $config;
59
 
60
    }
61
 
62
    public function indexAction()
63
    {
64
        $request = $this->getRequest();
65
 
66
        $request = $this->getRequest();
67
        if($request->isGet()) {
68
 
69
 
70
            $headers  = $request->getHeaders();
71
 
72
            $isJson = false;
73
            if($headers->has('Accept')) {
74
                $accept = $headers->get('Accept');
75
 
76
                $prioritized = $accept->getPrioritized();
77
 
78
                foreach($prioritized as $key => $value) {
79
                    $raw = trim($value->getRaw());
80
 
81
                    if(!$isJson) {
82
                        $isJson = strpos($raw, 'json');
83
                    }
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] : 'title';
100
 
101
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
102
                    $order_direction = 'ASC';
103
                }
104
 
105
                $emailTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
106
                $paginator = $emailTemplateMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
107
 
108
                $items = [];
109
                $records = $paginator->getCurrentItems();
110
                foreach($records as $record)
111
                {
112
 
113
                    switch ($record->type)
114
                    {
115
                        case PushTemplate::TYPE_SYSTEM :
116
                            $type = 'LABEL_SYSTEM';
117
                            break;
118
 
119
                        case PushTemplate::TYPE_MICRO_LEARNING :
120
                            $type = 'LABEL_MICRO_LEARNING';
121
                            break;
122
 
123
                        default :
124
                            $type = '';
125
                            break;
126
 
127
                    }
128
 
129
 
130
                    $item = [
131
                        'id' => $record->id,
132
                        'title' => $record->title,
133
                        'status' => $record->status,
134
                        'type' => $type,
135
                        'actions' => [
136
                            'link_edit' => $this->url()->fromRoute('settings/push-templates/edit', ['id' => $record->id ]),
137
                        ]
138
                    ];
139
 
140
                    array_push($items, $item);
141
                }
142
 
143
                return new JsonModel([
144
                    'success' => true,
145
                    'data' => [
146
                        'items' => $items,
147
                        'total' => $paginator->getTotalItemCount(),
148
                    ]
149
                ]);
150
            } else  {
151
                $form = new PushTemplateForm($this->adapter);
152
 
153
                $this->layout()->setTemplate('layout/layout-backend');
154
                $viewModel = new ViewModel();
155
                $viewModel->setTemplate('leaders-linked/push-templates/index.phtml');
156
                $viewModel->setVariable('form', $form);
157
                return $viewModel ;
158
            }
159
        } else {
160
            return new JsonModel([
161
                'success' => false,
162
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
163
            ]);;
164
        }
165
    }
166
 
167
 
168
 
169
    public function editAction()
170
    {
171
        $currentUserPlugin = $this->plugin('currentUserPlugin');
172
        $currentUser = $currentUserPlugin->getUser();
173
 
174
        $request = $this->getRequest();
175
        $id = $this->params()->fromRoute('id');
176
 
177
 
178
        if(!$id) {
179
            $data = [
180
                'success'   => false,
181
                'data'   => 'ERROR_INVALID_PARAMETER'
182
            ];
183
 
184
            return new JsonModel($data);
185
        }
186
 
187
        $emailTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
188
        $emailTemplate = $emailTemplateMapper->fetchOne($id);
189
        if(!$emailTemplate) {
190
            $data = [
191
                'success'   => false,
192
                'data'   => 'ERROR_RECORD_NOT_FOUND'
193
            ];
194
 
195
            return new JsonModel($data);
196
        }
197
 
198
        if($request->isPost()) {
199
            $form = new  PushTemplateForm($this->adapter, $id);
200
            $dataPost = $request->getPost()->toArray();
201
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PushTemplate::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, $emailTemplate);
210
                $result = $emailTemplateMapper->update($emailTemplate);
211
 
212
                if($result) {
213
                    $this->logger->info('Se actualizo el modelo del push ' . $emailTemplate->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
214
 
215
                    $data = [
216
                        'success' => true,
217
                        'data' => 'LABEL_RECORD_UPDATED'
218
                    ];
219
                } else {
220
                    $data = [
221
                        'success'   => false,
222
                        'data'      => $emailTemplateMapper->getError()
223
                    ];
224
                }
225
 
226
                return new JsonModel($data);
227
 
228
            } else {
229
                $messages = [];
230
                $form_messages = (array) $form->getMessages();
231
                foreach($form_messages  as $fieldname => $field_messages)
232
                {
233
                    $messages[$fieldname] = array_values($field_messages);
234
                }
235
 
236
                return new JsonModel([
237
                    'success'   => false,
238
                    'data'   => $messages
239
                ]);
240
            }
241
        } else if ($request->isGet()) {
242
            $hydrator = new ObjectPropertyHydrator();
243
 
244
            $data = [
245
                'success' => true,
246
                'data' => $hydrator->extract($emailTemplate)
247
            ];
248
 
249
            return new JsonModel($data);
250
        } else {
251
            $data = [
252
                'success' => false,
253
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
254
            ];
255
 
256
            return new JsonModel($data);
257
        }
258
 
259
        return new JsonModel($data);
260
    }
261
 
262
 
263
}