Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
9095 nelberth 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
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;
9136 nelberth 16
use LeadersLinked\Model\Feed;
17
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsViewTopicMapper;
18
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
19
use LeadersLinked\Model\HighPerformanceTeamsGroups;
20
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
21
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
9149 nelberth 22
use LeadersLinked\Mapper\FeedMapper;
9290 nelberth 23
use LeadersLinked\Mapper\UserMapper;
9154 nelberth 24
use Laminas\Db\Sql\Expression;
9095 nelberth 25
 
9298 nelberth 26
use LeadersLinked\Library\Functions;
27
 
9136 nelberth 28
use LeadersLinked\Mapper\QueryMapper;
29
 
9095 nelberth 30
class HighPerformanceTeamsGroupsViewCalendarController extends AbstractActionController
31
{
32
    /**
33
     *
34
     * @var AdapterInterface
35
     */
36
    private $adapter;
37
 
38
 
39
    /**
40
     *
41
     * @var AbstractAdapter
42
     */
43
    private $cache;
44
 
45
    /**
46
     *
47
     * @var  LoggerInterface
48
     */
49
    private $logger;
50
 
51
    /**
52
     *
53
     * @var array
54
     */
55
    private $config;
56
 
57
 
58
 
59
    /**
60
     *
61
     * @param AdapterInterface $adapter
62
     * @param AbstractAdapter $cache
63
     * @param LoggerInterface $logger
64
     * @param array $config
65
     */
66
    public function __construct($adapter, $cache , $logger, $config)
67
    {
68
        $this->adapter      = $adapter;
69
        $this->cache        = $cache;
70
        $this->logger       = $logger;
71
        $this->config       = $config;
72
 
73
 
74
    }
9135 nelberth 75
 
76
 
9095 nelberth 77
    public function indexAction()
78
    {
9135 nelberth 79
 
9095 nelberth 80
 
9135 nelberth 81
        $currentUserPlugin = $this->plugin('currentUserPlugin');
82
        $currentUser = $currentUserPlugin->getUser();
83
        $currentCompany = $currentUserPlugin->getCompany();
11084 nelberth 84
        $group_uuid =  $this->params()->fromRoute('group_id');
85
        $feed_uuid =  $this->params()->fromRoute('feed_id');
9135 nelberth 86
 
9095 nelberth 87
        $request = $this->getRequest();
88
        if($request->isGet()) {
89
 
90
 
9135 nelberth 91
            $headers  = $request->getHeaders();
9095 nelberth 92
 
9135 nelberth 93
            $isJson = false;
94
            if($headers->has('Accept')) {
95
                $accept = $headers->get('Accept');
96
 
97
                $prioritized = $accept->getPrioritized();
98
 
99
                foreach($prioritized as $key => $value) {
100
                    $raw = trim($value->getRaw());
101
 
102
                    if(!$isJson) {
103
                        $isJson = strpos($raw, 'json');
104
                    }
105
 
106
                }
107
            }
9141 nelberth 108
 
9318 nelberth 109
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
110
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
9135 nelberth 111
 
9318 nelberth 112
            if (!$highPerformanceTeamsGroups) {
113
                $data = [
114
                    'success' => false,
115
                    'data' => 'ERROR_RECORD_NOT_FOUND'
116
                ];
117
 
118
                return new JsonModel($data);
119
            }
120
 
121
            if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
122
 
123
                return new JsonModel([
124
                    'success' => false,
125
                    'data' => 'ERROR_UNAUTHORIZED'
126
                ]);
127
 
128
            }
11136 nelberth 129
 
130
            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
131
            $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
132
            if(!$highPerformanceTeamsGroupsMember) {
133
                return new JsonModel([
134
                    'success' => false,
135
                    'data' => 'ERROR_RECORD_NOT_FOUND'
136
                ]);
137
            }
138
            if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
139
                return new JsonModel([
140
                    'success' => false,
141
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
142
                ]);
143
            }
144
            $addTopicBoton=true;
145
            if($highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
146
                $addTopicBoton=false;
147
            }
9922 nelberth 148
 
149
 
150
 
151
            $this->layout()->setTemplate('layout/layout-backend');
152
            $viewModel = new ViewModel();
153
            $viewModel->setTemplate('leaders-linked/high-performance-teams-groups-view-calendar/index.phtml');
154
            $viewModel->setVariables([
155
                'group_uuid'  =>  $group_uuid,
156
                'group_title'=>$highPerformanceTeamsGroups->title,
157
                'group_description'=>$highPerformanceTeamsGroups->description,
158
            ]);
159
            return $viewModel ;
160
 
161
        } else {
162
            return new JsonModel([
163
                'success' => false,
164
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
165
            ]);
166
        }
167
    }
168
 
169
    public function viewAction()
