home *** CD-ROM | disk | FTP | other *** search
- <?php
- /* vim: set expandtab tabstop=4 shiftwidth=4: */
- // +----------------------------------------------------------------------+
- // | PHP Version 4 |
- // +----------------------------------------------------------------------+
- // | Copyright (c) 1997-2002 The PHP Group |
- // +----------------------------------------------------------------------+
- // | This source file is subject to version 2.02 of the PHP license, |
- // | that is bundled with this package in the file LICENSE, and is |
- // | available at through the world-wide-web at |
- // | http://www.php.net/license/2_02.txt. |
- // | If you did not receive a copy of the PHP license and are unable to |
- // | obtain it through the world-wide-web, please send a note to |
- // | license@php.net so we can mail you a copy immediately. |
- // +----------------------------------------------------------------------+
- // | Authors: nobody <nobody@localhost> |
- // +----------------------------------------------------------------------+
- //
- // $Id: Plugin.php,v 1.10 2005/05/14 03:44:26 alan_k Exp $
- //
- // Plugin API provides support for < ? = $this->plugin(".....",.....); ? >
- // or {this.plugin(#xxxxx#,#xxxx#):h}
- //
- // BASICALLY THIS IS SAVANT'S PLUGIN PROVIDER.
- // @author Paul M. Jones <pmjones@ciaweb.net>
-
-
- class HTML_Template_Flexy_Plugin {
-
- /**
- * reference to main engine..
- *
- * @var object HTML_Template_Flexy
- * @access public
- */
- var $flexy; // reference to flexy.
- var $pluginCache = array(); // store of instanced plugins..
-
- /**
- * Call a Plugin method.
- *
- * Look up in all the plugins to see if the method exists, if it does, call it.
- *
- *
- * @param array name of method, arguments.
- *
- *
- * @return string hopefully
- * @access public
- */
-
- function call($args)
- {
-
-
- $method = $args[0];
- // attempt to load the plugin on-the-fly
- $class = $this->_loadPlugins($method);
-
- if (is_a($class,'PEAR_Error')) {
- //echo $class->toString();
- return $class->toString();
- }
-
-
- // first argument is always the plugin name; shift the first
- // argument off the front of the array and reduce the number of
- // array elements.
- array_shift($args);
-
- return call_user_func_array(array(&$this->plugins[$class],$method), $args);
- }
-
- /**
- * Load the plugins, and lookup which one provides the required method
- *
- *
- * @param string Name
- *
- * @return string|PEAR_Error the class that provides it.
- * @access private
- */
-
- function _loadPlugins($name)
- {
- // name can be:
- // ahref = maps to {class_prefix}_ahref::ahref
- $this->plugins = array();
- if (empty($this->plugins)) {
-
- foreach ($this->flexy->options['plugins'] as $cname=>$file) {
- if (!is_int($cname)) {
- include_once $file;
- $this->plugins[$cname] = new $cname;
- $this->plugins[$cname]->flexy = &$this->flexy;
- continue;
- }
- $cname = $file;
- require_once 'HTML/Template/Flexy/Plugin/'. $cname . '.php';
- $class = "HTML_Template_Flexy_Plugin_{$cname}";
- $this->plugins[$class] = new $class;
- $this->plugins[$class]->flexy = &$this->flexy;
- }
- }
-
-
- foreach ($this->plugins as $class=>$o) {
- //echo "checking :". get_class($o). ":: $name\n";
- if (method_exists($o,$name)) {
- return $class;
- }
- }
- return HTML_Template_Flexy::raiseError("could not find plugin with method: '$name'");
- }
-
-
- }
-