Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

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