Location: PHPKode > projects > Boardnukers VKP Aka TIS > htdocs/includes/abstract.php
<?php
/**
 * Boardnukers VKP
 *
 * LIZENZ
 *
 * Dieses Programm ist freie Software; Sie können sie beliebig verteilen
 * und/oder Änderungen vornehmen, solange Sie dieses unter den
 * Lizenzbedingungen der Version 2 oder höher der GNU General Public
 * License (GPL), veröffentlicht von der Free Software Foundation tun.
 *
 * Dieses Programm wurde in der Hoffnung erstellt, dass es für Sie
 * nützlich sein könnte. Es wird jedoch ohne jeden Anspruch auf
 * Gewährleistung veröffentlicht. Sie können auch nicht davon ausgehen,
 * dass das Programm Dinge verrichtet, wie es erwartet wird.
 *
 * Lesen Sie die Lizenzbedinguneg unter der URL
 * http://www.gnu.org/copyleft/gpl.html für weitere Details.
 *
 * @author Hinrich Donner
 * @copyright Hinrich Donner, (c) 2004
 * @version $Revision: 1.5 $
 * @since 5.5.2
 * @package TIS
 * @subpackage System
 * @category Abstrakt
 * @link http://developer.berlios.de/projects/phpnukevkp/
 */

/**
 * vkpObject
 *
 * Eine allgemeine Basisklasse.  Wird derzeit nicht wirklich verwendet.
 *
 * @author Hinrich Donner <http://tiro-communication.net/>
 * @copyright Hinrich Donner, (c) 2004
 * @version 1
 * @since 5.5.2
 */
class vkpObject
{
    /**
     * vkpObject
     *
     * Der Konstruktor.
     *
     * @version 1
     * @since 5.5.2
     */
    function vkpObject()
    {
    }
}

/**
 * vkpDbTable
 *
 * Abstrakte Klasse für die Handhabung von SQL-Tabellen.
 *
 * @author Hinrich Donner
 * @version 1
 * @since 5.5.1
 * @access protected
 * @abstract
 */
class vkpDbTable
{
    /**
     * _config
     *
     * Eine Kopie der Instanz der Konfiguration.
     *
     * @var vkpConfig
     * @access protected
     */
    var $_config;

    /**
     * names
     *
     * Eine Liste mit den Feldnamen.
     *
     * @var array
     * @access protected
     */
    var $_names;

    /**
     * tablename
     *
     * Der Name der Tabelle.
     *
     * @var string
     */
    var $tablename;

    /**
     * vkpDbTable
     *
     * Konstruktor.
     *
     * @param string $tablename Vollständiger Name der Tabelle
     * @param array $fieldlist Ein Array mit den Feldbezeichnern
     * @version 0.1
     * @since 5.5.1
     * @author Hinrich Donner
     */
    function vkpDbTable($tablename, $fieldlist = false)
    {
        $this->_config =& vkpConfig::GetInstance();
        $this->tablename = $tablename;
        if (!is_array($fieldlist))
            $fieldlist = $this->_FetchFields();
        $this->_StoreFields($fieldlist);
    }

    /**
     * _FetchFields
     *
     * Liest die Feldnamen aus der Datenbank
     *
     * @return array
     * @access private
     * @version 0.1
     * @since 5.5.1
     * @author Hinrich Donner
     */
    function _FetchFields()
    {
        $db =& vkpSqlGetConn();
        $fields = $db->MetaColumnNames($this->tablename);
        return $fields;
    }

    /**
     * _StoreFields
     *
     * Erstellt Eigenschaften zu den Tabellenfeldern
     *
     * @param array $names
     * @access private
     * @version 0.1
     * @since 5.5.1
     * @author Hinrich Donner
     */
    function _StoreFields(&$names)
    {
        foreach ($names as $name)
            $this->$name = null;
    }

    /**
     * ExistsVar
     *
     * Prüft, ob ein Tabellenfeld existiert
     *
     * @param string $name Feldbezeichner
     * @return bool
     * @version 0.1
     * @since 5.5.1
     * @author Hinrich Donner
     */
    function ExistsVar($name)
    {
        return (!empty($name) && isset($this->$name));
    }

