Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17259 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
1 www 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
 
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
15
use LeadersLinked\Library\Image;
16
 
17
 
18
use LeadersLinked\Mapper\CompanyMapper;
17002 efrain 19
use LeadersLinked\Mapper\MicrolearningTopicMapper;
20
use LeadersLinked\Mapper\MicrolearningCapsuleMapper;
21
use LeadersLinked\Mapper\MicrolearningSlideMapper;
22
use LeadersLinked\Model\MicrolearningSlide;
1 www 23
use LeadersLinked\Model\VideoConvert;
24
use LeadersLinked\Mapper\VideoConvertMapper;
17133 stevensc 25
use LeadersLinked\Form\Microlearning\SlideForm;
17134 stevensc 26
use LeadersLinked\Form\Microlearning\SlideTextAddForm;
27
use LeadersLinked\Form\Microlearning\SlideTextEditForm;
28
use LeadersLinked\Form\Microlearning\SlideImageAddForm;
29
use LeadersLinked\Form\Microlearning\SlideImageEditForm;
30
use LeadersLinked\Form\Microlearning\SlideVideoAddForm;
31
use LeadersLinked\Form\Microlearning\SlideDocumentAddForm;
32
use LeadersLinked\Form\Microlearning\SlideDocumentEditForm;
33
use LeadersLinked\Form\Microlearning\SlideAudioAddForm;
34
use LeadersLinked\Form\Microlearning\SlideAudioEditForm;
35
use LeadersLinked\Form\Microlearning\SlideQuizzAddForm;
36
use LeadersLinked\Form\Microlearning\SlideQuizzEditForm;
37
use LeadersLinked\Form\Microlearning\SlideVideoEditForm;
17002 efrain 38
use LeadersLinked\Library\Storage;
1 www 39
 
40
 
41
class MicrolearningSlideController extends AbstractActionController
42
{
43
    /**
44
     *
16769 efrain 45
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 46
     */
47
    private $adapter;
48
 
49
    /**
50
     *
16769 efrain 51
     * @var \LeadersLinked\Cache\CacheInterface
1 www 52
     */
16769 efrain 53
    private $cache;
54
 
55
 
56
    /**
57
     *
58
     * @var \Laminas\Log\LoggerInterface
59
     */
1 www 60
    private $logger;
61
 
62
    /**
63
     *
64
     * @var array
65
     */
66
    private $config;
67
 
16769 efrain 68
 
1 www 69
    /**
70
     *
16769 efrain 71
     * @var \Laminas\Mvc\I18n\Translator
72
     */
73
    private $translator;
74
 
75
 
76
    /**
77
     *
78
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
79
     * @param \LeadersLinked\Cache\CacheInterface $cache
80
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 81
     * @param array $config
16769 efrain 82
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 83
     */
16769 efrain 84
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 85
    {
16769 efrain 86
        $this->adapter      = $adapter;
87
        $this->cache        = $cache;
88
        $this->logger       = $logger;
89
        $this->config       = $config;
90
        $this->translator   = $translator;
1 www 91
    }
92
 
93
    /**
94
     *
95
     * Generación del listado de perfiles
96
     * {@inheritDoc}
97
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
98
     */
99
    public function indexAction()
100
    {
101
        $currentUserPlugin = $this->plugin('currentUserPlugin');
102
        $currentUser = $currentUserPlugin->getUser();
103
        $currentCompany = $currentUserPlugin->getCompany();
104
 
105
        $request = $this->getRequest();
106
        if($request->isGet()) {
107
 
108
 
109
            $headers  = $request->getHeaders();
110
 
111
            $isJson = false;
112
            if($headers->has('Accept')) {
113
                $accept = $headers->get('Accept');
114
 
115
                $prioritized = $accept->getPrioritized();
116
 
117
                foreach($prioritized as $key => $value) {
118
                    $raw = trim($value->getRaw());
119
 
120
                    if(!$isJson) {
121
                        $isJson = strpos($raw, 'json');
122
                    }
123
 
124
                }
125
            }
126
 
127
            if($isJson) {
17136 stevensc 128
                $capsule_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));
17145 stevensc 129
 
130
                $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
131
                $capsules = $capsuleMapper->fetchAllByCompanyId($currentCompany->id);
1 www 132
 
133
                $data = [
134
                    'link_add' => '',
135
                    'items' => [] ,
136
                    'total' => 0,
17145 stevensc 137
                    'capsules' => $capsules
1 www 138
                ];
17145 stevensc 139
 
140
                if(!$capsule_uuid) {
141
                    return new JsonModel([
142
                        'success' => true,
143
                        'data' => $data
144
                    ]);
145
                }
1 www 146
 
17002 efrain 147
                $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 www 148
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
17136 stevensc 149
 
1 www 150
                if(!$capsule) {
151
                    return new JsonModel([
17138 stevensc 152
                        'success' => false,
1 www 153
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
154
                    ]);
155
                }
156
 
17002 efrain 157
                if($capsule->company_id != $currentCompany->id) {
1 www 158
                    return new JsonModel([
17138 stevensc 159
                        'success' => false,
1 www 160
                        'data' => 'ERROR_UNAUTHORIZED'
161
                    ]);
162
                }
163
 
164
                $search = $this->params()->fromQuery('search', []);
16766 efrain 165
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
1 www 166
 
167
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
7065 nelberth 168
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
1 www 169
                $order =  $this->params()->fromQuery('order', []);
170
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 171
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
1 www 172
 
173
                $fields =  ['name'];
174
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
175
 
176
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
177
                    $order_direction = 'ASC';
178
                }
179
 
180
 
181
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
182
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/slides/add');
183
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/slides/edit');
184
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'microlearning/content/slides/delete');
185
 
17002 efrain 186
                $slideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
