<?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: xajaxPlugin.inc.php 362 2007-05-29 15:32:24Z calltoconstruct $
    @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.
    */
    public 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.
    */
    public function register($aArgs)
    {
        return false;
    }

    public function generateHash()
    {
    }

    /*
        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.
    */
    public 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.
    */
    public 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
    */
    public 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.
    */
    protected $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
    */
    public 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>.
    */
    public 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>.
    */
    public 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.
    */
    public function process()
    {
//SkipDebug
        $objLanguageManager = xajaxLanguageManager::getInstance();
        trigger_error(
            $objLanguageManager->getText('XJXPLG:PERR:01'),
            E_USER_ERROR
        );
//EndSkipDebug
    }
}
