/** * Devuelve un array con los atributos de cada columna del módulo $modulo * * Los atributos son: caption, visible, updatable, default, permission, help * * Los valores de los atributos se obtienen de las variables de entorno del módulo, * y si no existen, se cargan del config.yml correspondiente * * @param string $modulo El nombre del módulo * @return array Array de atributos */ public function getAtributos($modulo) { $atributos = array(); // PRIMERO LEO LOS ATRIBUTOS DE LAS COLUMNAS QUE ESTÁN EN CONFIG.YML $columnasConfig = $this->getNode('columns'); foreach ($columnasConfig as $keyColumna => $valueColumna) { foreach (VariablesEnv::$varEnvMod as $keyVar => $keyColumnaConfig) { $atributos[$keyColumna][$keyVar] = isset($valueColumna[$keyColumnaConfig]) ? $valueColumna[$keyColumnaConfig] : ""; } } return $atributos; // LUEGO LOS SUSTITUYO POR LOS ESPECIFICOS QUE ESTAN EN LAS VAR DE ENTORNO DE PROYECTO // DE TAL MANERA QUE PREVALECEN LOS DEFINIDOS EN LAS VARIABLES DE ENTORNO, PERO // SI NO EXISTIERA LA VARIABLE DE ENTORNO CORRESPONDIENTE ENTONCES PONGO LA DEL CONFIG. $variables = new Variables('Mod', 'Env', $modulo); if (is_array($variables->getDatosYml())) { $arrayColumnas = $variables->getNode('columns'); foreach ($arrayColumnas as $key => $value) { $atributos[$key] = $value; if (is_array($columnasConfig[$key])) { foreach ($columnasConfig[$key] as $keyConfig => $valueConfig) { if (!isset($atributos[$key][$keyConfig])) { $atributos[$key][$keyConfig] = $valueConfig; } } } } } else { // Aún no se han definido las variables, por lo tanto cargo los atributos // en base al array de correspondencia de atributos predeterminados foreach ($columnasConfig as $keyColumna => $valueColumna) { foreach (VariablesEnv::$varEnvMod as $keyVar => $keyColumnaConfig) { $atributos[$keyColumna][$keyVar] = isset($valueColumna[$keyColumnaConfig]) ? $valueColumna[$keyColumnaConfig] : ""; } } } unset($variables); // Si el usuario es super pongo la visibilidad a TRUE //if ($_SESSION['usuarioPortal']['Id'] == '1') // foreach ($atributos as $key => $value) // ++$atributos[$key]['visible']; /** if (!$atributos[$key]['visible']) { $atributos[$key]['visible'] = '1'; $atributos[$key]['caption'] .= " (oculta)"; } */ return $atributos; }
/** * Muestra el formulario de mantenimineto de las variables de entorno y web * a nivel global, de app, o de módulo, dependiendo de los valores GET request. * * La posicion 1 del request indica el tipo de variable. Valores posibles: * * Web : Variables web * Env : Variables entorno * * La posicion 2 del request indica el ámbito. Valores posibles: * * Pro: para las variables de entorno globales al projecto * App: para las variables de entorno de un aplicación * Mod: para las variables de entorno de un modulo * * Si la posicion 2 es 'App' ó 'Mod', la posición 3 del request indica * el nombre de la aplicación o del módulo * * Si no viene nada en el request, no se mostrar * @return array Array(template,values) */ public function indexAction($ambito = '', $tipo = '', $nombre = '') { if ($tipo == '') { $tipo = $this->request[1]; } if ($tipo == '') { $tipo = 'Env'; } if ($ambito == '') { $ambito = $this->request[2]; } if ($ambito == '') { $ambito = 'Pro'; } if ($nombre == '') { $nombre = $this->request[3]; } // PUEDE VER LAS VARIABLES DE ENTORNO Y WEB ÚNICAMENTE SI ES DE PERFIL 1 // PUEDE VER LAS VARIABLES WEB SI TIENE PERMISO $idPerfil = $_SESSION['usuarioPortal']['IdPerfil']; //$permiso = ( ($idPerfil == '1') or ( ($tipo == 'Web') and ($this->values['permisos']['permisosModulo']['VW'])) ); $permiso = $this->values['permisos']['permisosModulo']['VW']; if ($permiso) { $this->variables = new Variables($ambito, $tipo, $nombre); $this->values['errores'] = array_merge((array) $this->values['errores'], (array) $this->variables->getErrores()); $datos = $this->variables->getValores(); switch ($ambito) { case 'Pro': $this->ponValoresDefecto($ambito, $tipo, '', $datos); if ($tipo === 'Web') { // Coger la visibilidad de las variables web $var = new Variables($ambito, 'Env'); $this->values['visibilidad'] = $var->getNode('showVarWeb'); unset($var); } break; case 'App': $this->ponValoresDefecto($ambito, $tipo, $nombre, $datos); // Variables especificas $datos['especificas'] = $this->getEspecificas($datos['especificas']); break; case 'Mod': $this->ponValoresDefecto($ambito, $tipo, $nombre, $datos); switch ($tipo) { case 'Env': // Constuyo array con los nombres de las columnas del modulo(=entidad) // para mostrar en el template las variables Web/Env de cada columna. $archivoConfig = new Form($nombre); $columnasConfig = $archivoConfig->getNode('columns'); unset($archivoConfig); // Creo el nodo 'columns' creando si no existen o asignado valores por defecto si no tienen // provinientes del 'config.yml' de cada módulo // SI SE AÑADE UNA COLUMNA NUEVA EN config.yml TAMBIEN SERÁ AÑADIDA EN EL FORMULARIO DE VARIABLES if (is_array($columnasConfig)) { foreach ($columnasConfig as $columnaConfig => $atributosConfig) { $valoresActuales = $datos['columns'][$columnaConfig]; $datos['columns'][$columnaConfig] = $this->ponAtributos((array) $valoresActuales, $atributosConfig); } } break; case 'Web': // Coger la visibilidad de las variables web $var = new Variables($ambito, 'Env', $nombre); $this->values['visibilidad'] = $var->getNode('showVarWeb'); unset($var); break; } // Variables especificas $datos['especificas'] = $this->getEspecificas($datos['especificas']); // Valores para el desplegable de columnas if (class_exists($nombre)) { $entidad = new $nombre(); $this->values['columnas'] = $entidad->getColumnsNames(); unset($entidad); } break; } $template = $this->variables->getTemplate(); $this->values['tipo'] = $tipo; $this->values['ambito'] = $ambito; $this->values['nombre'] = $nombre; $this->values['titulo'] = $this->variables->getTitulo(); $this->values['d'] = $datos; $this->values['yml'] = $this->variables->getYml(); $this->values['template'] = $this->variables->getTemplate(); unset($this->variables); } else { $template = '_global/forbiden.html.twig'; } return array('template' => $template, 'values' => $this->values); }
/** * Pone las variables de entorno del proyecto/app/modulo en curso * relativas al control de visibilidad de sus variables web * * Respeta los valores que hubiera en el yml del proyecto respecto * a las variables web definidas. * * @return void */ private function ponVisibilidad() { $variables = new Variables($this->_objeto['ambito'], 'Env', $this->_objeto['nombre']); $valoresActuales = $variables->getNode('showVarWeb'); $valores['globales'] = array(); $valores['especificas'] = array(); if (is_array($this->_objeto['datos']['globales'])) { foreach ($this->_objeto['datos']['globales'] as $key => $value) { if (!isset($valoresActuales['globales'][$key])) { $valores['globales'][$key] = 0; } else { $valores['globales'][$key] = $valoresActuales['globales'][$key]; } } } if (is_array($this->_objeto['datos']['especificas'])) { foreach ($this->_objeto['datos']['especificas'] as $key => $value) { if (!isset($valoresActuales['especificas'][$key])) { $valores['especificas'][$key] = 0; } else { $valores['especificas'][$key] = $valoresActuales['especificas'][$key]; } } } $variables->setNode('showVarWeb', $valores); $variables->save(); unset($variables); }