PHP Classes
elePHPant
Icontem

File: panel_fichas.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Alfredo Rahn  >  Panel_Fichas tab control  >  panel_fichas.php  >  Download  
File: panel_fichas.php
Role: Class source
Content type: text/plain
Description: Main panel_fichas class
Class: Panel_Fichas tab control
Deploys and handle HTML Tab Control using pure PHP
Author: By
Last change: Updated comments.
Changed type of style parameters from array to string.
Date: 9 years ago
Size: 6,119 bytes
 

Contents

Class file image Download
<?php
/**
* Clase para la creación de un panel de fichas (tab control)
*
* @author Alfredo Rahn <arahn@thor.uc.edu.ve>
* @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>&nbsp;\n";
                if (
$this->CFG[$key][DISABLED] === true) {
                   
$s .= $this->CFG[$key][LABEL] . "&nbsp;</td>\n";
                } else {
                   
$s .= "\t\t<a href=\"" . $_SERVER['PHP_SELF'] . "?"
                       
. $this->FA_name . "=" . $key . "\">"
                       
. $this->CFG[$key][LABEL] . "</a>&nbsp;</td>\n";
                }
        }
       
// Imprime la celda mas derecha, la que arriba a las otras
       
$s .= "\t<td width=\"80%\">&nbsp;</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;
    }
}
?>