Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
5050 efrain 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;
6388 efrain 12
use LeadersLinked\Mapper\MyCoachCategoryMapper;
6521 efrain 13
 
6388 efrain 14
use LeadersLinked\Form\MyCoach\MyCoachQuestionForm;
6521 efrain 15
use LeadersLinked\Library\MyCoachAccessControl;
16
use LeadersLinked\Form\MyCoach\MyCoachAnswerForm;
17
use LeadersLinked\Mapper\MyCoachQuestionMapper;
18
use LeadersLinked\Mapper\MyCoachQuestionCategoryMapper;
19
use LeadersLinked\Model\MyCoachQuestionCategory;
20
use LeadersLinked\Mapper\QueryMapper;
21
use LeadersLinked\Model\MyCoachQuestion;
22
use Laminas\Db\ResultSet\HydratingResultSet;
23
use Laminas\Paginator\Adapter\DbSelect;
24
use Laminas\Paginator\Paginator;
25
use LeadersLinked\Mapper\UserMapper;
26
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
27
use LeadersLinked\Library\Functions;
28
use LeadersLinked\Mapper\MyCoachAnswerMapper;
29
use LeadersLinked\Mapper\CommentMapper;
30
use LeadersLinked\Model\MyCoachAnswer;
31
use LeadersLinked\Form\MyCoach\CommentForm;
32
use LeadersLinked\Model\Comment;
33
use LeadersLinked\Mapper\ContentReactionMapper;
34
use LeadersLinked\Model\ContentReaction;
35
use LeadersLinked\Mapper\MyCoachQuestionViewMapper;
36
use LeadersLinked\Model\MyCoachQuestionView;
37
use Laminas\Db\Sql\Expression;
5050 efrain 38
 
39
class MyCoachController extends AbstractActionController
40
{
41
    /**
42
     *
43
     * @var AdapterInterface
44
     */
45
    private $adapter;
6388 efrain 46
 
47
 
5050 efrain 48
    /**
49
     *
50
     * @var AbstractAdapter
51
     */
52
    private $cache;
6388 efrain 53
 
5050 efrain 54
    /**
55
     *
56
     * @var  LoggerInterface
57
     */
58
    private $logger;
59
 
6388 efrain 60
 
5050 efrain 61
    /**
62
     *
63
     * @var array
64
     */
65
    private $config;
6388 efrain 66
 
5050 efrain 67
    /**
68
     *
69
     * @param AdapterInterface $adapter
70
     * @param AbstractAdapter $cache
71
     * @param LoggerInterface $logger
72
     * @param array $config
73
     */
6388 efrain 74
    public function __construct($adapter, $cache, $logger,  $config)
5050 efrain 75
    {
76
        $this->adapter      = $adapter;
77
        $this->cache        = $cache;
78
        $this->logger       = $logger;
79
        $this->config       = $config;
6388 efrain 80
    }
5050 efrain 81
 
82
    /**
83
     *
84
     * Generación del listado de perfiles
85
     * {@inheritDoc}
86
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
87
     */
88
    public function indexAction()
89
    {
6388 efrain 90
        $currentUserPlugin = $this->plugin('currentUserPlugin');
91
        $currentUser = $currentUserPlugin->getUser();
92
 
93
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
94
        $currentNetwork = $currentNetworkPlugin->getNetwork();
95
 
5050 efrain 96
        $request = $this->getRequest();
6388 efrain 97
        if ($request->isGet()) {
6521 efrain 98
 
99
            $myCoachAccesControl = MyCoachAccessControl::getInstance($this->adapter);
100
            $categories = $myCoachAccesControl->getCategoriesWithAccessToFormSelect($currentUser->id, $currentNetwork->id);
101
 
102
            $formQuestion = new MyCoachQuestionForm($categories);
103
            $formAnswer = new MyCoachAnswerForm();
5050 efrain 104
 
6388 efrain 105
 
6521 efrain 106
            $this->layout()->setTemplate('layout/layout');
107
            $viewModel = new ViewModel();
108
            $viewModel->setTemplate('leaders-linked/my-coach/index');
109
            $viewModel->setVariables([
110
                'categories' => $categories,
111
                'formQuestion' => $formQuestion,
112
                'formAnswer' => $formAnswer,
113
            ]);
114
            return $viewModel;
6388 efrain 115
 
6521 efrain 116
        } else {
117
            return new JsonModel([
118
                'success' => false,
119
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
120
            ]);
121
        }
122
    }
123
 
124
    public function questionsAction()
125
    {
126
        $currentUserPlugin = $this->plugin('currentUserPlugin');
127
        $currentUser = $currentUserPlugin->getUser();
128
 
129
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
130
        $currentNetwork = $currentNetworkPlugin->getNetwork();
131
 
132
 
133
        $request = $this->getRequest();
134
        if ($request->isGet()) {
135
            $userMapper                     = UserMapper::getInstance($this->adapter);
136
            $myCoachCategoryMapper          = MyCoachCategoryMapper::getInstance($this->adapter);
137
            $myCoachQuestionCategoryMapper  = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
138
            $myCoachAccessControl           = MyCoachAccessControl::getInstance($this->adapter);
139
 
140
            $category_filter_id = filter_var($this->params()->fromQuery('category_id'), FILTER_SANITIZE_STRING);
141
            $search = filter_var($this->params()->fromQuery('search'), FILTER_SANITIZE_STRING);
142
            $page   = intval($this->params()->fromQuery('start', 1), 10);
143
 
144
            $order_field        = 'added_on';
145
            $order_direction    = 'asc';
146
            $records_x_page     = 12;
147
 
6685 efrain 148
 
6521 efrain 149
            if ($category_filter_id) {
150
 
151
                $message_error = '';
152
                if(!$myCoachAccessControl->hasAccessForCategory($currentUser->id, $category_filter_id, $currentNetwork->id, $message_error)) {
153
 
154
                    return new JsonModel([
155
                        'success' => true,
156
                        'data' => $message_error,
157
                    ]);
158
 
6388 efrain 159
                }
6521 efrain 160
 
161
                $categoryFilter = $myCoachCategoryMapper->fetchOneByUuid($category_filter_id);
162
                $category_ids = [$categoryFilter->id];
163
            } else {
164
                $category_ids = $myCoachAccessControl->getCategoryIdsWithAccess($currentUser->id, $currentNetwork->id);
165
            }
166
 
167
            $category_ids_with_edition = $myCoachAccessControl->getCategoryIdsWithEdition($currentUser->id);
168
 
169
            $queryMapper = QueryMapper::getInstance($this->adapter);
170
 
171
            $prototype = new MyCoachQuestion();
172
            $selectIn = $queryMapper->getSql()->select(MyCoachQuestionCategoryMapper::_TABLE);
6685 efrain 173
            $selectIn->columns(['question_id']);
6521 efrain 174
            $selectIn->where->in('category_id', $category_ids);
175
 
176
 
177
 
178
            $select = $queryMapper->getSql()->select(MyCoachQuestionMapper::_TABLE);
179
            $select->where->in('id', $selectIn);
180
 
181
            if($search) {
182
                $select->where->nest()
183
                -> like('title', '%' . $search . '%')->or->like('description', '%' . $search . '%')
184
                ->unnest();
185
            }
186
            $select->order($order_field . ' ' . $order_direction);
187
 
188
            //echo $select->getSqlString($this->adapter->platform);
189
            //exit;
190
 
191
 
192
            $users = [];
193
            $categories = [];
194
            //echo $select->getSqlString($this->adapter->platform); exit;
195
 
196
            $hydrator   = new ObjectPropertyHydrator();
197
            $resultset  = new HydratingResultSet($hydrator, $prototype);
198
 
199
            $adapter = new DbSelect($select, $queryMapper->getSql(), $resultset);
200
            $paginator = new Paginator($adapter);
201
            $paginator->setItemCountPerPage($records_x_page);
202
            $paginator->setCurrentPageNumber($page);
203
 
204
 
205
            $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
206
            $commentMapper = CommentMapper::getInstance($this->adapter);
207
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
208
            $myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);
209
 
210
            $items = [];
211
            $records = $paginator->getCurrentItems();
212
            foreach ($records as $record)
213
            {
214
                $bags_categories = [];
215
 
216
                $questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($record->id);
6388 efrain 217
 
6521 efrain 218
 
219
 
220
 
221
                $allowEdit   = $myCoachAccessControl->hasAccessEditQuestion($currentUser->id, $record->id, $currentNetwork->id, $message_error);
222
                $allowDelete = $myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $record->id, $currentNetwork->id, $message_error);
223
                foreach($questionCategories as $questionCategory)
224
                {
225
                    if(in_array($questionCategory->category_id, $category_ids_with_edition)) {
226
 
227
                        $allowDelete = true;
228
                    }
229
 
230
                    if (!isset($categories[$questionCategory->category_id])) {
231
                        $category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);
232
                        if ($category) {
233
                            $categories[$category->id] = $category->name;
234
 
6388 efrain 235
                        }
236
                    }
6521 efrain 237
 
238
                    array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ] ]);
