Proyectos de Subversion LeadersLinked - Services

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
 
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;
15
use LeadersLinked\Form\Service\CapsuleCommentForm;
16
use LeadersLinked\Model\CompanyMicrolearningCapsuleComment;
17
use LeadersLinked\Mapper\UserMapper;
18
 
19
 
20
class ServiceCapsuleCommentsController extends AbstractActionController
21
{
22
    /**
23
     *
24
     * @var \Laminas\Db\Adapter\AdapterInterface
25
     */
26
    private $adapter;
27
 
28
    /**
29
     *
30
     * @var \LeadersLinked\Cache\CacheInterface
31
     */
32
    private $cache;
33
 
34
 
35
    /**
36
     *
37
     * @var \Laminas\Log\LoggerInterface
38
     */
39
    private $logger;
40
 
41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
46
 
47
 
48
    /**
49
     *
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
60
     * @param array $config
61
     * @param \Laminas\Mvc\I18n\Translator $translator
62
     */
63
    public function __construct($adapter, $cache, $logger, $config, $translator)
64
    {
65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
        $this->translator   = $translator;
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
 
106
            $userMapper = UserMapper::getInstance($this->adapter);
107
            $users = [];
108
 
109
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
110
            $records = $capsuleCommentMapper->fetchAllByCapsuleId($capsule->id);
111
 
112
            $comments = [];
113
            foreach($records as $record)
114
            {
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
 
133
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
134
 
135
                array_push($comments, [
136
                    'date' => $dt->format($serviceDatetimeFormat),
137
                    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image], ['force_canonical' => true]),
138
                    'fullname' => trim(trim($user->first_name) . ' ' . trim($user->last_name)),
139
                    'rating' => strval($record->rating),
140
                    'comment' => $record->comment,
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]) : '',
142
                ]);
143
            }
144
 
145
            $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
146
 
147
            return new JsonModel([
148
                'success' => true,
149
                'data' => [
150
                    'comments' => $comments,
151
                    'capsule' => [
152
                        'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
153
                            'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
154
                    ]
155
                ]
156
 
157
            ]);
158
 
159
        }
160
 
161
        return new JsonModel([
162
            'success' => false,
163
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
164
        ]);
165
    }
166
 
167
 
168
 
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
 
203
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
204
            $capsuleComment = $capsuleCommentMapper->fetchOneByUuid($comment_id);
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
 
221
            $result = $capsuleCommentMapper->delete($capsuleComment->id);
222
            if($result) {
223
                $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
224
 
225
 
226
 
227
 
228
                return new JsonModel([
229
                    'success' => true,
230
                    'data' => [
231
                        'message' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_DELETE',
232
                        'capsule' => [
233
                            'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
234
                                'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
235
                        ]
236
                    ],
237
 
238
                ]);
239
            } else {
240
                return new JsonModel([
241
                    'success' => false,
242
                    'data' => $capsuleCommentMapper->getError()
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()) {
263
            $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
264
 
265
 
266
 
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
 
294
            //$rawdata = file_get_contents("php://input");
295
           //  error_log('$rawdata = ' . $rawdata );
296
 
297
 
298
            $form = new  CapsuleCommentForm();
299
            $dataPost = $request->getPost()->toArray();
300
 
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
 
314
            $form->setData($dataPost);
315
 
316
            if($form->isValid()) {
317
                $dataPost = (array) $form->getData();
318
                $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
319
                $dt = \DateTime::createFromFormat($serviceDatetimeFormat, $dataPost['added_on']);
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'];
328
                $capsuleComment->rating = strval($dataPost['rating']);
329
                $capsuleComment->added_on =  $dt->format('Y-m-d H:i:s');
330
 
331
 
332
                $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
333
                $result = $capsuleCommentMapper->insert($capsuleComment);
334
                if($result) {
335
 
336
                    $capsuleComment = $capsuleCommentMapper->fetchOne($capsuleComment->id);
337
 
338
                    $dataCountrAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
339
 
340
 
341
 
342
                    return new JsonModel([
343
                        'success' => true,
344
                        'data' => [
345
                            'message' =>'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_ADDED',
346
 
347
                            'comment' => [
348
                                'comment' => $capsuleComment->comment,
349
                                'rating' => $capsuleComment->rating,
350
                                'link_delete' => $this->url()->fromRoute('services/microlearning/capsules/comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $capsuleComment->uuid], ['force_canonical' => true])
351
                            ],
352
                            'capsule' => [
353
                                'total_comments' => strval($dataCountrAndRatingAverage['total_comments']),
354
                                    'total_rating' => strval($dataCountrAndRatingAverage['total_rating'])
355
                            ]
356
                        ]
357
 
358
                    ]);
359
                } else {
360
                    return new JsonModel([
361
                        'success' => false,
362
                        'data' => $capsuleCommentMapper->getError()
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
    }
393
 
394
 
395
 
396
 
397
 
398
 
399
}
400