Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2960 | Rev 3262 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2466 stevensc 2
 
1 www 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Model\Page;
14
use LeadersLinked\Mapper\NotificationMapper;
15
use LeadersLinked\Mapper\CompanyMapper;
16
use LeadersLinked\Mapper\CompanyUserMapper;
17
use LeadersLinked\Model\Company;
18
use LeadersLinked\Mapper\PageMapper;
19
use LeadersLinked\Mapper\MessageMapper;
2466 stevensc 20
use LeadersLinked\Mapper\UserMapper;
21
use LeadersLinked\Mapper\UserProfileMapper;
1 www 22
use LeadersLinked\Mapper\CompanyUserRoleMapper;
23
use LeadersLinked\Model\Role;
24
use LeadersLinked\Library\Functions;
2466 stevensc 25
use LeadersLinked\Mapper\ConnectionMapper;
26
use LeadersLinked\Mapper\LocationMapper;
1 www 27
use LeadersLinked\Mapper\PostMapper;
2466 stevensc 28
use LeadersLinked\Mapper\ProfileVisitMapper;
1 www 29
use LeadersLinked\Model\Post;
3138 efrain 30
use LeadersLinked\Mapper\UtilMapper;
1 www 31
 
32
class HomeController extends AbstractActionController
33
{
34
    /**
35
     *
36
     * @var AdapterInterface
37
     */
38
    private $adapter;
2466 stevensc 39
 
40
 
1 www 41
    /**
42
     *
43
     * @var AbstractAdapter
44
     */
45
    private $cache;
2466 stevensc 46
 
1 www 47
    /**
48
     *
49
     * @var  LoggerInterface
50
     */
51
    private $logger;
52
 
2466 stevensc 53
 
1 www 54
    /**
55
     *
56
     * @var array
57
     */
58
    private $config;
2466 stevensc 59
 
1 www 60
    /**
61
     *
62
     * @param AdapterInterface $adapter
63
     * @param AbstractAdapter $cache
64
     * @param LoggerInterface $logger
65
     * @param array $config
66
     */
2466 stevensc 67
    public function __construct($adapter, $cache, $logger,  $config)
1 www 68
    {
69
        $this->adapter      = $adapter;
70
        $this->cache        = $cache;
71
        $this->logger       = $logger;
72
        $this->config       = $config;
73
    }
2466 stevensc 74
 
75
 
76
 
1 www 77
    public function indexAction()
78
    {
79
 
80
        $authService = new \Laminas\Authentication\AuthenticationService();
2466 stevensc 81
        if ($authService->hasIdentity()) {
82
            return $this->redirect()->toRoute('dashboard');
1 www 83
        } else {
2466 stevensc 84
            return $this->redirect()->toRoute('signin');
1 www 85
        }
86
    }
2466 stevensc 87
 
88
 
1 www 89
    public function dashboardAction()
90
    {
91
        $this->layout()->setTemplate('layout/layout.phtml');
92
        $viewModel = new ViewModel();
93
        $viewModel->setTemplate('leaders-linked/home/dashboard.phtml');
2466 stevensc 94
        return $viewModel;
1 www 95
    }
2466 stevensc 96
 
97
 
98
 
1 www 99
    public function privacyPolicyAction()
100
    {
101
        $pageMapper = PageMapper::getInstance($this->adapter);
102
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PRIVACY_POLICY);
2466 stevensc 103
 
1 www 104
        $this->layout()->setTemplate('layout/layout.phtml');
105
        $viewModel = new ViewModel();
106
        $viewModel->setTemplate('leaders-linked/home/privacy-policy.phtml');
107
        $viewModel->setVariable('page', $page);
2466 stevensc 108
        return $viewModel;
1 www 109
    }
2466 stevensc 110
 
1 www 111
    public function cookiesAction()
