Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1302 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
declare(strict_types=1);

namespace LeadersLinked\Controller;

use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Model\Page;
use LeadersLinked\Mapper\NotificationMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyUserMapper;
use LeadersLinked\Model\Company;
use LeadersLinked\Mapper\PageMapper;
use LeadersLinked\Mapper\MessageMapper;
use LeadersLinked\Mapper\CompanyUserRoleMapper;
use LeadersLinked\Model\Role;
use LeadersLinked\Library\Functions;
use LeadersLinked\Mapper\PostMapper;
use LeadersLinked\Model\Post;

class HomeController extends AbstractActionController
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;
    
    
    /**
     *
     * @var AbstractAdapter
     */
    private $cache;
    
    /**
     *
     * @var  LoggerInterface
     */
    private $logger;

    
    /**
     *
     * @var array
     */
    private $config;
    
    /**
     *
     * @param AdapterInterface $adapter
     * @param AbstractAdapter $cache
     * @param LoggerInterface $logger
     * @param array $config
     */
    public function __construct($adapter, $cache , $logger,  $config)
    {
        $this->adapter      = $adapter;
        $this->cache        = $cache;
        $this->logger       = $logger;
        $this->config       = $config;
        
    }
    
    
    
    public function indexAction()
    {

        $authService = new \Laminas\Authentication\AuthenticationService();
        if($authService->hasIdentity()) {
            return $this->redirect()->toRoute('dashboard');    
        } else {
            return $this->redirect()->toRoute('signin');    
        }
    }
    
    
    public function dashboardAction()
    {
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/dashboard.phtml');
        return $viewModel ;
    }
    
    
    
    public function privacyPolicyAction()
    {
        $pageMapper = PageMapper::getInstance($this->adapter);
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PRIVACY_POLICY);
        
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/privacy-policy.phtml');
        $viewModel->setVariable('page', $page);
        return $viewModel ;
        
        
    }
    
    public function cookiesAction()
    {
        $pageMapper = PageMapper::getInstance($this->adapter);
        $page = $pageMapper->fetchOne(Page::PAGE_ID_COOKIES);
        
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/cookies.phtml');
        $viewModel->setVariable('page', $page);
        return $viewModel ;
        
        
    }
    
    public function professionalismPolicyAction()
    {
        //
        
        $pageMapper = PageMapper::getInstance($this->adapter);
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PROFESSIONALISM_POLICY);
        
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/professionalism-policy');
        $viewModel->setVariable('page', $page);
        return $viewModel ;
    }
    
    
    public function termsAndConditionsAction()
    {
        $pageMapper = PageMapper::getInstance($this->adapter);
        $page = $pageMapper->fetchOne(Page::PAGE_ID_TERMS_AND_CONDITIONS);
        
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/terms-and-conditions.phtml');
        $viewModel->setVariable('page', $page);
        return $viewModel ;
        
        
    }
    
    public function checkSessionAction()
    {

        $request = $this->getRequest();
        if($request->isGet()) {
            
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            if(!$currentUserPlugin->hasIdentity()) {
                $flashMessenger = $this->plugin('FlashMessenger');
                $flashMessenger->addErrorMessage('ERROR_SESSION_NOT_FOUND');
                
                $response = [
                    'success' => false,
                    'data' => [
                        'message' =>  'ERROR_SESSION_NOT_FOUND',
                        'url' => $this->url()->fromRoute('signout')
                    ]
                ];
                
                return new JsonModel($response);
                
            }
            
            $currentUser = $currentUserPlugin->getUser();
            
           
            if($currentUser->last_activity_on) {
                $last_activity_on = strtotime($currentUser->last_activity_on);
            } else {
                $last_activity_on = strtotime('-1 day');
            }

            $expiry_time = $last_activity_on + $this->config['leaderslinked.security.last_activity_expired'];
            if (time() > $expiry_time) {
                    //$flashMessenger = $this->plugin('FlashMessenger');
                    //$flashMessenger->addErrorMessage('ERROR_SESSION_EXPIRED');

                $response = [
                    'success' => false,
                    'data' => [
                        'message' => 'ERROR_SESSION_EXPIRED',
                        'url' => $this->url()->fromRoute('signout')
                    ]
                ];
            } else {
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
                $total_notifications = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
                        
                $messageMapper = MessageMapper::getInstance($this->adapter);  
                $total_messages =  $messageMapper->fetchCountUnreadMessagesReceiverId($currentUser->id);
                $response = [
                    'success' => true,
                    'data' => [
                        'total_notifications' => $total_notifications,
                        'total_messages' => $total_messages
                    ]
                ];
            }
        } else {
            $response = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
        }
        
        return new JsonModel($response);
    }
    
    public function notificationsAction()
    {
        $request = $this->getRequest();
        if($request->isGet()) {
            
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
           
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
            $records = $notificationMapper->fetchAllsUnreadByUserId($currentUser->id);
            
            $items = [];
            foreach($records as $record)
            {
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
                
                array_push($items,[
                    'message' => $record->message,
                    'link' => $record->url,
                    'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp())
                ]);
                
            }
               
            $response = [
                'success' => true,
                'data' => $items
            ];
             
        } else {
            $response = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
        }
        
        return new JsonModel($response);
    }
    
    
    public function postAction()
    {
        $id = $this->params()->fromRoute('id');
        
        $postMapper = PostMapper::getInstance($this->adapter);
        $post = $postMapper->fetchOneByUuid($id);
        
        if(!$post || $post->status != Post::STATUS_ACTIVE) {
            $flashMessenger = $this->plugin('FlashMessenger');
            
            if(!$id) {
                $flashMessenger->addErrorMessage('ERROR_POST_NOT_AVAILABLE');
                return $this->redirect()->toRoute('dashboard');
            }
            
            
        }
        
        
        $this->layout()->setTemplate('layout/layout.phtml');
        $viewModel = new ViewModel();
        $viewModel->setTemplate('leaders-linked/home/post.phtml');
        $viewModel->setVariable('post', $post);
        return $viewModel ;
        
        
    }
}