Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
13304 eleazar 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\FeedMapper;
15
use LeadersLinked\Mapper\TopicMapper;
14748 kerby 16
use LeadersLinked\Mapper\FeedTopicMapper;
17
use LeadersLinked\Mapper\QueryMapper;
18
use Laminas\Paginator\Adapter\DbSelect;
19
use Laminas\Paginator\Paginator;
14880 kerby 20
use LeadersLinked\Form\DevelopmentContentCreateFeedForm;
14748 kerby 21
use LeadersLinked\Form\TopicForm;
22
use Laminas\Hydrator\ArraySerializableHydrator;
23
use Laminas\Db\ResultSet\HydratingResultSet;
24
use LeadersLinked\Model\FeedTopic;
13304 eleazar 25
use LeadersLinked\Model\Feed;
14748 kerby 26
use LeadersLinked\Model\Topic;
27
use LeadersLinked\Mapper\CompanyMapper;
28
use LeadersLinked\Model\Company;
13304 eleazar 29
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
30
 
14748 kerby 31
 
14743 kerby 32
class DevelopmentContentController extends AbstractActionController
33
{
13304 eleazar 34
 
35
    /**
36
     *
37
     * @var AdapterInterface
38
     */
39
    private $adapter;
40
 
41
    /**
42
     *
43
     * @var AbstractAdapter
44
     */
45
    private $cache;
46
 
47
    /**
48
     *
49
     * @var  LoggerInterface
50
     */
51
    private $logger;
52
 
53
    /**
54
     *
55
     * @var array
56
     */
57
    private $config;
58
 
59
    /**
60
     *
61
     * @param AdapterInterface $adapter
62
     * @param AbstractAdapter $cache
63
     * @param LoggerInterface $logger
64
     * @param array $config
65
     */
14743 kerby 66
    public function __construct($adapter, $cache, $logger, $config)
67
    {
13304 eleazar 68
        $this->adapter = $adapter;
69
        $this->cache = $cache;
70
        $this->logger = $logger;
71
        $this->config = $config;
72
    }
15028 efrain 73
 
14743 kerby 74
    public function indexAction()
75
    {
15028 efrain 76
        return new JsonModel([
77
            'success' => false,
78
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
79
        ]);
80
    }
81
 
82
    public function listingAction()
83
    {
13304 eleazar 84
        $request = $this->getRequest();
85
        $currentUserPlugin = $this->plugin('currentUserPlugin');
86
        $currentCompany = $currentUserPlugin->getCompany();
87
        $currentUser = $currentUserPlugin->getUser();
88
 
89
        if ($request->isGet()) {
90
 
91
            $headers = $request->getHeaders();
92
 
93
            $isJson = false;
94
            if ($headers->has('Accept')) {
95
                $accept = $headers->get('Accept');
96
 
97
                $prioritized = $accept->getPrioritized();
98
 
99
                foreach ($prioritized as $key => $value) {
100
                    $raw = trim($value->getRaw());
101
 
102
                    if (!$isJson) {
103
                        $isJson = strpos($raw, 'json');
104
                    }
105
                }
106
            }
107
 
14997 kerby 108
 
13304 eleazar 109
            if ($isJson) {
14749 kerby 110
 
14750 kerby 111
 
13304 eleazar 112
                $search = $this->params()->fromQuery('search', []);
113
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
114
 
115
                $page = intval($this->params()->fromQuery('start', 1), 10);
116
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
117
 
14743 kerby 118
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
119
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'development-and-content/add');
120
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'development-and-content/edit');
121
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'development-and-content/delete');
122
                $allowAproved = $acl->isAllowed($currentUser->usertype_id, 'development-and-content/aproved');
14751 kerby 123
 
13304 eleazar 124
                $items = [];
125
                $feedMapper = FeedMapper::getInstance($this->adapter);
14967 kerby 126
                $category_uuid = $this->params()->fromRoute('category_id');
127
 
128
                if (!$category_uuid) {
15029 kerby 129
                    if($allowEdit){
130
                        $paginator = $feedMapper->fetchAllByDevelop();
131
                    }else{
132
                        $paginator = $feedMapper->fetchAllByDevelopContentPublished();
133
                    }
134
 
14967 kerby 135
                }else{
136
                    $topicMapper = TopicMapper::getInstance($this->adapter);
137
                    $topic = $topicMapper->fetchOneByUuid($category_uuid);
138
                    if (!$topic) {
139
                        $data = [
140
                            'success' => false,
141
                            'data' => 'ERROR_RECORD_NOT_FOUND'
142
                        ];
14743 kerby 143
 
14967 kerby 144
                        return new JsonModel($data);
145
                    }
15029 kerby 146
                    if($allowEdit){
147
                        $paginator = $feedMapper->fetchAllByDevelopContentByCategoryId($topic->id);
148
                    }
15041 kerby 149
                    $paginator = $feedMapper->fetchAllByDevelopContentPublishedByCategoryId($topic->id);
14967 kerby 150
                }
151
 
152
 
13304 eleazar 153
                foreach ($paginator as $record) {
14743 kerby 154
                    $topicMapper = TopicMapper::getInstance($this->adapter);
155
                    $topic = $topicMapper->fetchOne($record->topic_id);
156
                    $topic_title =  ($topic) ? $topic->title : '';
157
                    $preview = ($record->file_image_preview != null && $record->file_image_preview != '') ? $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'feed', 'filename' => $record->file_image_preview]) : '';