112
    {
113
        $pageMapper = PageMapper::getInstance($this->adapter);
114
        $page = $pageMapper->fetchOne(Page::PAGE_ID_COOKIES);
2466 stevensc 115
 
1 www 116
        $this->layout()->setTemplate('layout/layout.phtml');
117
        $viewModel = new ViewModel();
118
        $viewModel->setTemplate('leaders-linked/home/cookies.phtml');
119
        $viewModel->setVariable('page', $page);
2466 stevensc 120
        return $viewModel;
1 www 121
    }
2466 stevensc 122
 
1 www 123
    public function professionalismPolicyAction()
124
    {
125
        //
2466 stevensc 126
 
1 www 127
        $pageMapper = PageMapper::getInstance($this->adapter);
128
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PROFESSIONALISM_POLICY);
2466 stevensc 129
 
1 www 130
        $this->layout()->setTemplate('layout/layout.phtml');
131
        $viewModel = new ViewModel();
132
        $viewModel->setTemplate('leaders-linked/home/professionalism-policy');
133
        $viewModel->setVariable('page', $page);
2466 stevensc 134
        return $viewModel;
1 www 135
    }
2466 stevensc 136
 
137
 
1 www 138
    public function termsAndConditionsAction()
139
    {
140
        $pageMapper = PageMapper::getInstance($this->adapter);
141
        $page = $pageMapper->fetchOne(Page::PAGE_ID_TERMS_AND_CONDITIONS);
2466 stevensc 142
 
1 www 143
        $this->layout()->setTemplate('layout/layout.phtml');
144
        $viewModel = new ViewModel();
145
        $viewModel->setTemplate('leaders-linked/home/terms-and-conditions.phtml');
146
        $viewModel->setVariable('page', $page);
2466 stevensc 147
        return $viewModel;
1 www 148
    }
2466 stevensc 149
 
1 www 150
    public function checkSessionAction()
151
    {
152
 
153
        $request = $this->getRequest();
2466 stevensc 154
        if ($request->isGet()) {
155
 
1 www 156
            $currentUserPlugin = $this->plugin('currentUserPlugin');
2466 stevensc 157
            if (!$currentUserPlugin->hasIdentity()) {
1 www 158
                $flashMessenger = $this->plugin('FlashMessenger');
159
                $flashMessenger->addErrorMessage('ERROR_SESSION_NOT_FOUND');
2466 stevensc 160
 
1 www 161
                $response = [
162
                    'success' => false,
163
                    'data' => [
164
                        'message' =>  'ERROR_SESSION_NOT_FOUND',
165
                        'url' => $this->url()->fromRoute('signout')
166
                    ]
167
                ];
2466 stevensc 168
 
1 www 169
                return new JsonModel($response);
170
            }
2466 stevensc 171
 
1 www 172
            $currentUser = $currentUserPlugin->getUser();
2466 stevensc 173
 
174
 
175
            if ($currentUser->last_activity_on) {
1 www 176
                $last_activity_on = strtotime($currentUser->last_activity_on);
177
            } else {
178
                $last_activity_on = strtotime('-1 day');
179
            }
180
 
181
            $expiry_time = $last_activity_on + $this->config['leaderslinked.security.last_activity_expired'];
182
            if (time() > $expiry_time) {
2466 stevensc 183
                //$flashMessenger = $this->plugin('FlashMessenger');
184
                //$flashMessenger->addErrorMessage('ERROR_SESSION_EXPIRED');
1 www 185
 
186
                $response = [
187
                    'success' => false,
188
                    'data' => [
189
                        'message' => 'ERROR_SESSION_EXPIRED',
190
                        'url' => $this->url()->fromRoute('signout')
191
                    ]
192
                ];
193
            } else {
194
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
195
                $total_notifications = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
2466 stevensc 196
 
197
                $messageMapper = MessageMapper::getInstance($this->adapter);
1 www 198
                $total_messages =  $messageMapper->fetchCountUnreadMessagesReceiverId($currentUser->id);
199
                $response = [
200
                    'success' => true,
201
                    'data' => [
202
                        'total_notifications' => $total_notifications,
203
                        'total_messages' => $total_messages
204
                    ]
205
                ];
206
            }
207
        } else {
208
            $response = [
209
                'success' => false,
210
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
211
            ];
212
        }
2466 stevensc 213
 
1 www 214
        return new JsonModel($response);
215
    }
