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
 
11343 eleazar 143
        $myt_id =  $this->params()->fromRoute('id');
144
        $questionsMapper = FeedMapper::getInstance($this->adapter);
145
        $question = $questionsMapper->fetchOneByUuid($myt_id);
11336 eleazar 146
        $request    = $this->getRequest();
147
        try{
148
        if($request->isPost()) {
149
            $form = new  CreateFeedForm($this->adapter);
150
            $dataPost = $request->getPost()->toArray();
151
            $categoriesId = $dataPost['category_id'] ?? [];
152
            $dataPost['category_id'] = null;
153
            $form->setData($dataPost);
154
 
155
            if($form->isValid()) {
156
 
157
                $dataPost = (array) $form->getData();
158
                $hydrator = new ObjectPropertyHydrator();
159
                $feed = new Feed();
160
                $hydrator->hydrate($dataPost, $feed);
161
 
162
                $feed->user_id = $currentUser->id;
163
                $feed->company_id = $currentCompany->id;
164
                $feed->user_id          = $currentUser->id;
11343 eleazar 165
                $feed->type             = Feed::TYPE_MYT_ANSWER;
11336 eleazar 166
                $feed->posted_or_shared = Feed::POSTED;
167
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
11343 eleazar 168
                $feed->myt_id = $question->id;
169
                $feed->related_feed = $question->id;
11336 eleazar 170
 
171
                $feedMapper = FeedMapper::getInstance($this->adapter);
172
 
173
                if($feedMapper->insert($feed)) {
11343 eleazar 174
                    $feed = $feedMapper->fetchOne($feed->id);
175
                    $category = new FeedTopic();
176
                    $feedMapper->update($feed);
11336 eleazar 177
                    $this->logger->info('Se agrego la pregunta ' . $feed->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
178
 
179
                    $data = [
180
                        'success'   => true,
181
                        'data'   => 'LABEL_RECORD_ADDED'
182
                    ];
183
                } else {
184
                    $data = [
185
                        'success'   => false,
186
                        'data'      => $feedMapper->getError()
187
                    ];
188
 
189
                }
190
 
191
                return new JsonModel($data);
192
 
193
            } else {
194
                $messages = [];
195
                $form_messages = (array) $form->getMessages();
196
                foreach($form_messages  as $fieldname => $field_messages)
197
                {
198
 
199
                    $messages[$fieldname] = array_values($field_messages);
200
                }
201
 
202
            }
203
 
204
        } else {
205
            $data = [
206
                'success' => false,
207
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
208
            ];
209
 
210
            return new JsonModel($data);
211
        }
212
 
213
    } catch (\Throwable $e) {
214
        $e->getMessage();
215
        return new JsonModel([
216
            'success' => false,
217
            'data' => $e
218
        ]);
219
    }
220
    }
221
 
11317 eleazar 222
 
223
 
224
}