Proyectos de Subversion LeadersLinked - Services

Rev

Rev 290 | 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\Output\OutputInterface;
use Laminas\Db\Adapter\AdapterInterface;

use Laminas\Log\LoggerInterface;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyUserMapper;
use LeadersLinked\Model\User;
use LeadersLinked\Model\UserType;
use LeadersLinked\Model\CompanyUser;
use Laminas\Mvc\I18n\Translator;
use LeadersLinked\Cache\CacheInterface;

use LeadersLinked\Mapper\FeedMapper;
use LeadersLinked\Library\Storage;

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

    private function getDirContents($dir, &$results = array()) {
        $files = scandir($dir);
        
        foreach ($files as $key => $value) {
            $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
            if (!is_dir($path)) {
                $results[] = $path;
            } else if ($value != "." && $value != "..") {
                $this->getDirContents($path, $results);
                $results[] = $path;
            }
        }
        
        return $results;
    }
    
    protected function execute(InputInterface $input, OutputInterface $output) : int
    {
        $output->writeln('Inicializando el S3');
        
        $storage = Storage::getInstance($this->config, $this->adapter);
        
        $paths = [
            $this->config['leaderslinked.fullpath.chat']                            => $this->config['leaderslinked.storage.fullpath_chat'],
            $this->config['leaderslinked.fullpath.group']                           => $this->config['leaderslinked.storage.fullpath_group'],
            $this->config['leaderslinked.fullpath.user']                            => $this->config['leaderslinked.storage.fullpath_user'],
            $this->config['leaderslinked.fullpath.image']                           => $this->config['leaderslinked.storage.fullpath_image'],
            $this->config['leaderslinked.fullpath.job']                             => $this->config['leaderslinked.storage.fullpath_job'],
            $this->config['leaderslinked.fullpath.company']                         => $this->config['leaderslinked.storage.fullpath_company'],
            $this->config['leaderslinked.fullpath.feed']                            => $this->config['leaderslinked.storage.fullpath_feed'],
            $this->config['leaderslinked.fullpath.post']                            => $this->config['leaderslinked.storage.fullpath_post'],
            $this->config['leaderslinked.fullpath.microlearning_topic']             => $this->config['leaderslinked.storage.fullpath_microlearning_topic'],
            $this->config['leaderslinked.fullpath.microlearning_capsule']           => $this->config['leaderslinked.storage.fullpath_microlearning_capsule'],
            $this->config['leaderslinked.fullpath.microlearning_slide']             => $this->config['leaderslinked.storage.fullpath_microlearning_slide'],
            $this->config['leaderslinked.fullpath.job_description']                 => $this->config['leaderslinked.storage.fullpath_job_description'],
            $this->config['leaderslinked.fullpath.self_evaluation']                 => $this->config['leaderslinked.storage.fullpath_self_evaluation'],
            $this->config['leaderslinked.fullpath.performance_evaluation']          => $this->config['leaderslinked.storage.fullpath_performance_evaluation'],
            $this->config['leaderslinked.fullpath.recruitment_selection']           => $this->config['leaderslinked.storage.fullpath_recruitment_selection'],
            $this->config['leaderslinked.fullpath.planning_objectives_and_goals']   => $this->config['leaderslinked.storage.fullpath_planning_objectives_and_goals'],
            $this->config['leaderslinked.fullpath.message']                         => $this->config['leaderslinked.storage.fullpath_message'],
            $this->config['leaderslinked.fullpath.survey']                          => $this->config['leaderslinked.storage.fullpath_survey'],
            $this->config['leaderslinked.fullpath.network']                         => $this->config['leaderslinked.storage.fullpath_network'],
            $this->config['leaderslinked.fullpath.daily_pulse']                     => $this->config['leaderslinked.storage.fullpath_daily_pulse'],
            $this->config['leaderslinked.fullpath.engagement_reward']               => $this->config['leaderslinked.storage.fullpath_engagement_reward'],
            $this->config['leaderslinked.fullpath.knowledge_area']                  => $this->config['leaderslinked.storage.fullpath_knowledge_area'],
            $this->config['leaderslinked.fullpath.my_coach']                        => $this->config['leaderslinked.storage.fullpath_my_coach'],
        ];
        
        

        
        
  
        $output->writeln('Leyendo el directorio de storage ');

        
        
        $directory = 'data/storage';
        $records = $this->getDirContents($directory);
        foreach($records as $filepath)
        {
            
            
            
            if(!file_exists($filepath)) {
                continue;
            }
            
            if(is_dir($filepath) || !is_readable($filepath)) {
                continue;
            }
            
            
            $s = explode('data/storage', $filepath);
            
            $s3Filename = basename($filepath);
            $s3Filepath = $s[1];
            $s3Filepath = trim(str_replace('/' . $s3Filename, '', $s3Filepath));
            
            foreach($paths as $key => $value) 
            {
                $key = str_replace('data/storage', '', $key);
                $s3Filepath = str_replace($key, $value . '/', $s3Filepath );
            }
            
            
            if(empty($s3Filepath)) {
                $filename = $s3Filename; 
            } else {
                $filename = $s3Filepath . '/' . $s3Filename;
            }
            
            
            echo 'filename = ' . $filename . "\r\n";  
            echo 'filepath = ' . $filepath . "\r\n";    
            exit;
            
            
            $output->writeln('Comprobando el archivo : ' . $filename);
           
            if($storage->objectExist($filename)) {
                $output->writeln('Existe el archivo en el S3 : ' . $filename);
            } else {
    
                $output->writeln('Grabando el archivo : ' . $filename);
                $storage->putObject($filename, $filepath);
            }

    
        }       
        

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