    /**
     * GetVar
     *
     * Liefert eine Eigenschaft oder einen Vorgabewert
     *
     * @param string $name Name des Tabellenfeldes
     * @param mixed $default Der Vorgabewert
     * @return mixed
     * @version 0.1
     * @since 5.5.1
     * @author Hinrich Donner
     */
    function GetVar($name, $default = null)
    {
        if ($this->ExistsVar($name))
            return $this->$name;
        return $default;
    }
}

/**
 * vkpComponent
 *
 * Vorfahr für Klassen, die Komponenten des Systems darstellen.  Diese Klasse enthält eine
 * Eigenschaft namens <b>system</b>, die den System-Container enthält.  Wenn Nachfahren
 * dieser Klasse nach der Initialisierung instanziert werden, sollte die Eigenschaft ohne
 * Einschränkungen nutzbar sein.
 *
 * @author Hinrich Donner <http://tiro-communication.net/>
 * @copyright Hinrich Donner, (c) 2004
 * @version 1
 * @since 5.5.2
 */
class vkpComponent extends vkpObject
{
    /**
     * item
     *
     * Das Element.
     *
     * @var mixed
     * @access public
     */
    var $item;

    /**
     * system
     *
     * Diese Eigenschaft enthält den System-Container.
     *
     * @var vkpSystem
     * @since 5.5.2
     */
    var $system;

    /**
     * vkpComponent
     *
     * Der Konstruktor.
     *
     * @version 1
     * @since 5.5.2
     */
    function vkpComponent()
    {
        parent::vkpObject();
        $this->system =& vkpSystem::GetInstance();
    }

    /**
     * _Free
     *
     * Ein Stub.
     *
     * @access protected
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     * @see vkpComponent::Clear()
     */
    function _Free()
    {
        unset($this->item);
    }

    /**
     * _Init
     *
     * Ein Stub.
     *
     * @access protected
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     * @see vkpComponent::Clear()
     */
    function _Init()
    {
    }

    /**
     * Clear
     *
     * Löscht alle Daten und setzt die Default-Werte.
     *
     * @access public
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     */
    function Clear()
    {
        $this->_Free();
        $this->_Init();
    }

    /**
     * GetReference
     *
     * Liefert eine Referenz auf das Element.
     *
     * @return mixed
     * @since 5.5.2
     * @version 1
     * @author Hinrich Donner <hd at phportals dot de>
     * @copyright Hinrich Donner, (c) 2004
     */
    function &GetReference()
    {
        return $this->item;
    }

}

/**
 * vkpDbComponent
 *
 * Diese Klasse dient als Basis für Komponenten, die eine Verbindung zur Datenbank
 * benutzen.
 *
 * @version 1
 * @since 5.5.2
 * @author Hinrich Donner
 * @copyright Hinrich Donner, (c) 2004
 * @see vkpComponent, vkpListDbComponent
 */
class vkpDbComponent extends vkpComponent
{
    /**
     * vkpDbComponent
     *
     * Der Konstruktor.
     */
    function vkpDbComponent()
    {
        parent::vkpComponent();
    }

    /**
     * _Query
     *
     * Diese Methode dient dazu, eine SQL-Abfrage anzustoßen.  Im Fehlerfall wird FALSE
     * zurückgegeben. Ansonsten erhält man das Ergebnis der Datenbank, also entweder ein
     * Objekt oder einen bool'schen Wert.
     *
     * @param string $sql Die Abfrage
     * @return mixed FALSE im Fehlerfall oder das Ergebnis der Datenbank
     * @access protected
     * @version 1
     * @since 5.5.2
     * @see VKP_DEBUG
     */
    function _Query($sql)
    {
        $dbr = $this->system->db->Execute($sql);
        if ($this->system->db->ErrorNo() != 0)
        {
            if (VKP_DEBUG)
                $this->system->status_messages->AddDbError($this->system->db);
            return false;
        }
        return $dbr;
    }
}

/**
 * vkpListComponent
 *
 * Diese Klasse dient als Vorfahr für Listenklassen.  Dazu gehören beispielsweise
 * Listen von Dateinamen etc.
 *
 * @author Hinrich Donner <http://tiro-communication.net/>
 * @copyright Hinrich Donner, (c) 2004
 * @version 1
 * @since 5.5.2
 */
