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);
11590 eleazar 110
 
111
                    $lasts = $questionsMapper->fetchAllByMytAnswerComented();
11591 eleazar 112
                    $items = [];
11590 eleazar 113
                    foreach ($lasts as $last) {
11593 eleazar 114
                        $comented = $questionsMapper->fetchOne($last->myt_id);
11590 eleazar 115
                        $item = [
11597 eleazar 116
                            'uuid' => $comented ->uuid,
11590 eleazar 117
                            'title' => $comented->title,
118
                            'description' => $comented->description,
119
                        ];
120
 
121
                        array_push($items, $item);
122
                    }
11598 eleazar 123
                    // return new JsonModel([
124
                    //     'success' => false,
125
                    //     'data' => $items
126
                    // ]);
11597 eleazar 127
 
11369 eleazar 128
                    $userMapper = UserMapper::getInstance($this->adapter);
129
                    $user = $userMapper->fetchOne($question->user_id);
130
 
11371 eleazar 131
                    $answer = $questionsMapper->fetchAllByMytAnswer($question->myt_id);
11332 eleazar 132
 
133
                    // $posts;
134
 
135
                    $viewModel = new ViewModel();
136
                    $this->layout()->setTemplate('layout/layout-backend');
137
                    $viewModel->setTemplate('leaders-linked/my-trainer-answer/index.phtml');
138
                    $viewModel->setVariables([
139
                        'form' => $form,
11373 eleazar 140
                        'myt_id' => $myt_id,
11332 eleazar 141
                        'question_title' => $question->title,
142
                        'question_description' => $question->description,
11369 eleazar 143
                        'user' => $user,
11590 eleazar 144
                        'items' => $items,
11332 eleazar 145
 
11369 eleazar 146
 
11332 eleazar 147
                    ]);
148
                    return $viewModel;
149
            } else {
150
                return new JsonModel([
151
                    'success' => false,
152
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
11317 eleazar 153
                ]);
11332 eleazar 154
            }
155
        } catch (\Throwable $e) {
11317 eleazar 156
            $e->getMessage();
157
            return new JsonModel([
158
                'success' => false,
159
                'data' => $e
160
            ]);
161
        }
162
    }
11336 eleazar 163
 
164
    public function addAction() {
165
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
166
        $currentCompany     = $currentUserPlugin->getCompany();
167
        $currentUser        = $currentUserPlugin->getUser();
168
 
11343 eleazar 169
        $myt_id =  $this->params()->fromRoute('id');
170
        $questionsMapper = FeedMapper::getInstance($this->adapter);
171
        $question = $questionsMapper->fetchOneByUuid($myt_id);
11336 eleazar 172
        $request    = $this->getRequest();
173
        try{
174
        if($request->isPost()) {
175
            $form = new  CreateFeedForm($this->adapter);
176
            $dataPost = $request->getPost()->toArray();
177
            $categoriesId = $dataPost['category_id'] ?? [];
178
            $dataPost['category_id'] = null;
179
            $form->setData($dataPost);
180
 
181
            if($form->isValid()) {
182
 
183
                $dataPost = (array) $form->getData();
184
                $hydrator = new ObjectPropertyHydrator();
185
                $feed = new Feed();
186
                $hydrator->hydrate($dataPost, $feed);
187
 
188
                $feed->user_id = $currentUser->id;
189
                $feed->company_id = $currentCompany->id;
190
                $feed->user_id          = $currentUser->id;
11343 eleazar 191
                $feed->type             = Feed::TYPE_MYT_ANSWER;
11336 eleazar 192
                $feed->posted_or_shared = Feed::POSTED;
193
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
11343 eleazar 194
                $feed->myt_id = $question->id;
195
                $feed->related_feed = $question->id;
11336 eleazar 196
 
197
                $feedMapper = FeedMapper::getInstance($this->adapter);
198
 
199
                if($feedMapper->insert($feed)) {
11343 eleazar 200
                    $feed = $feedMapper->fetchOne($feed->id);
201
                    $category = new FeedTopic();
202
                    $feedMapper->update($feed);
11336 eleazar 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
    }
11317 eleazar 247
 
248
 
249
}