13304 eleazar 158
                    $item = [
14743 kerby 159
                        'uuid' => $record->uuid,
13304 eleazar 160
                        'title' => $record->title,
14743 kerby 161
                        'topic' => $topic_title,
14605 kerby 162
                        'added_on' => $record->added_on,
13304 eleazar 163
                        'description' => $record->description,
14604 kerby 164
                        'file' => $record->file_type ? $record->file_type : '',
165
                        'link_media' => $record->link_media ? $record->link_media : '',
166
                        'link_name' => $record->link_name,
167
                        'file_name' => $record->file_name ? $record->file_name : '',
168
                        'link_file' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'feed', 'filename' => $record->file_name]),
14743 kerby 169
                        'status' => $record->status,
170
                        'preview' => $preview,
171
                        'actions' => [
14754 kerby 172
                            'link_edit' => ($allowEdit) ? $this->url()->fromRoute('development-and-content/edit', ['id' => $record->uuid]) : '',
173
                            'link_aproved' => ($allowAproved) ? $this->url()->fromRoute('development-and-content/aproved', ['id' => $record->uuid]) : '',
174
                            'link_delete' => ($allowDelete) ? $this->url()->fromRoute('development-and-content/delete', ['id' => $record->uuid]) : '',
14743 kerby 175
                        ]
13304 eleazar 176
                    ];
177
 
178
                    array_push($items, $item);
179
                }
14756 kerby 180
 
13304 eleazar 181
                return new JsonModel([
182
                    'success' => true,
183
                    'data' => [
184
                        'items' => $items,
185
                    ]
186
                ]);
187
            } else {
14997 kerby 188
                $topicMapper = TopicMapper::getInstance($this->adapter);
189
                $result = $topicMapper->fetchAllDevelopment();
14999 kerby 190
                $categories=[];
14997 kerby 191
                foreach ($result as $record) {
15004 kerby 192
 
14997 kerby 193
                    $item = [
194
                        'uuid'=>$record->uuid,
195
                        'title'=>$record->title,
15040 kerby 196
                        'filter'=>$this->url()->fromRoute('development-and-content/listing', ['category_id' => $record->uuid]),
14997 kerby 197
                    ];
198
                    array_push($categories, $item);
199
                }
15004 kerby 200
 
14997 kerby 201
 
14880 kerby 202
                $form = new DevelopmentContentCreateFeedForm($this->adapter, $currentCompany->id);
13304 eleazar 203
 
204
                $this->layout()->setTemplate('layout/layout-backend');
205
                $viewModel = new ViewModel();
13309 eleazar 206
                $viewModel->setTemplate('leaders-linked/development-content/index.phtml');
14743 kerby 207
                $viewModel->setVariables([
208
                    'form' => $form,
209
                    'categories' => $categories,
210
                ]);
13304 eleazar 211
                return $viewModel;
212
            }
