Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

<?php

declare(strict_types=1);

namespace LeadersLinked\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
//use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Log\LoggerInterface;
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Model\CompanyMicrolearningUserProgress;


class RecalculateMicrolearningProgressCommand extends Command
{
    /**
     *
     * @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;
        
        parent::__construct();
    }

    
    protected function execute(InputInterface $input, OutputInterface $output) : int
    {

        /***** INICIO TOPICOS DUPLICADOS *****/

        $output->writeln('Comenzamos a buscar los registros duplicados de los Tópicos');
        $queryMapper = QueryMapper::getInstance($this->adapter);

        
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
        echo $sql . PHP_EOL;
       
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
        
        foreach($record_users as $record_user)
        {
            $user_id = $record_user['user_id'];
            
            
            $sql  = " SELECT DISTINCT(topic_id) AS topic_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";
            $sql .= " AND user_id = $user_id";
            
            echo $sql . PHP_EOL;
            $records_topic = $queryMapper->fetchAllUsingParameters($sql);
            

            foreach($records_topic as $record_topic)
            {
                $topic_id = $record_topic['topic_id'];
                
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";
                $sql .= " AND user_id = $user_id";
                $sql .= " AND topic_id = $topic_id";
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
                echo $sql . PHP_EOL;
                
                $record = $queryMapper->fetchOneUsingParameters($sql);
                $id = $record['id'];
                
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC ."' ";
                $sql .= " AND user_id = $user_id ";
                $sql .= " AND topic_id = $topic_id ";
                $sql .= " AND id <> $id ";
                echo $sql . PHP_EOL;
                
                $queryMapper->delete($sql);

            }
        }
        $output->writeln('Terminamos de procesar los registros duplicados de los Tópicos');
        
        /***** FIN TOPICOS DUPLICADOS *****/
        
        
        
        /***** INICIO CAPSULAS DUPLICADOS *****/
        
        $output->writeln('Comenzamos a buscar los registros duplicados de las Capsulas');
        $queryMapper = QueryMapper::getInstance($this->adapter);
        
        
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
        echo $sql . PHP_EOL;
        
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
        
        foreach($record_users as $record_user)
        {
            $user_id = $record_user['user_id'];
            
            
            $sql  = " SELECT DISTINCT(capsule_id) AS capsule_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";
            $sql .= " AND user_id = $user_id";
            
            echo $sql . PHP_EOL;
            $records_capsule = $queryMapper->fetchAllUsingParameters($sql);
            
            
            foreach($records_capsule as $record_capsule)
            {
                $capsule_id = $record_capsule['capsule_id'];
                
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";
                $sql .= " AND user_id = $user_id";
                $sql .= " AND capsule_id = $capsule_id";
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
                echo $sql . PHP_EOL;
                
                $record = $queryMapper->fetchOneUsingParameters($sql);
                $id = $record['id'];
                
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE ."' ";
                $sql .= " AND user_id = $user_id ";
                $sql .= " AND capsule_id = $capsule_id ";
                $sql .= " AND id <> $id ";
                echo $sql . PHP_EOL;
                
                $queryMapper->delete($sql);
                
            }
        }
        $output->writeln('Terminamos de procesar los registros duplicados de las Capsulas');
        
        /***** FIN CAPSULAS DUPLICADOS *****/
        
        
        
        /***** INICIO DIAPOSITIVAS DUPLICADOS *****/
        
        $output->writeln('Comenzamos a buscar los registros duplicados de las Diapositivas');
        $queryMapper = QueryMapper::getInstance($this->adapter);
        
        
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
        echo $sql . PHP_EOL;
        
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
        
        foreach($record_users as $record_user)
        {
            $user_id = $record_user['user_id'];
            
            
            $sql  = " SELECT DISTINCT(slide_id) AS slide_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";
            $sql .= " AND user_id = $user_id";
            
            echo $sql . PHP_EOL;
            $records_slides = $queryMapper->fetchAllUsingParameters($sql);
            
            
            foreach($records_slides as $record_slide)
            {
                $slide_id = $record_slide['slide_id'];
                
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";
                $sql .= " AND user_id = $user_id";
                $sql .= " AND slide_id = $slide_id";
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
                echo $sql . PHP_EOL;
                
                $record = $queryMapper->fetchOneUsingParameters($sql);
                $id = $record['id'];
                
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE ."' ";
                $sql .= " AND user_id = $user_id ";
                $sql .= " AND slide_id = $slide_id ";
                $sql .= " AND id <> $id ";
                echo $sql . PHP_EOL;
                
                $queryMapper->delete($sql);
                
            }
        }
        $output->writeln('Terminamos de procesar los registros duplicados de las Diapositivas');
        
        /***** FIN DIAPOSITIVAS DUPLICADOS *****/
        
        $progressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
        $slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
        
        
        $output->writeln('Recalculo del progreso de los Tópicos');
        
        $records = $progressMapper->fetchAllTopics();

       // print_r($records); exit;
        
        foreach($records as $record)
        {   $total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicId($record->company_id,$record->topic_id);
            $view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicId($record->user_id, $record->topic_id);
            
            $record->total_slides = $total_slides;
            $record->view_slides = $view_slides;
            $record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;

            $sql  = " UPDATE  " . CompanyMicrolearningUserProgressMapper::_TABLE;
            $sql .= " SET progress =  " . $record->progress;
            $sql .= " , total_slides =  " . $total_slides;
            $sql .= " , view_slides  =  " . $view_slides;
            $sql .= " WHERE id =  " . $record->id;
            echo $sql . PHP_EOL;
            
            $queryMapper->update($sql);
        }

        
        $output->writeln('Inicio del proceso de Recalculo de las Capsulas');
        $records = $progressMapper->fetchAllCapsules();
        foreach($records as $record)
        {
            $total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicIdAndCapsuleId($record->company_id, $record->topic_id, $record->capsule_id);
            $view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicIdAndCapsuleId($record->user_id, $record->topic_id, $record->capsule_id);
            
            $record->total_slides = $total_slides;
            $record->view_slides = $view_slides;
            $record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;
            
            
            $sql  = " UPDATE  " . CompanyMicrolearningUserProgressMapper::_TABLE;
            $sql .= " SET progress =  " . $record->progress; 
            $sql .= " , total_slides =  " . $total_slides; 
            $sql .= " , view_slides  =  " . $view_slides; 
            $sql .= " WHERE id =  " . $record->id; 
            echo $sql . PHP_EOL;
            
            $queryMapper->update($sql);
            
            //$progressMapper->update($record);
        }
   

        $output->writeln('Fin del proceso de Recalculo');
        
        return 0;
    }
    
    
    
}