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 LeadersLinked\Library\Functions;
use LeadersLinked\Library\Image;
use LeadersLinked\Mapper\NetworkMapper;
use LeadersLinked\Form\MyPrivateNetwork\MyPrivateNetworkIntroForm;
use LeadersLinked\Form\MyPrivateNetwork\MyPrivateNetworkStylesForm;
use LeadersLinked\Form\MyPrivateNetwork\MyPrivateNetworkLogoForm;
use LeadersLinked\Form\MyPrivateNetwork\MyPrivateNetworkCalendarForm;
use LeadersLinked\Mapper\ThemeMapper;
use LeadersLinked\Form\MyPrivateNetwork\MyPrivateNetworkMoodleForm;


class MyPrivateNetworkController 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;
    }
    
    /**
     * 
     * 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()) {
            
            $search_key = 'css_';
            $search_length = strlen($search_key);
            
            $search_exclude_key = 'css_calendar_';
            $search_exclude_length = strlen($search_exclude_key);
            
            
            $data = [];
            foreach($network as $key => $value)
            {
                
                if(substr($key, 0, $search_length) == $search_key && substr($key, 0, $search_exclude_length) != $search_exclude_key )  {
                    $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()) {
                
                
                $search_key = 'css_';
                $search_length = strlen($search_key);
                
                $search_exclude_key = 'css_calendar_';
                $search_exclude_length = strlen($search_exclude_key);
                
                $dataPost = (array) $form->getData();
                
                foreach($network as $key => $value)
                {
                    if(substr($key, 0, $search_length) == $search_key && substr($key, 0, $search_exclude_length) != $search_exclude_key )  {
                        
                        $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);
        
        $themeMapper = ThemeMapper::getInstance($this->adapter);
        $theme = $themeMapper->fetchOne($currentNetwork->theme_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' => $theme->imagesize_moodle,
                
            ]);

            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();
                
                $image = Image::getInstance($this->config);
                $target_path = $image->getStorage()->getPathNetwork();
                
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
   
               try {
                    if($network->logo) {
                       if(!$image->getStorage()->deleteFile($target_path, $network->uuid, $network->logo)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                        
                    list($target_width, $target_height) = explode('x', $theme->imagesize_moodle);
                    $filename = 'logo.png';
                    $crop_to_dimensions = false;
                    $unlink_source = true; 
                    
                    if($image->uploadProcessChangeSize($tmp_filename, $target_path, $network->uuid, $filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
                        $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);
        
        
        $themeMapper = ThemeMapper::getInstance($this->adapter);
        $theme = $themeMapper->fetchOne($currentNetwork->theme_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' => $theme->imagesize_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();
                
                $image = Image::getInstance($this->config);
                $target_path = $image->getStorage()->getPathNetwork();
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
                
                try {
                    if($network->navbar) {
                        if(!$image->getStorage()->deleteFile($target_path, $network->uuid, $network->navbar)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                    
                    list($target_width, $target_height) = explode('x', $theme->imagesize_navbar);
                    $filename = 'navbar.png';
                    $crop_to_dimensions = false;
                    $unlink_source = true;
                    
                    if($image->uploadProcessChangeSize($tmp_filename, $target_path, $network->uuid, $filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
                        $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);
        
        $themeMapper = ThemeMapper::getInstance($this->adapter);
        $theme = $themeMapper->fetchOne($currentNetwork->theme_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' => $theme->imagesize_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();
                
                
                $image = Image::getInstance($this->config);
                $target_path = $image->getStorage()->getPathNetwork();

                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
                
                try {
                    if($network->favico) {
                        if(!$image->getStorage()->deleteFile($target_path, $network->uuid, $network->favico)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                    
                    list($target_width, $target_height) = explode('x', $theme->imagesize_favico);
                    $filename = 'favico.png';
                    $crop_to_dimensions = false;
                    $unlink_source = true;
                    
                    if($image->uploadProcessChangeSize($tmp_filename, $target_path, $network->uuid, $filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
                       $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);
    }
    
    
    public function calendarAction()
    {
        $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()) {
            
            $search_key = 'css_calendar_';
            $search_length = strlen($search_key);
            
            
            $data = [];
            foreach($network as $key => $value)
            {
                if(substr($key, 0,  $search_length) ==  $search_key) {
                    $data[$key] = $network->{$key};
                    
                }
            }
            

            $form = new MyPrivateNetworkCalendarForm();
            $form->setData($data);
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/calendar.phtml');
            $viewModel->setVariable('form', $form);
            return $viewModel ;
            
        }
        else if($request->isPost()) {
            
            $form = new  MyPrivateNetworkCalendarForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                
                $search_key = 'css_calendar_';
                $search_length = strlen($search_key);
                
                
                foreach($network as $key => $value)
                {
                    if(substr($key, 0,  $search_length) ==  $search_key) {
                        
                        $network->{$key} = $dataPost[$key];
                        
                    }
                }
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo los colores del calendario 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 moodleAction()
    {
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
        $currentUser        = $currentUserPlugin->getUser();
        
        $currentNetworkPlugin =  $this->plugin('currentNetworkPlugin');
        $currentNetwork = $currentNetworkPlugin->getNetwork();
        
        $networkMapper = NetworkMapper::getInstance($this->adapter);
        $network = $networkMapper->fetchOne($currentNetwork->id);
        
        $themeMapper = ThemeMapper::getInstance($this->adapter);
        $theme = $themeMapper->fetchOne($currentNetwork->theme_id);
        
        
        
        $request    = $this->getRequest();
        if($request->isGet()) {
            
            
            
            $form = new MyPrivateNetworkMoodleForm();
            
            
            $this->layout()->setTemplate('layout/layout-backend');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-private-network/moodle.phtml');
            $viewModel->setVariables([
                'form' => $form,
                'image_size' => $theme->imagesize_moodle,
                
            ]);
            
            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();
                
                $image = Image::getInstance($this->config);
                $target_path =  $image->getStorage()->getPathNetwork();
                
                
                $files         = $this->getRequest()->getFiles()->toArray();
                $tmp_filename  = $files['file']['tmp_name'];
                
                try {
                    if($network->moodle_image) {
                        if(!$image->getStorage()->deleteFile($target_path, $network->uuid, $network->logo)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }
                    
                    
                    $filename = 'moodle.png';
                    list($target_width, $target_height) = explode('x', $theme->imagesize_moodle);
                    $crop_to_dimensions = false;
                    $unlink_source = true;
                    
                    if($image->uploadProcessChangeSize($tmp_filename, $target_path, $network->uuid, $filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
                        $network->moodle_image = $filename;
                    }
                } catch(\Throwable $e) {
                    error_log($e->getTraceAsString());
                }
                
                
                if($networkMapper->update($network)) {
                    
                    $this->logger->info('Se actualizo el logo de moodle : ' . $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);
    }
    
}