Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
10273 eleazar 1
<?php
11317 eleazar 2
declare(strict_types=1);
10273 eleazar 3
 
11317 eleazar 4
namespace LeadersLinked\Controller;
10273 eleazar 5
 
11317 eleazar 6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
8
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
10
use Laminas\Mvc\Controller\AbstractActionController;
11
use Laminas\Mvc\I18n\Translator;
12
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
15
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
16
use LeadersLinked\Mapper\MyTrainerQuestionsMapper;
11709 eleazar 17
use LeadersLinked\Mapper\FeedTopicMapper;
11317 eleazar 18
use LeadersLinked\Mapper\FeedMapper;
19
use LeadersLinked\Form\MyTrainerQuestionForm;
20
use LeadersLinked\Model\MyTrainerQuestions;
10601 eleazar 21
 
11317 eleazar 22
use LeadersLinked\Model\Feed;
11709 eleazar 23
use LeadersLinked\Model\FeedTopic;
11317 eleazar 24
use LeadersLinked\Form\CreateFeedForm;
25
use LeadersLinked\Form\TopicForm;
10601 eleazar 26
 
11317 eleazar 27
use LeadersLinked\Mapper\UserMapper;
10273 eleazar 28
 
11317 eleazar 29
class MyTrainerAnswerController extends AbstractActionController
30
{
31
    /**
32
     *
33
     * @var AdapterInterface
34
     */
35
    private $adapter;
36
 
37
 
38
    /**
39
     *
40
     * @var AbstractAdapter
41
     */
42
    private $cache;
43
 
44
    /**
45
     *
46
     * @var  LoggerInterface
47
     */
48
    private $logger;
49
 
50
    /**
51
     *
52
     * @var array
53
     */
54
    private $config;
55
 
56
 
57
 
58
    /**
59
     *
60
     * @param AdapterInterface $adapter
61
     * @param AbstractAdapter $cache
62
     * @param LoggerInterface $logger
63
     * @param array $config
64
     */
65
    public function __construct($adapter, $cache , $logger, $config)
66
    {
67
        $this->adapter      = $adapter;
68
        $this->cache        = $cache;
69
        $this->logger       = $logger;
70
        $this->config       = $config;
71
 
72
 
10273 eleazar 73
    }
10601 eleazar 74
 
11317 eleazar 75
    public function indexAction() {
76
        $request = $this->getRequest();
77
        $currentUserPlugin = $this->plugin('currentUserPlugin');
78
        $currentCompany = $currentUserPlugin->getCompany();
79
        $currentUser = $currentUserPlugin->getUser();
10273 eleazar 80
 
11317 eleazar 81
        try{
11332 eleazar 82
            $request = $this->getRequest();
83
 
10612 eleazar 84
 
11332 eleazar 85
            if($request->isGet()) {
11336 eleazar 86
                $myt_id =  $this->params()->fromRoute('id');
11332 eleazar 87
                $headers  = $request->getHeaders();
88
                $isJson = false;
89
                if($headers->has('Accept')) {
90
                    $accept = $headers->get('Accept');
10612 eleazar 91
 
11332 eleazar 92
                    $prioritized = $accept->getPrioritized();
10612 eleazar 93
 
11332 eleazar 94
                    foreach($prioritized as $key => $value) {
95
                        $raw = trim($value->getRaw());
11316 eleazar 96
 
11332 eleazar 97
                        if(!$isJson) {
98
                            $isJson = strpos($raw, 'json');
99
                        }
100
 
11317 eleazar 101
                    }
11316 eleazar 102
                }
11389 eleazar 103
 
104
                    $acl = $this->getEvent()->getViewModel()->getVariable('acl');
105
                    $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/add');
106
                    $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/edit');
107
                    $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/delete');
11332 eleazar 108
 
109
                    $form = new CreateFeedForm($this->adapter);
110
                    $questionsMapper = FeedMapper::getInstance($this->adapter);
111
                    $question = $questionsMapper->fetchOneByUuid($myt_id);
11590 eleazar 112
 
113
                    $lasts = $questionsMapper->fetchAllByMytAnswerComented();
11609 eleazar 114
                    $questions = [];
11590 eleazar 115
                    foreach ($lasts as $last) {
11593 eleazar 116
                        $comented = $questionsMapper->fetchOne($last->myt_id);
11609 eleazar 117
                        $questions []= [
11601 eleazar 118
                            'uuid' => $comented->uuid,
11590 eleazar 119
                            'title' => $comented->title,
120
                            'description' => $comented->description,
121
                        ];
122
                    }
11369 eleazar 123
 
11371 eleazar 124
                    $answer = $questionsMapper->fetchAllByMytAnswer($question->myt_id);
11332 eleazar 125
 
126
                    // $posts;
127
 
128
                    $viewModel = new ViewModel();
129
                    $this->layout()->setTemplate('layout/layout-backend');
130
                    $viewModel->setTemplate('leaders-linked/my-trainer-answer/index.phtml');
131
                    $viewModel->setVariables([
132
                        'form' => $form,
11721 eleazar 133
                        'id' => $myt_id,
11332 eleazar 134
                        'question_title' => $question->title,
135
                        'question_description' => $question->description,
11609 eleazar 136
                        'questions' => $questions,
11332 eleazar 137
                    ]);
138
                    return $viewModel;
139
            } else {
140
                return new JsonModel([
141
                    'success' => false,
142
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
11317 eleazar 143
                ]);
11332 eleazar 144
            }
145
        } catch (\Throwable $e) {
11317 eleazar 146
            $e->getMessage();
147
            return new JsonModel([
148
                'success' => false,
149
                'data' => $e
150
            ]);
151
        }
152
    }
11336 eleazar 153
 
154
    public function addAction() {
155
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
156
        $currentCompany     = $currentUserPlugin->getCompany();
157
        $currentUser        = $currentUserPlugin->getUser();
158
 
11343 eleazar 159
        $myt_id =  $this->params()->fromRoute('id');
160
        $questionsMapper = FeedMapper::getInstance($this->adapter);
161
        $question = $questionsMapper->fetchOneByUuid($myt_id);
11336 eleazar 162
        $request    = $this->getRequest();
163
        try{
164
        if($request->isPost()) {
165
            $form = new  CreateFeedForm($this->adapter);
11710 eleazar 166
 
167
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
11336 eleazar 168
            $categoriesId = $dataPost['category_id'] ?? [];
169
            $dataPost['category_id'] = null;
170
            $form->setData($dataPost);
171
 
172
            if($form->isValid()) {
173
 
174
                $dataPost = (array) $form->getData();
175
                $hydrator = new ObjectPropertyHydrator();
176
                $feed = new Feed();
177
                $hydrator->hydrate($dataPost, $feed);
178
 
179
                $feed->user_id = $currentUser->id;
180
                $feed->company_id = $currentCompany->id;
181
                $feed->user_id          = $currentUser->id;
11343 eleazar 182
                $feed->type             = Feed::TYPE_MYT_ANSWER;
11336 eleazar 183
                $feed->posted_or_shared = Feed::POSTED;
184
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
11343 eleazar 185
                $feed->related_feed = $question->id;
11336 eleazar 186
 
11710 eleazar 187
                $feed->total_comments   = 0;
188
                $feed->total_shared     = 0;
189
 
190
 
191
                $files = $this->getRequest()->getFiles()->toArray();
192
                $file_type = '';
193
                if(isset($files['file']) && empty($files['file']['error'])) {
194
                    $feed_tmp_filename  = $files['file']['tmp_name'];
195
                    $feed_filename      = $this->normalizeString($files['file']['name']);
196
 
197
                    $mime_type = mime_content_type($feed_tmp_filename);
198
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
199
                        $file_type = Feed::FILE_TYPE_IMAGE;
200
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
201
                        $file_type = Feed::FILE_TYPE_VIDEO;
202
                    } else if($mime_type == 'application/pdf') {
203
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
204
                    }
205
                }
206
 
11336 eleazar 207
                $feedMapper = FeedMapper::getInstance($this->adapter);
208
 
209
                if($feedMapper->insert($feed)) {
11343 eleazar 210
                    $feed = $feedMapper->fetchOne($feed->id);
211
                    $category = new FeedTopic();
212
                    $feedMapper->update($feed);
11705 eleazar 213
 
11336 eleazar 214
 
11705 eleazar 215
                        $feed = $feedMapper->fetchOne($feed->id);
216
 
217
                        if( $file_type == Feed::FILE_TYPE_DOCUMENT) {
218
                            try {
219
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
220
                                if(!file_exists($target_path)) {
221
                                    mkdir($target_path, 0755);
222
                                }
223
 
224
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR .$feed_filename;
225
                                $result = move_uploaded_file($feed_tmp_filename , $full_filename);
226
                                if($result) {
227
 
228
                                    $feed->file_type = $file_type;
229
                                    $feed->file_name = basename($feed_filename);
230
                                    $feedMapper->update($feed);
231
                                } else {
232
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
233
                                }
234
                            } catch(\Throwable $e) {
235
                                error_log($e->getTraceAsString());
236
                            }
237
                        }
238
                        if( $file_type == Feed::FILE_TYPE_IMAGE) {
239
                            try {
240
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
241
                                if(!file_exists($target_path)) {
242
                                    mkdir($target_path, 0755);
243
                                }
244
 
245
                                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
246
 
247
                                $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
248
                                $crop_to_dimensions = false;
249
                                if(Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions )) {
250
                                    $feed->file_type = $file_type;
251
                                    $feed->file_name = basename($feed_filename);
252
                                    $feedMapper->update($feed);
253
                                }
254
                            } catch(\Throwable $e) {
255
                                error_log($e->getTraceAsString());
256
                            }
257
                        }
258
                        if( $file_type == Feed::FILE_TYPE_VIDEO) {
259
                            try {
260
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
261
                                if(!file_exists($target_path)) {
262
                                    mkdir($target_path, 0755);
263
                                }
264
 
265
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
266
 
267
                                $result = move_uploaded_file($feed_tmp_filename , $full_filename);
268
                                if($result) {
269
 
270
                                    $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
271
                                    $getFromSecound = 2;
272
 
273
                                    //extracción del cover
274
                                    $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
275
                                    $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
276
                                    $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
277
                                    exec($cmd);
278
 
279
 
280
                                    $feed->file_type = $file_type;
281
                                    $feed->file_name = basename($feed_filename);
282
                                    $feed->file_image_preview = basename($generateFile);
283
                                    $feedMapper->update($feed);
284
 
285
                                    $videoConvert = new VideoConvert();
286
                                    $videoConvert->filename = $full_filename;
287
                                    $videoConvert->type = VideoConvert::TYPE_FEED;
288
 
289
                                    $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
290
                                    $videoConvertMapper->insert($videoConvert);
291
                                } else {
292
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
293
                                }
294
                            } catch(\Throwable $e) {
295
                                error_log($e->getTraceAsString());
296
                            }
297
                        }
11714 eleazar 298
 
299
 
300
                        $response = [
301
                            'success'   => true,
302
                            'data'   => 'success'
303
                        ];
11336 eleazar 304
                } else {
11705 eleazar 305
                    $messages = [];
306
                    $form_messages = (array) $form->getMessages();
307
                    foreach($form_messages  as $fieldname => $field_messages)
308
                    {
309
                        $messages[$fieldname] = array_values($field_messages);
310
                    }
311
 
11336 eleazar 312
                }
313
 
314
            } else {
11705 eleazar 315
                $response = [
316
                    'success' => false,
317
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
318
                ];
11336 eleazar 319
            }
320
 
11714 eleazar 321
            return new JsonModel($response);
11336 eleazar 322
        }
323
 
324
    } catch (\Throwable $e) {
325
        $e->getMessage();
326
        return new JsonModel([
327
            'success' => false,
328
            'data' => $e
329
        ]);
330
    }
331
    }
11317 eleazar 332
 
333
 
334
}