213
        } else {
214
            return new JsonModel([
215
                'success' => false,
216
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
217
            ]);
218
        }
14743 kerby 219
    }
220
 
221
    public function addAction()
222
    {
13304 eleazar 223
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
14743 kerby 224
        $currentCompany     = $currentUserPlugin->getCompany();
13304 eleazar 225
        $currentUser        = $currentUserPlugin->getUser();
226
 
14743 kerby 227
        $request    = $this->getRequest();
15038 kerby 228
 
14743 kerby 229
            if ($request->isPost()) {
14880 kerby 230
                $form = new  DevelopmentContentCreateFeedForm($this->adapter);
14743 kerby 231
 
232
                $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
233
                $form->setData($dataPost);
234
 
235
                if ($form->isValid()) {
236
                    $dataPost = (array) $form->getData();
237
                    $hydrator = new ObjectPropertyHydrator();
238
                    $feed = new Feed();
239
                    $hydrator->hydrate($dataPost, $feed);
240
 
241
                    $topicMapper = TopicMapper::getInstance($this->adapter);
14829 kerby 242
                    $topic = $topicMapper->fetchOneByUuid($dataPost['category_content']);
14743 kerby 243
 
244
                    $feed->user_id = $currentUser->id;
245
                    $feed->company_id = $currentCompany->id;
246
                    $feed->user_id          = $currentUser->id;
247
                    $feed->status           = Feed::STATUS_SAVED;
248
                    $feed->topic_id         = $topic->id;
249
                    $feed->type             = Feed::TYPE_DC;
250
                    $feed->posted_or_shared = Feed::POSTED;
251
                    $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
252
 
253
                    $feed->total_comments   = 0;
254
                    $feed->total_shared     = 0;
255
 
256
 
14834 kerby 257
                    $filesArray = $this->getRequest()->getFiles()->toArray();
14743 kerby 258
                    $file_type = '';
14834 kerby 259
                    $files = null;
14833 kerby 260
 
14834 kerby 261
                    if (isset($filesArray['doc']) && empty($filesArray['doc']['error'])) {
262
                        $files = $filesArray['doc'];
263
                    }
264
                    if (isset($filesArray['video']) && empty($filesArray['video']['error'])) {
265
                        $files = $filesArray['video'];
266
                    }
14743 kerby 267
 
14834 kerby 268
                    if (isset($files) && empty($files['error'])) {
269
                        $feed_tmp_filename  = $files['tmp_name'];
270
                        $feed_filename      = $this->normalizeString($files['name']);
271
 
14743 kerby 272
                        $mime_type = mime_content_type($feed_tmp_filename);
273
                        if ($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
274
                            $file_type = Feed::FILE_TYPE_IMAGE;
275
                        } else if ($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
276
                            $file_type = Feed::FILE_TYPE_VIDEO;
277
                        } else if ($mime_type == 'application/pdf') {
278
                            $file_type = Feed::FILE_TYPE_DOCUMENT;
279
                        }
13304 eleazar 280
                    }
14743 kerby 281
                    //preview
14832 kerby 282
                    $fileImg = $this->params()->fromFiles('image');
14743 kerby 283
                    if (isset($fileImg) && empty($fileImg['error'])) {
13304 eleazar 284
 
14743 kerby 285
                        $img_tmp_filename  = $fileImg['tmp_name'];
286
                        $img_filename  = $this->normalizeString($fileImg['name']);
287
                    } else {
288
                        $img_tmp_filename = null;
289
                        $img_filename = null;
290
                    }
13304 eleazar 291
 
14743 kerby 292
                    $feedMapper = FeedMapper::getInstance($this->adapter);
13304 eleazar 293
 
14743 kerby 294
                    if ($feedMapper->insert($feed)) {
13304 eleazar 295
                        $feed = $feedMapper->fetchOne($feed->id);
14743 kerby 296
                        $feedMapper->update($feed);
297
                        if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
15029 kerby 298
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
299
                            if (!file_exists($target_path)) {
300
                                mkdir($target_path, 0755);
301
                            }
14743 kerby 302
 
15029 kerby 303
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
304
                            $result = move_uploaded_file($feed_tmp_filename, $full_filename);
305
                            if ($result) {
14743 kerby 306
 
15029 kerby 307
                                $feed->file_type = $file_type;
308
                                $feed->file_name = basename($feed_filename);
309
                                $feedMapper->update($feed);
310
                            } else {
311
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
13304 eleazar 312
                            }
313
                        }
14743 kerby 314
                        if ($file_type == Feed::FILE_TYPE_IMAGE) {
15029 kerby 315
 
316
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
317
                            if (!file_exists($target_path)) {
318
                                mkdir($target_path, 0755);
319
                            }
14743 kerby 320
 
15029 kerby 321
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
14743 kerby 322
 
15029 kerby 323
                            $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
324
                            $crop_to_dimensions = false;
325
                            if (Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions)) {
326
                                $feed->file_type = $file_type;
327
                                $feed->file_name = basename($feed_filename);
328
                                $feedMapper->update($feed);
13304 eleazar 329
                            }
330
                        }
14743 kerby 331
                        if ($file_type == Feed::FILE_TYPE_VIDEO) {
15029 kerby 332
 
333
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
334
                            if (!file_exists($target_path)) {
335
                                mkdir($target_path, 0755);
336
                            }
14743 kerby 337
 
15029 kerby 338
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
14743 kerby 339
 
15029 kerby 340
                            $result = move_uploaded_file($feed_tmp_filename, $full_filename);
341
                            if ($result) {
14743 kerby 342
 
15029 kerby 343
                                $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
344
                                $getFromSecound = 2;
14743 kerby 345
 
15029 kerby 346
                                //extracción del cover
347
                                $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
348
                                $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
349
                                $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
350
                                exec($cmd);
14743 kerby 351
 
352
 
15029 kerby 353
                                $feed->file_type = $file_type;
354
                                $feed->file_name = basename($feed_filename);
355
                                $feed->file_image_preview = basename($generateFile);
356
                                $feedMapper->update($feed);
14743 kerby 357
 
15029 kerby 358
                                $videoConvert = new VideoConvert();
359
                                $videoConvert->filename = $full_filename;
360
                                $videoConvert->type = VideoConvert::TYPE_FEED;
14743 kerby 361
 
15029 kerby 362
                                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
363
                                $videoConvertMapper->insert($videoConvert);
364
                            } else {
365
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
13304 eleazar 366
                            }
367
                        }
14743 kerby 368
 
369
                        if ($file_type != Feed::FILE_TYPE_VIDEO && !empty($img_tmp_filename) && !empty($img_filename)) {
370
 
15029 kerby 371
 
372
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
373
                            if (!file_exists($target_path)) {
374
                                mkdir($target_path, 0755);
375
                            }
14743 kerby 376
 
15029 kerby 377
                            Functions::deleteFilename($target_path, $feed->file_image_preview);
14743 kerby 378
 
15029 kerby 379
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
14743 kerby 380
 
15029 kerby 381
                            $img_filename = substr($img_filename, 0, strrpos($img_filename, '.'))  . '.png';
14743 kerby 382
 
383
 
15029 kerby 384
                            if (Functions::uploadImage($img_tmp_filename, $target_path, $img_filename, $target_width, $target_height)) {
385
                                $feed->file_image_preview = basename($img_filename);
386
                                $feedMapper->update($feed);
387
                            } else {
388
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
14743 kerby 389
                            }
390
                        }
391
 
392
 
13304 eleazar 393
                        $response = [
394
                            'success'   => true,
395
                            'data'   => 'success'
396
                        ];
14743 kerby 397
                    } else {
398
                        $messages = [];
399
                        $form_messages = (array) $form->getMessages();
400
                        foreach ($form_messages  as $fieldname => $field_messages) {
401
                            $messages[$fieldname] = array_values($field_messages);
402
                        }
403
                    }
13304 eleazar 404
                } else {
14743 kerby 405
                    $response = [
406
                        'success' => false,
407
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
408
                    ];
13304 eleazar 409
                }