6388 efrain 239
                }
6521 efrain 240
 
241
                if(isset($users[$record->user_id])) {
242
                    $user = $users[ $record->user_id ];
243
                } else {
244
                    $user = $userMapper->fetchOne($record->user_id);
245
                    $users[ $record->user_id ] = $user;
246
                }
247
 
248
 
249
                $description = strip_tags($record->description);
250
                if (strlen($description) > 250) {
251
                    $description = substr($description, 0, 250) . '...';
252
                }
253
 
254
 
255
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
256
                $added_on = $dt->format('d/m/Y H:i a');
257
 
258
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);
259
                $updated_on = $dt->format('d/m/Y H:i a');
260
 
261
                $item = [
262
                    'uuid' => $record->uuid,
263
                    'user_name' => trim($user->first_name . ' ' . $user->last_name),
264
                    'user_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
265
                    'title' => $record->title,
266
                    'description' => $description,
267
                    'categories' => $bags_categories,
268
                    'views' => intval($myCoachQuestionViewMapper->fetchCountByQuestionId($record->id), 10),
269
                    'answers' =>  intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($record->id), 10),
270
                    'reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($record->id), 10),
271
                    'comments' =>  intval($commentMapper->fetchCountByMyCoachQuestionId($record->id), 10),
272
                    'added_on' => $added_on,
273
                    'updated_on' => $updated_on,
274
                    'link_add_comment' => $this->url()->fromRoute('my-coach/questions/comments/add', ['id' => $record->uuid]),
275
                    'link_view' => $this->url()->fromRoute('my-coach/questions/view', ['id' => $record->uuid]),
276
                    'link_edit' => $allowEdit ?  $this->url()->fromRoute('my-coach/questions/edit', ['id' => $record->uuid]) : '',
277
                    'link_delete' => $allowDelete ? $this->url()->fromRoute('my-coach/questions/delete', ['id' =>  $record->uuid]) : '',
278
                ];
279
 
280
                array_push($items, $item);
281
            }
282
 
283
            return new JsonModel([
284
                'success' => true,
285
                'data' => [
286
                    'items' => $items,
287
                    'total' => $paginator->getTotalItemCount(),
288
                    'page' => $paginator->getCurrentPageNumber(),
289
                    'total_pages' => $paginator->getPageRange()
290
                ]
291
            ]);
292
 
293
 
294
        } else {
295
            return new JsonModel([
296
                'success' => false,
297
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
298
            ]);
299
        }
300
    }
301
 
302
    public function addQuestionAction()
303
    {
304
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
305
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
306
 
307
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
308
        $currentUser        = $currentUserPlugin->getUser();
309
 
310
        $request            = $this->getRequest();
311
 
312
        if ($request->isPost()) {
313
 
314
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
315
 
316
 
317
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
318
            $categories = $myCoachAccessControl->getCategoriesWithAccessToFormSelect($currentUser->id, $currentNetwork->id);
319
 
320
            $form = new MyCoachQuestionForm($categories);
321
            $form->setData($dataPost);
322
 
323
            if ($form->isValid()) {
324
                $dataPost = (array) $form->getData();
325
 
326
                $myCoachQuestion = new MyCoachQuestion();
327
                $myCoachQuestion->network_id    = $currentNetwork ->id;
328
                $myCoachQuestion->user_id       = $currentUser->id;
329
                $myCoachQuestion->title         = $dataPost['title'];
330
                $myCoachQuestion->description   = $dataPost['description'];
331
 
332
 
333
                $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
334
                if ($myCoachQuestionMapper->insert($myCoachQuestion)) {
335
                    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
336
                    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
337
 
338
                    $category_ids = $dataPost['category_id'];
339
                    foreach($category_ids as $category_id)
340
                    {
341
                        $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);
342
                        if($myCoachCategory) {
343
                            $myCoachQuestionCategory = new MyCoachQuestionCategory();
344
                            $myCoachQuestionCategory->category_id = $myCoachCategory->id;
345
                            $myCoachQuestionCategory->question_id = $myCoachQuestion->id;
346
 
347
                            $myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);
348
                        }
349
                    }
350
 
351
 
352
                    $this->logger->info('Se agrego la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
353
 
354
                    $data = [
355
                        'success'   => true,
356
                        'data'   => 'LABEL_RECORD_ADDED'
357
                    ];
358
                } else {
359
                    $data = [
360
                        'success'   => false,
361
                        'data'      => $myCoachQuestionMapper->getError()
362
                    ];
363
                }
364
 
365
                return new JsonModel($data);
366
            } else {
367
                $messages = [];
368
                $form_messages = (array) $form->getMessages();
369
                foreach ($form_messages  as $fieldname => $field_messages)
370
                {
371
                    $messages[$fieldname] = array_values($field_messages);
372
                }
373
 
374
                return new JsonModel([
375
                    'success'   => false,
376
                    'data'   => $messages
377
                ]);
378
            }
379
        } else {
380
            $data = [
381
                'success' => false,
382
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
383
            ];
384
 
385
            return new JsonModel($data);
386
        }
387
 
388
        return new JsonModel($data);
389
    }
390
 
391
 
392
 
393
    public function deleteQuestionAction()
394
    {
395
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
396
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
397
 
398
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
399
        $currentUser        = $currentUserPlugin->getUser();
400
 
401
        $request    = $this->getRequest();
402
        $id         = $this->params()->fromRoute('id');
403
 
404
        $message_error = '';
405
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
406
        if(!$myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {
407
            return new JsonModel([
408
                'success'   => false,
409
                'data'   => $message_error
410
            ]);
411
        }
412
 
413
 
414
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
415
        $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
6388 efrain 416
 
6521 efrain 417
 
418
        if ($request->isPost()) {
419
 
420
            $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
421
            $myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);
422
 
423
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
424
            $myCoachAnswerMapper->deleteAllByQuestionId($myCoachQuestion->id);
425
 
426
            $result =  $myCoachQuestionMapper->delete($myCoachQuestion);
427
            if ($result) {
428
                $data = [
429
                    'success' => true,
430
                    'data' => 'LABEL_RECORD_DELETED'
431
                ];
432
            } else {
433
 
434
                $data = [
435
                    'success'   => false,
436
                    'data'      => $myCoachQuestionMapper->getError()
437
                ];
438
 
439
                return new JsonModel($data);
440
            }
441
        } else {
442
            $data = [
443
                'success' => false,
444
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
445
            ];
446
 
447
            return new JsonModel($data);
448
        }
449
 
450
        return new JsonModel($data);
451
    }
452
 
453
 
454
    public function editQuestionAction()