2466 stevensc 216
 
1 www 217
    public function notificationsAction()
218
    {
219
        $request = $this->getRequest();
2466 stevensc 220
        if ($request->isGet()) {
221
 
1 www 222
            $currentUserPlugin = $this->plugin('currentUserPlugin');
223
            $currentUser = $currentUserPlugin->getUser();
2466 stevensc 224
 
225
            $userMapper = UserMapper::getInstance($this->adapter);
226
            $user = $userMapper->fetchOne($currentUser->id);
227
 
228
            $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
229
            $userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->id);
230
 
1302 efrain 231
            $headers  = $request->getHeaders();
2466 stevensc 232
 
1302 efrain 233
            $isJson = false;
2466 stevensc 234
            if ($headers->has('Accept')) {
1302 efrain 235
                $accept = $headers->get('Accept');
2466 stevensc 236
 
1302 efrain 237
                $prioritized = $accept->getPrioritized();
2466 stevensc 238
 
239
                foreach ($prioritized as $key => $value) {
1302 efrain 240
                    $raw = trim($value->getRaw());
2466 stevensc 241
 
242
                    if (!$isJson) {
1302 efrain 243
                        $isJson = strpos($raw, 'json');
244
                    }
245
                }
1 www 246
            }
2466 stevensc 247
 
248
            if ($isJson) {
3138 efrain 249
 
250
                $utilMapper = UtilMapper::getInstance($this->adapter);
251
                $now = $utilMapper->getDatebaseNow();
2466 stevensc 252
 
253
 
1302 efrain 254
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
2957 kerby 255
                $records = $notificationMapper->fetchAllsReadByUserId($currentUser->id);
2466 stevensc 256
 
1302 efrain 257
                $items = [];
2466 stevensc 258
                foreach ($records as $record) {
259
 
260
                    array_push($items, [
1302 efrain 261
                        'message' => $record->message,
262
                        'link' => $record->url,
3138 efrain 263
                        'time_elapsed' => Functions::timeAgo( $record->added_on, $now),
264
                        'time' => $record->added_on
1302 efrain 265
                    ]);
266
                }
2466 stevensc 267
 
2958 kerby 268
                usort($items, function ($a, $b) {
269
 
270
                    if ($a['time'] == $b['time']) {
271
                        return 0;
272
                    } else {
2959 kerby 273
                        return $a['time'] < $b['time'] ? -1 : 1;
2958 kerby 274
                    }
275
 
276
                });
277
 
1302 efrain 278
                $response = [
279
                    'success' => true,
280
                    'data' => $items
281
                ];
282
            } else {
2466 stevensc 283
 
284
                if ($user->location_id) {
285
                    $locationMapper = LocationMapper::getInstance($this->adapter);
286
                    $location = $locationMapper->fetchOne($user->location_id);
287
 
288
                    $country = $location->country;
289
                } else {
290
                    $country = '';
291
                }
292
 
293
                $profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);
294
                $visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);
295
 
296
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
297
                $connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);
298
 
1302 efrain 299
                $this->layout()->setTemplate('layout/layout.phtml');
300
                $viewModel = new ViewModel();
2466 stevensc 301
                $viewModel->setVariables([
302
                    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
303
                    'fullname' => trim($user->first_name . ' ' . $user->last_name),
304
                    'description' => empty($userProfile->description) ? '' :  trim($userProfile->description),
305
                    'country' => $country,
306
                    'visits' => $visits,
307
                    'connections' => $connections
308
                ]);
309
 
1302 efrain 310
                $viewModel->setTemplate('leaders-linked/home/notifications.phtml');
2466 stevensc 311
                return $viewModel;
1302 efrain 312
            }
1 www 313
        } else {
314
            $response = [
315
                'success' => false,
316
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
317
            ];
318
        }
2466 stevensc 319
 
1 www 320
        return new JsonModel($response);
321
    }
2466 stevensc 322
 
