<?php
/**
* CB_plugin
*
* @package CB_plugin
* @author Jörg Stöber <hide@address.com>
* @copyright Copyright (c) 2003 C*B Development Group
* @version $Id: CB_plugin.class.php,v 1.3 2004/09/02 17:12:37 cb_fog Exp $
* @access public
**/
class CB_plugin {
/**
* @var integer - plugin counter, every plugin has a unique ID
* @access private
*/
var $counter = 0;
/**
* @var array[object] Ein Array das von jedem Plugin ein Container
* Objekt der Klasse CB_plugin_container fasst. Dieser Container
* enthält dann die eigentlichen Plugininformationen
* @access private
*/
var $plugins = array();
/**
* CB_plugin::registerPlugin()
* Registriert ein Plugin, legt für optionale Parameter
* Standarwerte fest, legt Informationsarray's an, um eine leichtere
* Auswahl und Sortierung zu erreichen.
* Jedes Plugin wird in dem Array $plugins als Objekt vom Typ CB_plugin_container abgelegt.
*
* @param array $data Array mit den Eigenschaften des Plugins
* @return boolean $result true if success
**/
function registerPlugin($data) {
$data['usePearClassfiles'] = $data['usePearClassfiles'] or $data['usePearClassfiles'] = "0";
if($data['name'] != "" && $data['ident'] != "" && $data['file'] != "" && $data['directory'] != "") {
// zusaetzliche Prüfung der ggf. vorhandenen Pear-Plugins
if($data['usePearClassfiles']) {
if (! $this->solvePearDependencies($data['usePearClassfiles'])) {
return false;
}
}
++$this->counter;
/*
* Anlegen von Standard Werten, falls der entsprechende Array
* Eintrag leer ist
*/
$data['type'] = $data['type'] or $data['type'] = "general";
$data['sort'] = $data['sort'] or $data['sort'] = "zzz";
$data['group'] = $data['group'] or $data['group'] = 1;
$data['position'] = $data['position'] or $data['position'] = "menu";
$data['templates'] = $data['templates'] or $data['templates'] = $data['directory']."/templates/";
$this->typeArray[$data['type']][] = $this->counter;
$this->pluginsIdent[$data['ident']] = $this->counter;
$this->plugins[$this->counter] = & new CB_plugin_container( $data );
return true;
} else {
return false;
}
}
/**
* CB_plugin::getPluginsByType()
* liefert alle Plugins, die einem bestimmten Typ entsprechen.
* Standard Plugin Typ ist general.
*
* @param string $type Typ der zu suchenden Plugins
* @return mixed $deliverPlugins => array[objects]; oder false
**/
function getPluginsByType($type) {
$sortation = array();
if(is_array($this->typeArray[$type])) {
/*
* Plugins nach Typ abfragen, Sort Wert rausfinden und in
* ein Sortier Array packen
*/
foreach($this->typeArray[$type] as $v) {
$x = & $this->plugins[$v];
$sortation[$x->getValue("sort")][] = $v;
}
/*
* Sortieren des Arrays anhand des Sort Strings
*/
ksort($sortation);
foreach($sortation as $v) {
foreach($v as $pluginID) {
$deliverPlugins[] = & $this->plugins[$pluginID];
}
}
}
if(is_array($deliverPlugins)) {
return $deliverPlugins;
} else {
return false;
}
}
/**
* CB_plugin::getPluginByIdent()
* Liefert ein Plugin mit einem bestimmten Ident Wert. Der Ident
* Wert wird von jedem Plugin selbst angegeben. Es ist ein String, der
* das Plugin kenntlich macht und zB in der URL per Load übergeben wird
*
* @param string $ident Ident Wert des Plugins
* @return mixed $result (entweder Plugin Container Objekt oder false)
**/
function getPluginByIdent($ident) {
/*
* interne PluginID finden, wurde bei registerPlugin per Counter erzeugt
*/
$pluginID = $this->pluginsIdent[$ident];
if(preg_match("/^([0-9]*)$/", $pluginID)) {
return $this->plugins[$pluginID];
} else {
return false;
}
}
/**
* Funktion zur Prüfung der Pear-Verfügbarkeit und Laufzeit-Installation der Packages
* @author Michael Pfannkuchen
* @param $usePearClassfiles array oder string mit einem Pear-Package-Dateinamen
* z.B. 'Date.php'
* @return true oder false (in letzterem Fall muss das Plugin disabled werden)
*
* @access public
*/
function solvePearDependencies($usePearClassfiles) {
global $isPearUsable;
if (! $isPearUsable) return false;
if (is_array($usePearClassfiles)) {
foreach($usePearClassfiles as $lusePearClassfiles ) {
if (! @include_once($lusePearClassfiles)) return false;
}
} else {
if (! @include_once($usePearClassfiles)) return false;
}
return true;
}
}
/**
* CB_plugin_container
*
* @package CB_plugin
* @author Jörg Stöber <hide@address.com>
* @copyright Copyright (c) 2003 C*B Development Group
* @version $Id: CB_plugin.class.php,v 1.3 2004/09/02 17:12:37 cb_fog Exp $
* @access public
**/
class CB_plugin_container {
var $values = array ();
function CB_plugin_container( $data ) {
if( is_array($data) ) {
return $this->setValues($data);
}
}
/**
* Setzen einer Eigenschaft
*
* @access public
* @param string $value Name des Moduls
*/
function setValue($name, $value) {
if(!empty($name)) {
$this->values[$name] = $value;
return true;
} else {
return false;
}
}
/**
* Setzen der Eigenschaften
*
* @access public
* @param string $value Name des Moduls
*/
function setValues($values) {
if(is_array($values)) {
foreach($values as $k => $v) {
if($k != "") {
$this->values[$k] = $v;
}
}
return true;
} else {
return false;
}
}
/**
* Rückgabe des geforderten Wertes
*
* @access public
*/
function getValue($name) {
return $this->values[$name];
}
/**
* Rückgabe aller gesetzten Werte
*
* @access public
* @return array $values
*/
function getValues() {
return $this->values;
}
/**
* Speicherung des erzeugten Contents
*
* @access public
* @param string $value Content des Moduls
*/
function setContent($value) {
$this->content = $value;
}
/**
* Rückgabe des Modulcontents
*
* @access public
*/
function getContent() {
return $this->content;
}
/**
* Rückgabe des Fehlerstatus
*
* @access public
*/
function getErrorStatus() {
return $this->error;
}
}
?>