14743 kerby 410
 
411
                return new JsonModel($response);
412
            }
413
    }
414
 
415
    public function deleteAction()
416
    {
417
        $currentUserPlugin = $this->plugin('currentUserPlugin');
418
        $currentUser = $currentUserPlugin->getUser();
419
        $currentCompany = $currentUserPlugin->getCompany();
420
 
421
        $request = $this->getRequest();
422
        if ($request->isPost()) {
423
 
424
 
425
            $id =  $this->params()->fromRoute('id');
426
 
427
            $feedMapper = FeedMapper::getInstance($this->adapter);
428
            $feed = $feedMapper->fetchOneByUuid($id);
429
            if (!$feed) {
430
                $response = [
431
                    'success' => false,
432
                    'data' => 'ERROR_POST_NOT_FOUND'
433
                ];
434
                return new JsonModel($response);
435
            }
436
 
437
            if ($feed->company_id != $currentCompany->id) {
438
                $response = [
439
                    'success' => false,
440
                    'data' => 'ERROR_UNAUTHORIZED'
441
                ];
442
                return new JsonModel($response);
443
            }
444
 
445
            $feedMapper = FeedMapper::getInstance($this->adapter);
446
            $feed->status = Feed::STATUS_DELETED;
447
            if ($feedMapper->update($feed)) {
448
 
449
                $response = [
450
                    'success' => true,
451
                    'data' => 'LABEL_FEED_WAS_DELETED'
452
                ];
13304 eleazar 453
            } else {
454
                $response = [
455
                    'success' => false,
14743 kerby 456
                    'data' => $feedMapper->getError()
13304 eleazar 457
                ];
458
            }
14743 kerby 459
 
460
 
13304 eleazar 461
            return new JsonModel($response);
14743 kerby 462
        } else {
463
            $response = [
464
                'success' => false,
465
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
466
            ];
13304 eleazar 467
        }
14743 kerby 468
 
469
        return new JsonModel($response);
13304 eleazar 470
    }
