-------------------------------------------------------------------------------
$Id$
-----------------------------------------------------------------------------*/
require_once 'MECON/Marco/ImagenAnimada.php';
require_once 'MECON/Marco/Menu.php';
require_once 'MECON/Marco/MenuHorizontal.php';
require_once 'MECON/Marco/MenuVertical.php';
require_once 'MECON/Marco/MenuOculto.php';
/**
* Clase para el manejo de las secciones
*
* @access public
*/
class MECON_Marco_Seccion {
/**
* Nombre de la seccion.
*
* @var string $nombre
* @access private
*/
var $_nombre = '';
/**
* Este es el nombre de la imagen
*
* @var Imagen $imagen
* @access private
*/
var $_imagen;
/**
* Hijos (menu) de la seccion.
*
* @var Menu $hijos
* @access private
*/
var $_hijos;
/**
* Valor string del tipo de menu de la seccion
*
* @var string $tipoMenu
* @access private
*/
var $_tipoMenu = '';
/**
* Array con la configuracion del sistema
*
* @var array $configuracion
* @access private
*/
var $_configuracion = array();
/**
* Contiene el html del menu de la seccion
*
* @var string $menuHtml
* @access private
*/
var $_menuHtml = '';
/**
* Nombre del archivo pagina.
*
* @var string $link
* @access private
*/
var $_link = '';
/**
* Recibe como parametro el nombre de la seccion
*
* @param array $seccion Array con la informacion de la seccion
* @param array $configuracion Array con la configuracion del sistema
*
* @return void
* @access public
*/
function MECON_Marco_Seccion($seccion, $configuracion)
{
$this->_nombre = @strval($seccion['nombre']);
$imgComun = @strval($seccion['imagenComun']);
$imgMouseOn = @strval($seccion['imagenMouseOn']);
$imgSelect = @strval($seccion['imagenSelect']);
$this->_tipoMenu = @strval(strtolower($seccion['tipoMenu']));
$this->_link = @strval($seccion['link']);
$this->_imagen = new MECON_Marco_ImagenAnimada( $imgComun,
$imgMouseOn,
$imgSelect,
$configuracion['directorios']['imagenes'],
$this->_nombre,
$configuracion['directorios']['root'].'/'.
$this->_link,
@strval($seccion['alt']));
if (!is_null($configuracion)) {
$this->_configuracion = $configuracion;
}
if (array_key_exists('hijos', $seccion)) {
$this->_cargarHijos($seccion['hijos']);
}
}
/**
* Funcion que devuelve un string con el html a imprimir por pantalla.
*
* @param string $link_sel Indica la pagina a la cual se quiere acceder.
*
* @return string
* @access public
*/
function toHtml($link_sel)
{
if (!$this->_configuracion['links']) {
$this->_imagen->setHabilitada(false);
}
if ($this->verifSeccionSeleccionada($link_sel)) {
$this->_imagen->setSeleccionada(true);
}
return $this->_imagen->toHtml();
}
/**
* Carga el array con los objetos hijos de la seccion
*
* @param array $hijos Array con los datos de los hijos de la seccion
*
* @return void
* @access private
*/
function _cargarHijos($hijos)
{
if ($this->_tipoMenu == 'vertical'){
$tmp = new MECON_Marco_MenuVertical($this->_configuracion);
}
elseif ($this->_tipoMenu == 'horizontal') {
$tmp = new MECON_Marco_MenuHorizontal($this->_configuracion);
}
else {
$tmp = new MECON_Marco_MenuOculto($this->_configuracion);
}
foreach ($hijos as $hijo) {
$hijo['alt'] = @$hijo['alt'] ? $hijo['alt'] : $hijo['nombre'];
$hijo['nombre'] = $this->_nombre.'-'.$hijo['nombre'];
$tmp->agregarComponente($hijo);
}
$this->_hijos = $tmp;
}
/**
* Funcion que se encarga de desserializar el array asociativo paginas-secciones.
*
* @return void
* @access private
*/
function _desSerializarArraySecciones()
{
$file_cache = strtr($this->_configuracion['directorios']['root'],'/','_');
$tmp = $this->_configuracion['directorios_fs']['cache'].'/'.ARRAYSECCIONES_SERIALIZADO.'_'.$file_cache;
if (file_exists($tmp)) {
$s = implode("", @file($tmp));
return unserialize($s);
}
else {
return null;
}
}
/**
* Funcion que se encarga de verificar si la pagina a la cual se quiere
* acceder pertenece a la seccion que estoy dibujando. Se utiliza como
* agregado en toHtml.
* Devuelve 1 si pertenece a la seccion, en caso contrario 0.
*
* @param string $link_sel Nombre de la pagina a la cual se quiere acceder.
*
* @return int
* @access public
*/
function verifSeccionSeleccionada($link_sel)
{
$tmp = $this->_desSerializarArraySecciones();
$retorno = 0;
if (isset($tmp) && array_key_exists($this->_nombre,$tmp)) {
foreach ($tmp[$this->_nombre] as $t) {
if (rtrim($link_sel, '/') == rtrim($t, '/')) {
$retorno = 1;
}
}
}
return $retorno;
}
/**
* Devuelve el html a mostrar en pantalla
*
* @param string $link_sel Nombre de la seccion seleccionada
* @param bool $ultimo Indica si es el ultimo componente del menu.....en caso de serlo, debe mostrar la imagen con codito
*
* @return string
* @access public
*/
function toHtmlVertical($link_sel, $ultimo = false)
{
$style = "text-decoration:none";
if (!$this->_configuracion['links']) {
$link_start = '';
$link_end = '';
}
else {
$link_start = '';
$link_end = '';
}
$sec = array ();
if ($this->verifSeccionSeleccionada($link_sel)) {
$sec[] = $link_start.''.$link_end;
}
else {
$sec[] = $link_start.''.$link_end;
}
$nombre = strstr($this->_nombre, '-');
$nombre = substr($nombre, 1);
$sec[] = ''.$nombre.'
';
return $sec;
}
}
?>