2960 kerby 323
    public function lastNotificationsAction()
324
    {
325
        $request = $this->getRequest();
326
        if ($request->isGet()) {
3138 efrain 327
 
328
            $utilMapper = UtilMapper::getInstance($this->adapter);
329
            $now = $utilMapper->getDatebaseNow();
2466 stevensc 330
 
2960 kerby 331
            $currentUserPlugin = $this->plugin('currentUserPlugin');
332
            $currentUser = $currentUserPlugin->getUser();
333
 
334
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
335
            $records = $notificationMapper->fetchAllsUnreadByUserId($currentUser->id);
336
 
337
            $items = [];
338
            foreach ($records as $record) {
339
                array_push($items, [
340
                    'message' => $record->message,
341
                    'link' => $record->url,
3138 efrain 342
                    'time_elapsed' => Functions::timeAgo($record->added_on, $now),
343
                    'time' => $record->added_on
2960 kerby 344
                ]);
345
            }
346
 
347
            usort($items, function ($a, $b) {
348
 
349
                if ($a['time'] == $b['time']) {
350
                    return 0;
351
                } else {
352
                    return $a['time'] < $b['time'] ? -1 : 1;
353
                }
354
            });
355
 
356
            $count = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
357
 
358
            $response = [
359
                'success' => true,
360
                'data' => $items,
361
                'unreadNotificationsCount' => $count
362
            ];
363
 
364
        } else {
365
            $response = [
366
                'success' => false,
367
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
368
            ];
369
        }
370
 
371
        return new JsonModel($response);
372
    }
373
 
2951 kerby 374
    public function markReadAction()
375
    {
376
 
2956 kerby 377
        $request = $this->getRequest();
2951 kerby 378
 
2956 kerby 379
        if ($request->isPost()) {
2951 kerby 380
 
2956 kerby 381
            $currentUserPlugin = $this->plugin('currentUserPlugin');
382
            $currentUser = $currentUserPlugin->getUser();
2951 kerby 383
 
2956 kerby 384
            $userMapper = UserMapper::getInstance($this->adapter);
2951 kerby 385
 
2956 kerby 386
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
2951 kerby 387
 
2956 kerby 388
            $result = $notificationMapper->markAllNotificationsAsReadByUserId($currentUser->id);
2951 kerby 389
 
2956 kerby 390
            if ($result) {
391
                $this->logger->info('Se marco como leidas las notificaciones de usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
392
                $response = [
393
                    'success' => true,
394
                    'data' => 'LABEL_RECORD_UPDATED'
395
                ];
396
            } else {
397
                $response = [
398
                    'success' => false,
399
                    'data' => $notificationMapper->getError()
400
                ];
401
            }
2951 kerby 402
 
403
 
2956 kerby 404
        }else{
2951 kerby 405
            $response = [
406
                'success' => false,
407
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
408
            ];
409
 
2956 kerby 410
        }
2951 kerby 411
 
412
        return new JsonModel($response);
413
    }
414
 
1 www 415
    public function postAction()
416
    {
417
        $id = $this->params()->fromRoute('id');
2466 stevensc 418
 
1 www 419
        $postMapper = PostMapper::getInstance($this->adapter);
420
        $post = $postMapper->fetchOneByUuid($id);
2466 stevensc 421
 
422
        if (!$post || $post->status != Post::STATUS_ACTIVE) {
1 www 423
            $flashMessenger = $this->plugin('FlashMessenger');
2466 stevensc 424
 
425
            if (!$id) {
1 www 426
                $flashMessenger->addErrorMessage('ERROR_POST_NOT_AVAILABLE');
427
                return $this->redirect()->toRoute('dashboard');
428
            }
429
        }
2466 stevensc 430
 
431
 
1 www 432
        $this->layout()->setTemplate('layout/layout.phtml');
433
        $viewModel = new ViewModel();
434
        $viewModel->setTemplate('leaders-linked/home/post.phtml');
435
        $viewModel->setVariable('post', $post);
2466 stevensc 436
        return $viewModel;
1 www 437
    }
438
}