455
    {
456
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
457
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
458
 
459
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
460
        $currentUser        = $currentUserPlugin->getUser();
461
 
462
        $request    = $this->getRequest();
463
        $id    = $this->params()->fromRoute('id');
464
 
465
        $message_error = '';
466
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
467
        if(!$myCoachAccessControl->hasAccessEditQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {
468
            return new JsonModel([
469
                'success'   => false,
470
                'data'   => $message_error
471
            ]);
472
        }
473
 
474
 
475
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
476
        $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
477
 
478
 
479
        if ($request->isGet()) {
480
 
481
            $category_ids = [];
482
            $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
483
 
484
            $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
485
            $records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
486
            foreach($records as $record)
487
            {
488
                $myCoachCategory = $myCoachCategoryMapper->fetchOne($record->category_id);
489
                if($myCoachCategory) {
490
                    array_push($category_ids,$myCoachCategory->uuid);
491
                }
492
            }
493
 
494
 
495
 
496
            $data = [
497
                'success' => true,
498
                'data' => [
499
                    'category_id' => $category_ids,
500
                    'title' => $myCoachQuestion->title,
501
                    'description' => $myCoachQuestion->description,
502
                ]
503
            ];
504
 
505
            return new JsonModel($data);
506
        } else if ($request->isPost()) {
507
 
508
            $categories = $myCoachAccessControl->getCategoriesWithAccessToFormSelect($myCoachQuestion->user_id, $currentNetwork->id);
509
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
510
 
511
            $form = new MyCoachQuestionForm($categories);
512
            $form->setData($dataPost);
513
 
514
            if ($form->isValid()) {
515
                $dataPost = (array) $form->getData();
516
 
517
 
518
 
519
                $myCoachQuestion->title = $dataPost['title'];
520
                $myCoachQuestion->description = $dataPost['description'];
521
 
522
 
523
                if ($myCoachQuestionMapper->update($myCoachQuestion)) {
524
 
525
 
526
                    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
527
 
528
                    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
529
                    $myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);
530
 
531
                    $category_ids = $dataPost['category_id'];
532
                    foreach($category_ids as $category_id)
533
                    {
534
                        $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);
535
                        if($myCoachCategory) {
536
                            $myCoachQuestionCategory = new MyCoachQuestionCategory();
537
                            $myCoachQuestionCategory->category_id = $myCoachCategory->id;
538
                            $myCoachQuestionCategory->question_id = $myCoachQuestion->id;
539
 
540
                            $myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);
6388 efrain 541
                        }
542
                    }
6521 efrain 543
 
544
 
545
                    $this->logger->info('Se edito la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
546
 
547
                    $data = [
548
                        'success'   => true,
549
                        'data'   => 'LABEL_RECORD_UPDATED'
550
                    ];
551
                } else {
552
                    $data = [
553
                        'success'   => false,
554
                        'data'      => $myCoachQuestionMapper->getError()
555
                    ];
6388 efrain 556
                }
6521 efrain 557
 
558
                return new JsonModel($data);
559
            } else {
560
                $messages = [];
561
                $form_messages = (array) $form->getMessages();
562
                foreach ($form_messages  as $fieldname => $field_messages) {
563
 
564
                    $messages[$fieldname] = array_values($field_messages);
565
                }
566
 
567
                return new JsonModel([
568
                    'success'   => false,
569
                    'data'   => $messages
570
                ]);
571
            }
572
        } else {
573
            $data = [
574
                'success' => false,
575
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
576
            ];
577
 
578
            return new JsonModel($data);
579
        }
580
 
581
        return new JsonModel($data);
582
    }
583
 
584
 
585
    public function viewQuestionAction()
586
    {
587
        $currentUserPlugin = $this->plugin('currentUserPlugin');
588
        $currentUser = $currentUserPlugin->getUser();
589
 
590
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
591
        $currentNetwork = $currentNetworkPlugin->getNetwork();
592
 
593
        $request    = $this->getRequest();
594
        $id    = $this->params()->fromRoute('id');
595
 
596
        $message_error = '';
597
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
598
        if(!$myCoachAccessControl->hasAccessViewQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {
599
            return new JsonModel([
600
                'success'   => false,
601
                'data'   => $message_error
602
            ]);
603
        }
604
 
605
 
606
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
607
        $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
608
 
609
        $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
610
        $commentMapper = CommentMapper::getInstance($this->adapter);
611
        $myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);
612
        $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
613
 
614
 
615
        $request = $this->getRequest();
616
        if ($request->isGet()) {
617
 
618
            $categories = [];
619
            $users = [];
620
 
621
 
622
 
623
            $bags_categories = [];
624
 
625
            $myCoachQuestionViewMapper = MyCoachQuestionViewMapper::getInstance($this->adapter);
626
            $myCoachQuestionView = $myCoachQuestionViewMapper->fetchOneByQuestionIdAndUserId($myCoachQuestion->id, $currentUser->id);
627
            if(!$myCoachQuestionView) {
628
                $myCoachQuestionView = new MyCoachQuestionView();
629
                $myCoachQuestionView->question_id = $myCoachQuestion->id;
630
                $myCoachQuestionView->user_id = $currentUser->id;
631
 
632
                $myCoachQuestionViewMapper->insert($myCoachQuestionView);
633
 
634
            }
635
 
636
 
637
 
638
            $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
639
            $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
640
 
641
            $questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
642
            foreach($questionCategories as $questionCategory)
643
            {
644
 
645
                if (!isset($categories[$questionCategory->category_id])) {
646
                    $category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);
647
                    if ($category) {
648
                        $categories[$category->id] = $category->name;
649
                    }
650
                }
651
 
652
                array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ] ]);
653
            }
654
 
655
            $users = [];
656
            $userMapper = UserMapper::getInstance($this->adapter);
657
            if(isset($users[$myCoachQuestion->user_id])) {
658
                $user = $users[$myCoachQuestion->user_id];
659
            } else {
660
                $user = $userMapper->fetchOne( $myCoachQuestion->user_id );
661
                $users[ $myCoachQuestion->user_id ] = $user;
662
            }
663
 
664
 
665
 
666
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachQuestion->added_on);
667
            $added_on = $dt->format('d/m/Y H:i a');
668
 
669
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachQuestion->updated_on);
670
            $updated_on = $dt->format('d/m/Y H:i a');
671
 
672
 
673
 
674
            $allowDelete = $myCoachAccessControl->hasAccessDeleteQuestion($currentUser->id, $myCoachQuestion->id, $currentNetwork->id, $message_error);
675
            if($allowDelete) {
676
                $link_delete = $this->url()->fromRoute('my-coach/questions/delete', ['id' => $myCoachQuestion->uuid]);
677
            } else {
678
                $link_delete = '';
679
            }
680
 
681
            $allowAnswerAdd = $myCoachAccessControl->hasAccessAnswerQuestion($currentUser->id, $myCoachQuestion->id, $currentNetwork->id, $message_error);
682
            if ($allowAnswerAdd) {
683
                $link_answers_add = $this->url()->fromRoute('my-coach/questions/answers/add', ['id' => $myCoachQuestion->uuid]);
684
            } else {
685
                $link_answers_add = '';
686
            }
6547 efrain 687
 
6521 efrain 688
 
6388 efrain 689
 
6521 efrain 690
            $myCoachLastAnswer = $myCoachAnswerMapper->fetchOneLastAnswerByQuestionId($myCoachQuestion->id);
691
 
692
            if( $myCoachLastAnswer) {
693
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $myCoachLastAnswer->added_on);
694
                $last_answer_on = $dt->format('d/m/Y H:i a');
695
 
696
 
697
 
698
            } else {
699
                $last_answer_on = '';
700
            }
701
 
6388 efrain 702
 
6521 efrain 703
            return new JsonModel([
704
                'success' => true,
705
                'data' => [
706
                    'uuid' => $myCoachQuestion->uuid,
707
                    'user_name' => trim($user->first_name . ' ' . $user->last_name),
708
                    'user_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
709
                    'title' => $myCoachQuestion->title,
710
                    'description' => $myCoachQuestion->description,
711
                    'categories' => $bags_categories,
712
                    'views' => intval($myCoachQuestionViewMapper->fetchCountByQuestionId($myCoachQuestion->id) , 10),
6547 efrain 713
                    'answers' => intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id) , 10),
6521 efrain 714
                    'reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id), 10),
715
                    'comments' => intval($commentMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id), 10),
716
                    'added_on' => $added_on,
717
                    'updated_on' => $updated_on,
718
                    'last_answer_on' => $last_answer_on,
719
                    'link_answers' => $this->url()->fromRoute('my-coach/questions/answers', ['id' => $myCoachQuestion->uuid]),
720
                    'link_answers_add' => $link_answers_add,
721
                    'link_delete' => $link_delete,
722
                ]
723
 
724
            ]);
725
 
726
 
727
        } else {
728
            return new JsonModel([
729
                'success' => false,
730
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
731
            ]);
732
        }
733
 
734
 
735
 
736
 
737
 
738
    }
739
 
740
    /**
741
     *
742
     * {@inheritDoc}
743
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
744
     */
745
    public function answersAction()
