Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6849 | 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\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\DailyPulseEmojiMapper;
use LeadersLinked\Mapper\DailyPulseRecordMapper;
use LeadersLinked\Mapper\EngagementUserMapper;
use LeadersLinked\Model\DailyPulseRecord;
use LeadersLinked\Model\DailyPulseEmoji;
use LeadersLinked\Mapper\EngagementMapper;
use LeadersLinked\Model\EngagementUser;
use LeadersLinked\Mapper\EngagementRecordMapper;
use LeadersLinked\Model\EngagementRecord;
use LeadersLinked\Cache\CacheInterface;
use Laminas\Mvc\I18n\Translator;

class DailyPulseController extends AbstractActionController
{
    /**
     *
     * @var \Laminas\Db\Adapter\AdapterInterface
     */
    private $adapter;
    
    /**
     *
     * @var \LeadersLinked\Cache\CacheInterface
     */
    private $cache;
    
    
    /**
     *
     * @var \Laminas\Log\LoggerInterface
     */
    private $logger;
    
    /**
     *
     * @var array
     */
    private $config;
    
    
    /**
     *
     * @var \Laminas\Mvc\I18n\Translator
     */
    private $translator;
    
    
    /**
     *
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
     * @param \LeadersLinked\Cache\CacheInterface $cache
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
     * @param array $config
     * @param \Laminas\Mvc\I18n\Translator $translator
     */
    public function __construct($adapter, $cache, $logger, $config, $translator)
    {
        $this->adapter      = $adapter;
        $this->cache        = $cache;
        $this->logger       = $logger;
        $this->config       = $config;
        $this->translator   = $translator;
    }
    
    public function indexAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $companyMapper = CompanyMapper::getInstance($this->adapter);
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
        

        $request = $this->getRequest();
        if($request->isGet()) {
            
            $emojiMapper  = DailyPulseEmojiMapper::getInstance($this->adapter);
            
            

            $engagementUserMapper =  EngagementUserMapper::getInstance($this->adapter);
            $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
            
            if($engagementUser) {
                $points = $engagementUser->points;
            } else {
                $points = 0;
            }
            
            $dailyRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);

            $howAreYouFeelRecord = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
            $climateOnYourOrganization = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
            
            
            $emojis_how_are_you_feel = [];
            $emojis_climate_on_your_organization = [];
            
            $records = $emojiMapper->fetchAllActiveByCompanyId($company->id);
            foreach($records as $record)
            {
                
      
                
                
                if($record->type == DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
                    
                    if($howAreYouFeelRecord) {
                        $link_save = '';
                        if($howAreYouFeelRecord->emoji_id != $record->id) {
                            continue;
                        }
                    } else {
                        $link_save =  $this->url()->fromRoute('daily-pulse/how_are_you_feel', ['id' => $record->uuid]);
                    }
                    
                    array_push($emojis_how_are_you_feel, [
                        'id' => $record->uuid,
                        'link_save' => $link_save,
                        'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
                    ]);
                }
                
                if($record->type == DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
                    
                    if($climateOnYourOrganization) {
                        $link_save = '';
                        if($climateOnYourOrganization->emoji_id != $record->id) {
                            continue;
                        }
                    } else {
                        $link_save =  $this->url()->fromRoute('daily-pulse/climate_on_your_organization', ['id' => $record->uuid]);
                    }
                    
                    array_push($emojis_climate_on_your_organization, [
                        'id' => $record->uuid,
                        'link_save' => $link_save,
                        'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
                    ]);
                }
            }
            
            
            
            
            
            $data = [
                'success' => true,
                'data' => [
                    'points' => $points,
                    'emojis_how_are_you_feel' => $emojis_how_are_you_feel,
                    'emojis_climate_on_your_organization' => $emojis_climate_on_your_organization,
                    
                ]
            ];
            
