Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1545 | 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\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\Log\LoggerInterface;
use Laminas\View\Model\JsonModel;

use LeadersLinked\Authentication\AuthAdapter;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Mapper\EmailTemplateMapper;
use LeadersLinked\Model\User;
use LeadersLinked\Model\UserType;

use LeadersLinked\Library\AesCipher;
use LeadersLinked\Library\QueueEmail;
use LeadersLinked\Library\Functions;
use LeadersLinked\Model\EmailTemplate;
use LeadersLinked\Mapper\UserPasswordMapper;
use LeadersLinked\Mapper\DeviceMapper;
use LeadersLinked\Model\Device;
use LeadersLinked\Mapper\ApplicationMapper;
use LeadersLinked\Model\Application;
use LeadersLinked\Validator\PasswordStrengthCheck;

use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Model\Company;
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
use LeadersLinked\Model\CompanyMicrolearningSlide;
use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
use LeadersLinked\Mapper\CompanyMicrolearningQuizMapper;
use LeadersLinked\Mapper\CompanyMicrolearningQuestionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningAnswerMapper;
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
use LeadersLinked\Model\CompanyMicrolearningUserLog;
use LeadersLinked\Mapper\DeviceHistoryMapper;
use LeadersLinked\Model\DeviceHistory;
use LeadersLinked\Mapper\PushMapper;
use LeadersLinked\Model\Push;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Mapper\CompanyServiceMapper;
use LeadersLinked\Model\Service;
use LeadersLinked\Model\CompanyService;
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
use LeadersLinked\Model\CompanyMicrolearningUserQuiz;
use LeadersLinked\Mapper\CompanyMicrolearningUserQuizMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
use LeadersLinked\Model\CompanyMicrolearningUser;
use LeadersLinked\Mapper\PushTemplateMapper;
use LeadersLinked\Model\PushTemplate;
use LeadersLinked\Mapper\SyncLogMapper;
use LeadersLinked\Model\SyncLog;
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
use LeadersLinked\Model\CompanyMicrolearningExtendUserCompany;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
use LeadersLinked\Model\CompanyMicrolearningTopic;
use LeadersLinked\Model\CompanyMicrolearningCapsule;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
use LeadersLinked\Form\SelfEvaluation\CapsuleCommentForm;
use LeadersLinked\Model\CompanyMicrolearningCapsuleComment;


class ServiceCapsuleCommentsController 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()
    {
        
        $request = $this->getRequest();
        
        if($request->isGet()) {
            $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
            
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $capsule_id = $this->params()->fromRoute('capsule_id');
            
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
            
            if(!$capsule) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
                   
                ]);
            
            }

            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
            if(! $capsuleUser) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
                ]);    
            }
            
            $capsuleCommentsMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
            $records = $capsuleCommentsMapper->fetchAllByCapsuleIdAndUserId($capsule->id, $currentUser->id);
            
            $data = [];
            foreach($records as $record)
            {
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
                
                array_push($data, [
                    'date' => $dt->format($serviceDatetimeFormat),
                    'rating' => $record->rating,
                    'comment' => $record->comment
                ]); 
            }
            
            return new JsonModel([
                'success' => true,
                'data' => $data
                
            ]);
        
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function getAction()
    {
        
        $request = $this->getRequest();
        
        if($request->isGet()) {
            $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
            
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $capsule_id = $this->params()->fromRoute('capsule_id');
            $comment_id = $this->params()->fromRoute('comment_id');
            
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
            
            if(!$capsule) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
                    
                ]);
                
            }
            
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
            if(! $capsuleUser) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
                ]);
            }
            
            $capsuleCommentsMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
            $capsuleComment = $capsuleCommentsMapper->fetchOneByUuid($comment_id);
            
            if(!$capsuleComment) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_COMMENT_NOT_FOUND',
                ]);
            }
            
            if($capsuleComment->capsule_id != $capsule->id || $capsuleComment->user_id != $currentUser->id) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE_COMMENT',
                ]);
            }
            
            
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $capsuleComment->added_on);
            
            return new JsonModel([
                'success' => true,
                'data' => [
                    'date' => $dt->format($serviceDatetimeFormat),
                    'rating' => $capsuleComment->rating,
                    'comment' => $capsuleComment->comment
                ]
                
            ]);
            
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function deleteAction()
    {
        
        $request = $this->getRequest();
        
        if($request->isPost()) {

            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $capsule_id = $this->params()->fromRoute('capsule_id');
            $comment_id = $this->params()->fromRoute('comment_id');
            
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
            
            if(!$capsule) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
                    
                ]);
                
            }
            
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
            if(! $capsuleUser) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
                ]);
            }
            
            $capsuleCommentsMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
            $capsuleComment = $capsuleCommentsMapper->fetchOneByUuid($comment_id);
            
            if(!$capsuleComment) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_COMMENT_NOT_FOUND',
                ]);
            }
            
            if($capsuleComment->capsule_id != $capsule->id || $capsuleComment->user_id != $currentUser->id) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE_COMMENT',
                ]);
            }
            
            
            $result =$capsuleCommentsMapper->delete($capsuleComment->id);
            if($result) {
                return new JsonModel([
                    'success' => true,
                    'data' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_DELETE'
                    
                ]);
            } else {
                return new JsonModel([
                    'success' => false,
                    'data' => $capsuleCommentsMapper->getError()
                    
                ]);
            }
            
            
            
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function addAction()
    {
        
        $request = $this->getRequest();
        
        if($request->isPost()) {
            
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $capsule_id = $this->params()->fromRoute('capsule_id');

            
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
            
            if(!$capsule) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
                    
                ]);
                
            }
            
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
            if(! $capsuleUser) {
                return new JsonModel([
                    'success' => false,
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
                ]);
            }
            
            
            $form = new  CapsuleCommentForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                
                $capsuleComment = new CompanyMicrolearningCapsuleComment();
                $capsuleComment->company_id = $capsule->company_id;
                $capsuleComment->topic_id = $capsule->topic_id;
                $capsuleComment->capsule_id = $capsule->id;
                $capsuleComment->user_id = $currentUser->id;
                $capsuleComment->comment = $dataPost['comment'];
                $capsuleComment->rating = $dataPost['rating'];
                
                
                $capsuleCommentsMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
                $result = $capsuleCommentsMapper->insert($capsuleComment);
                if($result) {
                    return new JsonModel([
                        'success' => true,
                        'data' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_ADDED'
                        
                    ]);
                } else {
                    return new JsonModel([
                        'success' => false,
                        'data' => $capsuleCommentsMapper->getError()
                        
                    ]);
                }
                
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
            
            
            
        }
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
}