170
    {
171
 
172
 
173
        $currentUserPlugin = $this->plugin('currentUserPlugin');
174
        $currentUser = $currentUserPlugin->getUser();
175
        $currentCompany = $currentUserPlugin->getCompany();
11084 nelberth 176
        $group_uuid =  $this->params()->fromRoute('group_id');
177
        $feed_uuid =  $this->params()->fromRoute('feed_id');
9922 nelberth 178
 
179
        $request = $this->getRequest();
180
        if($request->isGet()) {
9142 nelberth 181
 
9922 nelberth 182
 
183
            $headers  = $request->getHeaders();
184
 
185
            $isJson = false;
186
            if($headers->has('Accept')) {
187
                $accept = $headers->get('Accept');
188
 
189
                $prioritized = $accept->getPrioritized();
190
 
191
                foreach($prioritized as $key => $value) {
192
                    $raw = trim($value->getRaw());
193
 
194
                    if(!$isJson) {
195
                        $isJson = strpos($raw, 'json');
196
                    }
197
 
198
                }
199
            }
200
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
201
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
202
 
203
            if (!$highPerformanceTeamsGroups) {
204
                $data = [
205
                    'success' => false,
206
                    'data' => 'ERROR_RECORD_NOT_FOUND'
207
                ];
208
 
209
                return new JsonModel($data);
210
            }
211
 
212
            if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
213
 
214
                return new JsonModel([
215
                    'success' => false,
216
                    'data' => 'ERROR_UNAUTHORIZED'
217
                ]);
218
 
219
            }
11136 nelberth 220
 
221
            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
222
            $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
223
            if(!$highPerformanceTeamsGroupsMember) {
224
                return new JsonModel([
225
                    'success' => false,
226
                    'data' => 'ERROR_RECORD_NOT_FOUND'
227
                ]);
228
            }
229
            if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
230
                return new JsonModel([
231
                    'success' => false,
232
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
233
                ]);
234
            }
235
            $addTopicBoton=true;
236
            if($highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
237
                $addTopicBoton=false;
238
            }
9922 nelberth 239
 
9135 nelberth 240
            if($isJson) {
9255 nelberth 241
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
9256 nelberth 242
                $allowView = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/calendar');
9135 nelberth 243
 
9144 nelberth 244
 
9281 nelberth 245
                $items = [];
9156 nelberth 246
                $feedMapper = FeedMapper::getInstance($this->adapter);
9264 nelberth 247
                if(isset($feed_uuid)){
248
                    $records  = $feedMapper->fetchOneByUuid($feed_uuid);
9269 nelberth 249
 
9281 nelberth 250
                    if($records->high_performance_group_id!=$highPerformanceTeamsGroups->id){
9264 nelberth 251
                        return new JsonModel([
252
                            'success' => false,
9276 nelberth 253
                            'data' => 'ERROR_METHOD_NOT_ALLOWED'
9264 nelberth 254
                        ]);
9281 nelberth 255
                    }
9290 nelberth 256
 
257
                    $items = $this->renderFeed($records);
9264 nelberth 258
                }else{
259
                    $records  = $feedMapper->fetchAllTypeCalendar($highPerformanceTeamsGroups->id);
9282 nelberth 260
                    $contador=1;
9271 nelberth 261
                    foreach($records as $record)
262
                    {
263
                        $item = [
264
                            'id' => $record->uuid,
265
                            'title' => 'Reunion #'.$contador,
266
                            'start' => $record->date.'T'.$record->time,
267
                            'color'=>'#00000'.$contador,
11084 nelberth 268
                            'link_feed'=> $allowView ? $this->url()->fromRoute('high-performance-teams/groups/view/calendar/view', ['group_id' => $highPerformanceTeamsGroups->uuid, 'feed_id'=>$record->uuid]) : '',
9271 nelberth 269
                        ];
270
                        $contador++;
271
                        array_push($items, $item);
272
                    }
9281 nelberth 273
                }
9273 nelberth 274
 
9179 nelberth 275
                return new JsonModel([
276
                    'success' => true,
277
                    'data' => [
278
                        'items' => $items,
279
                    ]
280
                ]);
9135 nelberth 281
 
282
            }
9095 nelberth 283
        } else {
9179 nelberth 284
            return new JsonModel([
285
                'success' => false,
286
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
287
            ]);
9095 nelberth 288
        }
289
    }
9135 nelberth 290
 
9290 nelberth 291
    private function renderFeed($feed)
292
    {
293
 
294
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
295
        if($sandbox) {
296
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
297
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
298
 
299
        } else {
300
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
301
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
302
        }
303
 
304
        $userMapper = UserMapper::getInstance($this->adapter);
305
        $user = $userMapper->fetchOne($feed->user_id);
9297 nelberth 306
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
307
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
9290 nelberth 308
        $item['feed_priority'] = $feed->priority;
309
        $item['owner_url'] =  str_replace('[uuid]', $user->uuid, $user_profile_url);
310
        $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
311
        $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
312
        $item['owner_description'] = strip_tags($feed->description, 'p');
313
        $dt = \DateTime::createFromFormat('Y-m-d', $feed->date);
314
        $dt2 = \DateTime::createFromFormat('H:i:s', $feed->time);
315
        $item['owner_meeting_date'] =  $dt->format('d/m/Y');
316
        $item['owner_meeting_time'] =  $dt2->format('h:i a');
317
        $item['owner_meeting_link_type'] =  $feed->link_type;
318
        $item['owner_meeting_link_name'] =  $feed->link_name;
319
 
320
        return $item;
321
    }
322
 
9095 nelberth 323
}