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;
17
use LeadersLinked\Mapper\FeedMapper;
18
use LeadersLinked\Form\MyTrainerQuestionForm;
19
use LeadersLinked\Model\MyTrainerQuestions;
10601 eleazar 20
 
11317 eleazar 21
use LeadersLinked\Model\Feed;
22
use LeadersLinked\Form\CreateFeedForm;
23
use LeadersLinked\Form\TopicForm;
10601 eleazar 24
 
11317 eleazar 25
use LeadersLinked\Mapper\UserMapper;
10273 eleazar 26
 
11317 eleazar 27
class MyTrainerAnswerController extends AbstractActionController
28
{
29
    /**
30
     *
31
     * @var AdapterInterface
32
     */
33
    private $adapter;
34
 
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
    /**
57
     *
58
     * @param AdapterInterface $adapter
59
     * @param AbstractAdapter $cache
60
     * @param LoggerInterface $logger
61
     * @param array $config
62
     */
63
    public function __construct($adapter, $cache , $logger, $config)
64
    {
65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
 
70
 
10273 eleazar 71
    }
10601 eleazar 72
 
11317 eleazar 73
    public function indexAction() {
74
        $request = $this->getRequest();
75
        $currentUserPlugin = $this->plugin('currentUserPlugin');
76
        $currentCompany = $currentUserPlugin->getCompany();
77
        $currentUser = $currentUserPlugin->getUser();
10273 eleazar 78
 
11317 eleazar 79
        try{
11332 eleazar 80
            $request = $this->getRequest();
81
 
10612 eleazar 82
 
11332 eleazar 83
            if($request->isGet()) {
11336 eleazar 84
                $myt_id =  $this->params()->fromRoute('id');
11332 eleazar 85
                $headers  = $request->getHeaders();
86
                $isJson = false;
87
                if($headers->has('Accept')) {
88
                    $accept = $headers->get('Accept');
10612 eleazar 89
 
11332 eleazar 90
                    $prioritized = $accept->getPrioritized();
10612 eleazar 91
 
11332 eleazar 92
                    foreach($prioritized as $key => $value) {
93
                        $raw = trim($value->getRaw());
11316 eleazar 94
 
11332 eleazar 95
                        if(!$isJson) {
96
                            $isJson = strpos($raw, 'json');
97
                        }
98
 
11317 eleazar 99
                    }
11316 eleazar 100
                }
10612 eleazar 101
 
11332 eleazar 102
                    $acl = $this->getEvent()->getViewModel()->getVariable('acl');
103
                    $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/add');
104
                    $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/edit');
105
                    $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'my-trainer/answer/delete');
106
 
107
                    $form = new CreateFeedForm($this->adapter);
108
                    $questionsMapper = FeedMapper::getInstance($this->adapter);
109
                    $question = $questionsMapper->fetchOneByUuid($myt_id);
110
 
111
                    // $posts;
112
 
113
                    $viewModel = new ViewModel();
114
                    $this->layout()->setTemplate('layout/layout-backend');
115
                    $viewModel->setTemplate('leaders-linked/my-trainer-answer/index.phtml');
116
                    $viewModel->setVariables([
117
                        'form' => $form,
118
                        'question_title' => $question->title,
119
                        'question_description' => $question->description,
120
 
121
                    ]);
122
                    return $viewModel;
123
            } else {
124
                return new JsonModel([
125
                    'success' => false,
126
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
11317 eleazar 127
                ]);
11332 eleazar 128
            }
129
        } catch (\Throwable $e) {
11317 eleazar 130
            $e->getMessage();
131
            return new JsonModel([
132
                'success' => false,
133
                'data' => $e
134
            ]);
135
        }
136
    }
11336 eleazar 137
 
138
    public function addAction() {
139
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
140
        $currentCompany     = $currentUserPlugin->getCompany();
141
        $currentUser        = $currentUserPlugin->getUser();
142
 
143
        $request    = $this->getRequest();
144
        try{
145
        if($request->isPost()) {
146
            $form = new  CreateFeedForm($this->adapter);
147
            $dataPost = $request->getPost()->toArray();
148
            $categoriesId = $dataPost['category_id'] ?? [];
149
            $dataPost['category_id'] = null;
150
            $form->setData($dataPost);
151
 
152
            if($form->isValid()) {
153
 
154
                $dataPost = (array) $form->getData();
155
                $hydrator = new ObjectPropertyHydrator();
156
                $feed = new Feed();
157
                $hydrator->hydrate($dataPost, $feed);
158
 
159
                $feed->user_id = $currentUser->id;
160
                $feed->company_id = $currentCompany->id;
161
                $feed->user_id          = $currentUser->id;
162
                $feed->type             = Feed::TYPE_MYT_QUESTION;
163
                $feed->posted_or_shared = Feed::POSTED;
164
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
165
                $feed->total_comments   = 0;
166
                $feed->total_shared     = 0;
167
 
168
                $feedMapper = FeedMapper::getInstance($this->adapter);
169
 
170
                if($feedMapper->insert($feed)) {
171
                     $feed = $feedMapper->fetchOne($feed->id);
172
 
173
                     $category = new FeedTopic();
174
 
175
                    if(!empty($categoriesId)){
176
                       // print_r($dataPost['job_description_id']);
177
 
178
                        $categoriesMapper = TopicMapper::getInstance($this->adapter);
179
                        $feedTopicMapper = FeedTopicMapper::getInstance($this->adapter);
180
 
181
                        $ok = true;
182
 
183
                        foreach($categoriesId as $category_id) {
184
 
185
                           // echo '$jobDescriptionUuid = ' . $jobDescriptionUuid ;
186
 
187
 
188
                            $category = $categoriesMapper->fetchOneByUuid($category_id);
189
                                $record = new FeedTopic();
190
                                $record->topic_id = $category->id;
191
                                $record->feed_id = $feed->id;
192
 
193
 
194
 
195
                                $result = $feedTopicMapper->insert($record);
196
                                $ok = $ok && $result;
197
                            }
198
                        }
199
 
200
                     $feed->myt_id = $feed->id;
201
                     $feed->related_feed = $feed->id;
202
                     $feedMapper->update($feed);
203
                    $this->logger->info('Se agrego la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
204
 
205
                    $data = [
206
                        'success'   => true,
207
                        'data'   => 'LABEL_RECORD_ADDED'
208
                    ];
209
                } else {
210
                    $data = [
211
                        'success'   => false,
212
                        'data'      => $feedMapper->getError()
213
                    ];
214
 
215
                }
216
 
217
                return new JsonModel($data);
218
 
219
            } else {
220
                $messages = [];
221
                $form_messages = (array) $form->getMessages();
222
                foreach($form_messages  as $fieldname => $field_messages)
223
                {
224
 
225
                    $messages[$fieldname] = array_values($field_messages);
226
                }
227
 
228
            }
229
 
230
        } else {
231
            $data = [
232
                'success' => false,
233
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
234
            ];
235
 
236
            return new JsonModel($data);
237
        }
238
 
239
    } catch (\Throwable $e) {
240
        $e->getMessage();
241
        return new JsonModel([
242
            'success' => false,
243
            'data' => $e
244
        ]);
245
    }
246
    }
247
 
11317 eleazar 248
 
249
 
250
}