746
    {
747
        $currentUserPlugin = $this->plugin('currentUserPlugin');
748
        $currentUser = $currentUserPlugin->getUser();
749
 
750
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
751
        $currentNetwork = $currentNetworkPlugin->getNetwork();
752
 
753
        $request    = $this->getRequest();
754
        $id    = $this->params()->fromRoute('id');
755
 
756
        $message_error = '';
757
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
758
        if(!$myCoachAccessControl->hasAccessViewQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {
759
            return new JsonModel([
760
                'success'   => false,
761
                'data'   => $message_error
762
            ]);
763
        }
764
 
765
 
766
 
767
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
768
        $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
769
 
770
        $request = $this->getRequest();
771
        if ($request->isGet()) {
772
 
773
 
774
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
775
            $now = $myCoachAnswerMapper->getDatebaseNow();
776
 
777
            $records = $myCoachAnswerMapper->fetchAllByQuestionId($myCoachQuestion->id);
778
 
779
 
780
            $items = [];
781
 
782
            foreach($records as $record)
783
            {
784
                $items[] = $this->renderAnswer($record->id, $currentUser->id, $now);
785
            }
786
 
787
 
788
 
789
            return new JsonModel([
790
                'success' => true,
791
                'data' => [
792
                    'items' => $items
793
                ]
794
            ]);
795
 
796
 
797
        } else {
798
            return new JsonModel([
799
                'success' => false,
800
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
801
            ]);
802
        }
803
    }
804
 
6547 efrain 805
    public function deleteAnswerAction()
806
    {
807
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
808
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
809
 
810
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
811
        $currentUser        = $currentUserPlugin->getUser();
812
 
813
        $request    = $this->getRequest();
814
        $answer     = $this->params()->fromRoute('answer');
815
 
816
        $message_error = '';
817
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
818
        if(!$myCoachAccessControl->hasAccessEditOrDeleteAnswer($currentUser->id, $answer, $currentNetwork->id, $message_error)) {
819
            return new JsonModel([
820
                'success'   => false,
821
                'data'   => $message_error
822
            ]);
823
        }
824
 
825
 
826
        $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
827
        $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($answer);
828
 
829
        if ($request->isPost()) {
830
 
831
            if($myCoachAnswerMapper->delete($myCoachAnswer)) {
832
 
833
                $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
834
                $commentMapper = CommentMapper::getInstance($this->adapter);
835
 
836
 
837
                $this->logger->info('Se borro la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
838
 
839
                $data = [
840
                    'success'   => true,
841
                    'data'   => [
842
                        'total_comments' => intval($commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),
843
                        'total_answers' => intval($myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),
844
                        'total_reactions' => intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10)
845
 
846
                    ]
847
                ];
848
            } else {
849
                $data = [
850
                    'success'   => false,
851
                    'data'      => $myCoachAnswerMapper->getError()
852
                ];
853
            }
854
        } else {
855
            $data = [
856
                'success' => false,
857
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
858
            ];
859
 
860
 
861
        }
862
        return new JsonModel($data);
863
 
864
 
865
    }
866
 
867
 
868
    public function editAnswerAction()
869
    {
870
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
871
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
872
 
873
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
874
        $currentUser        = $currentUserPlugin->getUser();
875
 
876
        $request    = $this->getRequest();
877
        $answer     = $this->params()->fromRoute('answer');
878
 
879
        $message_error = '';
880
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
881
        if(!$myCoachAccessControl->hasAccessEditOrDeleteAnswer($currentUser->id, $answer, $currentNetwork->id, $message_error)) {
882
            return new JsonModel([
883
                'success'   => false,
884
                'data'   => $message_error
885
            ]);
886
        }
887
 
888
 
889
        $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
890
        $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($answer);
891
 
892
        if ($request->isPost()) {
893
 
894
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
895
            $form = new MyCoachAnswerForm();
896
            $form->setData($dataPost);
897
 
898
            if ($form->isValid()) {
899
                $myCoachAnswer->text        = $dataPost['description'];
6388 efrain 900
 
6547 efrain 901
                if($myCoachAnswerMapper->update($myCoachAnswer)) {
902
 
903
                    $this->logger->info('Se edito la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
904
 
905
                    $data = [
906
                        'success'   => true,
907
                        'data'   => [
908
                            'description' => $myCoachAnswer->text
909
                        ]
910
                    ];
911
                } else {
912
                    $data = [
913
                        'success'   => false,
914
                        'data'      => $myCoachAnswerMapper->getError()
915
                    ];
916
                }
917
 
918
                return new JsonModel($data);
919
            } else {
920
                $messages = [];
921
                $form_messages = (array) $form->getMessages();
922
                foreach ($form_messages  as $fieldname => $field_messages)
923
                {
924
                    $messages[$fieldname] = array_values($field_messages);
925
                }
926
 
927
                return new JsonModel([
928
                    'success'   => false,
929
                    'data'   => $messages
930
                ]);
931
            }
932
        } else  if ($request->isGet()) {
933
            return new JsonModel([
934
                'success'   => true,
935
                'data'   => [
936
                    'description' => $myCoachAnswer->text
937
                ]
938
            ]);
939
        } else {
940
            $data = [
941
                'success' => false,
942
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
943
            ];
944
 
945
            return new JsonModel($data);
946
        }
947
 
948
 
949
    }
950
 
6521 efrain 951
 
952
 
6547 efrain 953
 
954
 
6521 efrain 955
    public function addAnswerAction()
956
    {
957
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
958
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
959
 
960
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
961
        $currentUser        = $currentUserPlugin->getUser();
962
 
963
        $request    = $this->getRequest();
964
        $id    = $this->params()->fromRoute('id');
965
 
966
        $message_error = '';
967
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
968
        if(!$myCoachAccessControl->hasAccessAnswerQuestion($currentUser->id, $id, $currentNetwork->id, $message_error)) {
969
            return new JsonModel([
970
                'success'   => false,
971
                'data'   => $message_error
972
            ]);
973
        }
974
 
975
 
976
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
977
        $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
978
 
979
        if ($request->isPost()) {
980
 
981
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
982
            $form = new MyCoachAnswerForm();
983
            $form->setData($dataPost);
984
 
985
            if ($form->isValid()) {
6388 efrain 986
 
6521 efrain 987
                $myCoachAnswer = new MyCoachAnswer();
988
                $myCoachAnswer->question_id = $myCoachQuestion->id;
989
                $myCoachAnswer->text        = $dataPost['description'];
990
                $myCoachAnswer->user_id     = $currentUser->id;
991
 
992
 
993
                $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
994
                if($myCoachAnswerMapper->insert($myCoachAnswer)) {
995
                    $now = $myCoachAnswerMapper->getDatebaseNow();
996
 
997
                    $this->logger->info('Se agrego la respuesta ' . $myCoachAnswer->text, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
998
 
999
                    $data = [
1000
                        'success'   => true,
1001
                        'data'   => [
1002
                            'answers' => $myCoachAnswerMapper->fetchCountByMyCoachQuestionId($myCoachQuestion->id),
1003
                            'item' => $this->renderAnswer($myCoachAnswer->id, $currentUser->id, $now)
1004
                        ]
1005
                    ];
1006
                } else {
1007
                    $data = [
1008
                        'success'   => false,
1009
                        'data'      => $myCoachQuestionMapper->getError()
1010
                    ];
1011
                }
1012
 
1013
                return new JsonModel($data);
1014
            } else {
1015
                $messages = [];
1016
                $form_messages = (array) $form->getMessages();
1017
                foreach ($form_messages  as $fieldname => $field_messages)
6388 efrain 1018
                {
6521 efrain 1019
                    $messages[$fieldname] = array_values($field_messages);
1020
                }
6388 efrain 1021
 
6521 efrain 1022
                return new JsonModel([
1023
                    'success'   => false,
1024
                    'data'   => $messages
1025
                ]);
1026
            }
1027
 
1028
        } else {
1029
            $data = [
1030
                'success' => false,
1031
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1032
            ];
1033
 
1034
            return new JsonModel($data);
1035
        }
1036
 
1037
 
1038
    }
1039
 
1040
    /*
1041
 
1042
    public function deleteAction()
1043
    {
1044
    $currentUserPlugin = $this->plugin('currentUserPlugin');
1045
    $currentUser    = $currentUserPlugin->getUser();
1046
 
1047
 
1048
    $request    = $this->getRequest();
1049
    $id         = $this->params()->fromRoute('id');
1050
 
1051
 
1052
 
1053
    $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
1054
    $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
1055
    if (!$myCoachQuestion) {
1056
    return new JsonModel([
1057
    'success'   => false,
1058
    'data'   => 'ERROR_RECORD_NOT_FOUND'
1059
    ]);
1060
    }
1061
 
1062
    $ok = false;
1063
    if(!$myCoachQuestion->answers) {
1064
 
1065
    if($currentUser->id == $myCoachQuestion->user_id) {
1066
    $ok = true;
1067
    } else {
1068
    $category_ids_with_edition = [];
1069
 
1070
    $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
1071
    $records = $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);
1072
 
1073
    foreach($records as $record)
1074
    {
1075
    array_push($category_ids_with_edition, $record->user_id);
1076
    }
1077
 
1078
 
1079
 
1080
    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
1081
    $records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
1082
    foreach($records as $record)
1083
    {
1084
    if (in_array($record->category_id, $category_ids_with_edition) && $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_EDITOR || $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR) {
1085
    $ok = true;
1086
    break;
1087
    }
1088
    }
1089
    }
1090
    }
1091
 
1092
 
1093
    if (!$ok) {
1094
    return new JsonModel([
1095
    'success'   => false,
1096
    'data'   => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION'
1097
    ]);
1098
    }
1099
 
1100
    if ($request->isPost()) {
1101
 
1102
    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
1103
    $myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);
1104
 
1105
    $result =  $myCoachQuestionMapper->delete($myCoachQuestion);
1106
    if ($result) {
1107
    $data = [
1108
    'success' => true,
1109
    'data' => 'LABEL_RECORD_DELETED'
1110
    ];
1111
    } else {
1112
 
1113
    $data = [
1114
    'success'   => false,
1115
    'data'      => $myCoachQuestionMapper->getError()
1116
    ];
1117
 
1118
    return new JsonModel($data);
1119
    }
1120
    } else {
1121
    $data = [
1122
    'success' => false,
1123
    'data' => 'ERROR_METHOD_NOT_ALLOWED'
1124
    ];
1125
 
1126
    return new JsonModel($data);
1127
    }
1128
 
1129
    return new JsonModel($data);
1130
    }
1131
 
1132
 
1133
    public function editAction()
1134
    {
1135
    $currentUserPlugin = $this->plugin('currentUserPlugin');
1136
    $currentUser    = $currentUserPlugin->getUser();
1137
 
1138
    $request    = $this->getRequest();
1139
    $id    = $this->params()->fromRoute('id');
1140
 
1141
    $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
1142
    $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
1143
    if (!$myCoachQuestion) {
1144
    return new JsonModel([
1145
    'success'   => false,
1146
    'data'   => 'ERROR_RECORD_NOT_FOUND'
1147
    ]);
1148
    }
1149
 
1150
    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
1151
 
1152
    $ok = false;
1153
    if(!$myCoachQuestion->answers) {
1154
 
1155
    if($currentUser->id == $myCoachQuestion->user_id) {
1156
    $ok = true;
1157
    } else {
1158
    $category_ids_with_edition = [];
1159
 
1160
    $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
1161
    $records = $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);
1162
 
1163
    foreach($records as $record)
1164
    {
1165
    array_push($category_ids_with_edition, $record->user_id);
1166
    }
1167
 
1168
 
1169
    $records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
1170
    foreach($records as $record)
1171
    {
1172
    if (in_array($record->category_id, $category_ids_with_edition) && $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_EDITOR || $myCoachCategoryUser->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR) {
1173
    $ok = true;
1174
    break;
1175
    }
1176
    }
1177
    }
1178
    }
1179
 
1180
 
1181
    if (!$ok) {
1182
    return new JsonModel([
1183
    'success'   => false,
1184
    'data'   => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION'
1185
    ]);
1186
    }
1187
 
1188
    if (!$ok) {
1189
    return new JsonModel([
1190
    'success'   => false,
1191
    'data'   => 'ERROR_KNOWLEDGE_AREA_YOU_DO_NOT_HAVE_PERMISSION'
1192
    ]);
1193
    }
1194
 
1195
    if ($request->isGet()) {
1196
 
1197
 
1198
    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
1199
 
1200
 
1201
 
1202
    $category_ids = [];
1203
 
1204
 
1205
 
1206
    $records = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
1207
    foreach($records as $record)
1208
    {
1209
    $myCoachCategory = $myCoachCategoryMapper->fetchOne($record->category_id);
1210
    if($myCoachCategory) {
1211
    array_push($category_ids,$myCoachCategory->uuid);
1212
    }
1213
    }
1214
 
1215
 
1216
 
1217
    $data = [
1218
    'success' => true,
1219
    'data' => [
1220
    'category_id' => $category_ids,
1221
    'title' => $myCoachQuestion->title,
1222
    'description' => $myCoachQuestion->description,
1223
    ]
1224
    ];
1225
 
1226
    return new JsonModel($data);
1227
    } else if ($request->isPost()) {
1228
    $category_with_edition_ids = [];
1229
    $category_ids = [];
1230
 
1231
 
1232
    $categories = [];
1233
 
1234
 
1235
    $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
1236
    $records =  $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);
1237
    foreach ($records as $record) {
1238
    if ($record->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR || $record->role == MyCoachCategoryUser::ROLE_USER) {
1239
 
1240
    array_push($category_with_edition_ids, $record->category_id);
1241
    }
1242
 
1243
    array_push($category_ids, $record->category_id);
1244
    }
1245
 
1246
    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
1247
 
1248
    if ($category_ids) {
1249
    $records =  $myCoachCategoryMapper->fetchAllByIds($category_ids);
1250
    foreach ($records as $record) {
1251
    if ($record->status == MyCoachCategory::STATUS_ACTIVE) {
1252
 
1253
    $categories[$record->id] = [
1254
    'uuid' => $record->uuid,
1255
    'name' => $record->name,
1256
    ];
1257
    }
1258
    }
1259
    }
1260
 
1261
 
1262
 
1263
    $categories = array_values($categories);
1264
    usort($categories, function ($a, $b) {
1265
    return $a['name'] <=> $b['name'];
1266
    });
1267
 
1268
    $categories_question_available = [];
1269
    foreach($categories as $cartegory)
1270
    {
1271
    $categories_question_available[ $cartegory['uuid'] ] = $cartegory['name'];
1272
    }
1273
 
1274
    $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
1275
    $form = new MyCoachQuestionForm($categories_question_available);
1276
    $form->setData($dataPost);
1277
 
1278
    if ($form->isValid()) {
1279
    $dataPost = (array) $form->getData();
1280
 
1281
 
1282
 
1283
    $myCoachQuestion->title = $dataPost['title'];
1284
    $myCoachQuestion->description = $dataPost['description'];
1285
 
1286
 
1287
    if ($myCoachQuestionMapper->update($myCoachQuestion)) {
1288
 
1289
 
1290
    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
1291
 
1292
    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
1293
    $myCoachQuestionCategoryMapper->deleteAllByQuestionId($myCoachQuestion->id);
1294
 
1295
    $category_ids = $dataPost['category_id'];
1296
    foreach($category_ids as $category_id)
1297
    {
1298
    $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_id);
1299
    if($myCoachCategory) {
1300
    $myCoachQuestionCategory = new MyCoachQuestionCategory();
1301
    $myCoachQuestionCategory->category_id = $myCoachCategory->id;
1302
    $myCoachQuestionCategory->question_id = $myCoachQuestion->id;
1303
 
1304
    $myCoachQuestionCategoryMapper->insert($myCoachQuestionCategory);
1305
    }
1306
    }
1307
 
1308
 
1309
    $this->logger->info('Se edito la pregunta ' . $myCoachQuestion->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1310
 
1311
    $data = [
1312
    'success'   => true,
1313
    'data'   => 'LABEL_RECORD_UPDATED'
1314
    ];
1315
    } else {
1316
    $data = [
1317
    'success'   => false,
1318
    'data'      => $myCoachQuestionMapper->getError()
1319
    ];
1320
    }
1321
 
1322
    return new JsonModel($data);
1323
    } else {
1324
    $messages = [];
1325
    $form_messages = (array) $form->getMessages();
1326
    foreach ($form_messages  as $fieldname => $field_messages) {
1327
 
1328
    $messages[$fieldname] = array_values($field_messages);
1329
    }
1330
 
1331
    return new JsonModel([
1332
    'success'   => false,
1333
    'data'   => $messages
1334
    ]);
1335
    }
1336
    } else {
1337
    $data = [
1338
    'success' => false,
1339
    'data' => 'ERROR_METHOD_NOT_ALLOWED'
1340
    ];
1341
 
1342
    return new JsonModel($data);
1343
    }
1344
 
1345
    return new JsonModel($data);
1346
    }
1347
 
1348
 
1349
    public function viewAction()
1350
    {
1351
    $currentUserPlugin = $this->plugin('currentUserPlugin');
1352
    $currentUser = $currentUserPlugin->getUser();
1353
 
1354
    $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1355
    $currentNetwork = $currentNetworkPlugin->getNetwork();
1356
 
1357
    $request    = $this->getRequest();
1358
    $id    = $this->params()->fromRoute('id');
1359
 
1360
    $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
1361
    $myCoachQuestion = $myCoachQuestionMapper->fetchOneByUuid($id);
1362
    if (!$myCoachQuestion) {
1363
    return new JsonModel([
1364
    'success'   => false,
1365
    'data'   => 'ERROR_RECORD_NOT_FOUND'
1366
    ]);
1367
    }
1368
 
1369
 
1370
    $request = $this->getRequest();
1371
    if ($request->isGet()) {
1372
 
1373
 
1374
 
1375
    $category_with_edition_ids = [];
1376
    $category_ids = [];
1377
    $categories = [];
1378
 
1379
 
1380
    $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
1381
    $records =  $myCoachCategoryUserMapper->fetchAllByUserId($currentUser->id);
1382
    foreach ($records as $record) {
1383
    if ($record->role == MyCoachCategoryUser::ROLE_ADMINISTRATOR || $record->role == MyCoachCategoryUser::ROLE_USER) {
1384
 
1385
    array_push($category_with_edition_ids, $record->category_id);
1386
    }
1387
 
1388
    array_push($category_ids, $record->category_id);
1389
    }
1390
 
1391
    $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
1392
 
1393
 
1394
 
1395
    if ($category_ids) {
1396
    $records =  $myCoachCategoryMapper->fetchAllByIds($category_ids);
1397
    foreach ($records as $record) {
1398
    $categories[$record->id] = [
1399
    'uuid' => $record->uuid,
1400
    'name' => $record->name,
1401
    ];
1402
    }
1403
    }
1404
 
1405
    $records =  $myCoachCategoryMapper->fetchAllPublicByNetworkId($currentNetwork->id);
1406
    foreach ($records as $record) {
1407
    if (!isset($categories[$record->id])) {
1408
 
1409
    $categories[$record->id] = [
1410
    'uuid' => $record->uuid,
1411
    'name' => $record->name,
1412
    ];
1413
    }
1414
    }
1415
 
1416
 
1417
 
1418
 
1419
 
1420
    $categories = array_values($categories);
1421
    usort($categories, function ($a, $b) {
1422
    return $a['name'] <=> $b['name'];
1423
    });
1424
 
1425
 
1426
    $access = $myCoachQuestion->user_id == $currentUser->id;
1427
 
1428
    $allowDelete = false;
1429
    $allowAnswer = false;
1430
 
1431
    $bags_categories = [];
1432
    $myCoachQuestionCategoryMapper = MyCoachQuestionCategoryMapper::getInstance($this->adapter);
1433
 
1434
    $questionCategories = $myCoachQuestionCategoryMapper->fetchAllByQuestionId($myCoachQuestion->id);
1435
    foreach($questionCategories as $questionCategory)
1436
    {
1437
 
1438
    if(in_array($questionCategory->category_id, $categories)) {
1439
    $access = true;
1440
    }
1441
 
1442
 
1443
    if(in_array($questionCategory->category_id, $category_with_edition_ids)) {
1444
 
1445
    $allowDelete = true;
1446
    $allowAnswer = true;
1447
    }
1448
 
1449
    if (!isset($categories[$questionCategory->category_id])) {
1450
    $category = $myCoachCategoryMapper->fetchOne($questionCategory->category_id);
1451
    if ($category) {
1452
    $categories[$category->id] = [
1453
    'uuid' =>  $category->uuid,
1454
    'name' =>  $category->name,
1455
    ];
1456
    }
1457
    }
1458
 
1459
    array_push($bags_categories,['category' => $categories[ $questionCategory->category_id ]['name'] ]);
1460
    }
1461
 
1462
    $users = [];
1463
    $userMapper = UserMapper::getInstance($this->adapter);
1464
    if(isset($users[$myCoachQuestion->user_id])) {
1465
    $user = $users[$myCoachQuestion->user_id];
1466
    } else {
1467
    $user = $userMapper->fetchOne( $myCoachQuestion->user_id );
1468
    $users[ $myCoachQuestion->user_id ] = $user;
1469
    }
1470
 
1471
 
1472
 
1473
    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1474
    $added_on = $dt->format('d/m/Y H:i a');
1475
 
1476
    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);
1477
    $updated_on = $dt->format('d/m/Y H:i a');
1478
 
1479
 
1480
 
1481
    $data = [
1482
    'user_name' => trim($user->first_name . ' ' . $user->last_name),
1483
    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
1484
    'title' => $myCoachQuestion->title,
1485
    'description' => $myCoachQuestion->description,
1486
    'categories' => $bags_categories,
1487
    'views' => $myCoachQuestion->views,
1488
    'answers' => $myCoachQuestion->answers,
1489
    'reactions' => $myCoachQuestion->reactions,
1490
    'added_on' => $added_on,
1491
    'updated_on' => $updated_on,
1492
    'answers' => [],
1493
    ];
1494
 
1495
 
1496
 
1497
    if($allowDelete || $myCoachQuestion->zuser_id == $currentUser->id) {
1498
    $data['link_delete'] = $this->url()->fromRoute('my-coach/questions/delete', ['id' => $myCoachQuestion->uuid]);
1499
    } else {
1500
    $data['ink_delete'] = '';
1501
    }
1502
 
1503
 
1504
    if ($allowAnswer) {
1505
    $data['link_answers'] = $this->url()->fromRoute('my-coach/questions/answers', ['id' => $myCoachQuestion->uuid]);
1506
    } else {
1507
    $data['link_answers'] = '';
1508
    }
1509
 
1510
    $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1511
    $records =  $myCoachAnswerMapper->fetchAllByQuestionId($myCoachQuestion->id);
1512
    foreach($records as $record)
1513
    {
1514
 
1515
    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1516
    $added_on = $dt->format('d/m/Y H:i a');
1517
 
1518
    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->updated_on);
1519
    $updated_on = $dt->format('d/m/Y H:i a');
1520
 
1521
    if(isset($users[$record->user_id])) {
1522
    $user = $users[$record->user_id];
1523
    } else {
1524
    $user = $userMapper->fetchOne( $record->user_id );
1525
    $users[ $record->user_id ] = $user;
1526
    }
1527
 
1528
    array_push($data['answers'], [
1529
    'user_name' => trim($user->first_name . ' ' . $user->last_name),
1530
    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
1531
    'text' => $record->text,
1532
    'added_on' => $added_on,
1533
    'updated_on' => $updated_on,
1534
    'link_delete' => $allowAnswer ? $this->url()->fromRoute('my-coach/questions/answer/delete', ['code' => $myCoachQuestion->uuid, 'answer' => $record->uuid]) : '',
1535
    ]);
1536
 
1537
 
1538
 
1539
    }
1540
 
1541
 
1542
 
1543
 
1544
    return new JsonModel([
1545
    'success' => true,
1546
    'data' => $data
1547
    ]);
1548
 
1549
 
1550
    } else {
1551
    return new JsonModel([
1552
    'success' => false,
1553
    'data' => 'ERROR_METHOD_NOT_ALLOWED'
1554
    ]);
1555
    }
1556
 
1557
 
1558
    return new JsonModel($data);
1559
    }
1560
    */
1561
 
1562
 
1563
    public function addCommentAction()
1564
    {
1565
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1566
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1567
 
1568
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
1569
        $currentUser        = $currentUserPlugin->getUser();
1570
 
1571
        $request    = $this->getRequest();
1572
        $id    = $this->params()->fromRoute('id');
1573
 
1574
 
1575
        $request = $this->getRequest();
1576
        if ($request->isPost()) {
1577
 
1578
            $message_error = '';
1579
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1580
            if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {
1581
                return new JsonModel([
1582
                    'success'   => false,
1583
                    'data'   => $message_error
1584
                ]);
1585
            }
1586
 
1587
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1588
            $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);
1589
 
1590
            $dataPost = $request->getPost()->toArray();
1591
            $form = new CommentForm();
1592
            $form->setData($dataPost);
1593
 
1594
            if ($form->isValid()) {
1595
 
1596
 
1597
                $currentUserPlugin = $this->plugin('currentUserPlugin');
1598
                $currentUser = $currentUserPlugin->getUser();
1599
 
1600
                $dataPost = (array) $form->getData();
1601
 
1602
 
1603
 
1604
                $comment = new Comment();
1605
                $comment->network_id = $currentUser->network_id;
1606
                $comment->comment = $dataPost['comment'];
1607
                $comment->user_id = $currentUser->id;
1608
                $comment->my_coach_answer_id = $myCoachAnswer->id;
1609
                $comment->relational = Comment::RELATIONAL_MY_COACH;
1610
 
1611
                $commentMapper = CommentMapper::getInstance($this->adapter);
1612
                if ($commentMapper->insert($comment)) {
1613
                    $now = $commentMapper->getDatebaseNow();
1614
 
1615
                    $response = [
1616
                        'success'           => true,
1617
                        'data'              => [
1618
                            'item'  => $this->renderComment($comment->id, $now),
1619
                            'total_comments_answer' => intval( $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10),
1620
                            'total_comments_question' => intval( $commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),
1621
                        ]
1622
                    ];
1623
 
1624
                    return new JsonModel($response);
1625
                } else {
1626
 
1627
                    $response = [
1628
                        'success'   => false,
1629
                        'data'   => $commentMapper->getError()
1630
                    ];
1631
 
1632
                    return new JsonModel($response);
1633
                }
1634
            } else {
1635
                $message = '';;
1636
                $form_messages = (array) $form->getMessages();
1637
                foreach ($form_messages  as $fieldname => $field_messages) {
1638
                    foreach ($field_messages as $key => $value) {
1639
                        $message = $value;
1640
                    }
1641
                }
1642
 
1643
                $response = [
1644
                    'success'   => false,
1645
                    'data'   => $message
1646
                ];
1647
 
1648
                return new JsonModel($response);
1649
            }
1650
        } else {
1651
            $response = [
1652
                'success' => false,
1653
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1654
            ];
1655
 
1656
            return new JsonModel($response);
1657
        }
1658
    }
1659
 
1660
 
1661
 
1662
    public function deleteCommentAction()
1663
    {
1664
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1665
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1666
 
1667
        $currentUserPlugin      = $this->plugin('currentUserPlugin');
1668
        $currentUser            = $currentUserPlugin->getUser();
1669
 
1670
        $request                = $this->getRequest();
1671
        $id                     = $this->params()->fromRoute('id');
1672
        $comment                = $this->params()->fromRoute('comment');
1673
 
1674
 
1675
        $request = $this->getRequest();
1676
        if ($request->isPost()) {
1677
 
1678
 
1679
 
1680
 
1681
            $message_error = '';
1682
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1683
            if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {
1684
                return new JsonModel([
1685
                    'success'   => false,
1686
                    'data'   => $message_error
1687
                ]);
1688
            }
1689
 
1690
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1691
            $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);
1692
 
1693
            $commentMapper = CommentMapper::getInstance($this->adapter);
1694
            $comment = $commentMapper->fetchOneByUuid($comment);
1695
 
1696
 
1697
            if ($comment && $comment->my_coach_answer_id == $myCoachAnswer->id && $comment->user_id == $currentUser->id) {
1698
 
1699
                $comment->status = Comment::STATUS_DELETED;
1700
 
1701
                if ($commentMapper->update($comment)) {
6388 efrain 1702
 
6521 efrain 1703
                    $response = [
1704
                        'success' => true,
1705
                        'data' => [
1706
                            'message' => 'LABEL_COMMENT_WAS_DELETED',
1707
                            'total_comments_answer' => intval( $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10),
1708
                            'total_comments_question' => intval( $commentMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10),
1709
                        ]
1710
                    ];
1711
                } else {
1712
                    $response = [
1713
                        'success' => false,
1714
                        'data' => $commentMapper->getError()
1715
                    ];
1716
 
1717
                }
1718
            } else {
1719
                $response = [
1720
                    'success' => false,
1721
                    'data' => 'ERROR_COMMENT_NOT_FOUND'
1722
                ];
1723
            }
1724
        } else {
1725
            $response = [
1726
                'success' => false,
1727
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1728
            ];
1729
        }
1730
 
1731
        return new JsonModel($response);
1732
    }
1733
 
1734
    public function reactionsAction()
1735
    {
1736
        return new JsonModel([
1737
            'success' => false,
1738
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1739
        ]);
6388 efrain 1740
 
6521 efrain 1741
    }
1742
 
1743
 
1744
 
1745
    public function saveReactionAction()
1746
    {
1747
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1748
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1749
 
1750
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
1751
        $currentUser        = $currentUserPlugin->getUser();
1752
 
1753
        $request    = $this->getRequest();
1754
 
1755
        $id = $this->params()->fromRoute('id');
1756
        $reaction  = $this->params()->fromPost('reaction');
1757
 
1758
        $request = $this->getRequest();
1759
        if ($request->isPost()) {
1760
 
1761
 
1762
            $message_error = '';
1763
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1764
            if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {
1765
                return new JsonModel([
1766
                    'success'   => false,
1767
                    'data'   => $message_error
6388 efrain 1768
                ]);
6521 efrain 1769
            }
1770
 
1771
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1772
            $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);
1773
 
1774
            $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
1775
            $contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $currentUser->id);
1776
 
1777
            if ($contentReaction) {
1778
                $contentReaction->reaction = $reaction;
1779
 
1780
                $result = $contentReactionMapper->update($contentReaction);
1781
            } else {
1782
                $contentReaction = new ContentReaction();
1783
                $contentReaction->user_id = $currentUser->id;
1784
                $contentReaction->my_coach_answer_id = $myCoachAnswer->id;
1785
                $contentReaction->relational = ContentReaction::RELATIONAL_MY_COACH;
1786
                $contentReaction->reaction = $reaction;
1787
 
1788
                $result = $contentReactionMapper->insert($contentReaction);
1789
            }
1790
 
1791
 
1792
 
1793
            if ($result) {
1794
 
1795
                $total_reactions_question = intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10);
1796
                $total_reactions_answer = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);