471
 
14743 kerby 472
    private function normalizeString($str = '')
473
    {
474
        $basename  = substr($str, 0, strrpos($str, '.'));
475
        $basename  = str_replace('.', '-', $basename);
476
 
477
        $extension  = substr($str, strrpos($str, '.'));
478
 
15043 kerby 479
        $str = $basename . $extension;
14743 kerby 480
 
15043 kerby 481
        return Functions::normalizeString($str);
14743 kerby 482
    }
483
 
484
    public function aprovedAction()
485
    {
13304 eleazar 486
        $currentUserPlugin = $this->plugin('currentUserPlugin');
487
        $currentUser = $currentUserPlugin->getUser();
488
        $currentCompany = $currentUserPlugin->getCompany();
14743 kerby 489
 
13304 eleazar 490
        $request = $this->getRequest();
14743 kerby 491
        if ($request->isPost()) {
13304 eleazar 492
 
493
            $id =  $this->params()->fromRoute('id');
14743 kerby 494
 
13304 eleazar 495
            $feedMapper = FeedMapper::getInstance($this->adapter);
496
            $feed = $feedMapper->fetchOneByUuid($id);
14743 kerby 497
            if (!$feed) {
13304 eleazar 498
                $response = [
499
                    'success' => false,
500
                    'data' => 'ERROR_POST_NOT_FOUND'
501
                ];
502
                return new JsonModel($response);
503
            }
14743 kerby 504
 
505
            if ($feed->company_id != $currentCompany->id) {
13304 eleazar 506
                $response = [
507
                    'success' => false,
508
                    'data' => 'ERROR_UNAUTHORIZED'
509
                ];
510
                return new JsonModel($response);
511
            }
14743 kerby 512
 
13304 eleazar 513
            $feedMapper = FeedMapper::getInstance($this->adapter);
14743 kerby 514
            $feed->status = Feed::STATUS_PUBLISHED;
515
            if ($feedMapper->update($feed)) {
13304 eleazar 516
                $response = [
517
                    'success' => true,
14743 kerby 518
                    'data' => 'LABEL_FEED_WAS_ADDED'
13304 eleazar 519
                ];
520
            } else {
521
                $response = [
522
                    'success' => false,
523
                    'data' => $feedMapper->getError()
524
                ];
525
            }
526
 
14743 kerby 527
 
13304 eleazar 528
            return new JsonModel($response);
529
        } else {
530
            $response = [
531
                'success' => false,
532
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
533
            ];
534
        }
14743 kerby 535
 
13304 eleazar 536
        return new JsonModel($response);
537
    }
