Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6749 | 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\Mapper\QueryMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Model\CompanyMicrolearningCapsule;
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
use LeadersLinked\Model\CompanyMicrolearningUser;

class MarketPlaceController 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;

    }
    
    /**
     * 
     * Generación del listado de perfiles
     * {@inheritDoc}
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
     */
    public function indexAction()
    {
            
        $request = $this->getRequest();
        if($request->isGet()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $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) {

                
                
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
                
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
                $queryMapper = QueryMapper::getInstance($this->adapter);
                $select = $queryMapper->getSql()->select();
                $select->columns(['id', 'uuid', 'name', 'status',  'image', 'order', 'privacy', 'type', 'marketplace']);
                $select->from(['c' => CompanyMicrolearningCapsuleMapper::_TABLE]);
                $select->join(['t' => CompanyMicrolearningTopicMapper::_TABLE], ' c.topic_id = t.id ', ['topic_uuid' => 'uuid']);
                $select->join(['o' => CompanyMapper::_TABLE], ' c.company_id = o.id ', ['company_uuid' => 'uuid']);
                $select->where->equalTo('c.privacy', CompanyMicrolearningCapsule::PRIVACY_PUBLIC);
                $select->where->equalTo('c.type', CompanyMicrolearningCapsule::TYPE_FREE);
                $select->where->equalTo('c.status', CompanyMicrolearningCapsule::STATUS_ACTIVE);
                
                if($search) {
                    $select->where->like('c.name', '%' . $search . '%');
                }
                $select->order(['name ASC']);
                
               //echo $select->getSqlString($this->adapter->platform); exit;

                $records = $queryMapper->fetchAll($select);

                $items = [];
                foreach($records as $record)
                {
                    $capsuleUser = $companyMicrolearningCapsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $record['id']);
                    
                    
                    $params = [
                        'company_id' => $record['company_uuid'], 
                        'topic_id' => $record['topic_uuid'], 
                        'capsule_id' => $record['uuid']
                    ];
                    

                    $item = [
               
                        'name' => $record['name'],
                        'image' => $this->url()->fromRoute('storage', ['type' => 'microlearning-capsule', 'code' => $record['uuid'], 'filename' => $record['marketplace']]),
                        'status' => $capsuleUser ? 'LABEL_ENROLLED' : 'LABEL_AVAILABLE',
                        'link_enroll' => $capsuleUser ? '' : $this->url()->fromRoute('marketplace/enroll', $params), 
                    ];
                    

                    array_push($items, $item);
                }

                
                
                $response = [
                    'success' => true,
                    'data' => $items
                ];
                
                return new JsonModel($response);
                
                
            } else {
                
                
                $this->layout()->setTemplate('layout/layout.phtml');
                $viewModel = new ViewModel();
                $viewModel->setTemplate('leaders-linked/marketplace/index.phtml');
                return $viewModel ;
            }
            
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
    }

    public function enrollAction()
    {
        $request = $this->getRequest();
        if($request->isPost()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $company_id = $this->params()->fromRoute('company_id');
            $topic_id = $this->params()->fromRoute('topic_id');
            $capsule_id = $this->params()->fromRoute('capsule_id');
            
            $companyMapper = CompanyMapper::getInstance($this->adapter);
            $company = $companyMapper->fetchOneByUuid($company_id);
            if(!$company) {
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_COMPANY_NOT_FOUND'
                ]);
            }
            
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
            $topic = $topicMapper->fetchOneByUuid($topic_id);
            if(!$topic) {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_TOPIC_NOT_FOUND'
                ]);
            }
            
            if($topic->company_id != $company->id) {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_UNAUTHORIZED'
                ]);
            }
            
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
            if(!$capsule) {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_CAPSULE_NOT_FOUND'
                ]);
            }
            
            if($capsule->topic_id != $topic->id) {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_UNAUTHORIZED'
                ]);
            }
            
            if($capsule->status != CompanyMicrolearningCapsule::STATUS_ACTIVE 
                || $capsule->privacy != CompanyMicrolearningCapsule::PRIVACY_PUBLIC
                || $capsule->type != CompanyMicrolearningCapsule::TYPE_FREE) {
                   
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_UNAUTHORIZED'
                ]);
            }
        
            
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
            
            if($capsuleUser) {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_UNAUTHORIZED'
                ]);
            }
            
            $capsuleUser = new CompanyMicrolearningCapsuleUser();
            $capsuleUser->company_id = $company->id;
            $capsuleUser->topic_id = $topic->id;
            $capsuleUser->capsule_id = $capsule->id;
            $capsuleUser->user_id = $currentUser->id;
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
            
            if($capsuleUserMapper->insert($capsuleUser)) {
                
                
                $capsuleUser = $capsuleUserMapper->fetchOne($capsule->id);
                if($capsuleUser) {
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
                    if($companyMicrolearningUser) {
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
                        
                    } else {
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
                        
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
                    } 
                }
                
                
                
     
                
                
                
                
                
                
                
                return new JsonModel([
                    'success'   => true,
                    'data'   => 'LABEL_YOU_HAVE_BEEN_SUCCESSFULLY_ENROLLED'
                ]);
            } else {
                return new JsonModel([
                    'success'   => false,
                    'data'   => 'ERROR_UNAUTHORIZED'
                ]);
            }
            
            
            
            
            
            
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
     
    }
    
    public function getCategoriesAction()
    {
        return new JsonModel([
            'success' => true,
            'data' => [
                'capsules' => 'Cápsulas'
            ]
        ]);
    }
    
}