1797
                $response = [
1798
                    'success' => true,
1799
                    'data' => [
1800
                        'reaction' => $reaction,
1801
                        'total_reactions_question' => $total_reactions_question,
1802
                        'total_reactions_answer' => $total_reactions_answer
1803
                    ]
1804
                ];
1805
            } else {
1806
                $response = [
1807
                    'success' => false,
1808
                    'data' => $contentReactionMapper->getError()
1809
                ];
1810
            }
1811
            return new JsonModel($response);
1812
        }
1813
 
1814
        $response = [
1815
            'success' => false,
1816
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1817
        ];
1818
        return new JsonModel($response);
1819
    }
1820
 
1821
    public function deleteReactionAction()
1822
    {
1823
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1824
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1825
 
1826
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
1827
        $currentUser        = $currentUserPlugin->getUser();
1828
 
1829
        $request    = $this->getRequest();
1830
 
1831
        $id = $this->params()->fromRoute('id');
1832
 
1833
        $request = $this->getRequest();
1834
        if ($request->isPost()) {
1835
 
1836
            $message_error = '';
1837
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1838
            if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {
1839
                return new JsonModel([
1840
                    'success'   => false,
1841
                    'data'   => $message_error
1842
                ]);
1843
            }
1844
 
1845
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1846
            $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);
1847
 
1848
 
1849
            $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
1850
            $contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $currentUser->id);