class vkpListComponent extends vkpComponent
{
    /**
     * items
     *
     * Diese Eigenschaft enthält die einzelnen Elemente einer Liste.
     *
     * @var array
     * @since 5.5.2
     */
    var $items = array();

    /**
     * vkpListComponent
     *
     * Der Konstruktor.
     *
     * @version 1
     * @since 5.5.2
     */
    function vkpListComponent()
    {
        parent::vkpComponent();
    }

    /**
     * _Free
     *
     * Löscht die vorhandene Liste.  Dannach ist die Instanz in einem nicht definierten Zustand,
     * und die Ergebnisse, die eventuell zurückgeliefert werden, sind nicht konsistent.  Die
     * Abtrennung von der MEthode Clear() dient lediglich der Möglichkeit, dass Nachfahren die
     * Funktionalität erweitern können.
     *
     * @access protected
     * @version 1
     * @since 5.5.2
     * @see vkpListComponent::Clear(), vkpListComponent::_Create();
     */
    function _Free()
    {
        unset($this->items);
    }

    /**
     * _Create
     *
     * Initialisiert eine neue Liste.
     *
     * @access protected
     * @version 1
     * @since 5.5.2
     * @see vkpListComponent::Clear(), vkpListComponent::_Free();
     */
    function _Create()
    {
        $this->items = array();
    }

    /**
     * Clear
     *
     * Diese Methode löscht eine vorhandene Liste und initialisiert die Instanz neu.
     *
     * @version 1
     * @since 5.5.2
     */
    function Clear()
    {
        $this->_Free();
        $this->_Create();
    }

    /**
     * GetReference
     *
     * Liefert eine Referenz auf das Array mit den Elementen.  Diese Methode wird i.d.R.
     * benötigt, um die Liste an ein Template zu übergeben.  Es wird empfohlen, diese
     * Methode statt des direkten Zugriffs auf die Eigenschaft zu verwenden.
     *
     * @return array Die Referenz
     * @version 1
     * @since 5.5.2
     * @see vkpListComponent::$items
     */
    function &GetReference()
    {
        return $this->items;
    }

    /**
     * Add
     *
     * Mit dieser Methode kann ein einzelnes Element der Liste hinzugefügt werden.  Wenn der
     * Parameter <b>key</b> einen Wert enthält, so wird dieser als Array-Index verwendet.
     * Andernfalls wird das Element an die Liste angehängt.
     *
     * @param mixed $element Das neue Element
     * @param mixed $key Der Array-Index (String oder Int).
     * @version 1
     * @since 5.5.2
     */
    function Add($element, $key = false)
    {
        if ($key !== false)
            $this->items[$key] = $element;
        else
            $this->items[] = $element;
    }

    /**
     * Count
     *
     * Liefert die anzahl der vorhandenen Elemente.
     *
     * @access public
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     */
    function Count()
    {
        return count($this->items);
    }

}

/**
 * vkpListDbComponent
 *
 * Diese Klasse dient als Vorfahre für Listenkomponenten, die eine Datenbankanbindung verwenden.
 *
 * @author Hinrich Donner <http://tiro-communication.net/>
 * @copyright Hinrich Donner, (c) 2004
 * @version 1
 * @since 5.5.2
 */
class vkpListDbComponent extends vkpListComponent
{
    /**
     * vkpListDbComponent
     *
     * Der Konstruktor
     *
     * @version 1
     * @since 5.5.2
     */
    function vkpListDbComponent()
    {
        parent::vkpListComponent();
    }

    /**
     * _Query
     *
     * Diese Methode dient dazu, eine SQL-Abfrage anzustoßen.  Im Fehlerfall wird FALSE
     * zurückgegeben. Ansonsten erhält man das Ergebnis der Datenbank, also entweder ein
     * Objekt oder einen bool'schen Wert.
     *
     * @param string $sql Die Abfrage
     * @return mixed FALSE im Fehlerfall oder das Ergebnis der Datenbank
     * @access protected
     * @version 1
     * @since 5.5.2
     * @see VKP_DEBUG
     */
    function _Query($sql)
    {
        $dbr = $this->system->db->Execute($sql);
        if ($this->system->db->ErrorNo() != 0)
        {
            if (VKP_DEBUG)
                $this->system->status_messages->AddError(sprintf('Error (SQL): #%d: %s',
                                                                 $this->system->db->ErrorNo(),
                                                                 $this->system->db->ErrorMsg()));
            return false;
        }
        return $dbr;
    }
}