187
                $paginator = $slideMapper->fetchAllDataTableByCompanyIdAndCapsuleId($currentCompany->id, $capsule->id,  $search, $page, $records_x_page, $order_field, $order_direction);
1 www 188
 
189
                $records = $paginator->getCurrentItems();
190
 
17018 efrain 191
                $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 192
                $path = $storage->getPathMicrolearningSlide();
1 www 193
 
17138 stevensc 194
                $items = [];
17002 efrain 195
 
1 www 196
                foreach($records as $record)
197
                {
198
 
199
                    $params = [
200
                        'capsule_uuid'  => $capsule->uuid,
17138 stevensc 201
                        'slide_uuid'    => $record->uuid,
1 www 202
                    ];
203
 
204
 
205
                    $item = [
206
 
207
                        'name' => $record->name,
208
                        'details' => [
209
                            'type' => '',
210
                         ],
211
                         'media' => [
212
                            'image' => '',
213
                            'audio' => '',
214
                            'video' => '',
215
                            'document' => '',
216
                            'text'
217
                        ],
218
 
219
                        'actions' => [
220
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('microlearning/content/slides/edit', $params)  : '',
221
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('microlearning/content/slides/delete', $params )  : '',
222
                         ],
223
 
224
                    ];
225
 
226
 
227
                    switch($record->type)
228
                    {
17002 efrain 229
                        case MicrolearningSlide::TYPE_AUDIO :
1 www 230
 
17002 efrain 231
                            $item['media']['audio'] = $storage->getGenericFile($path, $record->uuid, $record->file );
232
                            $item['media']['image'] = $storage->getGenericImage($path, $record->uuid, $record->background );
1 www 233
                            $item['details']['type'] = 'LABEL_AUDIO';
234
                            break;
235
 
17002 efrain 236
                        case MicrolearningSlide::TYPE_VIDEO :
237
                            $item['media']['video'] = $storage->getGenericFile($path, $record->uuid, $record->file );
238
                            $item['media']['image'] = $storage->getGenericImage($path, $record->uuid, $record->background );
1 www 239
                            $item['details']['type'] = 'LABEL_VIDEO';
240
                            break;
241
 
17002 efrain 242
                        case MicrolearningSlide::TYPE_DOCUMENT :
243
                            $item['media']['document'] =  $storage->getGenericFile($path, $record->uuid, $record->file );
244
                            $item['media']['image'] = $storage->getGenericImage($path, $record->uuid, $record->background );
1 www 245
                            $item['details']['type'] = 'LABEL_DOCUMENT';
246
                            break;
247
 
17002 efrain 248
                        case MicrolearningSlide::TYPE_TEXT :
249
                            $item['media']['image'] = $storage->getGenericImage($path, $record->uuid, $record->background );
1 www 250
                            $item['media']['text'] = $this->url()->fromRoute('microlearning/content/slides/text', $params);
251
                            $item['details']['type'] = 'LABEL_TEXT';
252
                            break;
253
 
17002 efrain 254
                        case MicrolearningSlide::TYPE_QUIZ :
255
                            $item['media']['image'] = $storage->getGenericImage($path, $record->uuid, $record->background );
1 www 256
                            $item['details']['type'] = 'LABEL_QUIZ';
257
                            break;
258
 
17002 efrain 259
                        case MicrolearningSlide::TYPE_IMAGE :
260
                            $item['media']['image'] =  $storage->getGenericImage($path, $record->uuid, $record->file );
1 www 261
                            $item['details']['type'] = 'LABEL_IMAGE';
262
                            break;
263
 
264
                    }
17136 stevensc 265
 
1 www 266
                    array_push($items, $item);
267
                }
268
 
17002 efrain 269
                if($allowAdd  && $capsule) {
270
                    $data['link_add'] = $this->url()->fromRoute('microlearning/content/slides/add', ['capsule_uuid' => $capsule->uuid ]);
1 www 271
                }
272
                $data['items'] = $items;
273
                $data['total'] = $paginator->getTotalItemCount();
274
 
275
                return new JsonModel([
276
                    'success' => true,
277
                    'data' => $data
278
                ]);
279
 
280
            } else {
281
                $image_size = $this->config['leaderslinked.image_sizes.microlearning_image_upload'];
282
 
17002 efrain 283
 
1 www 284
 
17002 efrain 285
                $form = new SlideForm($this->adapter,  $currentCompany->id);
1 www 286
                $formTextAdd = new SlideTextAddForm();
287
                $formTextEdit = new SlideTextEditForm();
288
                $formImageAdd = new SlideImageAddForm();
289
                $formImageEdit = new SlideImageEditForm();
290
                $formVideoAdd = new SlideVideoAddForm();
291
                $formVideoEdit = new SlideVideoEditForm();
292
                $formDocumentAdd = new SlideDocumentAddForm();
293
                $formDocumentEdit = new SlideDocumentEditForm();
294
                $formAudioAdd = new SlideAudioAddForm();
295
                $formAudioEdit = new SlideAudioEditForm();
296
                $formQuizzAdd = new SlideQuizzAddForm($this->adapter, $currentCompany->id);
297
                $formQuizzEdit = new SlideQuizzEditForm($this->adapter, $currentCompany->id);
298
 
299
                $this->layout()->setTemplate('layout/layout-backend.phtml');
300
                $viewModel = new ViewModel();
301
                $viewModel->setTemplate('leaders-linked/microlearning-slides/index.phtml');
302
                $viewModel->setVariables([
303
                    'form' => $form,
304
                    'formTextAdd' => $formTextAdd,
305
                    'formTextEdit' => $formTextEdit,
306
                    'formImageAdd' => $formImageAdd,
307
                    'formImageEdit' => $formImageEdit,
308
                    'formVideoAdd' => $formVideoAdd,
309
                    'formVideoEdit' => $formVideoEdit,
310
                    'formDocumentAdd' => $formDocumentAdd,
311
                    'formDocumentEdit' => $formDocumentEdit,
312
                    'formAudioAdd' => $formAudioAdd,
313
                    'formAudioEdit' => $formAudioEdit,
314
                    'formQuizzAdd' => $formQuizzAdd,
315
                    'formQuizzEdit' => $formQuizzEdit,
316
                    'image_size' => $image_size,
317
 
318
                ]);
319
                return $viewModel ;
320
            }
