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