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);
11369 eleazar 110
 
111
                    $userMapper = UserMapper::getInstance($this->adapter);
112
                    $user = $userMapper->fetchOne($question->user_id);
113
 
114
                    $answer = $questionMapper->fetchAllByMytAnswer($question->myt_id);
11332 eleazar 115
 
116
                    // $posts;
117
 
118
                    $viewModel = new ViewModel();
119
                    $this->layout()->setTemplate('layout/layout-backend');
120
                    $viewModel->setTemplate('leaders-linked/my-trainer-answer/index.phtml');
121
                    $viewModel->setVariables([
122
                        'form' => $form,
123
                        'question_title' => $question->title,
124
                        'question_description' => $question->description,
11369 eleazar 125
                        'user' => $user,
126
                        'answer' => $answer
11332 eleazar 127
 
11369 eleazar 128
 
11332 eleazar 129
                    ]);
130
                    return $viewModel;
131
            } else {
132
                return new JsonModel([
133
                    'success' => false,
134
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
11317 eleazar 135
                ]);
11332 eleazar 136
            }
137
        } catch (\Throwable $e) {
11317 eleazar 138
            $e->getMessage();
139
            return new JsonModel([
140
                'success' => false,
141
                'data' => $e
142
            ]);
143
        }
144
    }
11336 eleazar 145
 
146
    public function addAction() {
147
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
148
        $currentCompany     = $currentUserPlugin->getCompany();
149
        $currentUser        = $currentUserPlugin->getUser();
150
 
11343 eleazar 151
        $myt_id =  $this->params()->fromRoute('id');
152
        $questionsMapper = FeedMapper::getInstance($this->adapter);
153
        $question = $questionsMapper->fetchOneByUuid($myt_id);
11336 eleazar 154
        $request    = $this->getRequest();
155
        try{
156
        if($request->isPost()) {
157
            $form = new  CreateFeedForm($this->adapter);
158
            $dataPost = $request->getPost()->toArray();
159
            $categoriesId = $dataPost['category_id'] ?? [];
160
            $dataPost['category_id'] = null;
161
            $form->setData($dataPost);
162
 
163
            if($form->isValid()) {
164
 
165
                $dataPost = (array) $form->getData();
166
                $hydrator = new ObjectPropertyHydrator();
167
                $feed = new Feed();
168
                $hydrator->hydrate($dataPost, $feed);
169
 
170
                $feed->user_id = $currentUser->id;
171
                $feed->company_id = $currentCompany->id;
172
                $feed->user_id          = $currentUser->id;
11343 eleazar 173
                $feed->type             = Feed::TYPE_MYT_ANSWER;
11336 eleazar 174
                $feed->posted_or_shared = Feed::POSTED;
175
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
11343 eleazar 176
                $feed->myt_id = $question->id;
177
                $feed->related_feed = $question->id;
11336 eleazar 178
 
179
                $feedMapper = FeedMapper::getInstance($this->adapter);
180
 
181
                if($feedMapper->insert($feed)) {
11343 eleazar 182
                    $feed = $feedMapper->fetchOne($feed->id);
183
                    $category = new FeedTopic();
184
                    $feedMapper->update($feed);
11336 eleazar 185
                    $this->logger->info('Se agrego la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
186
 
187
                    $data = [
188
                        'success'   => true,
189
                        'data'   => 'LABEL_RECORD_ADDED'
190
                    ];
191
                } else {
192
                    $data = [
193
                        'success'   => false,
194
                        'data'      => $feedMapper->getError()
195
                    ];
196
 
197
                }
198
 
199
                return new JsonModel($data);
200
 
201
            } else {
202
                $messages = [];
203
                $form_messages = (array) $form->getMessages();
204
                foreach($form_messages  as $fieldname => $field_messages)
205
                {
206
 
207
                    $messages[$fieldname] = array_values($field_messages);
208
                }
209
 
210
            }
211
 
212
        } else {
213
            $data = [
214
                'success' => false,
215
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
216
            ];
217
 
218
            return new JsonModel($data);
219
        }
220
 
221
    } catch (\Throwable $e) {
222
        $e->getMessage();
223
        return new JsonModel([
224
            'success' => false,
225
            'data' => $e
226
        ]);
227
    }
228
    }
229
 
11317 eleazar 230
 
231
 
232
}