14743 kerby 538
 
539
    public function editAction()
540
    {
541
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
542
        $currentCompany     = $currentUserPlugin->getCompany();
543
        $currentUser        = $currentUserPlugin->getUser();
544
        $request    = $this->getRequest();
545
 
546
 
15028 efrain 547
        $uuid = $this->params()->fromRoute('id');
548
        if (!$uuid) {
549
            $data = [
550
                'success' => false,
551
                'data' => 'ERROR_INVALID_PARAMETER'
552
            ];
14743 kerby 553
 
15028 efrain 554
            return new JsonModel($data);
555
        }
14743 kerby 556
 
15028 efrain 557
        $feedMapper = FeedMapper::getInstance($this->adapter);
558
        $feed = $feedMapper->fetchOneByUuid($uuid);
14743 kerby 559
 
560
 
15028 efrain 561
        if (!$feed) {
562
            $data = [
563
                'success' => false,
564
                'data' => 'ERROR_RECORD_NOT_FOUND'
565
             ];
566
 
567
            return new JsonModel($data);
568
        }
569
 
570
        if ($currentCompany) {
571
            if ($feed->company_id != $currentCompany->id) {
14743 kerby 572
                $data = [
573
                    'success' => false,
15028 efrain 574
                    'data' => 'ERROR_UNAUTHORIZED'
14743 kerby 575
                ];
576
 
577
                return new JsonModel($data);
578
            }
15028 efrain 579
        } else {
580
            if ($feed->company_id) {
581
                $data = [
582
                    'success' => false,
583
                    'data' => 'ERROR_UNAUTHORIZED'
584
                ];
14743 kerby 585
 
15028 efrain 586
                return new JsonModel($data);
14743 kerby 587
            }
15028 efrain 588
        }
589
 
590
        if($request->isGet()) {
591
 
592
            $topicMapper = TopicMapper::getInstance($this->adapter);
593
            $topic = $topicMapper->fetchOne($feed->topic_id);
594
            $preview = ($feed->file_image_preview != null && $feed->file_image_preview != '') ? $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]) : null;
