Rev 829 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php/**** Controlador: Redes (Networks)**/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\JsonModel;use LeadersLinked\Mapper\NetworkMapper;use LeadersLinked\Model\Network;use LeadersLinked\Library\Functions;use Laminas\Mvc\I18n\Translator;use LeadersLinked\Cache\CacheInterface;use LeadersLinked\Library\Storage;class NetworkController 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 $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;}/*** Acción por defecto - no permitida*/public function indexAction(){return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}/*** Obtiene la información de una red específica*/public function viewAction(){$request = $this->getRequest();if (!$request->isGet()) {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}$id = $this->params()->fromRoute('id');if (!$id) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$networkMapper = NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOneByUuid($id);if (!$network) {return new JsonModel(['success' => false,'data' => 'ERROR_NETWORK_NOT_FOUND']);}if ($network->status != Network::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_NETWORK_IS_NOT_ACTIVE']);}$storage = Storage::getInstance($this->config, $this->adapter);$data = ['network_id' => $network->id,'network_uuid' => $network->uuid,'name' => $network->name,'main_hostname' => $network->main_hostname,'alternative_hostname' => $network->alternative_hostname,'admin_hostname' => $network->admin_hostname,'service_hostname' => $network->service_hostname,'status' => $network->status,'default' => $network->default,'theme_id' => $network->theme_id,'relationship_user_mode' => $network->relationship_user_mode,'moodle_name' => $network->moodle_name,'moodle_url' => $network->moodle_url,'moodle_image' => $storage->getNetworkImage($network),'microlearning_name' => $network->microlearning_name,'microlearning_appstore' => $network->microlearning_appstore,'microlearning_playstore' => $network->microlearning_playstore,'logo' => $storage->getNetworkLogo($network),'favico' => $storage->getNetworkFavico($network),'navbar' => $network->navbar,'intro' => $network->intro,'css_bg_color' => $network->css_bg_color,'css_body_bg_color' => $network->css_body_bg_color,'css_bg_color_secondary' => $network->css_bg_color_secondary,'css_font_color' => $network->css_font_color,'css_font_color_hover' => $network->css_font_color_hover,'css_title_color' => $network->css_title_color,'css_subtitle_color' => $network->css_subtitle_color,'css_icons_color' => $network->css_icons_color,'css_button_bg' => $network->css_button_bg,'css_button_bg_hover' => $network->css_button_bg_hover,'css_button_text_color' => $network->css_button_text_color,'css_button_bg_secondary' => $network->css_button_bg_secondary,'css_button_bg_secondary_hover' => $network->css_button_bg_secondary_hover,'css_button_text_color_secondary' => $network->css_button_text_color_secondary,'css_button_bg_tertiary' => $network->css_button_bg_tertiary,'css_button_text_color_tertiary' => $network->css_button_text_color_tertiary,'css_border_primary' => $network->css_border_primary,'css_border_trasnparent' => $network->css_border_trasnparent,'css_chat_received' => $network->css_chat_received,'css_chat_send' => $network->css_chat_send,'css_chat_color' => $network->css_chat_color,'css_light_gray' => $network->css_light_gray,'css_gray' => $network->css_gray,'css_danger' => $network->css_danger,'css_danger_hover' => $network->css_danger_hover,'css_online_green' => $network->css_online_green,'css_border_gray_primary' => $network->css_border_gray_primary,'css_white' => $network->css_white,'css_white_backdrop' => $network->css_white_backdrop,'css_border_radius' => $network->css_border_radius,'css_light_shadow' => $network->css_light_shadow,'css_shadow' => $network->css_shadow,'xmpp_active' => $network->xmpp_active,'xmpp_domain' => $network->xmpp_domain,'xmpp_hostname' => $network->xmpp_hostname,'xmpp_port' => $network->xmpp_port,'xmpp_admin_port' => $network->xmpp_admin_port,'inmail_domain' => $network->inmail_domain,'added_on' => $network->added_on,'updated_on' => $network->updated_on];return new JsonModel(['success' => true,'data' => $data]);}/*** Lista todas las redes activas*/public function listAction(){$request = $this->getRequest();if (!$request->isGet()) {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$page = (int) $this->params()->fromQuery('page', 1);$recordsPerPage = (int) $this->params()->fromQuery('records_per_page', 10);$orderField = Functions::sanitizeFilterString($this->params()->fromQuery('order_field', 'name'));$orderDirection = Functions::sanitizeFilterString($this->params()->fromQuery('order_direction', 'ASC'));$networkMapper = NetworkMapper::getInstance($this->adapter);$paginator = $networkMapper->fetchAllDataTable($search, $page, $recordsPerPage, $orderField, $orderDirection);$storage = Storage::getInstance($this->config, $this->adapter);$items = [];foreach ($paginator as $network) {$items[] = ['network_id' => $network->id,'network_uuid' => $network->uuid,'name' => $network->name,'main_hostname' => $network->main_hostname,'admin_hostname' => $network->admin_hostname,'status' => $network->status,'default' => $network->default,'logo' => $storage->getNetworkLogo($network),'link_view' => $this->url()->fromRoute('network/view', ['id' => $network->uuid])];}return new JsonModel(['success' => true,'data' => ['items' => $items,'total_count' => $paginator->getTotalItemCount(),'current_page' => $paginator->getCurrentPageNumber(),'total_pages' => $paginator->count(),'items_per_page' => $paginator->getItemCountPerPage()]]);}/*** Obtiene la red por defecto*/public function defaultAction(){$request = $this->getRequest();if (!$request->isGet()) {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}$networkMapper = NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOneByDefault();if (!$network) {return new JsonModel(['success' => false,'data' => 'ERROR_NO_DEFAULT_NETWORK_FOUND']);}$storage = Storage::getInstance($this->config, $this->adapter);$data = ['network_id' => $network->id,'network_uuid' => $network->uuid,'name' => $network->name,'main_hostname' => $network->main_hostname,'alternative_hostname' => $network->alternative_hostname,'admin_hostname' => $network->admin_hostname,'service_hostname' => $network->service_hostname,'status' => $network->status,'default' => $network->default,'theme_id' => $network->theme_id,'relationship_user_mode' => $network->relationship_user_mode,'moodle_name' => $network->moodle_name,'moodle_url' => $network->moodle_url,'moodle_image' => $storage->getNetworkImage($network),'microlearning_name' => $network->microlearning_name,'microlearning_appstore' => $network->microlearning_appstore,'microlearning_playstore' => $network->microlearning_playstore,'logo' => $storage->getNetworkLogo($network),'favico' => $storage->getNetworkFavico($network),'navbar' => $network->navbar,'intro' => $network->intro];return new JsonModel(['success' => true,'data' => $data]);}/*** Busca una red por hostname*/public function findByHostnameAction(){$request = $this->getRequest();if (!$request->isGet()) {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}$hostname = Functions::sanitizeFilterString($this->params()->fromQuery('hostname', ''));if (!$hostname) {return new JsonModel(['success' => false,'data' => 'ERROR_INVALID_PARAMETER']);}$networkMapper = NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOneByHostnameForFrontend($hostname);if (!$network) {return new JsonModel(['success' => false,'data' => 'ERROR_NETWORK_NOT_FOUND']);}$storage = Storage::getInstance($this->config, $this->adapter);$data = ['network_id' => $network->id,'network_uuid' => $network->uuid,'name' => $network->name,'main_hostname' => $network->main_hostname,'alternative_hostname' => $network->alternative_hostname,'admin_hostname' => $network->admin_hostname,'service_hostname' => $network->service_hostname,'status' => $network->status,'default' => $network->default,'theme_id' => $network->theme_id,'relationship_user_mode' => $network->relationship_user_mode,'logo' => $storage->getNetworkLogo($network),'favico' => $storage->getNetworkFavico($network),'navbar' => $network->navbar,'intro' => $network->intro];return new JsonModel(['success' => true,'data' => $data]);}/*** Obtiene solo los estilos CSS de una red específica*/public function getNetworkStylesAction(){$request = $this->getRequest();if (!$request->isGet()) {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}$currentNetworkPlugin = $this->plugin('currentNetworkPlugin');$network = $currentNetworkPlugin->getNetwork();if (!$network) {return new JsonModel(['success' => false,'data' => 'ERROR_NETWORK_NOT_FOUND']);}if ($network->status != Network::STATUS_ACTIVE) {return new JsonModel(['success' => false,'data' => 'ERROR_NETWORK_IS_NOT_ACTIVE']);}$styles = ['bg-color' => $network->css_bg_color,'body-bg-color' => $network->css_body_bg_color,'bg-color-secondary' => $network->css_bg_color_secondary,'font-color' => $network->css_font_color,'font-color-hover' => $network->css_font_color_hover,'title-color' => $network->css_title_color,'subtitle-color' => $network->css_subtitle_color,'icons-color' => $network->css_icons_color,'button-bg' => $network->css_button_bg,'button-bg-hover' => $network->css_button_bg_hover,'button-text-color' => $network->css_button_text_color,'button-bg-secondary' => $network->css_button_bg_secondary,'button-bg-secondary-hover' => $network->css_button_bg_secondary_hover,'button-text-color-secondary' => $network->css_button_text_color_secondary,'button-bg-tertiary' => $network->css_button_bg_tertiary,'button-text-color-tertiary' => $network->css_button_text_color_tertiary,'border-primary' => $network->css_border_primary,'border-trasnparent' => $network->css_border_trasnparent,'chat-received' => $network->css_chat_received,'chat-send' => $network->css_chat_send,'chat-color' => $network->css_chat_color,'light-gray' => $network->css_light_gray,'gray' => $network->css_gray,'danger' => $network->css_danger,'danger-hover' => $network->css_danger_hover,'online-green' => $network->css_online_green,'border-gray-primary' => $network->css_border_gray_primary,'white' => $network->css_white,'white-backdrop' => $network->css_white_backdrop,'border-radius' => $network->css_border_radius,'light-shadow' => $network->css_light_shadow,'shadow' => $network->css_shadow];return new JsonModel(['success' => true,'data' => $styles]);}}