Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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