595
            return new JsonModel([
596
                'success' => true,
597
                'data' => [
598
                    'feed' => [
599
                        'uuid' => $feed->uuid,
600
                        'title' => $feed->title,
601
                        'added_on' => $feed->added_on,
602
                        'description' => $feed->description,
603
                        'file' => $feed->file_type ? $feed->file_type : '',
604
                        'link_media' => $feed->link_media ? $feed->link_media : '',
605
                        'link_name' => $feed->link_name,
606
                        'file_name' => $feed->file_name ? $feed->file_name : '',
15039 kerby 607
                        'link_file' => ($feed->file_name != null && $feed->file_name != '') ? $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]) : null,
15028 efrain 608
                        'status' => $feed->status,
609
                    ],
15039 kerby 610
                    'topic' => [
611
                       'uuid'=> $topic->uuid
612
                    ],
15028 efrain 613
                    'action' => $this->url()->fromRoute('development-and-content/edit', ['id' => $feed->uuid]),
614
                    'preview' => $preview
615
                ]
616
            ]);
617
 
618
        } else  if ($request->isPost()) {
14743 kerby 619
 
620
 
14880 kerby 621
                $form = new DevelopmentContentCreateFeedForm($this->adapter);
14743 kerby 622
                $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
14829 kerby 623
                $categoryUuid = $dataPost['category_content'];
14743 kerby 624
                $dataPost['category_id'] = null;
625
                $form->setData($dataPost);
626
 
627
                if ($form->isValid()) {
628
                    $dataPost = (array) $form->getData();
14835 kerby 629
                    $filesArray = $this->getRequest()->getFiles()->toArray();
14743 kerby 630
                    $files = null;
631
 
14835 kerby 632
                    if (isset($filesArray['doc']) && empty($filesArray['doc']['error'])) {
633
                        $files = $filesArray['doc'];
14743 kerby 634
                    }
14835 kerby 635
                    if (isset($filesArray['video']) && empty($filesArray['video']['error'])) {
636
                        $files = $filesArray['video'];
14743 kerby 637
                    }
638
 
639
                    $file_type = '';
640
                    if (isset($files) && empty($files['error'])) {
641
                        $feed_tmp_filename  = $files['tmp_name'];
642
                        $feed_filename      = $this->normalizeString($files['name']);
643
 
644
                        $mime_type = mime_content_type($feed_tmp_filename);
645
                        if ($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
646
                            $file_type = Feed::FILE_TYPE_IMAGE;
647
                        } else if ($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
648
                            $file_type = Feed::FILE_TYPE_VIDEO;
649
                        } else if ($mime_type == 'application/pdf') {
650
                            $file_type = Feed::FILE_TYPE_DOCUMENT;
651
                        }
652
                    }
653
                    //preview
14834 kerby 654
                    $fileImg = $this->params()->fromFiles('image');
14743 kerby 655
                    if (isset($fileImg) && empty($fileImg['error'])) {
656
 
657
                        $img_tmp_filename  = $fileImg['tmp_name'];
658
                        $img_filename  = $this->normalizeString($fileImg['name']);
659
                    } else {
660
                        $img_tmp_filename = null;
661
                        $img_filename = null;
662
                    }
663
 
664
                    $feedMapper = FeedMapper::getInstance($this->adapter);
665
                    $feed = $feedMapper->fetchOne($feed->id);
666
 
14946 kerby 667
                    $hydrator = new ObjectPropertyHydrator();
668
                    $hydrator->hydrate($dataPost, $feed);
669
 
14743 kerby 670
                    $categoriesMapper = TopicMapper::getInstance($this->adapter);
671
                    $category = $categoriesMapper->fetchOneByUuidOrTitle($categoryUuid);
672
 
673
                    $feed->topic_id = $category->id;
674
                    $feed->status = Feed::STATUS_SAVED;
14946 kerby 675
 
14743 kerby 676
                    if ($feedMapper->update($feed)) {
677
 
678
                        if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
679
 
680
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
681
 
682
                                if (!file_exists($target_path)) {
683
                                    mkdir($target_path, 0755);
684
                                }
685
 
686
                                Functions::deleteFilename($target_path, $feed->file_name);
687
 
688
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
689
                                $result = move_uploaded_file($feed_tmp_filename, $full_filename);
690
                                if ($result) {
691
 
692
                                    $feed->file_type = $file_type;
693
                                    $feed->file_name = basename($feed_filename);
694
                                    $feedMapper->update($feed);
695
                                } else {
696
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
697
                                }
698
                        }
699
                        if ($file_type == Feed::FILE_TYPE_IMAGE) {
15029 kerby 700
 
14743 kerby 701
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
702
                                if (!file_exists($target_path)) {
703
                                    mkdir($target_path, 0755);
704
                                }
705
 
706
                                Functions::deleteFilename($target_path, $feed->file_name);
707
 
708
                                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
709
 
710
                                $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
711
                                $crop_to_dimensions = false;
712
                                if (Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions)) {
713
                                    $feed->file_type = $file_type;
714
                                    $feed->file_name = basename($feed_filename);
715
                                    $feedMapper->update($feed);
716
                                }
717
                        }
718
                        if ($file_type == Feed::FILE_TYPE_VIDEO) {
15029 kerby 719
 
14743 kerby 720
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
721
                                if (!file_exists($target_path)) {
722
                                    mkdir($target_path, 0755);
723
                                }
724
 
725
 
726
                                Functions::deleteFilename($target_path, $feed->file_name);
727
 
728
                                Functions::deleteFilename($target_path, $feed->file_image_preview);
729
 
730
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
731
 
732
                                $result = move_uploaded_file($feed_tmp_filename, $full_filename);
733
                                if ($result) {
734
 
735
                                    $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
736
                                    $getFromSecound = 2;
737
 
738
                                    //extracción del cover
739
                                    $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
740
                                    $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
741
                                    $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
742
                                    exec($cmd);
743
 
744
 
745
                                    $feed->file_type = $file_type;
746
                                    $feed->file_name = basename($feed_filename);
747
                                    $feed->file_image_preview = basename($generateFile);
748
                                    $feedMapper->update($feed);
749
 
750
                                    $videoConvert = new VideoConvert();
751
                                    $videoConvert->filename = $full_filename;
752
                                    $videoConvert->type = VideoConvert::TYPE_FEED;
753
 
754
                                    $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
15029 kerby 755
                                    $videoConvertMapper->insert($videoConvert);}
14743 kerby 756
                        }
757
                        if ($file_type != Feed::FILE_TYPE_VIDEO && !empty($img_tmp_filename) && !empty($img_filename)) {
758
 
759
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
760
                                if (!file_exists($target_path)) {
761
                                    mkdir($target_path, 0755);
762
                                }
763
 
764
                                Functions::deleteFilename($target_path, $feed->file_image_preview);
765
 
766
                                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
767
 
768
                                $img_filename = substr($img_filename, 0, strrpos($img_filename, '.'))  . '.png';
769
 
770
 
771
                                if (Functions::uploadImage($img_tmp_filename, $target_path, $img_filename, $target_width, $target_height)) {
772
                                    $feed->file_image_preview = basename($img_filename);
773
                                    $feedMapper->update($feed);
774
                                }
775
                        }
776
 
777
                        $response = [
778
                            'success'   => true,
779
                            'data'   => 'success'
780
                        ];
781
                    } else {
782
                        $messages = [];
783
                        $form_messages = (array) $form->getMessages();
784
                        foreach ($form_messages  as $fieldname => $field_messages) {
785
                            $messages[$fieldname] = array_values($field_messages);
786
                        }
787
                        $response = [
788
                            'success' => false,
789
                            'data' => $messages
790
                        ];
791
                    }
792
                } else {
793
                    $response = [
794
                        'success' => false,
795
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
796
                    ];
797
                }
798
 
799
                return new JsonModel($response);
800
            }
15028 efrain 801
 
14743 kerby 802
    }
803
 
804
 
805
}