Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6859 | 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;


class StorageController 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 downloadAction()
    {
        
        
        // Get the file name from GET variable.
        $code       = $this->params()->fromRoute('code', '');
        $fileName   = $this->params()->fromRoute('filename', '');
        $type       = $this->params()->fromRoute('type', 'user');
        
       
  
       // echo 'Code = '. $code . ' Filename = ' . $fileName . ' type = ' . $type; exit;
        

        
        $no_image = $this->config['leaderslinked.images_default.no_image'];
        $path = '';
        switch($type)
        {
            case 'user' : 
                $no_image = $this->config['leaderslinked.images_default.user_image'];
                $path = $this->config['leaderslinked.fullpath.user'];
                break;
                
                
            case 'user-profile' :
                $no_image = $this->config['leaderslinked.images_default.user_profile'];
                $path = $this->config['leaderslinked.fullpath.user'];
                break;
                
            case 'user-cover' :
                $no_image = $this->config['leaderslinked.images_default.user_cover'];
                $path = $this->config['leaderslinked.fullpath.user'];
                break;
                
            case 'company' :   
                $no_image = $this->config['leaderslinked.images_default.company_profile'];
                $path = $this->config['leaderslinked.fullpath.company'];
                break;
                
            case 'company-cover' :   
                $no_image = $this->config['leaderslinked.images_default.company_cover'];
                
                
                $path = $this->config['leaderslinked.fullpath.company'];
                break;
                
            case 'group' :
                $no_image = $this->config['leaderslinked.images_default.group_profile'];
                $path = $this->config['leaderslinked.fullpath.group'];
                break;
                
            case 'group-cover' :
                $no_image = $this->config['leaderslinked.images_default.group_cover'];
                $path = $this->config['leaderslinked.fullpath.group'];
                break;
                
            case 'job' :   
                $path = $this->config['leaderslinked.fullpath.job'];
                break;
                
            case 'chat' :
                $path = $this->config['leaderslinked.fullpath.chat'];
                break;
                
            case 'feed' :
                $path = $this->config['leaderslinked.fullpath.feed'];
                break;
 
            case 'post' :
                $path = $this->config['leaderslinked.fullpath.post'];
                break;
                
            case 'message' :
                $path = $this->config['leaderslinked.fullpath.message'];
                break;
                
            case 'microlearning-topic' : 
                $path = $this->config['leaderslinked.fullpath.microlearning_topic'];
                break;
                
            case 'microlearning-capsule' :
                $path = $this->config['leaderslinked.fullpath.microlearning_capsule'];
                break;
                
            case 'microlearning-slide' :
                $path = $this->config['leaderslinked.fullpath.microlearning_slide'];
                break;
                
            case 'daily-pulse' :     
                $path = $this->config['leaderslinked.fullpath.daily_pulse'];
                break;
                
            case 'engagement-reward' :
                $path = $this->config['leaderslinked.fullpath.engagement_reward'] ;
                break;
                
            case 'knowledge-area' :
                $path = $this->config['leaderslinked.fullpath.knowledge_area'] ;
                break;
                
            default : 
                $path = $this->config['leaderslinked.fullpath.image'];
                break;
                
        }
        if($code && $fileName) {
            $request_fullpath = $path . $code . DIRECTORY_SEPARATOR . $fileName;
        } else {
            $request_fullpath = $no_image;
        }
        
        
        $extensions     = explode('.',$request_fullpath);
        $extension      = strtolower(trim($extensions[count($extensions)-1]));
        if ($extension=='jpg' || $extension=='jpeg' || $extension=='gif' || $extension == 'png') {
            
            if(empty($fileName) ||  !file_exists($request_fullpath )) {
                $request_fullpath =  $no_image;
            }
            
            
           
        }
        

       

        if(file_exists($request_fullpath)) {
            
            // Try to open file
            if (!is_readable($request_fullpath)) {
                return $this->getResponse()->setStatusCode(500);
            }
            
            // Get file size in bytes.
            $fileSize = filesize($request_fullpath);
            
            // Get MIME type of the file.
            $mimeType = mime_content_type($request_fullpath);
            if($mimeType===false) {
                $mimeType = 'application/octet-stream';
            }
            
            $fileContent = file_get_contents($request_fullpath);
            
            $response = $this->getResponse();
            $headers = $response->getHeaders();
            $headers->addHeaderLine('Content-type: ' . $mimeType);
            $headers->addHeaderLine('Content-length: ' . $fileSize);
            
            if($fileContent!==false) {
                $response->setContent($fileContent);
            } else {
                $this->getResponse()->setStatusCode(500);
                return;
            }
        } else {
            return $this->getResponse()->setStatusCode(404);
        }

        return $this->getResponse();
    }  
    
}