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