321
        }
322
 
323
        return new JsonModel([
324
            'success' => false,
325
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
326
        ]);
327
 
328
 
329
 
330
 
331
 
332
 
333
 
334
    }
335
 
336
    public function addAction()
337
    {
338
 
339
        $currentUserPlugin = $this->plugin('currentUserPlugin');
340
        $currentUser = $currentUserPlugin->getUser();
341
        $currentCompany = $currentUserPlugin->getCompany();
342
 
343
        $request    = $this->getRequest();
344
        $capsule_uuid = $this->params()->fromRoute('capsule_uuid');
345
 
346
 
347
 
17002 efrain 348
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 www 349
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
350
        if(!$capsule) {
351
            return new JsonModel([
352
                'success'   => false,
353
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
354
            ]);
355
        }
356
 
17002 efrain 357
        if($capsule->company_id != $currentCompany->id) {
1 www 358
            return new JsonModel([
359
                'success'   => false,
360
                'data'   => 'ERROR_UNAUTHORIZED'
361
            ]);
362
        }
363
 
364
 
365
        if($request->isPost()) {
366
 
367
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
368
 
369
            switch($dataPost['type'])
370
            {
17002 efrain 371
                case MicrolearningSlide::TYPE_AUDIO :
1 www 372
                    $form = new SlideAudioAddForm();
373
                    break;
374
 
17002 efrain 375
                case MicrolearningSlide::TYPE_VIDEO :
1 www 376
                    $form = new SlideVideoAddForm();
377
                    break;
378
 
17002 efrain 379
                case MicrolearningSlide::TYPE_DOCUMENT:
1 www 380
                    $form = new SlideDocumentAddForm();
381
                    break;
382
 
17002 efrain 383
                case MicrolearningSlide::TYPE_IMAGE :
1 www 384
                    $form = new SlideImageAddForm();
385
                    break;
386
 
387
 
17002 efrain 388
                case MicrolearningSlide::TYPE_QUIZ:
1 www 389
                    $form = new SlideQuizzAddForm($this->adapter, $currentCompany->id);
390
                    break;
391
 
392
                default :
393
                    $form = new SlideTextAddForm();
394
                    break;
395
            }
396
 
397
            $form->setData($dataPost);
398
 
399
            if($form->isValid()) {
400
                $dataPost = (array) $form->getData();
401
 
402
                $hydrator = new ObjectPropertyHydrator();
17002 efrain 403
                $slide = new MicrolearningSlide();
1 www 404
                $hydrator->hydrate($dataPost, $slide);
405
 
17002 efrain 406
                $slide->company_id = $capsule->company_id;
1 www 407
                $slide->capsule_id = $capsule->id;
408
                $slide->file = null;
409
                $slide->background = null;
6194 nelberth 410
 
17002 efrain 411
                $slideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
1 www 412
                if($slideMapper->insert($slide)) {
413
                    $slide = $slideMapper->fetchOne($slide->id);
414
 
17002 efrain 415
 
17147 stevensc 416
                    $storage = Storage::getInstance($this->config, $this->adapter);
417
                    $target_path = $storage->getPathMicrolearningSlide();
17002 efrain 418
 
17147 stevensc 419
                    $storage->setFiles($this->getRequest()->getFiles()->toArray());
16943 efrain 420
 
17147 stevensc 421
                    switch($slide->type)
422
                    {
423
 
424
                        case MicrolearningSlide::TYPE_IMAGE:
17317 stevensc 425
                            if (!$storage->setCurrentFilename('file')) {
426
                                return new JsonModel([
427
                                    'success'   => false,
428
                                    'data'      => 'ERROR_UPLOAD_IMAGE'
429
                                ]);
430
                            }
431
 
17147 stevensc 432
                            $target_size = $this->config['leaderslinked.image_sizes.microlearning_image_size'];
433
                            list($target_width, $target_height) = explode('x', $target_size);
434
 
435
                            $source_filename = $storage->getTmpFilename();
436
                            $filename = 'image-' . uniqid() . '.jpg';
437
                            $target_filename = $storage->composePathToFilename(
438
                                Storage::TYPE_MICROLEARNING_SLIDE,
439
                                $slide->uuid,
440
                                $filename
441
                            );
442
 
443
                            if (!$storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
444
                                return new JsonModel([
445
                                    'success'   => false,
446
                                    'data'      => 'ERROR_UPLOAD_IMAGE'
447
                                ]);
448
                            }
449
 
450
                            $slide->file = $filename;
451
 
452
                            if(!$slideMapper->update($slide)) {
453
                                return new JsonModel([
454
                                    'success'   => false,
455
                                    'data'      => 'ERROR_THERE_WAS_AN_ERROR'
456
                                ]);
457
                            }
458
 
459
                        break;
460
 
461
                        case MicrolearningSlide::TYPE_DOCUMENT:
17317 stevensc 462
                            if (!$storage->setCurrentFilename('file')) {
463
                                return new JsonModel([
464
                                    'success'   => false,
465
                                    'data'      => 'ERROR_UPLOAD_IMAGE'
466
                                ]);
467
                            }
468
 
17147 stevensc 469
                            $source_filename = $storage->getTmpFilename();
470
                            $filename = 'document-' . uniqid() . '.pdf';
471
                            $target_filename = $storage->composePathToFilename(
472
                                Storage::TYPE_MICROLEARNING_SLIDE,
473
                                $slide->uuid,
474
                                $filename
475
                            );
476
 
477
                            if($slide->file) {
478
                                if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
479
                                    return new JsonModel([
480
                                        'success'   => false,
481
                                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
482
                                    ]);
16943 efrain 483
                                }
17147 stevensc 484
                            }
485
 
486
                            if(!$storage->putFile($source_filename, $target_filename)) {
487
                                return new JsonModel([
488
                                    'success'   => false,
489
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
490
                                ]);
491
                            }
492
 
493
                            $slide->file = $filename;
494
                            if(!$slideMapper->update($slide)) {
495
                                return new JsonModel([
496
                                    'success'   => false,
497
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
498
                                ]);
499
                            }
500
                        break;
501
 
502
                        case  MicrolearningSlide::TYPE_AUDIO :
17317 stevensc 503
                            if (!$storage->setCurrentFilename('file')) {
504
                                return new JsonModel([
505
                                    'success'   => false,
506
                                    'data'      => 'ERROR_UPLOAD_IMAGE'
507
                                ]);
508
                            }
509
 
17147 stevensc 510
                            $source_filename = $storage->getTmpFilename();
511
                            $filename = 'audio-' . uniqid() . '.mp3';
512
                            $target_filename = $storage->composePathToFilename(
513
                                Storage::TYPE_MICROLEARNING_SLIDE,
514
                                $slide->uuid,
515
                                $filename
516
                            );
517
 
518
 
519
                            if($slide->file) {
520
                                if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
521
                                    return new JsonModel([
522
                                        'success'   => false,
523
                                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
524
                                    ]);
16943 efrain 525
                                }
17147 stevensc 526
                            }
527
 
528
 
529
                            if(!$storage->putFile($source_filename, $target_filename)) {
530
                                return new JsonModel([
531
                                    'success'   => false,
532
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
533
                                ]);
534
                            }
1 www 535
 
17147 stevensc 536
                            $slide->file = $filename;
537
                            if(!$slideMapper->update($slide)) {
538
                                return new JsonModel([
539
                                    'success'   => false,
17149 stevensc 540
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17147 stevensc 541
                                ]);
542
                            }
543
                        break;
544
 
545
                        case MicrolearningSlide::TYPE_VIDEO :
17317 stevensc 546
                            if (!$storage->setCurrentFilename('file')) {
547
                                return new JsonModel([
548
                                    'success'   => false,
549
                                    'data'      => 'ERROR_UPLOAD_IMAGE'
550
                                ]);
551
                            }
552
 
17147 stevensc 553
                            $source_filename = $storage->getTmpFilename();
554
                            $filename = 'video-' . uniqid() . '.mp4';
555
                            $target_filename = $storage->composePathToFilename(
556
                                Storage::TYPE_MICROLEARNING_SLIDE,
557
                                $slide->uuid,
558
                                $filename
559
                            );
560
 
561
 
562
                            if($slide->file) {
563
                                if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
564
                                    return new JsonModel([
565
                                        'success'   => false,
17258 stevensc 566
                                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17147 stevensc 567
                                    ]);
1 www 568
                                }
17147 stevensc 569
                            }
16943 efrain 570
 
17147 stevensc 571
                            if(!$storage->putFile($source_filename, $target_filename)) {
1 www 572
                                return new JsonModel([
573
                                    'success'   => false,
17258 stevensc 574
                                    'data'   =>  'ERROR_UPLOAD_FILE'
1 www 575
                                ]);
576
                            }
17147 stevensc 577
 
578
                            $videoConvert = new VideoConvert();
579
                            $videoConvert->uuid = $slide->uuid;
580
                            $videoConvert->filename = $filename;
581
                            $videoConvert->type = VideoConvert::TYPE_MICRO_LEARNING_SLIDES;
1 www 582
 
17147 stevensc 583
                            $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
584
 
17257 stevensc 585
                            try {
586
                                $videoConvertMapper->insert($videoConvert);
587
                            } catch (\Exception $e) {
17258 stevensc 588
                                $this->logger->error('Error al insertar el video: ' . $e->getMessage());
17147 stevensc 589
                                return new JsonModel([
590
                                    'success'   => false,
17258 stevensc 591
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17147 stevensc 592
                                ]);
593
                            }
17257 stevensc 594
 
595
                            $slide->file = $filename;
17002 efrain 596
 
17147 stevensc 597
                            if(!$slideMapper->update($slide)) {
17258 stevensc 598
                                $this->logger->error('Error al actualizar el video: ' . $slideMapper->getError());
17147 stevensc 599
                                return new JsonModel([
600
                                    'success'   => false,
17258 stevensc 601
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17147 stevensc 602
                                ]);
1 www 603
                            }
17147 stevensc 604
                        break;
605
                    }
606
 
17148 stevensc 607
                    if($storage->setCurrentFilename('background')) {
608
                        if($slide->background) {
609
                            if(!$storage->deleteFile($target_path, $slide->uuid, $slide->background)) {
610
                                return new JsonModel([
611
                                    'success'   => false,
17258 stevensc 612
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17148 stevensc 613
                                ]);
614
                            }
615
                        }
616
 
617
                        $tmp_filename  = $storage->getTmpFilename();
618
                        $filename = 'background-' .uniqid() . '.png';
619
                        $target_filename = $storage->composePathToFilename(
620
                            Storage::TYPE_MICROLEARNING_SLIDE,
621
                            $slide->uuid,
622
                            $filename
623
                        );
624
 
625
                        list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.microlearning_image_size']);
626
 
627
                        if(!$storage->uploadImageCrop($tmp_filename, $target_filename, $target_width, $target_height)) {
17147 stevensc 628
                            return new JsonModel([
629
                                'success'   => false,
17258 stevensc 630
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17147 stevensc 631
                            ]);
1 www 632
                        }
17148 stevensc 633
 
634
                        $slide->background = $filename;
635
                        if(!$slideMapper->update($slide)) {
636
                            return new JsonModel([
637
                                'success'   => false,
17258 stevensc 638
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
17148 stevensc 639
                            ]);
640
                        }
16943 efrain 641
                    }
17258 stevensc 642
 
1 www 643
                    $this->logger->info('Se agrego la diapositiva ' . $slide->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
644
 
645
                    $data = [
646
                        'success'   => true,
647
                        'data'   => 'LABEL_RECORD_ADDED'
648
                    ];
649
                } else {
650
                    $data = [
651
                        'success'   => false,
17002 efrain 652
                        'data'      => $slideMapper->getError()
1 www 653
                    ];
654
 
655
                }
656
 
657
                return new JsonModel($data);
658
 
659
            } else {
660
                $messages = [];
661
                $form_messages = (array) $form->getMessages();
662
                foreach($form_messages  as $fieldname => $field_messages)
663
                {
664
 
665
                    $messages[$fieldname] = array_values($field_messages);
666
                }
667
 
668
                return new JsonModel([
669
                    'success'   => false,
670
                    'data'   => $messages
671
                ]);
672
            }
