Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Autoría | Ultima modificación | Ver Log |

<?php
declare(strict_types=1);

namespace LeadersLinked\Controller;

use Laminas\Authentication\AuthenticationService;
use Laminas\Authentication\Result as AuthResult;
use Laminas\Db\Adapter\AdapterInterface;

use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\I18n\Translator;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
use LeadersLinked\Model\Feed;
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsViewTopicMapper;
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
use LeadersLinked\Model\HighPerformanceTeamsGroups;
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
use LeadersLinked\Mapper\FeedMapper;
use LeadersLinked\Mapper\UserMapper;

use LeadersLinked\Library\Functions;



class HighPerformanceTeamsGroupsViewCalendarController extends AbstractActionController
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;
    
    /**
     *
     * @var  LoggerInterface
     */
    private $logger;
    
    /**
     *
     * @var array
     */
    private $config;
    
    /**
     *
     * @param AdapterInterface $adapter
     * @param LoggerInterface $logger
     * @param array $config
     */
    public function __construct($adapter, $logger, $config)
    {
        $this->adapter = $adapter;
        $this->logger = $logger;
        $this->config = $config;
    }


    public function indexAction()
    {

        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        $currentCompany = $currentUserPlugin->getCompany();
        $group_uuid =  $this->params()->fromRoute('group_id');
        $feed_uuid =  $this->params()->fromRoute('feed_id');
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            $headers  = $request->getHeaders();
            
            $isJson = false;
            if($headers->has('Accept')) {
                $accept = $headers->get('Accept');
                
                $prioritized = $accept->getPrioritized();
                
                foreach($prioritized as $key => $value) {
                    $raw = trim($value->getRaw());
                    
                    if(!$isJson) {
                        $isJson = strpos($raw, 'json');
                    }
                    
                }
            }

            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            if (!$highPerformanceTeamsGroups) {
                $viewModel->setTemplate('leaders-linked/no-access/index.phtml');
                return $viewModel ;
            }
           
            if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {

                $viewModel->setTemplate('leaders-linked/no-access/index.phtml');
                return $viewModel ;

            } 
            
            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
            $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
            if(!$highPerformanceTeamsGroupsMember) {
                $viewModel->setTemplate('leaders-linked/no-access/index.phtml');
                return $viewModel ;
            }
            if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
                $viewModel->setTemplate('leaders-linked/no-access/index.phtml');
                return $viewModel ;
            }
            $addTopicBoton=true;
            if($highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
                $addTopicBoton=false;
            }
           

            $viewModel->setTemplate('leaders-linked/high-performance-teams-groups-view-calendar/index.phtml');
            $viewModel->setVariables([
                'group_uuid'  =>  $group_uuid,
                'group_title'=>$highPerformanceTeamsGroups->title,
            ]);
            return $viewModel ;
                      
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
    }
    
    public function viewAction()
    {

       
        $now  = $utilMapper->getDatebaseNow();
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        $currentCompany = $currentUserPlugin->getCompany();
        $group_uuid =  $this->params()->fromRoute('group_id');
        $feed_uuid =  $this->params()->fromRoute('feed_id');
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            $headers  = $request->getHeaders();
            
            $isJson = false;
            if($headers->has('Accept')) {
                $accept = $headers->get('Accept');
                
                $prioritized = $accept->getPrioritized();
                
                foreach($prioritized as $key => $value) {
                    $raw = trim($value->getRaw());
                    
                    if(!$isJson) {
                        $isJson = strpos($raw, 'json');
                    }
                    
                }
            }
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
            $now = $highPerformanceTeamsGroupsMapper->getDatebaseNow();
            
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
            
            if (!$highPerformanceTeamsGroups) {
                $data = [
                    'success' => false,
                    'data' => 'ERROR_RECORD_NOT_FOUND'
                ];

                return new JsonModel($data);
            }
           
            if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {

                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_UNAUTHORIZED'
                ]);

            } 

            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
            $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
            if(!$highPerformanceTeamsGroupsMember) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_RECORD_NOT_FOUND'
                ]);
            }
            if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
                ]);
            }
            $addTopicBoton=true;
            if($highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
                $addTopicBoton=false;
            }
            
            if($isJson) {
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
                $allowView = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/calendar');
                
               
                $items = [];
                $feedMapper = FeedMapper::getInstance($this->adapter);
                if(isset($feed_uuid)){
                    $record  = $feedMapper->fetchOneByUuid($feed_uuid);
                  
                    if($record->high_performance_group_id!=$highPerformanceTeamsGroups->id){
                        return new JsonModel([
                            'success' => false,
                            'data' => 'ERROR_METHOD_NOT_ALLOWED'
                        ]);
                    }
                   
                    $items = $this->renderFeed($record, $now);
                }else{
                    $records  = $feedMapper->fetchAllTypeCalendar($highPerformanceTeamsGroups->id);
                    $contador=1;
                    foreach($records as $record)
                    {
                        $item = [
                            'id' => $record->uuid,
                            'title' => 'Reunion #'.$contador,
                            'start' => $record->date.'T'.$record->time,
                            'color'=>'#00000'.$contador,
                            'link_feed'=> $allowView ? $this->url()->fromRoute('high-performance-teams/groups/view/calendar/view', ['group_id' => $highPerformanceTeamsGroups->uuid, 'feed_id'=>$record->uuid]) : '',
                        ];
                        $contador++;
                        array_push($items, $item);
                    }
                }
                
                return new JsonModel([
                    'success' => true,
                    'data' => [
                        'items' => $items,
                    ]
                ]);
                
            }
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
    }

    private function renderFeed($feed, $now)
    {
        
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
        $network = $currentNetworkPlugin->getNetwork();
        
        $userMapper = UserMapper::getInstance($this->adapter);
        $user = $userMapper->fetchOne($feed->user_id);

        $item['owner_time_elapse'] = Functions::timeAgo(  $feed->added_on, $now);
        $item['feed_priority'] = $feed->priority;
        $item['owner_url'] = 'https://'. $network->main_hostname . '/profile/view/' . $user->uuid;
        $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
        $item['owner_name'] = $user->first_name . ' ' . $user->last_name;    
        $item['owner_description'] = strip_tags($feed->description, 'p');        
        $dt = \DateTime::createFromFormat('Y-m-d', $feed->date);
        $dt2 = \DateTime::createFromFormat('H:i:s', $feed->time);
        $item['owner_meeting_date'] =  $dt->format('d/m/Y');
        $item['owner_meeting_time'] =  $dt2->format('h:i a');
        $item['owner_meeting_link_type'] =  $feed->link_type;
        $item['owner_meeting_link_name'] =  $feed->link_name;
         
        return $item;
    }

}