/**
 * vkpAbstractBlock
 *
 * Diese Klasse dient als abstrakte Basisklasse für eigene Blöcke.
 *
 * @author Hinrich Donner <hd at phportals dot de>
 * @copyright Hinrich Donner, (c) 2004
 * @version 1
 * @since 5.5.2
 */
class vkpAbstractBlock extends vkpComponent
{
    /**
     * blockinfo
     *
     * Diese Eigenschaft enthält die Informationen zum Block.
     *
     * @var vkpBlockInfo
     * @since 5.5.2
     * @access public
     */
    var $blockinfo;

    /**
     * vkpAbstractBlock
     *
     * Der Konstruktor.
     *
     * @param vkpBlockInfo Die Informationen zum Block
     * @version 5.5.2
     * @since vkpComponent
     * @author Hinrich Donner <hd at phportals dot de>
     * @copyright Hinrich Donner, (c) 2004
     */
    function vkpAbstractBlock(&$blockinfo)
    {
        parent::vkpComponent();
        $this->blockinfo =& $blockinfo;
    }
} // class

/**
 * vkpAbstractModuleInterface
 *
 * Eine abstrakte Klasse für Module
 *
 * @version 1
 * @since 5.5.2
 * @author Hinrich Donner <hd at phportals dot de>
 * @copyright Hinrich Donner, (c) 2004
 */
class vkpAbstractModuleInterface extends vkpComponent
{
    /**
     * vkpAbstractModuleInterface
     *
     * Der Konstruktor
     *
     * @since 5.5.2
     * @version 1
     */
    function vkpAbstractModuleInterface()
    {
        parent::vkpComponent();
        $this->system->languages->Load($this->system->modules->Current());
    }

    /**
     * Header
     *
     * Gibt den Seitenkopf aus
     *
     * @param string $title Der Seitentitel
     * @param bool $show_right_blocks TRUE, wenn die rechten Blöcke gezeigt werden sollen
     * @access public
     * @version 1
     * @since 5.5.1
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     * @see vkpAbstractModuleInterface::Footer()
     */
    function Header($title = '', $show_right_blocks = false)
    {
        global $index, $pagetitle;

        $index = $show_right_blocks;
        if (!empty($title))
            $pagetitle  .= ': ' . $title;
        include 'header.php';
    }

    /**
     * Footer
     *
     * Gibt den Seitenfuß aus.
     *
     * @param
     * @return
     * @access public
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     * @see vkpAbstractModuleInterface::Header()
     */
    function Footer()
    {
        include 'footer.php';
    }

    /**
     * Dispatch
     *
     * Diese Methode prüft, ob die gewünschte Aktion durchgeführt werden
     * kann. Wenn dem so ist, dann wird der tatsächliche Dispatcher aufgerufen.
     * Andernfalls wird eine Fehler aufgerufen.
     *
     * @access public
     * @version 1
     * @since 5.5.2
     * @author Hinrich Donner
     * @copyright Hinrich Donner, (c) 2004
     */
    function Dispatch()
    {
        $this->op = trim($this->system->request_vars->Get('op', false, 'index'));
        $method_name = str_replace(' ', '_', sprintf('_op_%s', $this->op));

        if (in_array($method_name, get_class_methods(get_class($this))))
        {
            call_user_func(array(&$this, $method_name));
            return;
        }
        ob_end_clean();
        header('HTTP/1.0 404 Not Found');
        die();
    }
}


/*
 * $Log: abstract.php,v $
 * Revision 1.5  2004/07/13 11:49:25  hdonner
 * - Strukturänderungen
 *
 * Revision 1.4  2004/07/02 08:06:16  hdonner
 * - Sprache automatisch laden
 *
 * Revision 1.3  2004/06/20 09:38:06  hdonner
 * - In between
 *
 * Revision 1.2  2004/04/27 19:46:31  hdonner
 * - In between
 *
 * Revision 1.1  2004/04/27 16:21:04  hdonner
 * - Sort
 *
 */
?>
Return current item: Boardnukers VKP Aka TIS