673
 
674
        } else {
675
            $data = [
676
                'success' => false,
677
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
678
            ];
679
 
680
            return new JsonModel($data);
681
        }
682
 
683
        return new JsonModel($data);
684
    }
685
 
686
    /**
687
     *
688
     * Borrar un perfil excepto el público
689
     * @return \Laminas\View\Model\JsonModel
690
     */
691
    public function deleteAction()
692
    {
17258 stevensc 693
        try {
694
            $request    = $this->getRequest();
1 www 695
 
17258 stevensc 696
            $currentUserPlugin = $this->plugin('currentUserPlugin');
697
            $currentUser = $currentUserPlugin->getUser();
698
            $currentCompany = $currentUserPlugin->getCompany();
17002 efrain 699
 
17258 stevensc 700
            $capsule_uuid = $this->params()->fromRoute('capsule_uuid');
701
            $slide_uuid = $this->params()->fromRoute('slide_uuid');
702
 
703
            $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
704
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
705
            if(!$capsule) {
706
                return new JsonModel([
707
                    'success'   => false,
708
                    'data'   => 'ERROR_CAPSULE_NOT_FOUND'
709
                ]);
710
            }
711
 
712
            if($capsule->company_id != $currentCompany->id) {
713
                return new JsonModel([
714
                    'success'   => false,
715
                    'data'   => 'ERROR_UNAUTHORIZED'
716
                ]);
717
            }
718
 
719
            $slideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
720
            $slide = $slideMapper->fetchOneByUuid($slide_uuid);
721
            if(!$slide) {
722
                return new JsonModel([
723
                    'success'   => false,
724
                    'data'   => 'ERROR_SLIDE_NOT_FOUND'
725
                ]);
726
            }
727
 
728
            if($slide->capsule_id != $capsule->id) {
729
                return new JsonModel([
730
                    'success'   => false,
731
                    'data'   => 'ERROR_UNAUTHORIZED'
732
                ]);
733
            }
1 www 734
 
17258 stevensc 735
            if(!$request->isPost()) {
736
                return new JsonModel([
737
                    'success'   => false,
738
                    'data'   => 'ERROR_METHOD_NOT_ALLOWED'
739
                ]);
740
            }
1 www 741
 
17258 stevensc 742
            if(!$slideMapper->delete($slide)) {
743
                $this->logger->error('Error al borrar la diapositiva: ' . $slideMapper->getError());
744
                return new JsonModel([
745
                    'success'   => false,
746
                    'data'   => 'ERROR_THERE_WAS_AN_ERROR'
747
                ]);
748
            }
749
 
750
            $this->logger->info('Se borro la diapositiva : ' .  $slide->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
17002 efrain 751
 
17258 stevensc 752
            $storage = Storage::getInstance($this->config, $this->adapter);
753
            $target_path = $storage->getPathMicrolearningSlide();
754
 
755
            if($slide->file) {
756
                if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
757
                    $this->logger->error('Error al borrar el archivo: ' . $slide->file);
758
                    return new JsonModel([
759
                        'success'   => false,
760
                        'data'   => 'ERROR_THERE_WAS_AN_ERROR'
761
                    ]);
1 www 762
                }
763
            }
17258 stevensc 764
 
765
            if($slide->background) {
766
                if(!$storage->deleteFile($target_path, $slide->uuid, $slide->background)) {
767
                    $this->logger->error('Error al borrar el fondo: ' . $slide->background);
768
                    return new JsonModel([
769
                        'success'   => false,
770
                        'data'   => 'ERROR_THERE_WAS_AN_ERROR'
771
                    ]);
772
                }
773
            }
1 www 774
 
775
 
17258 stevensc 776
            return new JsonModel([
777
                'success' => true,
778
                'data' => 'LABEL_RECORD_DELETED'
779
            ]);
780
        } catch (\Exception $e) {
781
            $this->logger->error('Error al borrar la diapositiva: ' . $e->getMessage());
782
            return new JsonModel([
783
                'success'   => false,
784
                'data'   => 'ERROR_THERE_WAS_AN_ERROR'
785
            ]);
1 www 786
        }
787
    }