1851
 
1852
            if ($contentReaction) {
1853
                if ($contentReactionMapper->deleteByByMyCoachAnswerId($myCoachAnswer->id, $currentUser->id)) {
1854
                    $total_reactions_question = intval($contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id), 10);
1855
                    $total_reactions_answer = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);
1856
 
1857
                    $response = [
1858
                        'success' => true,
1859
                        'data' => [
1860
                            'total_reactions_question' => $total_reactions_question,
1861
                            'total_reactions_answer' => $total_reactions_answer
1862
                        ]
1863
                    ];
1864
                } else {
1865
                    $response = [
1866
                        'success' => false,
1867
                        'data' => $contentReactionMapper->getError()
1868
                    ];
1869
                }
1870
            } else {
1871
                $total_reactions_question = $contentReactionMapper->fetchCountByMyCoachQuestionId($myCoachAnswer->question_id);
1872
                $total_reactions_answer = $contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id);
1873
 
1874
                $response = [
1875
                    'success' => true,
1876
                    'data' => [
1877
                        'total_reactions_question' => $total_reactions_question,
1878
                        'total_reactions_answer' => $total_reactions_answer
1879
                    ]
1880
                ];
1881
 
1882
 
1883
            }
1884
 
1885
 
1886
 
1887
            return new JsonModel($response);
