Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17002 | 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\ViewModel;
use Laminas\View\Model\JsonModel;
use Laminas\Db\Sql\Expression;
use LeadersLinked\Model\Job;
use LeadersLinked\Mapper\JobSkillMapper;
use LeadersLinked\Mapper\SkillMapper;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Model\User;
use LeadersLinked\Mapper\CompanyLocationMapper;
use LeadersLinked\Mapper\CompanySizeMapper;
use LeadersLinked\Mapper\CompanyFollowerMapper;
use LeadersLinked\Model\Company;
use LeadersLinked\Mapper\GroupMapper;
use LeadersLinked\Mapper\GroupMemberMapper;
use LeadersLinked\Mapper\GroupTypeMapper;
use LeadersLinked\Model\Group;
use LeadersLinked\Model\Notification;
use LeadersLinked\Mapper\NotificationMapper;
use LeadersLinked\Mapper\UserProfileMapper;
use LeadersLinked\Mapper\ProfileVisitMapper;
use LeadersLinked\Mapper\ConnectionMapper;
use LeadersLinked\Model\CompanyFollower;
use LeadersLinked\Mapper\MicrolearningUserProgressMapper;
use LeadersLinked\Mapper\MicrolearningUserLogMapper;
use LeadersLinked\Mapper\DailyPulseRecordMapper;
use LeadersLinked\Model\DailyPulseRecord;
use LeadersLinked\Mapper\SurveyCampaignMapper;
use LeadersLinked\Mapper\RecruitmentSelectionApplicationMapper;
use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;
use LeadersLinked\Mapper\PerformanceEvaluationTestMapper;



