<?php
/*
	File: xajaxPlugin.inc.php

	Contains the xajaxPlugin class

	Title: xajaxPlugin class

	Please see <copyright.inc.php> for a detailed description, copyright
	and license information.
*/

/*
	@package xajax
	@version $Id$
	@copyright Copyright (c) 2005-2007 by Jared White & J. Max Wilson
	@copyright Copyright (c) 2008-2010 by Joseph Woolley, Steffen Konerow, Jared White  & J. Max Wilson
	@license http://www.xajaxproject.org/bsd_license.txt BSD License
*/

/*
	Class: xajaxPlugin
	
	The base class for all xajax plugins.
*/
class xajaxPlugin
{
}

/*
	Class: xajaxRequestPlugin
	
	The base class for all xajax request plugins.
	
	Request plugins handle the registration, client script generation and processing of
	xajax enabled requests.  Each plugin should have a unique signature for both
	the registration and processing of requests.  During registration, the user will
	specify a type which will allow the plugin to detect and handle it.  During client
	script generation, the plugin will generate a <xajax.request> stub with the
	prescribed call options and request signature.  During request processing, the
	plugin will detect the signature generated previously and process the request
	accordingly.
*/
class xajaxRequestPlugin extends xajaxPlugin
{
	/*
		Function: configure
		
		Called by the <xajaxPluginManager> when a configuration setting is changing.
		Plugins should store a local copy of the settings they wish to use during 
		registration, client script generation or request processing.
	*/
	function configure($sName, $mValue)
	{
	}
	
	/*
		Function: register
		
		Called by the <xajaxPluginManager> when a user script when a function, event 
		or callable object is to be registered.  Additional plugins may support other 
		registration types.
	*/
	function register($aArgs)
	{
		return false;
	}
	
	/*
		Function: generateClientScript
		
		Called by <xajaxPluginManager> when the page's HTML is being sent to the browser.
		This allows each plugin to inject some script / style or other appropriate tags
		into the HEAD of the document.  Each block must be appropriately enclosed, meaning
		javascript code must be enclosed in SCRIPT and /SCRIPT tags.
	*/
	function generateClientScript()
	{
	}
	
	/*
		Function: canProcessRequest
		
		Called by the <xajaxPluginManager> when a request has been received to determine
		if the request is for a xajax enabled function or for the initial page load.
	*/
	function canProcessRequest()
	{
		return false;
	}
	
	/*
		Function: processRequest
		
		Called by the <xajaxPluginManager> when a request is being processed.  This 
		will only occur when <xajax> has determined that the current request is a valid
		(registered) xajax enabled function via <xajax->canProcessRequest>.
		
		Returns:
			false
	*/
	function processRequest()
	{
		return false;
	}
}

/*
	Class: xajaxResponsePlugin
	
	Base class for all xajax response plugins.
	
	A response plugin provides additional services not already provided by the 
	<xajaxResponse> class with regard to sending response commands to the
	client.  In addition, a response command may send javascript to the browser
	at page load to aid in the processing of it's response commands.
*/
class xajaxResponsePlugin extends xajaxPlugin
{
	/*
		Object: objResponse
		
		A reference to the current <xajaxResponse> object that is being used
		to build the response that will be sent to the client browser.
	*/
	var $objResponse;
	
	/*
		Function: setResponse
		
		Called by the <xajaxResponse> object that is currently being used
		to build the response that will be sent to the client browser.
		
		Parameters:
		
		objResponse - (object):  A reference to the <xajaxResponse> object
	*/
	function setResponse($objResponse)
	{
		$this->objResponse = $objResponse;
	}
	
	/*
		Function: addCommand
		
		Used internally to add a command to the response command list.  This
		will call <xajaxResponse->addPluginCommand> using the reference provided
		in <xajaxResponsePlugin->setResponse>.
	*/
 	function addCommand($aAttributes, $sData)
 	{
 		$this->objResponse->addPluginCommand($this, $aAttributes, $sData);
 	}
	
	/*
		Function: getName
		
		Called by the <xajaxPluginManager> when the user script requests a plugin.
		This name must match the plugin name requested in the called to 
		<xajaxResponse->plugin>.
	*/
	function getName()
	{
//SkipDebug
		$objLanguageManager = xajaxLanguageManager::getInstance();
		trigger_error(
			$objLanguageManager->getText('XJXPLG:GNERR:01')
			, E_USER_ERROR
			);
//EndSkipDebug
	}
	
	/*
		Function: process
		
		Called by <xajaxResponse> when a user script requests the service of a
		response plugin.  The parameters provided by the user will be used to
		determine which response command and parameters will be sent to the
		client upon completion of the xajax request process.
	*/
	function process()
	{
//SkipDebug
		$objLanguageManager = xajaxLanguageManager::getInstance();
		trigger_error(
			$objLanguageManager->getText('XJXPLG:PERR:01')
			, E_USER_ERROR
			);
//EndSkipDebug
	}
}
