<?php
/**
 * xajaxPluginManager.inc.php :: xajax plugin manager
 *
 * xajax version 0.5 (Beta 1)
 * copyright (c) 2006 by Jared White & J. Max Wilson
 * http://www.xajaxproject.org
 *
 * xajax is an open source PHP class library for easily creating powerful
 * PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
 * call PHP functions and update the content of your your webpage without
 * reloading the page.
 *
 * xajax is released under the terms of the BSD license
 * http://www.xajaxproject.org/bsd_license.txt
 * 
 * @package xajax
 * @version $Id: xajaxPluginManager.inc.php 259 2006-10-03 18:14:49Z gaeldesign $
 * @copyright Copyright (c) 2005-2006 by Jared White & J. Max Wilson
 * @license http://www.xajaxproject.org/bsd_license.txt BSD License
 */
 
class xajaxPluginManager
{
	var $aPluginFolders;
	var $aResponsePlugins;
	var $objRequestProcessorPlugin;
	var $objHeaderScriptPlugin;
	
	function &getInstance()
	{
		static $obj;
		if (!$obj) {
			$obj = new xajaxPluginManager();	
		}
		return $obj;
	}
	
	function addPluginFolder($sFolder)
	{
		if (!file_exists($sFolder)) return false;
		$this->aPluginFolders[$sFolder] = $sFolder;
	}
	
	function loadPluginFile($sPluginName)
	{
		$bPluginLoaded = false;
		foreach ($this->aPluginFolders as $sPluginFolder) {
			$sPluginPath = $sPluginFolder . '/' . $sPluginName . '.inc.php';
			if (file_exists($sPluginPath)) {
				require_once($sPluginPath);
				$bPluginLoaded = true;
			}
		}
		return $bPluginLoaded;
	}
	
	function loadAllPlugins()
	{
		// to do
	}
	
	function registerRequestProcessorPlugin(&$objPlugin)
	{
		if (is_subclass_of($objPlugin, "xajaxRequestProcessorPlugin")) {
			$this->objRequestProcessorPlugin = &$objPlugin;
		}
	}

	function &getRequestProcessorPlugin()
	{
		return $this->objRequestProcessorPlugin;
	}

	function registerIncludePlugin(&$objPlugin)
	{
		if (is_subclass_of($objPlugin, "xajaxIncludePlugin")) {
			$this->objIncludePlugin = &$objPlugin;
		}
	}

	function &getIncludePlugin()
	{
		return $this->objIncludePlugin;
	}
		
	function registerResponsePlugin(&$objPlugin)
	{
		if (is_subclass_of($objPlugin, "xajaxResponsePlugin")) {
			$sName = $objPlugin->sCallName;
			$this->aResponsePlugins[$sName] = &$objPlugin;
		}
	}
	
	function &getResponsePlugin($sName)
	{
		return $this->aResponsePlugins[$sName];
	}
}