/**
  * 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);
 }