1888
        }
1889
 
1890
        $response = [
1891
            'success' => false,
1892
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1893
        ];
1894
        return new JsonModel($response);
1895
    }
1896
 
1897
    public function commentsAction()
1898
    {
1899
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1900
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1901
 
1902
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
1903
        $currentUser        = $currentUserPlugin->getUser();
1904
 
1905
 
1906
        $id = $this->params()->fromRoute('id');
1907
 
1908
        $request = $this->getRequest();
1909
        if ($request->isGet()) {
1910
            $message_error = '';
1911
            $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1912
            if(!$myCoachAccessControl->hasAccessViewAnswer($currentUser->id, $id, $currentNetwork->id, $message_error)) {
1913
                return new JsonModel([
1914
                    'success'   => false,
1915
                    'data'   => $message_error
1916
                ]);
1917
            }
1918
 
1919
            $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1920
            $myCoachAnswer = $myCoachAnswerMapper->fetchOneByUuid($id);
1921
            $now = $myCoachAnswerMapper->getDatebaseNow();
1922
 
1923
            $commentMapper = CommentMapper::getInstance($this->adapter);
1924
            $records = $commentMapper->fetchAllPublishedByMyCoachAnswerId($myCoachAnswer->id);
1925
 
1926
            $comments = [];
1927
            foreach ($records as $record) {
1928
                $comment = $this->renderComment($record->id, $now);
1929
                array_push($comments, $comment);
1930
            }
1931
 
1932
            $response = [
1933
                'success' => true,
1934
                'data' => $comments
1935
            ];
1936
 
1937
            return new JsonModel($response);
5050 efrain 1938
        } else {
6521 efrain 1939
 
1940
 
1941
 
1942
            $response = [
5050 efrain 1943
                'success' => false,
1944
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
6521 efrain 1945
            ];
1946
 
1947
 
1948
            return new JsonModel($response);
5050 efrain 1949
        }
1950
    }
