Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
9350 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\MyTrainerCategoriesMapper;
10117 eleazar 15
use LeadersLinked\Mapper\TopicMapper;
11282 eleazar 16
use LeadersLinked\Mapper\FeedTopicMapper;
9356 eleazar 17
use LeadersLinked\Mapper\MyTrainerQuestionsMapper;
10893 eleazar 18
use LeadersLinked\Mapper\FeedMapper;
9350 eleazar 19
use LeadersLinked\Form\MyTrainerQuestionForm;
10893 eleazar 20
use LeadersLinked\Form\CreateFeedForm;
9369 eleazar 21
use LeadersLinked\Model\MyTrainerQuestions;
11282 eleazar 22
use LeadersLinked\Model\FeedTopic;
10893 eleazar 23
use LeadersLinked\Model\Feed;
9350 eleazar 24
use LeadersLinked\Mapper\CompanyMapper;
25
use LeadersLinked\Model\Company;
26
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
27
 
28
class MyTrainerQuestionController extends AbstractActionController {
29
 
30
    /**
31
     *
32
     * @var AdapterInterface
33
     */
34
    private $adapter;
35
 
36
    /**
37
     *
38
     * @var AbstractAdapter
39
     */
40
    private $cache;
41
 
42
    /**
43
     *
44
     * @var  LoggerInterface
45
     */
46
    private $logger;
47
 
48
    /**
49
     *
50
     * @var array
51
     */
52
    private $config;
53
 
54
    /**
55
     *
56
     * @param AdapterInterface $adapter
57
     * @param AbstractAdapter $cache
58
     * @param LoggerInterface $logger
59
     * @param array $config
60
     */
61
    public function __construct($adapter, $cache, $logger, $config) {
62
        $this->adapter = $adapter;
63
        $this->cache = $cache;
64
        $this->logger = $logger;
65
        $this->config = $config;
66
    }
67
 
68
    public function indexAction() {
69
        $request = $this->getRequest();
70
        $currentUserPlugin = $this->plugin('currentUserPlugin');
71
        $currentCompany = $currentUserPlugin->getCompany();
72
        $currentUser = $currentUserPlugin->getUser();
73
 
74
        $request = $this->getRequest();
11148 eleazar 75
 
11146 eleazar 76
 
11148 eleazar 77
        if($request->isGet()) {
78
            $headers  = $request->getHeaders();
11146 eleazar 79
 
9350 eleazar 80
            $isJson = false;
11148 eleazar 81
            if($headers->has('Accept')) {
9350 eleazar 82
                $accept = $headers->get('Accept');
83
 
84
                $prioritized = $accept->getPrioritized();
85
 
11148 eleazar 86
                foreach($prioritized as $key => $value) {
9350 eleazar 87
                    $raw = trim($value->getRaw());
88
 
11148 eleazar 89
                    if(!$isJson) {
9350 eleazar 90
                        $isJson = strpos($raw, 'json');
91
                    }
11148 eleazar 92
 
9350 eleazar 93
                }
94
            }
95
 
96
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
97
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/question/add');
98
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/question/edit');
99
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/question/delete');
11294 eleazar 100
                $allowAnswer = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer');
11148 eleazar 101
                $page = $this->params()->fromQuery('page', 1);
102
                $perpage = $this->params()->fromQuery('perpage', 20);
103
 
104
                $form = new CreateFeedForm($this->adapter);
10912 eleazar 105
                $questionsMapper = FeedMapper::getInstance($this->adapter);
11149 eleazar 106
                $questions = $questionsMapper->fetchAllByMytQuestion();
11653 eleazar 107
                $topicMapper = TopicMapper::getInstance($this->adapter);
108
                $topicsMapper = FeedTopicMapper::getInstance($this->adapter);
11630 eleazar 109
 
11650 eleazar 110
                foreach ($questions as $question) {
11653 eleazar 111
                    $topicRelationships = $topicsMapper->fetchAllByFeedId($question->id);
112
                    $question->topics = [];
11630 eleazar 113
 
11653 eleazar 114
                    foreach ($topicRelationships as $rel) {
115
                        $topic = $topicMapper->fetchOne($rel->topic_id);
116
                        if ($topic) {
117
                            $question->topics []= $topic;
118
                        }
119
                    }
11650 eleazar 120
                }
11148 eleazar 121
 
9350 eleazar 122
                $viewModel = new ViewModel();
11153 eleazar 123
                $this->layout()->setTemplate('layout/layout-backend');
9350 eleazar 124
                $viewModel->setTemplate('leaders-linked/my-trainer-question/index.phtml');
11151 eleazar 125
                $viewModel->setVariables([
11148 eleazar 126
                    'form' => $form,
127
                    'page' => $page,
128
                    'perpage' => $perpage,
11630 eleazar 129
                    'questions' => $questions,
11653 eleazar 130
                    // 'categories' => $categories
11148 eleazar 131
                ]);
9350 eleazar 132
                return $viewModel;
133
        } else {
134
            return new JsonModel([
135
                'success' => false,
136
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
137
            ]);
138
        }
11320 eleazar 139
 
9350 eleazar 140
    }
141
 
142
    public function addAction() {
143
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
144
        $currentCompany     = $currentUserPlugin->getCompany();
145
        $currentUser        = $currentUserPlugin->getUser();
146
 
10180 eleazar 147
        $request    = $this->getRequest();
10238 eleazar 148
        try{
9350 eleazar 149
        if($request->isPost()) {
10892 eleazar 150
            $form = new  CreateFeedForm($this->adapter);
9365 eleazar 151
            $dataPost = $request->getPost()->toArray();
11330 eleazar 152
            $categoriesId = $dataPost['category_id'] ?? [];
153
            $dataPost['category_id'] = null;
9373 eleazar 154
            $form->setData($dataPost);
10909 eleazar 155
 
9350 eleazar 156
            if($form->isValid()) {
10198 eleazar 157
 
10908 eleazar 158
                $dataPost = (array) $form->getData();
10899 eleazar 159
                $hydrator = new ObjectPropertyHydrator();
160
                $feed = new Feed();
161
                $hydrator->hydrate($dataPost, $feed);
162
 
10892 eleazar 163
                $feed->user_id = $currentUser->id;
164
                $feed->company_id = $currentCompany->id;
165
                $feed->user_id          = $currentUser->id;
11001 eleazar 166
                $feed->type             = Feed::TYPE_MYT_QUESTION;
10892 eleazar 167
                $feed->posted_or_shared = Feed::POSTED;
168
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
169
                $feed->total_comments   = 0;
170
                $feed->total_shared     = 0;
9363 eleazar 171
 
10892 eleazar 172
                $feedMapper = FeedMapper::getInstance($this->adapter);
9350 eleazar 173
 
10892 eleazar 174
                if($feedMapper->insert($feed)) {
11282 eleazar 175
                     $feed = $feedMapper->fetchOne($feed->id);
11287 eleazar 176
 
177
                     $category = new FeedTopic();
11282 eleazar 178
 
11330 eleazar 179
                    if(!empty($categoriesId)){
11286 eleazar 180
                       // print_r($dataPost['job_description_id']);
9350 eleazar 181
 
11286 eleazar 182
                        $categoriesMapper = TopicMapper::getInstance($this->adapter);
183
                        $feedTopicMapper = FeedTopicMapper::getInstance($this->adapter);
11282 eleazar 184
 
11286 eleazar 185
                        $ok = true;
11282 eleazar 186
 
11330 eleazar 187
                        foreach($categoriesId as $category_id) {
11286 eleazar 188
 
189
                           // echo '$jobDescriptionUuid = ' . $jobDescriptionUuid ;
190
 
191
 
192
                            $category = $categoriesMapper->fetchOneByUuid($category_id);
193
                                $record = new FeedTopic();
194
                                $record->topic_id = $category->id;
195
                                $record->feed_id = $feed->id;
196
 
197
 
198
 
199
                                $result = $feedTopicMapper->insert($record);
200
                                $ok = $ok && $result;
201
                            }
202
                        }
203
 
10892 eleazar 204
                     $feed->related_feed = $feed->id;
205
                     $feedMapper->update($feed);
206
                    $this->logger->info('Se agrego la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 207
 
208
                    $data = [
209
                        'success'   => true,
210
                        'data'   => 'LABEL_RECORD_ADDED'
211
                    ];
212
                } else {
213
                    $data = [
214
                        'success'   => false,
10892 eleazar 215
                        'data'      => $feedMapper->getError()
9350 eleazar 216
                    ];
217
 
218
                }
219
 
220
                return new JsonModel($data);
221
 
222
            } else {
223
                $messages = [];
224
                $form_messages = (array) $form->getMessages();
225
                foreach($form_messages  as $fieldname => $field_messages)
226
                {
227
 
228
                    $messages[$fieldname] = array_values($field_messages);
229
                }
230
 
231
            }
232
 
233
        } else {
234
            $data = [
235
                'success' => false,
236
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
237
            ];
238
 
239
            return new JsonModel($data);
240
        }
241
 
10238 eleazar 242
    } catch (\Throwable $e) {
10892 eleazar 243
        $e->getMessage();
244
        return new JsonModel([
245
            'success' => false,
246
            'data' => $e
247
        ]);
9350 eleazar 248
    }
10238 eleazar 249
    }
9350 eleazar 250
 
251
    public function editAction() {
252
        $request = $this->getRequest();
253
        $currentUserPlugin = $this->plugin('currentUserPlugin');
254
        $currentCompany = $currentUserPlugin->getCompany();
255
        $currentUser = $currentUserPlugin->getUser();
256
 
257
        $request = $this->getRequest();
11014 eleazar 258
        $myt_id = $this->params()->fromRoute('id');
9350 eleazar 259
        try{
11015 eleazar 260
        if (!$myt_id) {
9350 eleazar 261
            $data = [
262
                'success' => false,
263
                'data' => 'ERROR_INVALID_PARAMETER'
264
            ];
265
 
266
            return new JsonModel($data);
267
        }
268
 
11014 eleazar 269
        $feedMapper = FeedMapper::getInstance($this->adapter);
11016 eleazar 270
        $feed = $feedMapper->fetchOneByUuid($myt_id);
9350 eleazar 271
 
11014 eleazar 272
        if (!$feed) {
9350 eleazar 273
            $data = [
274
                'success' => false,
275
                'data' => 'ERROR_RECORD_NOT_FOUND'
276
            ];
277
 
278
            return new JsonModel($data);
279
        }
280
 
11014 eleazar 281
        if ($feed->company_id != $currentCompany->id) {
9350 eleazar 282
            return new JsonModel([
283
                'success' => false,
284
                'data' => 'ERROR_UNAUTHORIZED'
285
            ]);
286
        }
287
 
288
 
289
        if ($request->isPost()) {
11014 eleazar 290
            $form = new CreateFeedForm($this->adapter);
9350 eleazar 291
            $dataPost = $request->getPost()->toArray();
292
 
293
            $form->setData($dataPost);
294
 
295
            if ($form->isValid()) {
296
                $dataPost = (array) $form->getData();
297
 
298
                $hydrator = new ObjectPropertyHydrator();
11018 eleazar 299
                $hydrator->hydrate($dataPost, $feed);
10250 eleazar 300
                $categoriesMapper = TopicMapper::getInstance($this->adapter);
301
                $category = $categoriesMapper->fetchOneByUuid($dataPost['category_id']);
11014 eleazar 302
                $feed->topic_id = $category->id;
9350 eleazar 303
 
11014 eleazar 304
                if($feedMapper->update($feed)) {
305
                    $feed = $feedMapper->fetchOne($feed->id);
9350 eleazar 306
 
11014 eleazar 307
                   $this->logger->info('Se modifico la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 308
 
309
                   $data = [
310
                       'success'   => true,
311
                       'data'   => 'LABEL_RECORD_UPDATED'
312
                   ];
313
               } else {
314
                   $data = [
315
                       'success'   => false,
11014 eleazar 316
                       'data'      => $feedMapper->getError()
9350 eleazar 317
                   ];
318
 
319
               }
320
 
321
                return new JsonModel($data);
322
            } else {
323
                $messages = [];
324
                $form_messages = (array) $form->getMessages();
325
                foreach ($form_messages as $fieldname => $field_messages) {
326
                    $messages[$fieldname] = array_values($field_messages);
327
                }
328
 
329
                return new JsonModel([
330
                    'success' => false,
331
                    'data' => $messages
332
                ]);
333
            }
334
        } else if ($request->isGet()) {
335
 
336
            $hydrator = new ObjectPropertyHydrator();
10252 eleazar 337
            $categoriesMapper = TopicMapper::getInstance($this->adapter);
11014 eleazar 338
            $category = $categoriesMapper->fetchOne($feed->topic_id);
9350 eleazar 339
 
340
            $data = [
341
                'success' => true,
342
                'data' => [
11014 eleazar 343
                    'id' => $feed->uuid,
10252 eleazar 344
                    'category_id' => $category->uuid,
11014 eleazar 345
                    'title' => $feed->title,
11017 eleazar 346
                    'description' => $feed->description,
9350 eleazar 347
                ]
348
            ];
349
 
350
            return new JsonModel($data);
351
        } else {
352
            $data = [
353
                'success' => false,
354
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
355
            ];
356
 
357
            return new JsonModel($data);
358
        }
359
 
360
        return new JsonModel($data);
361
    } catch (\Throwable $e) {
362
        $e->getMessage();
363
        return new JsonModel([
364
            'success' => false,
365
            'data' => $e
366
        ]);
367
    }
368
    }
369
 
370
    public function deleteAction() {
371
        $request = $this->getRequest();
372
        $currentUserPlugin = $this->plugin('currentUserPlugin');
373
        $currentCompany = $currentUserPlugin->getCompany();
374
        $currentUser = $currentUserPlugin->getUser();
375
 
376
        $request = $this->getRequest();
377
        $uuid = $this->params()->fromRoute('id');
378
 
379
        if (!$uuid) {
380
            $data = [
381
                'success' => false,
382
                'data' => 'ERROR_INVALID_PARAMETER'
383
            ];
384
 
385
            return new JsonModel($data);
386
        }
387
 
11019 eleazar 388
        $feedMapper = FeedMapper::getInstance($this->adapter);
389
        $feed = $feedMapper->fetchOneByUuid($uuid);
390
        if (!$feed) {
9350 eleazar 391
            $data = [
392
                'success' => false,
393
                'data' => 'ERROR_RECORD_NOT_FOUND'
394
            ];
395
 
396
            return new JsonModel($data);
397
        }
398
 
11019 eleazar 399
        if ($feed->company_id != $currentCompany->id) {
9350 eleazar 400
            return new JsonModel([
401
                'success' => false,
402
                'data' => 'ERROR_UNAUTHORIZED'
403
            ]);
404
        }
405
 
406
        if ($request->isPost()) {
407
 
408
 
11019 eleazar 409
            $result = $feedMapper->delete($feed->id);
9350 eleazar 410
            if ($result) {
11019 eleazar 411
                $this->logger->info('Se borro la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 412
 
413
                $data = [
414
                    'success' => true,
415
                    'data' => 'LABEL_RECORD_DELETED'
416
                ];
417
            } else {
418
 
419
                $data = [
420
                    'success' => false,
11019 eleazar 421
                    'data' => $feedMapper->getError()
9350 eleazar 422
                ];
423
 
424
                return new JsonModel($data);
425
            }
426
        } else {
427
            $data = [
428
                'success' => false,
429
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
430
            ];
431
 
432
            return new JsonModel($data);
433
        }
434
 
435
        return new JsonModel($data);
436
    }
437
}