Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
280 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
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\JsonModel;
12
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
13
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
14
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
1323 efrain 15
use LeadersLinked\Form\Service\CapsuleCommentForm;
280 efrain 16
use LeadersLinked\Model\CompanyMicrolearningCapsuleComment;
17
 
18
 
19
class ServiceCapsuleCommentsController extends AbstractActionController
20
{
21
 
22
 
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
 
30
    /**
31
     *
32
     * @var AbstractAdapter
33
     */
34
    private $cache;
35
 
36
    /**
37
     *
38
     * @var  LoggerInterface
39
     */
40
    private $logger;
41
 
42
    /**
43
     *
44
     * @var array
45
     */
46
    private $config;
47
 
48
    /**
49
     *
50
     * @param AdapterInterface $adapter
51
     * @param AbstractAdapter $cache
52
     * @param LoggerInterface $logger
53
     * @param array $config
54
     */
55
    public function __construct($adapter, $cache , $logger, $config)
56
    {
57
        $this->adapter      = $adapter;
58
        $this->cache        = $cache;
59
        $this->logger       = $logger;
60
        $this->config       = $config;
61
    }
62
 
63
    public function indexAction()
64
    {
65
 
66
        $request = $this->getRequest();
67
 
68
        if($request->isGet()) {
69
            $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
70
 
71
            $currentUserPlugin = $this->plugin('currentUserPlugin');
72
            $currentUser = $currentUserPlugin->getUser();
73
 
74
            $capsule_id = $this->params()->fromRoute('capsule_id');
75
 
76
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
77
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
78
 
79
            if(!$capsule) {
80
                return new JsonModel([
81
                    'success' => false,
82
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
83
 
84
                ]);
85
 
86
            }
87
 
88
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
89
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
90
            if(! $capsuleUser) {
91
                return new JsonModel([
92
                    'success' => false,
93
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
94
                ]);
95
            }
96
 
1323 efrain 97
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
98
            $records = $capsuleCommentMapper->fetchAllByCapsuleIdAndUserId($capsule->id, $currentUser->id);
280 efrain 99
 
1323 efrain 100
            $comments = [];
280 efrain 101
            foreach($records as $record)
102
            {
103
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
104
 
1323 efrain 105
                array_push($comments, [
280 efrain 106
                    'date' => $dt->format($serviceDatetimeFormat),
107
                    'rating' => $record->rating,
1323 efrain 108
                    'comment' => $record->comment,
109
                    'link_delete' => $record->user_id == $currentUser->id ? $this->url()->fromRoute('services/microlearning/capsules/comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $record->uuid]) : '',
280 efrain 110
                ]);
111
            }
112
 
1323 efrain 113
            $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
280 efrain 114
 
115
            return new JsonModel([
116
                'success' => true,
117
                'data' => [
1323 efrain 118
                    'comments' => $comments,
119
                    'capsule' => [
120
                        'total_comments' => $dataCountrAndRatingAverage['total_comments'],
121
                        'total_rating' => $dataCountrAndRatingAverage['total_rating']
122
                    ]
123
                ]
280 efrain 124
 
125
            ]);
1323 efrain 126
 
280 efrain 127
        }
128
 
129
        return new JsonModel([
130
            'success' => false,
131
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
132
        ]);
133
    }
134
 
1323 efrain 135
 
136
 
280 efrain 137
    public function deleteAction()
138
    {
139
 
140
        $request = $this->getRequest();
141
 
142
        if($request->isPost()) {
143
 
144
            $currentUserPlugin = $this->plugin('currentUserPlugin');
145
            $currentUser = $currentUserPlugin->getUser();
146
 
147
            $capsule_id = $this->params()->fromRoute('capsule_id');
148
            $comment_id = $this->params()->fromRoute('comment_id');
149
 
150
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
151
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
152
 
153
            if(!$capsule) {
154
                return new JsonModel([
155
                    'success' => false,
156
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
157
 
158
                ]);
159
 
160
            }
161
 
162
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
163
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
164
            if(! $capsuleUser) {
165
                return new JsonModel([
166
                    'success' => false,
167
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
168
                ]);
169
            }
170
 
1323 efrain 171
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
172
            $capsuleComment = $capsuleCommentMapper->fetchOneByUuid($comment_id);
280 efrain 173
 
174
            if(!$capsuleComment) {
175
                return new JsonModel([
176
                    'success' => false,
177
                    'data' => 'ERROR_CAPSULE_COMMENT_NOT_FOUND',
178
                ]);
179
            }
180
 
181
            if($capsuleComment->capsule_id != $capsule->id || $capsuleComment->user_id != $currentUser->id) {
182
                return new JsonModel([
183
                    'success' => false,
184
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE_COMMENT',
185
                ]);
186
            }
187
 
188
 
1323 efrain 189
            $result = $capsuleCommentMapper->delete($capsuleComment->id);
280 efrain 190
            if($result) {
1323 efrain 191
                $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
192
 
193
 
194
 
195
 
280 efrain 196
                return new JsonModel([
197
                    'success' => true,
1323 efrain 198
                    'data' => [
199
                        'message' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_DELETE',
200
                        'capsule' => [
201
                            'total_comments' => $dataCountrAndRatingAverage['total_comments'],
202
                            'total_rating' => $dataCountrAndRatingAverage['total_rating']
203
                        ]
204
                    ],
280 efrain 205
 
206
                ]);
207
            } else {
208
                return new JsonModel([
209
                    'success' => false,
1323 efrain 210
                    'data' => $capsuleCommentMapper->getError()
280 efrain 211
 
212
                ]);
213
            }
214
 
215
 
216
 
217
        }
218
 
219
        return new JsonModel([
220
            'success' => false,
221
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
222
        ]);
223
    }
224
 
225
    public function addAction()
226
    {
227
 
228
        $request = $this->getRequest();
229
 
230
        if($request->isPost()) {
231
 
232
            $currentUserPlugin = $this->plugin('currentUserPlugin');
233
            $currentUser = $currentUserPlugin->getUser();
234
 
235
            $capsule_id = $this->params()->fromRoute('capsule_id');
236
 
237
 
238
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
239
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
240
 
241
            if(!$capsule) {
242
                return new JsonModel([
243
                    'success' => false,
244
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
245
 
246
                ]);
247
 
248
            }
249
 
250
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
251
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
252
            if(! $capsuleUser) {
253
                return new JsonModel([
254
                    'success' => false,
255
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
256
                ]);
257
            }
258
 
259
 
260
            $form = new  CapsuleCommentForm();
261
            $dataPost = $request->getPost()->toArray();
262
 
263
            $form->setData($dataPost);
264
 
265
            if($form->isValid()) {
266
                $dataPost = (array) $form->getData();
267
 
268
 
269
                $capsuleComment = new CompanyMicrolearningCapsuleComment();
270
                $capsuleComment->company_id = $capsule->company_id;
271
                $capsuleComment->topic_id = $capsule->topic_id;
272
                $capsuleComment->capsule_id = $capsule->id;
273
                $capsuleComment->user_id = $currentUser->id;
274
                $capsuleComment->comment = $dataPost['comment'];
275
                $capsuleComment->rating = $dataPost['rating'];
276
 
277
 
1323 efrain 278
                $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
279
                $result = $capsuleCommentMapper->insert($capsuleComment);
280 efrain 280
                if($result) {
1323 efrain 281
 
282
                    $capsuleComment = $capsuleCommentMapper->fetchOne($capsuleComment->id);
283
 
284
                    $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
285
 
286
 
287
 
280 efrain 288
                    return new JsonModel([
289
                        'success' => true,
1323 efrain 290
                        'data' => [
291
                            'message' =>'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_ADDED',
292
 
293
                            'comment' => [
294
                                'comment' => $capsuleComment->comment,
295
                                'rating' => $capsuleComment->rating,
296
                                'link_delete' => $this->url()->fromRoute('services/microlearning/capsules/comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $capsuleComment->uuid])
297
                            ],
298
                            'capsule' => [
299
                                'total_comments' => $dataCountrAndRatingAverage['total_comments'],
300
                                'total_rating' => $dataCountrAndRatingAverage['total_rating']
301
                            ]
302
                        ]
280 efrain 303
 
304
                    ]);
305
                } else {
306
                    return new JsonModel([
307
                        'success' => false,
1323 efrain 308
                        'data' => $capsuleCommentMapper->getError()
280 efrain 309
 
310
                    ]);
311
                }
312
 
313
 
314
            } else {
315
                $messages = [];
316
                $form_messages = (array) $form->getMessages();
317
                foreach($form_messages  as $fieldname => $field_messages)
318
                {
319
 
320
                    $messages[$fieldname] = array_values($field_messages);
321
                }
322
 
323
                return new JsonModel([
324
                    'success'   => false,
325
                    'data'   => $messages
326
                ]);
327
            }
328
 
329
 
330
 
331
 
332
        }
333
 
334
        return new JsonModel([
335
            'success' => false,
336
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
337
        ]);
338
    }
1323 efrain 339
 
340
 
341
 
342
 
343
 
344
 
280 efrain 345
}
346