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