788
 
789
 
790
    public function editAction()
791
    {
792
        $currentUserPlugin = $this->plugin('currentUserPlugin');
793
        $currentUser = $currentUserPlugin->getUser();
794
        $currentCompany = $currentUserPlugin->getCompany();
795
 
796
        $request    = $this->getRequest();
797
        $capsule_uuid = $this->params()->fromRoute('capsule_uuid');
798
        $slide_uuid   = $this->params()->fromRoute('slide_uuid');
17002 efrain 799
 
800
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 www 801
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
802
        if(!$capsule) {
803
            return new JsonModel([
804
                'success'   => false,
805
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
806
            ]);
807
        }
808
 
17002 efrain 809
        if($capsule->company_id != $currentCompany->id) {
1 www 810
            return new JsonModel([
811
                'success'   => false,
812
                'data'   => 'ERROR_UNAUTHORIZED'
813
            ]);
814
        }
17259 stevensc 815
 
17002 efrain 816
        $slideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
1 www 817
        $slide = $slideMapper->fetchOneByUuid($slide_uuid);
818
        if(!$slide) {
819
            return new JsonModel([
820
                'success'   => false,
821
                'data'   => 'ERROR_SLIDE_NOT_FOUND'
822
            ]);
823
        }
824
 
825
        if($slide->capsule_id != $capsule->id) {
826
            return new JsonModel([
827
                'success'   => false,
828
                'data'   => 'ERROR_UNAUTHORIZED'
829
            ]);
830
        }
831
 
832
        if($request->isGet()) {
17002 efrain 833
 
17018 efrain 834
            $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 835
            $path = $storage->getPathMicrolearningSlide();
836
 
837
 
838
            if($slide->type =='image'){
839
                $data = [
840
                    'success' => true,
841
                    'data' => [
842
                        'name' => $slide->name,
843
                        'type' => $slide->type,
844
                        'description' => $slide->description,
845
                        'order' => $slide->order,
846
                        'quiz_id' => $slide->quiz_id,
847
                        'file'=> $storage->getGenericImage($path, $slide->uuid, $slide->file),
848
                        'background' => ''
849
                    ]
850
                ];
851
            } else {
852
                $data = [
853
                    'success' => true,
854
                    'data' => [
855
                        'name' => $slide->name,
856
                        'type' => $slide->type,
857
                        'description' => $slide->description,
858
                        'order' => $slide->order,
859
                        'quiz_id' => $slide->quiz_id,
860
                        'file'=> $storage->getGenericFile($path, $slide->uuid, $slide->file),
861
                        'background' => $storage->getGenericImage($path, $slide->uuid, $slide->background),
862
                    ]
863
                ];
6647 nelberth 864
            }
1 www 865
 
866
            return new JsonModel($data);
867
        }
868
        else if($request->isPost()) {
869
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
870
 
871
            switch($dataPost['type'])
872
            {
17002 efrain 873
                case MicrolearningSlide::TYPE_AUDIO :
1 www 874
                    $form = new SlideAudioEditForm();
875
                    break;
876
 
17002 efrain 877
                case MicrolearningSlide::TYPE_VIDEO :
1 www 878
                    $form = new SlideVideoEditForm();
879
                    break;
880
 
17002 efrain 881
                case MicrolearningSlide::TYPE_DOCUMENT:
1 www 882
                    $form = new SlideDocumentEditForm();
883
                    break;
884
 
17002 efrain 885
                case MicrolearningSlide::TYPE_IMAGE :
1 www 886
                    $form = new SlideImageEditForm();
887
                    break;
888
 
17002 efrain 889
                case MicrolearningSlide::TYPE_QUIZ:
1 www 890
                    $form = new SlideQuizzEditForm($this->adapter, $currentCompany->id);
891
                    break;
892
 
893
                default :
894
                    $form = new SlideTextEditForm();
895
                    break;
896
 
897
            }
898
            $form->setData($dataPost);
899
 
900
            if($form->isValid()) {
901
                $dataPost = (array) $form->getData();
902
                $hydrator = new ObjectPropertyHydrator();
903
                $hydrator->hydrate($dataPost, $slide);
904
 
905
                $slide->file = null;
906
                $slide->background = null;
907
 
908
                if($slideMapper->update($slide)) {
17259 stevensc 909
                    $slide = $slideMapper->fetchOne($slide->id);
1 www 910
 
17259 stevensc 911
                    $files = $this->getRequest()->getFiles()->toArray();
1 www 912
 
17259 stevensc 913
                    $storage = Storage::getInstance($this->config, $this->adapter);
914
                    $target_path = $storage->getPathMicrolearningSlide();
915
 
916
                    $storage->setFiles($files);
17002 efrain 917
 
17259 stevensc 918
                    if($storage->setCurrentFilename('file')) {
6520 nelberth 919
 
16943 efrain 920
                        switch($slide->type)
921
                        {
7238 nelberth 922
 
17002 efrain 923
                            case MicrolearningSlide::TYPE_IMAGE :
16943 efrain 924
 
925
                                try {
926
                                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.microlearning_image_size']);
927
 
17259 stevensc 928
                                    $tmp_filename  = $storage->getTmpFilename();
16943 efrain 929
                                    $filename =  'slide-' .uniqid() . '.jpg';
17259 stevensc 930
                                    $target_filename = $storage->composePathToFilename(
931
                                        Storage::TYPE_MICROLEARNING_SLIDE,
932
                                        $slide->uuid,
933
                                        $filename
934
                                    );
17002 efrain 935
 
17259 stevensc 936
                                    if($storage->uploadImageCrop($tmp_filename, $target_filename, $target_width, $target_height)) {
937
                                        $slide->file = $filename;
938
                                        if(!$slideMapper->update($slide)) {
939
                                            $this->logger->error('Error al actualizar la diapositiva: ' . $slideMapper->getError());
940
                                            return new JsonModel([
941
                                                'success'   => false,
942
                                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
943
                                            ]);
944
                                        }
945
                                    } else {
946
                                        $this->logger->error('Error al subir la imagen: ' . $storage->getError());
947
                                        return new JsonModel([
948
                                            'success'   => false,
949
                                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
950
                                        ]);
16943 efrain 951
                                    }
952
                                } catch(\Throwable $e) {
17259 stevensc 953
                                    $this->logger->error('Error al subir la imagen: ' . $e->getMessage());
16943 efrain 954
                                    error_log($e->getTraceAsString());
7236 nelberth 955
                                }
1 www 956
 
16943 efrain 957
                                break;
1 www 958
 
16943 efrain 959
 
17259 stevensc 960
                            case MicrolearningSlide::TYPE_DOCUMENT :
16943 efrain 961
                                if($slide->file) {
17259 stevensc 962
                                    if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
16943 efrain 963
                                        return new JsonModel([
964
                                            'success'   => false,
965
                                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
966
                                        ]);
967
                                    }
1 www 968
                                }
969
 
16943 efrain 970
                                try {
17259 stevensc 971
                                    $tmp_filename = $storage->getTmpFilename();
972
                                    $filename = 'document-' . uniqid() . '.pdf';
973
                                    $target_filename = $storage->composePathToFilename(
974
                                        Storage::TYPE_MICROLEARNING_SLIDE,
975
                                        $slide->uuid,
976
                                        $filename
977
                                    );
978
 
16943 efrain 979
 
17259 stevensc 980
                                    if($storage->putFile($tmp_filename, $target_filename)) {
17002 efrain 981
                                        $slide->file = $filename;
17259 stevensc 982
                                        if(!$slideMapper->update($slide)) {
983
                                            $this->logger->error('Error al actualizar la diapositiva: ' . $slideMapper->getError());
984
                                            return new JsonModel([
985
                                                'success'   => false,
986
                                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
987
                                            ]);
988
                                        }
16943 efrain 989
                                    }
990
                                } catch(\Throwable $e) {
17259 stevensc 991
                                    $this->logger->error('Error al subir el documento: ' . $e->getMessage());
16943 efrain 992
                                    error_log($e->getTraceAsString());
993
                                }
1 www 994
 
16943 efrain 995
                                break;
996
 
17002 efrain 997
                            case  MicrolearningSlide::TYPE_AUDIO :
16943 efrain 998
                                if($slide->file) {
17259 stevensc 999
                                    if(!$storage->deleteFile($target_path, $slide->uuid, $slide->file)) {
16943 efrain 1000
                                        return new JsonModel([
1001
                                            'success'   => false,
1002
                                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1003
                                        ]);
1004
                                    }
1005
                                }
1006
 
1007
                                try {
17259 stevensc 1008
                                    $tmp_filename = $storage->getTmpFilename();
1009
                                    $filename = 'audio-' . uniqid() . '.mp3';
1010
                                    $target_filename = $storage->composePathToFilename(
1011
                                        Storage::TYPE_MICROLEARNING_SLIDE,
1012
                                        $slide->uuid,
1013
                                        $filename
1014
                                    );
1 www 1015
 
17259 stevensc 1016
                                    if($storage->putFile($tmp_filename, $target_filename)) {
1017
 
1018
                                        $slide->file = $filename;
1019
                                        if(!$slideMapper->update($slide)) {
1020
                                            $this->logger->error('Error al actualizar la diapositiva: ' . $slideMapper->getError());
1021
                                            return new JsonModel([
1022
                                                'success'   => false,
1023
                                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1024
                                            ]);
1025
                                        }
16943 efrain 1026
 
1027
                                    }
1 www 1028
 
16943 efrain 1029
                                } catch(\Throwable $e) {
17259 stevensc 1030
                                    $this->logger->error('Error al subir el audio: ' . $e->getMessage());
16943 efrain 1031
                                    error_log($e->getTraceAsString());
1 www 1032
                                }
1033
 
16943 efrain 1034
                                break;
1 www 1035
 
16943 efrain 1036
 
17002 efrain 1037
                            case MicrolearningSlide::TYPE_VIDEO :
16943 efrain 1038
                                if($slide->file) {
1039
                                    if(!image ::delete($target_path, $slide->file)) {
1040
                                        return new JsonModel([
1041
                                            'success'   => false,
1042
                                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1043
                                        ]);
1044
                                    }
1045
                                }
1046
 
1047
                                try {
17259 stevensc 1048
                                    $tmp_filename = $storage->getTmpFilename();
1049
                                    $filename = 'video-' . uniqid() . '.mp4';
1050
                                    $target_filename = $storage->composePathToFilename(
1051
                                        Storage::TYPE_MICROLEARNING_SLIDE,
1052
                                        $slide->uuid,
1053
                                        $filename
1054
                                    );
1055
 
1056
                                    if($storage->putFile($tmp_filename, $target_filename)) {
16943 efrain 1057
 
1058
                                        $videoConvert = new VideoConvert();
17259 stevensc 1059
                                        $videoConvert->filename = $filename;
16943 efrain 1060
                                        $videoConvert->type = VideoConvert::TYPE_MICRO_LEARNING;
1061
                                        $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
1062
 
17259 stevensc 1063
                                        try {
1064
                                            $videoConvertMapper->insert($videoConvert);
1065
                                        } catch(\Throwable $e) {
1066
                                            $this->logger->error('Error al insertar el video: ' . $e->getMessage());
1067
                                            error_log($e->getTraceAsString());
1068
                                        }
1069
 
1070
                                        $slide->file = $filename;
1071
                                        if(!$slideMapper->update($slide)) {
1072
                                            $this->logger->error('Error al actualizar la diapositiva: ' . $slideMapper->getError());
1073
                                            return new JsonModel([
1074
                                                'success'   => false,
1075
                                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1076
                                            ]);
1077
                                        }
1078
 
16943 efrain 1079
                                    }
1 www 1080
 
16943 efrain 1081
                                } catch(\Throwable $e) {
17259 stevensc 1082
                                    $this->logger->error('Error al subir el video: ' . $e->getMessage());
16943 efrain 1083
                                    error_log($e->getTraceAsString());
1 www 1084
                                }
16943 efrain 1085
                                break;
1 www 1086
                        }
1087
                    }
17259 stevensc 1088
 
1089
                    if($storage->setCurrentFilename('background')) {
1 www 1090
                        if($slide->background) {
17259 stevensc 1091
                            if(!$storage->deleteFile($target_path, $slide->uuid, $slide->background)) {
1 www 1092
                                return new JsonModel([
1093
                                    'success'   => false,
1094
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1095
                                ]);
1096
                            }
1097
                        }
1098
 
17259 stevensc 1099
                        $tmp_filename  = $storage->getTmpFilename();
1 www 1100
 
1101
                        try {
1102
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.microlearning_image_size']);
1103
 
1104
                            $filename = 'background-' .uniqid() . '.png';
17259 stevensc 1105
                            $target_filename = $storage->composePathToFilename(
1106
                                Storage::TYPE_MICROLEARNING_SLIDE,
1107
                                $slide->uuid,
1108
                                $filename
1109
                            );
17002 efrain 1110
 
17259 stevensc 1111
                            if($storage->uploadImageCrop($tmp_filename, $target_filename, $target_width, $target_height)) {
17002 efrain 1112
                               $slide->background = $filename;
17259 stevensc 1113
                                if(!$slideMapper->update($slide)) {
1114
                                    $this->logger->error('Error al actualizar la diapositiva: ' . $slideMapper->getError());
1115
                                    return new JsonModel([
1116
                                        'success'   => false,
1117
                                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1118
                                    ]);
1119
                                }
1120
                            } else {
1121
                                $this->logger->error('Error al subir el fondo: ' . $storage->getError());
1122
                                return new JsonModel([
1123
                                    'success'   => false,
1124
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1125
                                ]);
1 www 1126
                            }
1127
                        } catch(\Throwable $e) {
17259 stevensc 1128
                            $this->logger->error('Error al subir el fondo: ' . $e->getMessage());
1 www 1129
                            error_log($e->getTraceAsString());
1130
                        }
16943 efrain 1131
                    }
1 www 1132
 
1133
                    $this->logger->info('Se edito la diapositiva ' . $slide->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1134
 
1135
                    $data = [
1136
                        'success'   => true,
1137
                        'data'   => 'LABEL_RECORD_UPDATED'
1138
                    ];
1139
                } else {
1140
                    $data = [
1141
                        'success'   => false,
1142
                        'data'      => $capsuleMapper->getError()
1143
                    ];
1144
 
1145
                }
1146
 
1147
                return new JsonModel($data);
1148
 
1149
            } else {
1150
                $messages = [];
1151
                $form_messages = (array) $form->getMessages();
1152
                foreach($form_messages  as $fieldname => $field_messages)
1153
                {
1154
 
1155
                    $messages[$fieldname] = array_values($field_messages);
1156
                }
1157
 
1158
                return new JsonModel([
1159
                    'success'   => false,
1160
                    'data'   => $messages
1161
                ]);
1162
            }
1163
        } else {
1164
            $data = [
1165
                'success' => false,
1166
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1167
            ];
1168
 
1169
            return new JsonModel($data);
1170
        }
1171
 
1172
        return new JsonModel($data);
1173
    }