            return new JsonModel($data);
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }

        return new JsonModel($data);

        
    }
    
    
    public function howAreYouFeelAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $companyMapper = CompanyMapper::getInstance($this->adapter);
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
        
        $id = $this->params()->fromRoute('id');
        $emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
        $emoji = $emojiMapper->fetchOneByUuid($id);
        
        if(!$emoji) {
            
            $data = [
                'success' => false,
                'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
            ];
            
            return new JsonModel($data);
            
        }
        
        if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
            $data = [
                'success' => false,
                'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
            ];
            
            return new JsonModel($data);
        }
        
        if($emoji->type != DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
            $data = [
                'success' => false,
                'data' =>  'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
            ];
            
            return new JsonModel($data);
        }
        
        
        if($emoji->company_id != $company->id) {
            $data = [
                'success' => false,
                'data' =>  'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($data);
        }
        
        $request = $this->getRequest();
        if($request->isPost()) {

            $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
            $dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
            
            if($dailyPulse) {
                
                $data = [
                    'success' => false,
                    'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
                ];
                
            } else {
                $engagementMapper = EngagementMapper::getInstance($this->adapter);
                $engagement = $engagementMapper->fetchOneByCompanyId($company->id);

                $dailyPulse = new DailyPulseRecord();
                $dailyPulse->company_id = $company->id;
                $dailyPulse->user_id = $currentUser->id;
                $dailyPulse->emoji_id = $emoji->id;
                $dailyPulse->type = DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL;
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
                $dailyPulse->points = $emoji->points;
                
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
                if($result) {
           
                    if($engagement) {
                        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
                        $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
                        
                        if($engagementUser) {
                            $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
                            $engagementUserMapper->update( $engagementUser );
                        } else {
                            $engagementUser = new EngagementUser();
                            $engagementUser->company_id = $company->id;
                            $engagementUser->user_id = $currentUser->id;
                            $engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
                            $engagementUserMapper->insert( $engagementUser );
                        }
                        
                        $engagementRecord = new EngagementRecord();
                        $engagementRecord->company_id = $company->id;
                        $engagementRecord->user_id = $currentUser->id;
                        $engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
                        $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
                        
                        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
                        $engagementRecordMapper->insert($engagementRecord);
                    
                    }

                    $data = [
                        'success' => true,
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
                    ];
                } else {
                    $data = [
                        'success' => false,
                        'data' => $dailyPulseRecordMapper->getError()
                    ];
                }
            }
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
        }

        return new JsonModel($data);
    }
    
    public function climateOnYourOrganizationAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $companyMapper = CompanyMapper::getInstance($this->adapter);
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
        
        $id = $this->params()->fromRoute('id');
        $emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
        $emoji = $emojiMapper->fetchOneByUuid($id);
        
        if(!$emoji) {
            
            $data = [
                'success' => false,
                'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
            ];
            
            return new JsonModel($data);
            
        }
        
        if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
            $data = [
                'success' => false,
                'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
            ];
            
            return new JsonModel($data);
        }
        
        if($emoji->type != DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
            $data = [
                'success' => false,
                'data' =>  'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
            ];
            
            return new JsonModel($data);
        }
        
        
        if($emoji->company_id != $company->id) {
            $data = [
                'success' => false,
                'data' =>  'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($data);
        }
        
        $request = $this->getRequest();
        if($request->isPost()) {
            $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
            $dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
            
            if($dailyPulse) {
                $data = [
                    'success' => false,
                    'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
                ];

            } else {
                $engagementMapper = EngagementMapper::getInstance($this->adapter);
                $engagement = $engagementMapper->fetchOneByCompanyId($company->id);
                
                $dailyPulse = new DailyPulseRecord();
                $dailyPulse->company_id = $company->id;
                $dailyPulse->user_id = $currentUser->id;
                $dailyPulse->emoji_id = $emoji->id;
                $dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
                $dailyPulse->points = $emoji->points;
                
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
                if($result) {

                    if($engagement) {
                        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
                        $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
                        
                        if($engagementUser) {
                            $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_climate_on_your_organization : 0);
                            $engagementUserMapper->update( $engagementUser );
    
                        } else {
                            $engagementUser = new EngagementUser();
                            $engagementUser->company_id = $company->id;
                            $engagementUser->user_id = $currentUser->id;
                            $engagementUser->points = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
                            $engagementUserMapper->insert( $engagementUser );
                        }
                        
                        $engagementRecord = new EngagementRecord();
                        $engagementRecord->company_id = $company->id;
                        $engagementRecord->user_id = $currentUser->id;
                        $engagementRecord->points = $engagement->daily_pulse_climate_on_your_organization;
                        $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_CLIMATE_ON_YOUR_ORGANIZATION;
                        
                        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
                        $engagementRecordMapper->insert($engagementRecord);
                    }
                    
                    $data = [
                        'success' => true,
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
                    ];
                } else {
                    $data = [
                        'success' => false,
                        'data' => $dailyPulseRecordMapper->getError()
                    ];
                }
            }
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
        }
        
        return new JsonModel($data);
    }
    
    
    
   
}