| 
<?php
/**
 * Clase para la creación de un panel de fichas (tab control)
 *
 * @author Alfredo Rahn <[email protected]>
 * @version 0.2 (24-09-2005)
 * @version 0.1 (30-06-2005)
 */
 
 /**
 * Clase que crea un panel de fichas html
 */
 class panel_Fichas {
 /**
 * El vector con la configuración de las fichas
 */
 var $CFG;
 /**
 * El key de la lista activa
 */
 var $Activa;
 /**
 * La cantidad de filas entre las que vamos a distribuir las fichas
 */
 var $Filas;
 /**
 * Cadena con los atributos de despliegue de la tabla
 */
 var $TAttr;
 /**
 * Cadena con los atributos de despliegue de la celda activa
 */
 var $ACAttr;
 /**
 * Cadena con los atributos de despliegue de la celda inactiva
 */
 var $ICAttr;
 /**
 * El nombre de la variable que contiene la ficha activa
 */
 var $FA_name;
 /**
 * Constructor de la Clase
 *
 * @param array $Fichas Vector referencial con la configuración
 * @param mixed $Activa La llave de la ficha activa (o cero la primera)
 * @param string $TAttr Los atributos para el despliegue de la tabla
 * @param string $ACAttr Atributos para el despliegue de celda activa
 * @param string $ICAttr Atributos para el despliegue de celda activa
 * @param number $filas Número de filas a desplegar
 * @param string $FA_name El nombre de la variable de la ficha activa
 */
 function panel_Fichas(  $Fichas=array(),
 $Activa=0,
 $TAttr="",
 $ACAttr="",
 $ICAttr="",
 $filas=1,
 $FA_name="ficha") {
 // Si hay elementos en el vector Fichas
 if ($bueno=    !empty($Fichas) && is_array($Fichas))
 // Si estos elementos al menos tienen etiqueta
 foreach(array_keys($Fichas) as $key)
 if (!($bueno = strlen($Fichas[$key][LABEL]) > 0))
 continue;
 // Si bueno es true, es que el array sirvio para algo
 $this->CFG = $bueno ? $Fichas : array();
 
 // La ficha activa
 $this->Activa = ($Activa != 0) &&
 in_array($Activa,array_keys($this->CFG)) ?
 $Activa :
 0;
 // Los atributos de formato
 $this->TAttr  = (!empty($TAttr)) ?
 $TAttr :
 "";
 $this->ACAttr = (!empty($ACAttr)) ?
 $ACAttr :
 "";
 $this->ICAttr = (!empty($ICAttr)) ?
 $ICAttr :
 "";
 // El nombre de la variable de la ficha activa
 $this->FA_name = (strlen($FA_Name) > 0) &&
 (htmlentities($FA_Name) == $FA_Name) ?
 $FA_Name :
 "ficha";
 }
 /**
 * Inserta una nueva ficha
 *
 * @param string $llave El nombre o numero de llave
 * @param string $titulo El titulo a mostrar para la ficha
 * @param string $valor El valor o contenido de la ficha
 * @param string $tipo El tipo de valor o contenido
 */
 function nuevaFicha($llave,$titulo,$valor="",$tipo="") {
 // Si algo anda mal se va
 if (empty($key) ||
 empty($value) ||
 !is_numeric($pos) ||
 (int)$pos >= 0) return false;
 // Monta el valor en el vector
 $this->Elem = array_merge($this->Elem,
 array($key => $value));
 // Si esta en el de posiciones tambien
 if ($pos > 0) $this->Pos[$key] = $pos;
 return true;
 }
 /**
 * Elimina una Ficha
 *
 * @param string $llave La llave que identifica la ficha a borrar
 */
 function borrarFicha($llave) {
 // Si no existe nos vamos
 if (!isset($this->Elem[$key])) return false;
 // Si existe en el vector de elementos, borralo
 unset($this->Elem[$key]);
 // Si esta en el vector de posiciones borralo
 if (isset($this->Pos[$key])) unset($this->Pos[$key]);
 return true;
 }
 /**
 * Activa o desactiva (permitir el link) en una ficha
 *
 * @param string $llave El codigo de la ficha en cuestión
 * @param bool $estado true si se quiere activa, false otherwhise
 */
 function estadoFicha($llave,$estado="") {
 // Si la llave no existe, devuelve vacio
 if (!array_key_exists($llave,$this->CFG))
 return "";
 
 if ($estado === "") {
 return isset($this->CFG[$llave][DISABLED]) ?
 !$this->CFG[$llave][DISABLED] :
 true;
 } else {
 $this->CFG[$llave][DISABLED] = !(bool)$estado;
 return (bool)$estado;
 }
 }
 /**
 * Cambia la ficha activa a solicitud del usuario
 *
 * @param array $In El vector con las entradas del usuario
 */
 function cambiarActiva(&$In) {
 if (isset($In[$this->FA_name]) &&
 strlen($In[$this->FA_name]) > 0 &&
 array_key_exists($In[$this->FA_name],$this->CFG) &&
 !$this->CFG[$In[$this->FA_name]][DISABLED]) {
 // Ficha activa la que le dijeron
 $this->Activa = $In[$this->FA_name];
 return true;
 } else {
 // La primera que no este inactiva pues la otra no es válida
 foreach(array_keys($this->CFG) as $act) {
 if (!$this->CFG[$act][DISABLED]) {
 $this->Activa = $act;
 return true;
 }
 }
 return false;
 }
 }
 /**
 * Despliega el html con el formulario
 *
 */
 function htmlPanel() {
 $s  = "<table {$this->TAttr}>\n"
 . "<tr><TD>\n"
 . "\t<table width=\"100%\" cellpadding=\"3\" cellspacing=\"0\"><TR>\n";
 foreach(array_keys($this->CFG) as $key) {
 $fmt = ($this->Activa == $key) ? $this->ACAttr : $this->ICAttr;
 // Imprime las celdas, una ficha en cada una
 $s .= "\t<td nowrap $fmt> \n";
 if ($this->CFG[$key][DISABLED] === true) {
 $s .= $this->CFG[$key][LABEL] . " </td>\n";
 } else {
 $s .= "\t\t<a href=\"" . $_SERVER['PHP_SELF'] . "?"
 . $this->FA_name . "=" . $key . "\">"
 . $this->CFG[$key][LABEL] . "</a> </td>\n";
 }
 }
 // Imprime la celda mas derecha, la que arriba a las otras
 $s .= "\t<td width=\"80%\"> </td>\n";
 $s .= "\t</tr>\n\t</table>\n</td></tr>\n"
 . "<TR><td height=\"200\" {$this->ACAttr}>";
 // Coloca el contenido de la ficha en su celda
 switch ($this->CFG[$this->Activa][TYPE]) {
 case "INCLUDE":
 if (file_exists($this->CFG[$this->Activa][CONTENT]))
 echo $s;
 include($this->CFG[$this->Activa][CONTENT]);
 $s = "";
 break;
 case "STRING":
 default:
 $s .= $this->CFG[$this->Activa][CONTENT];
 break;
 }
 $s .= "</td></tr>\n</table>";
 echo $s;
 }
 }
 ?>
 |