1174
 
1175
 
1176
    public function textAction()
1177
    {
1178
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1179
        $currentUser = $currentUserPlugin->getUser();
1180
        $currentCompany = $currentUserPlugin->getCompany();
1181
 
1182
        $request    = $this->getRequest();
1183
        $capsule_uuid = $this->params()->fromRoute('capsule_uuid');
1184
        $slide_uuid   = $this->params()->fromRoute('slide_uuid');
1185
 
17002 efrain 1186
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 www 1187
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1188
        if(!$capsule) {
1189
            return new JsonModel([
1190
                'success'   => false,
1191
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
1192
            ]);
1193
        }
1194
 
17002 efrain 1195
        if($capsule->company_id != $currentCompany->id) {
1 www 1196
            return new JsonModel([
1197
                'success'   => false,
1198
                'data'   => 'ERROR_UNAUTHORIZED'
1199
            ]);
1200
        }
1201
 
1202
 
17002 efrain 1203
        $slideMapper = MicrolearningSlideMapper::getInstance($this->adapter);
1 www 1204
        $slide = $slideMapper->fetchOneByUuid($slide_uuid);
1205
        if(!$slide) {
1206
            return new JsonModel([
1207
                'success'   => false,
1208
                'data'   => 'ERROR_SLIDE_NOT_FOUND'
1209
            ]);
1210
        }
1211
 
1212
        if($slide->capsule_id != $capsule->id) {
1213
            return new JsonModel([
1214
                'success'   => false,
1215
                'data'   => 'ERROR_UNAUTHORIZED'
1216
            ]);
1217
        }
1218
 
1219
        if($request->isGet()) {
1220
            $data = [
1221
                'success' => true,
1222
                'data' => $slide->description,
1223
            ];
1224
 
1225
            return new JsonModel($data);
1226
 
1227
        } else {
1228
            $data = [
1229
                'success' => false,
1230
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1231
            ];
1232
 
1233
            return new JsonModel($data);
1234
        }
1235
 
1236
        return new JsonModel($data);
1237
    }
1238
}