class DashboardController 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();
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            
            
            
            $this->layout()->setTemplate('layout/layout-backend.phtml');
            $viewModel = new ViewModel();
 
            $company = $currentUserPlugin->getCompany();
            if($company) {
                
                $microlearningUserLogMapepr = MicrolearningUserLogMapper::getInstance($this->adapter);
                $end_date = $microlearningUserLogMapepr->fetchOneMaxDateActivityFromCompanyId($company->id);
                if($end_date) {
                
                
                    $t = strtotime($end_date);
                    $start_date = date('Y-m-d', strtotime('-30 days', $t));
                    
                    $closed_capsules_x_days = $microlearningUserLogMapepr->fetchAllCountClosedCapsulesDailyByCompanyIdAndStartDateAndEndDate($company->id, $start_date, $end_date);
                    $users_with_closed_capsules_x_days = $microlearningUserLogMapepr->fetchAllCountUsersWithClosedCapsulesDailyByCompanyIdAndStartDateAndEndDate($company->id, $start_date, $end_date);

                
                } else {
                    $closed_capsules_x_days = [];
                    $users_with_closed_capsules_x_days = [];
                    
                }
                
                $average_closed_capsules_x_days = 0;
                $average_users_with_closed_capsules_x_day = 0;
               
                
                $max = count($closed_capsules_x_days);
                if($max) {
                    for($i = 0; $i < $max; $i++)
                    {
                        $average_closed_capsules_x_days += $closed_capsules_x_days[$i]['total'];
                    }
                    $average_closed_capsules_x_days = $average_closed_capsules_x_days / $max;
                    
                }
                
                
                $max = count($users_with_closed_capsules_x_days);
                if($max) {
                    for($i = 0; $i < $max; $i++)
                    {
                        $average_users_with_closed_capsules_x_day += $users_with_closed_capsules_x_days[$i]['total'];
                    }
                    $average_users_with_closed_capsules_x_day = $average_users_with_closed_capsules_x_day / $max;
                    
                }
                
                
                $users_with_daily_pulse_x_days = [];
                $average_users_with_daily_pulse_x_days = 0;
                
                $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
                $end_date = $dailyPulseRecordMapper->fetchOneMaxDateActivityFromCompanyId($company->id);
                if($end_date) {
                    
                    
                    $t = strtotime($end_date);
                    $start_date = date('Y-m-d', strtotime('-30 days', $t));
                    
                    $users_with_daily_pulse_x_days = $dailyPulseRecordMapper->fetchAllCountUsersWithClosedCapsulesDailyByCompanyIdAndStartDateAndEndDate($company->id, $start_date, $end_date);
                    $average_users_with_daily_pulse_x_days = 0;
                    
                    $max = count($users_with_daily_pulse_x_days);
                    if($max) {
   
                        for($i = 0; $i < $max; $i++)
                        {
                            $average_users_with_daily_pulse_x_days += $users_with_daily_pulse_x_days[$i]['total'];
                        }
                        $average_users_with_daily_pulse_x_days = $average_users_with_daily_pulse_x_days / $max;
                        
                    }
                    
                    
                } 
                
                $followerMapper = CompanyFollowerMapper::getInstance($this->adapter);
                $total_followers = $followerMapper->fetchCountByCompanyId($company->id);
                
         
                $surveyCampaignMapper = SurveyCampaignMapper::getInstance($this->adapter);
                $total_surveys = $surveyCampaignMapper->fetchCountByCompanyId($company->id);
                
                $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
                $total_recruitment_selection_vacancies = $recruitmentSelectionVacancyMapper->fetchCountByCompanyId($company->id);
                
                $performanceEvaluationTestMapper = PerformanceEvaluationTestMapper::getInstance($this->adapter);
                $total_performance_evaluation_tests = $performanceEvaluationTestMapper->fetchCountByCompanyId($company->id);
                
                
                $viewModel->setTemplate('leaders-linked/dashboard/company.phtml');
                $viewModel->setVariables([
                    'average_closed_capsules_x_days'            => $average_closed_capsules_x_days,
                    'average_users_with_closed_capsules_x_day'  => $average_users_with_closed_capsules_x_day,
                    'closed_capsules_x_days'                    => $closed_capsules_x_days,
                    'users_with_closed_capsules_x_days'         => $users_with_closed_capsules_x_days,
                    'users_with_daily_pulse_x_days'             => $users_with_daily_pulse_x_days,
                    'average_users_with_daily_pulse_x_days'     => $average_users_with_daily_pulse_x_days,
                    'total_followers'                           => $total_followers,
                    'total_surveys'                             => $total_surveys,
                    'total_recruitment_selection_vacancies'     => $total_recruitment_selection_vacancies,
                    'total_performance_evaluation_tests'        => $total_performance_evaluation_tests,
                ]); 
                
            } else {
                $viewModel->setTemplate('leaders-linked/dashboard/index.phtml');
            }
       
  

            return $viewModel ;
        }
        
        return new JsonModel([
           'success' => false,
           'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function notificationActions()
    {
        
    }
    
    public function csrfAction()
    {
        $request = $this->getRequest();
        if($request->isGet()) {
            
            $token = md5(uniqid('CSFR-' . mt_rand(), true));
            $_SESSION['token'] = $token;
            
            
            return new JsonModel([
                'success' => true,
                'data' => $token
            ]);
            
            
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
        
        
    }
    
    public function chatAction()
    {
    }
    
    
    
    public function inMailPersonalAction()
    {
    }
    
    public function inMailCompanyAction()
    {
    }
   
    
    public function storageAction()
    {
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $request = $this->getRequest();
        if ($request->isGet()) {
            
            $code = $this->params()->fromRoute('code');
            if(empty($code)) {
                $data = [
                    'success' => false,
                    'data' => 'ERROR_STORAGE_CODE_INVALID'
                ];
                
                return new JsonModel($data);
            }
            
            $storageFileMapper = \LeadersLinked\Mapper\StorageFileMapper::getInstance($this->adapter);
            $storageFile = $storageFileMapper->fetchOneByCode($code);
            
            
            
            if($storageFile) {
                
                
                if(file_exists($storageFile->path)) {
                    
                    // Try to open file
                    if (!is_readable($storageFile->path)) {
                        return $this->getResponse()->setStatusCode(500);
                    }
                    
                    // Get file size in bytes.
                    $fileSize = filesize($storageFile->path);
                    
                    // Get MIME type of the file.
                    $mimeType = mime_content_type($storageFile->path);
                    if($mimeType===false) {
                        $mimeType = 'application/octet-stream';
                    }
                    
                    $fileContent = file_get_contents($storageFile->path);
                    
                    $response = $this->getResponse();
                    $headers = $response->getHeaders();
                    $headers->addHeaderLine('Content-type: ' . $mimeType);
                    $headers->addHeaderLine('Content-length: ' . $fileSize);
                    
                    if($fileContent!==false) {
                        $response->setContent($fileContent);
                        return $response;
                    } else {
                        $this->getResponse()->setStatusCode(500);
                        return;
                    }
                } else {
                    return $this->getResponse()->setStatusCode(404);
                }
                
            } else {
                return $this->getResponse()->setStatusCode(404);
            }
            
            
            
            
            
            
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
    }
}