Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15394 | Ir a la última revisión | 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\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Library\Functions;
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
use LeadersLinked\Library\Image;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
use LeadersLinked\Model\CompanyMicrolearningTopic;
use LeadersLinked\Form\TopicAddForm;
use LeadersLinked\Form\TopicEditForm;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Form\MyPrivateNetworkIntroForm;
use LeadersLinked\Mapper\NetworkMapper;
use LeadersLinked\Form\MyPrivateNetworkStylesFilter;
use LeadersLinked\Form\MyPrivateNetworkStylesForm;
use LeadersLinked\Form\MyPrivateNetworkLogoForm;


class MyPrivateNetworkController extends AbstractActionController
{
    /**
     *
     * @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;

    }
    
    /**
     * 
     * Generación del listado de perfiles
     * {@inheritDoc}
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
     */
    public function indexAction()
    {
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);

    }

    public function introAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
           
            $form = new MyPrivateNetworkIntroForm();
            $form->setData([
                'intro' => $network->intro
            ]); 
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/intro.phtml');
            $viewModel->setVariable('form', $form);
            return $viewModel ;
            
        }
        else if($request->isPost()) {
    
            $form = new  MyPrivateNetworkIntroForm();;
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                $network->intro = $dataPost['intro'];
                if($networkMapper->update($network)) {
                   
                    $this->logger->info('Se actualizo el texto intro de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_UPDATED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $networkMapper->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    
    public function stylesAndColorsAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
            
            $data = [];
            foreach($network as $key => $value)
            {
                if(strpos($key, 'css') !== false) {
                    
                    $data[$key] = $network->{$key};
                    
                }
            }
            
            $form = new MyPrivateNetworkStylesForm();
            $form->setData($data);
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/styles-and-colors.phtml');
            $viewModel->setVariable('form', $form);
            return $viewModel ;
            
        }
        else if($request->isPost()) {
            
            $form = new  MyPrivateNetworkStylesForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                foreach($network as $key => $value)
                {
                    if(strpos($key, 'css') !== false) {
                        
                        $network->{$key} = $dataPost[$key];
                        
                    }
                }
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo los estilos y colores de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_UPDATED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $networkMapper->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    public function logoAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
            
            $form = new MyPrivateNetworkLogoForm();

            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/logo.phtml');
            $viewModel->setVariables([
                'form' => $form,
                'image_size' => $this->config['leaderslinked.image_sizes.network_logo'],
                
            ]);

            return $viewModel ;
            
        }
        else if($request->isPost()) {
            
            $form = new  MyPrivateNetworkLogoForm();
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.network_logo']);
                $path = $this->config['leaderslinked.fullpath.network'];
                
                $target_path = $path . $currentNetwork->uuid;
                if(!file_exists($target_path)) {
                    mkdir($target_path, 0755, true);
                }
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
   
               try {
                    if($network->logo) {
                       if(!image ::delete($target_path, $network->logo)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                        
                        
                    $filename = 'logo.png';
                    $crop_to_dimensions = true;
                    if(Image::uploadImage($tmp_filename, $target_path, $filename, $target_width, $target_height, $crop_to_dimensions)) {
                       $network->logo = $filename;
                       ;
                    }
                } catch(\Throwable $e) {
                    error_log($e->getTraceAsString());
                }
                
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo el logo de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_UPDATED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $networkMapper->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    public function navbarAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
            
            $form = new MyPrivateNetworkLogoForm();
            
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/navbar.phtml');
            $viewModel->setVariables([
                'form' => $form,
                'image_size' => $this->config['leaderslinked.image_sizes.network_navbar'],
                
            ]);
            
            return $viewModel ;
            
        }
        else if($request->isPost()) {
            
            $form = new  MyPrivateNetworkLogoForm();
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.network_navbar']);
                $path = $this->config['leaderslinked.fullpath.network'];
                
                $target_path = $path . $currentNetwork->uuid;
                if(!file_exists($target_path)) {
                    mkdir($target_path, 0755, true);
                }
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
                
                try {
                    if($network->navbar) {
                        if(!image ::delete($target_path, $network->navbar)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                    
                    
                    $filename = 'navbar.png';
                    $crop_to_dimensions = true;
                    if(Image::uploadImage($tmp_filename, $target_path, $filename, $target_width, $target_height, $crop_to_dimensions)) {
                        $network->navbar = $filename;
                        ;
                    }
                } catch(\Throwable $e) {
                    error_log($e->getTraceAsString());
                }
                
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo el navbar de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_UPDATED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $networkMapper->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    public function faviconAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
            
            $form = new MyPrivateNetworkLogoForm();
            
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/favico.phtml');
            $viewModel->setVariables([
                'form' => $form,
                'image_size' => $this->config['leaderslinked.image_sizes.network_favico'],
                
            ]);
            
            return $viewModel ;
            
        }
        else if($request->isPost()) {
            
            $form = new  MyPrivateNetworkLogoForm();
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.network_favico']);
                $path = $this->config['leaderslinked.fullpath.network'];
                
                $target_path = $path . $currentNetwork->uuid;
                if(!file_exists($target_path)) {
                    mkdir($target_path, 0755, true);
                }
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
                
                try {
                    if($network->favico) {
                        if(!image ::delete($target_path, $network->favico)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                    
                    
                    $filename = 'favico.png';
                    $crop_to_dimensions = true;
                    if(Image::uploadImage($tmp_filename, $target_path, $filename, $target_width, $target_height, $crop_to_dimensions)) {
                        $network->favico = $filename;
                        ;
                    }
                } catch(\Throwable $e) {
                    error_log($e->getTraceAsString());
                }
                
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo el favico de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_UPDATED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $networkMapper->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
}