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