Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

<?php

declare(strict_types=1);

namespace LeadersLinked\Plugin;

use Laminas\Mvc\Controller\Plugin\AbstractPlugin;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Authentication\AuthenticationService;
use LeadersLinked\Model\Device;
use LeadersLinked\Mapper\DeviceMapper;
use LeadersLinked\Model\UserType;


class CurrentUserPlugin extends AbstractPlugin
{
    
    /**
     * 
     * @var AuthenticationService
     */
    protected $auth;
    
    /**
     *
     * @var boolean
     */
    protected $hasIdentity;
    
    
    /**
     *
     * @var boolean
     */
    protected $hasImpersonate;
    
    
    /**
     *
     * @return \LeadersLinked\Model\User
     */
    protected $user;
    
    
    /**
     *
     * @return \LeadersLinked\Model\User
     */
    protected $impersonateUser;
    
    /**
     * 
     * @var string
     */
    protected $deviceId;
    
    /**
     * 
     * @var Device
     */
    protected $device;
    
    /**
     *
     * @param AdapterInterface $adapter
     */
    public function __construct($adapter) 
    {
        

        $this->auth = new \Laminas\Authentication\AuthenticationService();
        $this->impersonate_user = null;
        $this->hasIdentity = false;
        $this->hasImpersonate = false;
        if($this->auth->hasIdentity()) {
            $identity = $this->auth->getIdentity();
            $this->deviceId = isset($identity['device_id']) ? $identity['device_id'] : '';
            
            $userMapper     = \LeadersLinked\Mapper\UserMapper::getInstance($adapter);
            $this->user     = $userMapper->fetchOne($identity['user_id']);
            
     
            if($this->user) {
     
                $this->hasIdentity = true;
                if($this->user->impersonate_user_id) {
                    $this->hasImpersonate = true;
                    $this->impersonate_user = $userMapper->fetchOne($this->user->impersonate_user_id);
                }
                
               
                
                if($this->deviceId) {
                    $deviceMapper = DeviceMapper::getInstance($adapter);
                    $this->device = $deviceMapper->fetchOne($identity['device_id']);
                }
            }
        }
    }


    /**
     * 
     * @return \LeadersLinked\Model\User
     */
    public function getUser() 
    {
    
        if($this->hasImpersonate) {
            return $this->impersonate_user;
        } else {
            
            return $this->user;
        }
    }
    
    /**
     *
     * @return \LeadersLinked\Model\User
     */
    public function getRawUser()
    {
        
        return $this->user;
        
    }
    
    
    /**
     *
     * @return \LeadersLinked\Model\User
     */
    public function getImpersonateUser()
    {
        
        return $this->impersonate_user;
    }

    
    /**
     * 
     * @return string
     */
    public function getDeviceId()
    {
        return $this->deviceId;
    }

    /**
     * 
     * @return Device
     */
    public function getDevice()
    {
        return $this->device;
    }
    
    /**
     * 
     * @return int
     */
    public function getUserId()
    {
        if($this->hasIdentity) {
            if($this->hasImpersonate) {
                return $this->impersonate_user->id;
            } else {
                return $this->user->id;
            }
        } else {
            return 0;
        }
    }
    

    /**
     * @return string
     */
    public function getUserTypeId()
    {
        if($this->hasIdentity) {
            if($this->hasImpersonate) {
                return $this->impersonate_user->usertype_id;
            } else {
                return $this->user->usertype_id;
            }
        } else {
            return UserType::GUEST;
        }
    }
    
    /**
     *
     * @return boolean
     */
    public function hasImpersonate()
    {
        return $this->hasImpersonate;
    }
    
    
   
    /**
     * 
     * @return boolean
     */
    public function hasIdentity() 
    {
        return $this->hasIdentity;
    }
    
    public function clearIdentity()
    {
        $this->auth->clearIdentity();
    }

   
}