Location: PHPKode > projects > Content*Builder > contentbuilder/lib/CB_plugin.class.php
<?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;
	}
	

}
?>
Return current item: Content*Builder