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();
11148 eleazar 107
 
108
                // $posts;
109
 
9350 eleazar 110
                $viewModel = new ViewModel();
11153 eleazar 111
                $this->layout()->setTemplate('layout/layout-backend');
9350 eleazar 112
                $viewModel->setTemplate('leaders-linked/my-trainer-question/index.phtml');
11151 eleazar 113
                $viewModel->setVariables([
11148 eleazar 114
                    'form' => $form,
115
                    'page' => $page,
116
                    'perpage' => $perpage,
11320 eleazar 117
                    'questions' => $questions
11148 eleazar 118
                ]);
9350 eleazar 119
                return $viewModel;
120
        } else {
121
            return new JsonModel([
122
                'success' => false,
123
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
124
            ]);
125
        }
11320 eleazar 126
 
9350 eleazar 127
    }
128
 
129
    public function addAction() {
130
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
131
        $currentCompany     = $currentUserPlugin->getCompany();
132
        $currentUser        = $currentUserPlugin->getUser();
133
 
10180 eleazar 134
        $request    = $this->getRequest();
10238 eleazar 135
        try{
9350 eleazar 136
        if($request->isPost()) {
10892 eleazar 137
            $form = new  CreateFeedForm($this->adapter);
9365 eleazar 138
            $dataPost = $request->getPost()->toArray();
11330 eleazar 139
            $categoriesId = $dataPost['category_id'] ?? [];
140
            $dataPost['category_id'] = null;
9373 eleazar 141
            $form->setData($dataPost);
10909 eleazar 142
 
9350 eleazar 143
            if($form->isValid()) {
10198 eleazar 144
 
10908 eleazar 145
                $dataPost = (array) $form->getData();
10899 eleazar 146
                $hydrator = new ObjectPropertyHydrator();
147
                $feed = new Feed();
148
                $hydrator->hydrate($dataPost, $feed);
149
 
10892 eleazar 150
                $feed->user_id = $currentUser->id;
151
                $feed->company_id = $currentCompany->id;
152
                $feed->user_id          = $currentUser->id;
11001 eleazar 153
                $feed->type             = Feed::TYPE_MYT_QUESTION;
10892 eleazar 154
                $feed->posted_or_shared = Feed::POSTED;
155
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
156
                $feed->total_comments   = 0;
157
                $feed->total_shared     = 0;
9363 eleazar 158
 
10892 eleazar 159
                $feedMapper = FeedMapper::getInstance($this->adapter);
9350 eleazar 160
 
10892 eleazar 161
                if($feedMapper->insert($feed)) {
11282 eleazar 162
                     $feed = $feedMapper->fetchOne($feed->id);
11287 eleazar 163
 
164
                     $category = new FeedTopic();
11282 eleazar 165
 
11330 eleazar 166
                    if(!empty($categoriesId)){
11286 eleazar 167
                       // print_r($dataPost['job_description_id']);
9350 eleazar 168
 
11286 eleazar 169
                        $categoriesMapper = TopicMapper::getInstance($this->adapter);
170
                        $feedTopicMapper = FeedTopicMapper::getInstance($this->adapter);
11282 eleazar 171
 
11286 eleazar 172
                        $ok = true;
11282 eleazar 173
 
11330 eleazar 174
                        foreach($categoriesId as $category_id) {
11286 eleazar 175
 
176
                           // echo '$jobDescriptionUuid = ' . $jobDescriptionUuid ;
177
 
178
 
179
                            $category = $categoriesMapper->fetchOneByUuid($category_id);
180
                                $record = new FeedTopic();
181
                                $record->topic_id = $category->id;
182
                                $record->feed_id = $feed->id;
183
 
184
 
185
 
186
                                $result = $feedTopicMapper->insert($record);
187
                                $ok = $ok && $result;
188
                            }
189
                        }
190
 
10892 eleazar 191
                     $feed->myt_id = $feed->id;
192
                     $feed->related_feed = $feed->id;
193
                     $feedMapper->update($feed);
194
                    $this->logger->info('Se agrego la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 195
 
196
                    $data = [
197
                        'success'   => true,
198
                        'data'   => 'LABEL_RECORD_ADDED'
199
                    ];
200
                } else {
201
                    $data = [
202
                        'success'   => false,
10892 eleazar 203
                        'data'      => $feedMapper->getError()
9350 eleazar 204
                    ];
205
 
206
                }
207
 
208
                return new JsonModel($data);
209
 
210
            } else {
211
                $messages = [];
212
                $form_messages = (array) $form->getMessages();
213
                foreach($form_messages  as $fieldname => $field_messages)
214
                {
215
 
216
                    $messages[$fieldname] = array_values($field_messages);
217
                }
218
 
219
            }
220
 
221
        } else {
222
            $data = [
223
                'success' => false,
224
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
225
            ];
226
 
227
            return new JsonModel($data);
228
        }
229
 
10238 eleazar 230
    } catch (\Throwable $e) {
10892 eleazar 231
        $e->getMessage();
232
        return new JsonModel([
233
            'success' => false,
234
            'data' => $e
235
        ]);
9350 eleazar 236
    }
10238 eleazar 237
    }
9350 eleazar 238
 
239
    public function editAction() {
240
        $request = $this->getRequest();
241
        $currentUserPlugin = $this->plugin('currentUserPlugin');
242
        $currentCompany = $currentUserPlugin->getCompany();
243
        $currentUser = $currentUserPlugin->getUser();
244
 
245
        $request = $this->getRequest();
11014 eleazar 246
        $myt_id = $this->params()->fromRoute('id');
9350 eleazar 247
        try{
11015 eleazar 248
        if (!$myt_id) {
9350 eleazar 249
            $data = [
250
                'success' => false,
251
                'data' => 'ERROR_INVALID_PARAMETER'
252
            ];
253
 
254
            return new JsonModel($data);
255
        }
256
 
11014 eleazar 257
        $feedMapper = FeedMapper::getInstance($this->adapter);
11016 eleazar 258
        $feed = $feedMapper->fetchOneByUuid($myt_id);
9350 eleazar 259
 
11014 eleazar 260
        if (!$feed) {
9350 eleazar 261
            $data = [
262
                'success' => false,
263
                'data' => 'ERROR_RECORD_NOT_FOUND'
264
            ];
265
 
266
            return new JsonModel($data);
267
        }
268
 
11014 eleazar 269
        if ($feed->company_id != $currentCompany->id) {
9350 eleazar 270
            return new JsonModel([
271
                'success' => false,
272
                'data' => 'ERROR_UNAUTHORIZED'
273
            ]);
274
        }
275
 
276
 
277
        if ($request->isPost()) {
11014 eleazar 278
            $form = new CreateFeedForm($this->adapter);
9350 eleazar 279
            $dataPost = $request->getPost()->toArray();
280
 
281
            $form->setData($dataPost);
282
 
283
            if ($form->isValid()) {
284
                $dataPost = (array) $form->getData();
285
 
286
                $hydrator = new ObjectPropertyHydrator();
11018 eleazar 287
                $hydrator->hydrate($dataPost, $feed);
10250 eleazar 288
                $categoriesMapper = TopicMapper::getInstance($this->adapter);
289
                $category = $categoriesMapper->fetchOneByUuid($dataPost['category_id']);
11014 eleazar 290
                $feed->topic_id = $category->id;
9350 eleazar 291
 
11014 eleazar 292
                if($feedMapper->update($feed)) {
293
                    $feed = $feedMapper->fetchOne($feed->id);
9350 eleazar 294
 
11014 eleazar 295
                   $this->logger->info('Se modifico la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 296
 
297
                   $data = [
298
                       'success'   => true,
299
                       'data'   => 'LABEL_RECORD_UPDATED'
300
                   ];
301
               } else {
302
                   $data = [
303
                       'success'   => false,
11014 eleazar 304
                       'data'      => $feedMapper->getError()
9350 eleazar 305
                   ];
306
 
307
               }
308
 
309
                return new JsonModel($data);
310
            } else {
311
                $messages = [];
312
                $form_messages = (array) $form->getMessages();
313
                foreach ($form_messages as $fieldname => $field_messages) {
314
                    $messages[$fieldname] = array_values($field_messages);
315
                }
316
 
317
                return new JsonModel([
318
                    'success' => false,
319
                    'data' => $messages
320
                ]);
321
            }
322
        } else if ($request->isGet()) {
323
 
324
            $hydrator = new ObjectPropertyHydrator();
10252 eleazar 325
            $categoriesMapper = TopicMapper::getInstance($this->adapter);
11014 eleazar 326
            $category = $categoriesMapper->fetchOne($feed->topic_id);
9350 eleazar 327
 
328
            $data = [
329
                'success' => true,
330
                'data' => [
11014 eleazar 331
                    'id' => $feed->uuid,
10252 eleazar 332
                    'category_id' => $category->uuid,
11014 eleazar 333
                    'title' => $feed->title,
11017 eleazar 334
                    'description' => $feed->description,
9350 eleazar 335
                ]
336
            ];
337
 
338
            return new JsonModel($data);
339
        } else {
340
            $data = [
341
                'success' => false,
342
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
343
            ];
344
 
345
            return new JsonModel($data);
346
        }
347
 
348
        return new JsonModel($data);
349
    } catch (\Throwable $e) {
350
        $e->getMessage();
351
        return new JsonModel([
352
            'success' => false,
353
            'data' => $e
354
        ]);
355
    }
356
    }
357
 
358
    public function deleteAction() {
359
        $request = $this->getRequest();
360
        $currentUserPlugin = $this->plugin('currentUserPlugin');
361
        $currentCompany = $currentUserPlugin->getCompany();
362
        $currentUser = $currentUserPlugin->getUser();
363
 
364
        $request = $this->getRequest();
365
        $uuid = $this->params()->fromRoute('id');
366
 
367
        if (!$uuid) {
368
            $data = [
369
                'success' => false,
370
                'data' => 'ERROR_INVALID_PARAMETER'
371
            ];
372
 
373
            return new JsonModel($data);
374
        }
375
 
11019 eleazar 376
        $feedMapper = FeedMapper::getInstance($this->adapter);
377
        $feed = $feedMapper->fetchOneByUuid($uuid);
378
        if (!$feed) {
9350 eleazar 379
            $data = [
380
                'success' => false,
381
                'data' => 'ERROR_RECORD_NOT_FOUND'
382
            ];
383
 
384
            return new JsonModel($data);
385
        }
386
 
11019 eleazar 387
        if ($feed->company_id != $currentCompany->id) {
9350 eleazar 388
            return new JsonModel([
389
                'success' => false,
390
                'data' => 'ERROR_UNAUTHORIZED'
391
            ]);
392
        }
393
 
394
        if ($request->isPost()) {
395
 
396
 
11019 eleazar 397
            $result = $feedMapper->delete($feed->id);
9350 eleazar 398
            if ($result) {
11019 eleazar 399
                $this->logger->info('Se borro la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
9350 eleazar 400
 
401
                $data = [
402
                    'success' => true,
403
                    'data' => 'LABEL_RECORD_DELETED'
404
                ];
405
            } else {
406
 
407
                $data = [
408
                    'success' => false,
11019 eleazar 409
                    'data' => $feedMapper->getError()
9350 eleazar 410
                ];
411
 
412
                return new JsonModel($data);
413
            }
414
        } else {
415
            $data = [
416
                'success' => false,
417
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
418
            ];
419
 
420
            return new JsonModel($data);
421
        }
422
 
423
        return new JsonModel($data);
424
    }
425
}