Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 4388 | 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\Cache\Storage\Adapter\AbstractAdapter;
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\Mapper\IndustryMapper;
use LeadersLinked\Mapper\GroupTypeMapper;
use LeadersLinked\Mapper\GroupMemberMapper;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Model\GroupMember;

class HighPerformanceTeamsMyGroupsController 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()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $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');
                    }
                    
                }
            }
            
            if($isJson) {
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
                
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
                $allowView = $acl->isAllowed($currentUser->usertype_id, 'group/view');
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/edit');
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/delete');
                
                
                $queryMapper = QueryMapper::getInstance($this->adapter);
                
                $select = $queryMapper->getSql()->select(GroupMapper::_TABLE);
                $select->columns(['id', 'uuid', 'name', 'privacy',  'image', 'status']);
                $select->where->equalTo('status', Group::STATUS_ACTIVE);
                
                if($search) {
                    $select->where->like('name', '%' . $search . '%');
                }
                $select->where->equalTo('user_id', $currentUser->id);
                $select->order('name ASC');
                
                $records = $queryMapper->fetchAll($select);
                
                
                $values = [
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
                ];

                
                $items = [];
                foreach($records as $record)
                {
                    
                    $item = [
                        'name' => $record['name'],
                        'privacy' => $values[$record['privacy']],
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image'] ]),
                        'link_view' => $allowView ? $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ])  : '',
                        'link_edit' => $allowEdit ? $this->url()->fromRoute('group/my-groups/edit', ['id' => $record['uuid'] ])  : '',
                        'link_delete' => $allowDelete ? $this->url()->fromRoute('group/my-groups/delete', ['id' => $record['uuid'] ]) : '',
                        
                    ];
                    
                    array_push($items, $item);
                }

                
                
                $response = [
                    'success' => true,
                    'data' => $items
                ];
                
                return new JsonModel($response);
                
                
            } else {
                $industries = [];
                $industryMapper = IndustryMapper::getInstance($this->adapter);
                $records = $industryMapper->fetchAllActives();
                foreach($records as $record)
                {
                    $industries[$record->uuid] = $record->name;
                }
                
                $groupTypes = [];
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
                $records = $groupTypeMapper->fetchAllActives();
                foreach($records as $record)
                {
                    $groupTypes[$record->uuid] = $record->name;
                }
                
                $formAdd = new CreateForm($this->adapter);
                
                $this->layout()->setTemplate('layout/layout-backend');
                $viewModel = new ViewModel();
                $viewModel->setTemplate('leaders-linked/high-performance-teams-my-groups/index.phtml');
                $viewModel->setVariables([
                    'industries' => $industries,
                    'types' => $groupTypes,
                    'formAdd' => $formAdd
                ]);
                return $viewModel ;
            }
            
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
    }

}