Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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