6521 efrain 1951
 
1952
 
1953
    private function renderAnswer($answer_id, $current_user_id, $now)
1954
    {
6547 efrain 1955
        $currentNetworkPlugin  = $this->plugin('currentNetworkPlugin');
1956
        $currentNetwork        = $currentNetworkPlugin->getNetwork();
1957
        $message_error = '';
6521 efrain 1958
 
1959
        $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
1960
        $myCoachAnswer =  $myCoachAnswerMapper->fetchOne($answer_id);
6547 efrain 1961
 
1962
        $myCoachQuestionMapper = MyCoachQuestionMapper::getInstance($this->adapter);
1963
        $myCoachQuestion = $myCoachQuestionMapper->fetchOne($myCoachAnswer->question_id);
6521 efrain 1964
 
1965
 
6547 efrain 1966
        $myCoachAccessControl = MyCoachAccessControl::getInstance($this->adapter);
1967
        $hasAccessEditOrDeleteAnswer = $myCoachAccessControl->hasAccessEditOrDeleteAnswer($current_user_id, $answer_id, $currentNetwork->id, $message_error);
1968
        if($hasAccessEditOrDeleteAnswer) {
1969
 
1970
 
1971
            $link_edit = $this->url()->fromRoute('my-coach/questions/answers/edit',['id' => $myCoachQuestion->uuid, 'answer' => $myCoachAnswer->uuid]);
1972
            $link_delete = $this->url()->fromRoute('my-coach/questions/answers/delete',['id' => $myCoachQuestion->uuid, 'answer' => $myCoachAnswer->uuid]);
1973
 
1974
        } else {
1975
            $link_edit = '';
1976
            $link_delete = '';
1977
        }
1978
 
6521 efrain 1979
        $userMapper = UserMapper::getInstance($this->adapter);
1980
        $user = $userMapper->fetchOne($myCoachAnswer->user_id);
1981
 
1982
        $contentReactionMapper = ContentReactionMapper::getInstance($this->adapter);
1983
        $contentReaction = $contentReactionMapper->fetchOneByMyCoachAnswerIdAndUserId($myCoachAnswer->id, $current_user_id);
6547 efrain 1984
        $total_reactions = intval($contentReactionMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id), 10);
6521 efrain 1985
 
1986
 
1987
 
1988
 
1989
        $comments = [];
1990
        $commentMapper = CommentMapper::getInstance($this->adapter);
1991
        $total_comments = $commentMapper->fetchCountByMyCoachAnswerId($myCoachAnswer->id);
1992
        $records = $commentMapper->fetchAllPublishedByMyCoachAnswerId($myCoachAnswer->id);
1993
        foreach($records as $record)
1994
        {
1995
            $comments[] = $this->renderComment($record->id, $now);
1996
        }
1997
 
1998
 
1999
        $item = [
2000
            'unique' => uniqid(),
2001
            'uuid' => $myCoachAnswer->uuid,
6547 efrain 2002
            'question_uuid' => $myCoachQuestion->uuid,
6521 efrain 2003
            'user_image' => $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]),
2004
            'user_url' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
2005
            'user_name' => $user->first_name . ' ' . $user->last_name,
2006
            'time_elapsed' => Functions::timeAgo($myCoachAnswer->added_on, $now),
2007
            'text' => $myCoachAnswer->text,
2008
            'reaction' => $contentReaction ? $contentReaction->reaction : '',
2009
            'total_comments' => $total_comments,
2010
            'total_reactions' => $total_reactions,
2011
            'comments' => $comments,
6547 efrain 2012
            'link_edit' => $link_edit,
2013
            'link_delete' => $link_delete,
6521 efrain 2014
            'link_reaction_delete' => $this->url()->fromRoute('my-coach/questions/reaction/delete', ['id' => $myCoachAnswer->uuid]),
2015
            'link_save_reaction' => $this->url()->fromRoute('my-coach/questions/reaction/save', ['id' => $myCoachAnswer->uuid]),
2016
            'link_add_comment' => $this->url()->fromRoute('my-coach/questions/comments/add', ['id' => $myCoachAnswer->uuid]),
2017
        ];
6388 efrain 2018
 
6521 efrain 2019
        return $item;
2020
 
2021
 
2022
 
2023
    }
2024
 
2025
 
2026
 
2027
    private function renderComment($comment_id, $now)
2028
    {
2029
        $item = [];
2030
 
2031
        $commentMapper = CommentMapper::getInstance($this->adapter);
2032
        $record = $commentMapper->fetchOne($comment_id);
2033
 
2034
        $myCoachAnswerMapper = MyCoachAnswerMapper::getInstance($this->adapter);
2035
        $myCoachAnswer = $myCoachAnswerMapper->fetchOne($record->my_coach_answer_id);
2036
 
2037
 
2038
        if ($record) {
2039
            $userMapper = UserMapper::getInstance($this->adapter);
2040
 
2041
            $user = $userMapper->fetchOne($record->user_id);
2042
 
2043
            $item['unique'] = uniqid();
2044
            $item['answer_uuid'] = $myCoachAnswer->uuid;
2045
            $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
2046
            $item['user_url'] = $this->url()->fromRoute('profile/view', ['id' => $user->uuid]);
2047
            $item['user_name'] = $user->first_name . ' ' . $user->last_name;
2048
            $item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
2049
            $item['comment'] = $record->comment;
2050
            $item['link_delete'] = $this->url()->fromRoute('my-coach/questions/comments/delete', ['id' => $myCoachAnswer->uuid, 'comment' => $record->uuid]);
2051
        }
2052
        return $item;
2053
    }
2054
 
5050 efrain 2055
}