include/includes/class/xajax.inc.php (Part 2)
else if(is_string($mArg))
$mArg=mb_convert_encoding($mArg,$this->sCharacterEncoding,"UTF-8");}
function argumentDecodeUTF8_utf8_decode(&$mArg){if(is_array($mArg)){foreach(array_keys($mArg)as $sKey){$sNewKey=$sKey;$this->argumentDecodeUTF8_utf8_decode($sNewKey);if($sNewKey!=$sKey){$mArg[$sNewKey]=$mArg[$sKey];unset($mArg[$sKey]);$sKey=$sNewKey;}
$this->argumentDecodeUTF8_utf8_decode($mArg[$sKey]);}
}
else if(is_string($mArg))
$mArg=utf8_decode($mArg);}
function xajaxArgumentManager(){$this->aArgs=array();$this->bDecodeUTF8Input=false;$this->sCharacterEncoding='UTF-8';$this->nMethod=XAJAX_METHOD_UNKNOWN;$this->aSequence=array(
'<'.'k'.'>'=> array(array(
'<'.'/k'.'>'=> 4
),3),
'<'.'/k'.'>'=> array(array(
'<'.'v'.'>'=> 3,
'<'.'/e'.'>'=> 4
),4),
'<'.'v'.'>'=> array(array(
'<'.'xjxobj'.'>'=> 8,
'<'.'/v'.'>'=> 4
),5),
'<'.'/v'.'>'=> array(array(
'<'.'/e'.'>'=> 4,
'<'.'k'.'>'=> 3
),6),
'<'.'e'.'>'=> array(array(
'<'.'k'.'>'=> 3,
'<'.'v'.'>'=> 3,
'<'.'/e'.'>'=> 4
),2),
'<'.'/e'.'>'=> array(array(
'<'.'e'.'>'=> 3,
'<'.'/xjxobj'.'>'=> 9
),7),
'<'.'xjxobj'.'>'=> array(array(
'<'.'e'.'>'=> 3,
'<'.'/xjxobj'.'>'=> 9
),1),
'<'.'/xjxobj'.'>'=> array(array(
'<'.'/v'.'>'=> 4
),8),
'start'=> array(array(
'<'.'xjxobj'.'>'=> 8
),9)
);if(isset($_POST['xjxargs'])){$this->nMethod=XAJAX_METHOD_POST;$this->aArgs=$_POST['xjxargs'];}else if(isset($_GET['xjxargs'])){$this->nMethod=XAJAX_METHOD_GET;$this->aArgs=$_GET['xjxargs'];}
if(1==get_magic_quotes_gpc())
array_walk($this->aArgs,array(&$this,'argumentStripSlashes'));array_walk($this->aArgs,array(&$this,'argumentDecodeXML'));}
function&getInstance(){static $obj;if(!$obj){$obj=new xajaxArgumentManager();}
return $obj;}
function configure($sName,$mValue){if('decodeUTF8Input'==$sName){if(true===$mValue||false===$mValue)
$this->bDecodeUTF8Input=$mValue;}else if('characterEncoding'==$sName){$this->sCharacterEncoding=$mValue;}
}
function getRequestMethod(){return $this->nMethod;}
function process(){if($this->bDecodeUTF8Input){$sFunction='';if(function_exists('iconv'))
$sFunction="iconv";else if(function_exists('mb_convert_encoding'))
$sFunction="mb_convert_encoding";else if($this->sCharacterEncoding=="ISO-8859-1")
$sFunction="utf8_decode";else{$objLanguageManager=&xajaxLanguageManager::getInstance();trigger_error(
$objLanguageManager->getText('ARGMGR:ERR:03')
,E_USER_NOTICE
);}
$mFunction=array(&$this,'argumentDecodeUTF8_' . $sFunction);array_walk($this->aArgs,$mFunction);$this->bDecodeUTF8Input=false;}
return $this->aArgs;}
}
class xajaxCall{var $sFunction;var $sReturnValue;var $aParameters;var $sMode;var $sRequestType;var $sResponseProcessor;var $sRequestURI;var $sContentType;function xajaxCall($sFunction=''){$this->sFunction=$sFunction;$this->aParameters=array();$this->sMode='';$this->sRequestType='';$this->sResponseProcessor='';$this->sRequestURI='';$this->sContentType='';}
function setFunction($sFunction){$this->sFunction=$sFunction;return $this;}
function clearParameters(){$this->aParameters=array();}
function addParameter($sParameter,$bUseQuotes=true){$this->aParameters[]=array($sParameter,$bUseQuotes);return $this;}
function addFormValuesParameter($sFormID){$this->aParameters[]=array('xajax.getFormValues("'.$sFormID.'")');return $this;}
function setMode($sMode){$this->sMode=$sMode;return $this;}
function setRequestType($sRequestType){$this->sRequestType=$sRequestType;return $this;}
function setResponseProcessor($sResponseProcessor){$this->sResponseProcessor=$sResponseProcessor;return $this;}
function setRequestURI($sRequestURI){$this->sRequestURI=$sRequestURI;return $this;}
function setContentType($sContentType){$this->sContentType=$sContentType;}
function setReturnValue($sReturnValue){$this->sReturnValue=$sReturnValue;}
function generate(){$output='xajax.call("';$output .=$this->sFunction;$output .='", {';$separator='';if(0 < count($this->aParameters)){$output .='parameters: [';foreach($this->aParameters as $aParameter){$output .=$separator;$bUseQuotes=$aParameter[1];if($bUseQuotes)
$output .='"';$output .=$aParameter[0];if($bUseQuotes)
$output .='"';$separator=',';}
$output .=']';}
if(0 < strlen($this->sMode)){$output .=$separator;$output .='mode:"';$output .=$this->sMode;$output .='"';$separator=',';}
if(0 < strlen($this->sRequestType)){$output .=$separator;$output .='requestType:"';$output .=$this->sRequestType;$output .='"';$separator=',';}
if(0 < strlen($this->sResponseProcessor)){$output .=$separator;$output .='responseProcessor:';$output .=$this->sResponseProcessor;$separator=',';}
if(0 < strlen($this->sRequestURI)){$output .=$separator;$output .='requestURI:"';$output .=$this->sRequestURI;$output .='"';$separator=',';}
if(0 < strlen($this->sContentType)){$output .=$separator;$output .='contentType:"';$output .=$this->sContentType;$output .='"';$separator=',';}
$output .='}); ';if(0 < strlen($this->sReturnValue)){$output .='return ';$output .=$this->sReturnValue;}else{$output .='return false;';}
return $output;}
}
if(false==defined('XAJAX_HTML_CONTROL_DOCTYPE_FORMAT'))define('XAJAX_HTML_CONTROL_DOCTYPE_FORMAT','XHTML');if(false==defined('XAJAX_HTML_CONTROL_DOCTYPE_VERSION'))define('XAJAX_HTML_CONTROL_DOCTYPE_VERSION','1.0');if(false==defined('XAJAX_HTML_CONTROL_DOCTYPE_VALIDATION'))define('XAJAX_HTML_CONTROL_DOCTYPE_VALIDATION','TRANSITIONAL');class xajaxControl{var $sTag;var $sEndTag;var $aAttributes;var $aEvents;var $sClass;function xajaxControl($sTag,$aConfiguration=array()){$this->sTag=$sTag;$this->clearAttributes();if(isset($aConfiguration['attributes']))
if(is_array($aConfiguration['attributes']))
foreach($aConfiguration['attributes'] as $sKey=> $sValue)
$this->setAttribute($sKey,$sValue);$this->clearEvents();if(isset($aConfiguration['event']))
call_user_func_array(array(&$this,'setEvent'),$aConfiguration['event']);else if(isset($aConfiguration['events']))
if(is_array($aConfiguration['events']))
foreach($aConfiguration['events'] as $aEvent)
call_user_func_array(array(&$this,'setEvent'),$aEvent);$this->sClass='%block';$this->sEndTag='forbidden';}
function getClass(){return $this->sClass;}
function clearAttributes(){$this->aAttributes=array();}
function setAttribute($sName,$sValue){$this->aAttributes[$sName]=$sValue;}
function getAttribute($sName){if(false==isset($this->aAttributes[$sName]))
return null;return $this->aAttributes[$sName];}
function clearEvents(){$this->aEvents=array();}
function setEvent($sEvent,&$objRequest,$aParameters=array(),$sBeforeRequest='',$sAfterRequest='; return false;'){$this->aEvents[$sEvent]=array(
&$objRequest,
$aParameters,
$sBeforeRequest,
$sAfterRequest
);}
function getHTML($bFormat=false){ob_start();if($bFormat)
$this->printHTML();else
$this->printHTML(false);return ob_get_clean();}
function printHTML($sIndent=''){$sClass=$this->getClass();if('%inline'!=$sClass)
if(false===(false===$sIndent))
echo $sIndent;echo '<';echo $this->sTag;echo ' ';$this->_printAttributes();$this->_printEvents();if('forbidden'==$this->sEndTag){if('HTML'==XAJAX_HTML_CONTROL_DOCTYPE_FORMAT)
echo '>';else if('XHTML'==XAJAX_HTML_CONTROL_DOCTYPE_FORMAT)
echo '/>';if('%inline'!=$sClass)
if(false===(false===$sIndent))
echo "\n";return;}
else if('optional'==$this->sEndTag){echo '/>';if('%inline'==$sClass)
if(false===(false===$sIndent))
echo "\n";return;}
}
function _printAttributes(){foreach($this->aAttributes as $sKey=> $sValue)
if('disabled'!=$sKey||'false'!=$sValue)
echo "{$sKey}='{$sValue}' ";}
function _printEvents(){foreach(array_keys($this->aEvents)as $sKey){$aEvent=&$this->aEvents[$sKey];$objRequest=&$aEvent[0];$aParameters=$aEvent[1];$sBeforeRequest=$aEvent[2];$sAfterRequest=$aEvent[3];foreach($aParameters as $aParameter){$nParameter=$aParameter[0];$sType=$aParameter[1];$sValue=$aParameter[2];$objRequest->setParameter($nParameter,$sType,$sValue);}
$objRequest->useDoubleQuote();echo "{$sKey}='{$sBeforeRequest}";$objRequest->printScript();echo "{$sAfterRequest}' ";}
}
function backtrace(){if(0 <=version_compare(PHP_VERSION,'4.3.0'))
return '<div><div>Backtrace:</div><pre>'
. print_r(debug_backtrace(),true)
. '</pre></div>';return '';}
}
class xajaxControlContainer extends xajaxControl{var $aChildren;var $sChildClass;function xajaxControlContainer($sTag,$aConfiguration=array()){xajaxControl::xajaxControl($sTag,$aConfiguration);$this->clearChildren();if(isset($aConfiguration['child']))
$this->addChild($aConfiguration['child']);else if(isset($aConfiguration['children']))
$this->addChildren($aConfiguration['children']);$this->sEndTag='required';}
function getClass(){$sClass=xajaxControl::getClass();if(0 < count($this->aChildren)&&'%flow'==$sClass)
return $this->getContentClass();else if(0==count($this->aChildren)||'%inline'==$sClass||'%block'==$sClass)
return $sClass;$objLanguageManager=&xajaxLanguageManager::getInstance();trigger_error(
$objLanguageManager->getText('XJXCTL:ICERR:01')
. $this->backtrace()
,E_USER_ERROR
);}
function getContentClass(){$sClass='';foreach(array_keys($this->aChildren)as $sKey){if(''==$sClass)
$sClass=$this->aChildren[$sKey]->getClass();else if($sClass!=$this->aChildren[$sKey]->getClass())
return '%flow';}
if(''==$sClass)
return '%inline';return $sClass;}
function clearChildren(){$this->sChildClass='%inline';$this->aChildren=array();}
function addChild(&$objControl){$this->aChildren[]=&$objControl;}
function addChildren(&$aChildren){foreach(array_keys($aChildren)as $sKey)
$this->addChild($aChildren[$sKey]);}
function printHTML($sIndent=''){$sClass=$this->getClass();if('%inline'!=$sClass)
if(false===(false===$sIndent))
echo $sIndent;echo '<';echo $this->sTag;echo ' ';$this->_printAttributes();$this->_printEvents();if(0==count($this->aChildren)){if('optional'==$this->sEndTag){echo '/>';if('%inline'!=$sClass)
if(false===(false===$sIndent))
echo "\n";return;}
}
echo '>';$sContentClass=$this->getContentClass();if('%inline'!=$sContentClass)
if(false===(false===$sIndent))
echo "\n";$this->_printChildren($sIndent);if('%inline'!=$sContentClass)
if(false===(false===$sIndent))
echo $sIndent;echo '<' . '/';echo $this->sTag;echo '>';if('%inline'!=$sClass)
if(false===(false===$sIndent))
echo "\n";}
function _printChildren($sIndent=''){if(false==is_a($this,'clsDocument'))
if(false===(false===$sIndent))
$sIndent .="\t";foreach(array_keys($this->aChildren)as $sKey){$objChild=&$this->aChildren[$sKey];$objChild->printHTML($sIndent);}
}
}
class xajaxPluginManager{var $aRequestPlugins;var $aResponsePlugins;var $aConfigurable;var $aRegistrars;var $aProcessors;var $aClientScriptGenerators;function xajaxPluginManager(){$this->aRequestPlugins=array();$this->aResponsePlugins=array();$this->aConfigurable=array();$this->aRegistrars=array();$this->aProcessors=array();$this->aClientScriptGenerators=array();}
function&getInstance(){static $obj;if(!$obj){$obj=new xajaxPluginManager();}
return $obj;}
function loadPlugins($aFolders){foreach($aFolders as $sFolder){if($handle=opendir($sFolder)){while(!(false===($sName=readdir($handle)))){$nLength=strlen($sName);if(8 < $nLength){$sFileName=substr($sName,0,$nLength-8);$sExtension=substr($sName,$nLength-8,8);if('.inc.php'==$sExtension){require $sFolder . '/' . $sFileName . $sExtension;}
}
}
closedir($handle);}
}
}
function _insertIntoArray(&$aPlugins,&$objPlugin,$nPriority){while(isset($aPlugins[$nPriority]))
$nPriority++;$aPlugins[$nPriority]=&$objPlugin;}
function registerPlugin(&$objPlugin,$nPriority=1000){if(is_a($objPlugin,'xajaxRequestPlugin')){$this->_insertIntoArray($this->aRequestPlugins,$objPlugin,$nPriority);if(method_exists($objPlugin,'register'))
$this->_insertIntoArray($this->aRegistrars,$objPlugin,$nPriority);if(method_exists($objPlugin,'canProcessRequest'))
if(method_exists($objPlugin,'processRequest'))
$this->_insertIntoArray($this->aProcessors,$objPlugin,$nPriority);}
else if(is_a($objPlugin,'xajaxResponsePlugin')){$this->aResponsePlugins[]=&$objPlugin;}
else{}
if(method_exists($objPlugin,'configure'))
$this->_insertIntoArray($this->aConfigurable,$objPlugin,$nPriority);if(method_exists($objPlugin,'generateClientScript'))
$this->_insertIntoArray($this->aClientScriptGenerators,$objPlugin,$nPriority);}
function canProcessRequest(){$bHandled=false;$aKeys=array_keys($this->aProcessors);sort($aKeys);foreach($aKeys as $sKey){$mResult=$this->aProcessors[$sKey]->canProcessRequest();if(true===$mResult)
$bHandled=true;else if(is_string($mResult))
return $mResult;}
return $bHandled;}
function processRequest(){$bHandled=false;$aKeys=array_keys($this->aProcessors);sort($aKeys);foreach($aKeys as $sKey){$mResult=$this->aProcessors[$sKey]->processRequest();if(true===$mResult)
$bHandled=true;else if(is_string($mResult))
return $mResult;}
return $bHandled;}
function configure($sName,$mValue){$aKeys=array_keys($this->aConfigurable);sort($aKeys);foreach($aKeys as $sKey)
$this->aConfigurable[$sKey]->configure($sName,$mValue);}
function register($aArgs){$aKeys=array_keys($this->aRegistrars);sort($aKeys);foreach($aKeys as $sKey){$objPlugin=&$this->aRegistrars[$sKey];$mResult=&$objPlugin->register($aArgs);if(is_a($mResult,'xajaxRequest'))
return $mResult;if(is_array($mResult))
return $mResult;if(is_bool($mResult))
if(true===$mResult)
return true;}
}
function generateClientScript(){$aKeys=array_keys($this->aClientScriptGenerators);sort($aKeys);foreach($aKeys as $sKey)
$this->aClientScriptGenerators[$sKey]->generateClientScript();}
function&getPlugin($sName){$aKeys=array_keys($this->aResponsePlugins);sort($aKeys);foreach($aKeys as $sKey)
if(is_a($this->aResponsePlugins[$sKey],$sName))
return $this->aResponsePlugins[$sKey];$bFailure=false;return $bFailure;}
}
if(!defined('XAJAX_FORM_VALUES'))define('XAJAX_FORM_VALUES','get form values');if(!defined('XAJAX_INPUT_VALUE'))define('XAJAX_INPUT_VALUE','get input value');if(!defined('XAJAX_CHECKED_VALUE'))define('XAJAX_CHECKED_VALUE','get checked value');if(!defined('XAJAX_ELEMENT_INNERHTML'))define('XAJAX_ELEMENT_INNERHTML','get element innerHTML');if(!defined('XAJAX_QUOTED_VALUE'))define('XAJAX_QUOTED_VALUE','quoted value');if(!defined('XAJAX_JS_VALUE'))define('XAJAX_JS_VALUE','unquoted value');class xajaxRequest{var $sName;var $sQuoteCharacter;var $aParameters;function xajaxRequest($sName){$this->aParameters=array();$this->sQuoteCharacter='"';$this->sName=$sName;}
function useSingleQuote(){$this->sQuoteCharacter="'";}
function useDoubleQuote(){$this->sQuoteCharacter='"';}
function clearParameters(){$this->aParameters=array();}
function addParameter(){$aArgs=func_get_args();if(1 < count($aArgs))
$this->setParameter(
count($this->aParameters),
$aArgs[0],
$aArgs[1]);}
function setParameter(){$aArgs=func_get_args();if(2 < count($aArgs)){$nParameter=$aArgs[0];$sType=$aArgs[1];if(XAJAX_FORM_VALUES==$sType){$sFormID=$aArgs[2];$this->aParameters[$nParameter]=
"xajax.getFormValues("
. $this->sQuoteCharacter
. $sFormID
. $this->sQuoteCharacter
. ")";}
else if(XAJAX_INPUT_VALUE==$sType){$sInputID=$aArgs[2];$this->aParameters[$nParameter]=
"xajax.$("
. $this->sQuoteCharacter
. $sInputID
. $this->sQuoteCharacter
. ").value";}
else if(XAJAX_CHECKED_VALUE==$sType){$sCheckedID=$aArgs[2];$this->aParameters[$nParameter]=
"xajax.$("
. $this->sQuoteCharacter
. $sCheckedID
. $this->sQuoteCharacter
. ").checked";}
else if(XAJAX_ELEMENT_INNERHTML==$sType){$sElementID=$aArgs[2];$this->aParameters[$nParameter]=
"xajax.$("
. $this->sQuoteCharacter
. $sElementID
. $this->sQuoteCharacter
. ").innerHTML";}
else if(XAJAX_QUOTED_VALUE==$sType){$sValue=$aArgs[2];$this->aParameters[$nParameter]=
$this->sQuoteCharacter
. $sValue
. $this->sQuoteCharacter;}
else if(XAJAX_JS_VALUE==$sType){$sValue=$aArgs[2];$this->aParameters[$nParameter]=$sValue;}
}
}
function getScript(){ob_start();$this->printScript();return ob_get_clean();}
function printScript(){$sOutput=$this->sName;$sOutput .="(";$sSeparator="";foreach($this->aParameters as $sParameter){$sOutput .=$sSeparator;$sOutput .=$sParameter;$sSeparator=", ";}
$sOutput .=")";print $sOutput;}
}
class xajaxCustomRequest extends xajaxRequest{var $aVariables;var $sScript;function xajaxCustomRequest($sScript){$this->aVariables=array();$this->sScript=$sScript;}
function clearVariables(){$this->aVariables=array();}
function setVariable($sName,$sValue){$this->aVariables[$sName]=$sValue;}
function printScript(){$sScript=$this->sScript;foreach($this->aVariables as $sKey=> $sValue)
$sScript=str_replace($sKey,$sValue,$sScript);echo $sScript;}
}
class xajaxResponse{var $aCommands;var $sCharacterEncoding;var $bOutputEntities;var $returnValue;var $objPluginManager;function xajaxResponse(){$this->aCommands=array();$objResponseManager=&xajaxResponseManager::getInstance();$this->sCharacterEncoding=$objResponseManager->getCharacterEncoding();$this->bOutputEntities=$objResponseManager->getOutputEntities();$this->objPluginManager=&xajaxPluginManager::getInstance();}
function setCharacterEncoding($sCharacterEncoding){$this->sCharacterEncoding=$sCharacterEncoding;return $this;}
function setOutputEntities($bOutputEntities){$this->bOutputEntities=(boolean)$bOutputEntities;return $this;}
function&plugin(){$aArgs=func_get_args();$nArgs=func_num_args();$sName=array_shift($aArgs);$objPlugin=&$this->objPluginManager->getPlugin($sName);if(false===$objPlugin){$bReturn=false;return $bReturn;}
$objPlugin->setResponse($this);if(0 < count($aArgs)){$sMethod=array_shift($aArgs);$aFunction=array(&$objPlugin,$sMethod);call_user_func_array($aFunction,$aArgs);}
return $objPlugin;}
function&__get($sPluginName){$objPlugin=&$this->plugin($sPluginName);return $objPlugin;}
function confirmCommands($iCmdNumber,$sMessage){return $this->addCommand(
array(
'n'=>'cc',
't'=>$iCmdNumber
),
$sMessage
);}
function assign($sTarget,$sAttribute,$sData){return $this->addCommand(
array(
'n'=>'as',
't'=>$sTarget,
'p'=>$sAttribute
),
$sData
);}
function append($sTarget,$sAttribute,$sData){return $this->addCommand(
array(
'n'=>'ap',
't'=>$sTarget,
'p'=>$sAttribute
),
$sData
);}
function prepend($sTarget,$sAttribute,$sData){return $this->addCommand(
array(
'n'=>'pp',
't'=>$sTarget,
'p'=>$sAttribute
),
$sData
);}
function replace($sTarget,$sAttribute,$sSearch,$sData){return $this->addCommand(
array(
'n'=>'rp',
't'=>$sTarget,
'p'=>$sAttribute
),
array(
's'=> $sSearch,
'r'=> $sData
)
);}
function clear($sTarget,$sAttribute){return $this->assign(
$sTarget,
$sAttribute,
''
);}
function contextAssign($sAttribute,$sData){return $this->addCommand(
array(
'n'=>'c:as',
'p'=>$sAttribute
),
$sData
);}
function contextAppend($sAttribute,$sData){return $this->addCommand(
array(
'n'=>'c:ap',
'p'=>$sAttribute
),
$sData
);}
function contextPrepend($sAttribute,$sData){return $this->addCommand(
array(
'n'=>'c:pp',
'p'=>$sAttribute
),
$sData
);}
function contextClear($sAttribute){return $this->contextAssign(
$sAttribute,
''
);}
function alert($sMsg){return $this->addCommand(
array(
'n'=>'al'
),
$sMsg
);}
function debug($sMessage){return $this->addCommand(
array(
'n'=>'dbg'
),
$sMessage
);}
function redirect($sURL,$iDelay=0){$queryStart=strpos($sURL,'?',strrpos($sURL,'/'));if($queryStart!==FALSE){$queryStart++;$queryEnd=strpos($sURL,'#',$queryStart);if($queryEnd===FALSE)
$queryEnd=strlen($sURL);$queryPart=substr($sURL,$queryStart,$queryEnd-$queryStart);parse_str($queryPart,$queryParts);$newQueryPart="";if($queryParts){$first=true;foreach($queryParts as $key=> $value){if($first)
$first=false;else
$newQueryPart .=ini_get('arg_separator.output');$newQueryPart .=rawurlencode($key).'='.rawurlencode($value);}
}else if($_SERVER['QUERY_STRING']){$newQueryPart=rawurlencode($_SERVER['QUERY_STRING']);}
$sURL=str_replace($queryPart,$newQueryPart,$sURL);}
if($iDelay)
$this->script(
'window.setTimeout("window.location = \''
. $sURL
. '\';",'
.($iDelay*1000)
. ');'
);else
$this->script(
'window.location = "'
. $sURL
. '";'
);return $this;}
function script($sJS){return $this->addCommand(
array(
'n'=>'js'
),
$sJS
);}
function call(){$aArgs=func_get_args();$sFunc=array_shift($aArgs);return $this->addCommand(
array(
'n'=>'jc',
'f'=>$sFunc
),
$aArgs
);}
function remove($sTarget){return $this->addCommand(
array(
'n'=>'rm',
't'=>$sTarget),
''
);}
function create($sParent,$sTag,$sId,$sType=null){return $this->addCommand(
array(
'n'=>'ce',
't'=>$sParent,
'p'=>$sId
),
$sTag
);}
function insert($sBefore,$sTag,$sId){return $this->addCommand(
array(
'n'=>'ie',
't'=>$sBefore,
'p'=>$sId
),
$sTag
);}
function insertAfter($sAfter,$sTag,$sId){return $this->addCommand(
array(
'n'=>'ia',
't'=>$sAfter,
'p'=>$sId
),
$sTag
);}
function createInput($sParent,$sType,$sName,$sId){return $this->addCommand(
array(
'n'=>'ci',
't'=>$sParent,
'p'=>$sId,
'c'=>$sType
),
$sName
);}
function insertInput($sBefore,$sType,$sName,$sId){return $this->addCommand(
array(
'n'=>'ii',
't'=>$sBefore,
'p'=>$sId,
'c'=>$sType
),
$sName
);}
function insertInputAfter($sAfter,$sType,$sName,$sId){return $this->addCommand(
array(
'n'=>'iia',
't'=>$sAfter,
'p'=>$sId,
'c'=>$sType
),
$sName
);}
function setEvent($sTarget,$sEvent,$sScript){return $this->addCommand(
array(
'n'=>'ev',
't'=>$sTarget,
'p'=>$sEvent
),
$sScript
);}
function addEvent($sTarget,$sEvent,$sScript){return $this->setEvent(
$sTarget,
$sEvent,
$sScript
);}
function addHandler($sTarget,$sEvent,$sHandler){return $this->addCommand(
array(
'n'=>'ah',
't'=>$sTarget,
'p'=>$sEvent
),
$sHandler
);}
function removeHandler($sTarget,$sEvent,$sHandler){return $this->addCommand(
array(
'n'=>'rh',
't'=>$sTarget,
'p'=>$sEvent
),
$sHandler);}
function setFunction($sFunction,$sArgs,$sScript){return $this->addCommand(
array(
'n'=>'sf',
'f'=>$sFunction,
'p'=>$sArgs
),
$sScript
);}
function wrapFunction($sFunction,$sArgs,$aScripts,$sReturnValueVariable){return $this->addCommand(
array(
'n'=>'wpf',
'f'=>$sFunction,
'p'=>$sArgs,
'c'=>$sReturnValueVariable
),
$aScripts
);}
function includeScript($sFileName){return $this->addCommand(
array(
'n'=>'in'
),
$sFileName
);}
function includeScriptOnce($sFileName){return $this->addCommand(
array(
'n'=>'ino'
),
$sFileName
);}
function removeScript($sFileName,$sUnload=''){$this->addCommand(
array(
'n'=>'rjs'
),
(''!=$sUnload)
? array($sFileName,$sUnload)
:$sFileName
);return $this;}
function includeCSS($sFileName){return $this->addCommand(
array(
'n'=>'css'
),
$sFileName
);}
function removeCSS($sFileName){return $this->addCommand(
array(
'n'=>'rcss'
),
$sFileName
);}
function waitForCSS($iTimeout=600){$sData="";$this->addCommand(
array(
'n'=>'wcss',
'p'=>$iTimeout
),
$sData
);return $this;}
function waitFor($script,$tenths){return $this->addCommand(
array(
'n'=>'wf',
'p'=>$tenths
),
$script
);}
function sleep($tenths){$this->addCommand(
array(
'n'=>'s',
'p'=>$tenths
),
''
);return $this;}
function setReturnValue($value){$this->returnValue=$this->_encodeArray($value);return $this;}
function getContentType(){return 'text/xml';}
function getOutput(){ob_start();$this->_printHeader_XML();$this->_printResponse_XML();return ob_get_clean();}
function printOutput(){$this->_sendHeaders();$this->_printHeader_XML();$this->_printResponse_XML();}
function _sendHeaders(){$objArgumentManager=&xajaxArgumentManager::getInstance();if(XAJAX_METHOD_GET==$objArgumentManager->getRequestMethod()){header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s"). " GMT");header("Cache-Control: no-cache, must-revalidate");header("Pragma: no-cache");}
$sCharacterSet='';if($this->sCharacterEncoding&&0 < strlen(trim($this->sCharacterEncoding))){$sCharacterSet='; charset="' . trim($this->sCharacterEncoding). '"';}
$sContentType=$this->getContentType();header('content-type: ' . $sContentType . ' ' . $sCharacterSet);}
function getCommandCount(){return count($this->aCommands);}
function loadCommands($mCommands,$bBefore=false){if(is_a($mCommands,'xajaxResponse')){$this->returnValue=$mCommands->returnValue;if($bBefore){$this->aCommands=array_merge($mCommands->aCommands,$this->aCommands);}
else{$this->aCommands=array_merge($this->aCommands,$mCommands->aCommands);}
}
else if(is_array($mCommands)){if($bBefore){$this->aCommands=array_merge($mCommands,$this->aCommands);}
else{$this->aCommands=array_merge($this->aCommands,$mCommands);}
}
else{}
}
function absorb($objResponse){$this->loadCommands($objResponse);}
function addPluginCommand($objPlugin,$aAttributes,$mData){$aAttributes['plg']=$objPlugin->getName();return $this->addCommand($aAttributes,$mData);}
function addCommand($aAttributes,$mData){$aAttributes['data']=$this->_encodeArray($mData);$this->aCommands[]=$aAttributes;return $this;}
function _printHeader_XML(){print '<';print '?';print 'xml version="1.0"';$sEncoding=trim($this->sCharacterEncoding);if($this->sCharacterEncoding&&0 < strlen($sEncoding)){print ' encoding="';print $sEncoding;print '"';}
print ' ?';print '>';}
function _printResponse_XML(){print '<';print 'xjx>';if(null!==$this->returnValue){print '<';print 'xjxrv>';$this->_printArray_XML($this->returnValue);print '<';print '/xjxrv>';}
foreach(array_keys($this->aCommands)as $sKey)
$this->_printCommand_XML($this->aCommands[$sKey]);print '<';print '/xjx>';}
function _printCommand_XML(&$aAttributes){print '<';print 'cmd';$mData='';foreach(array_keys($aAttributes)as $sKey){if($sKey){if('data'!=$sKey){print ' ';print $sKey;print '="';print $aAttributes[$sKey];print '"';}else
$mData=&$aAttributes[$sKey];}
}
print '>';$this->_printArray_XML($mData);print '<';print '/cmd>';}
function _printArray_XML(&$mArray){if('object'==gettype($mArray))
$mArray=get_object_vars($mArray);if(false==is_array($mArray)){$this->_printEscapedString_XML($mArray);return;}
print '<';print 'xjxobj>';foreach(array_keys($mArray)as $sKey){if(is_array($mArray[$sKey])){print '<';print 'e>';foreach(array_keys($mArray[$sKey])as $sInnerKey){if('k'==$sInnerKey||'v'==$sInnerKey){print '<';print $sInnerKey;print '>';$this->_printArray_XML($mArray[$sKey][$sInnerKey]);print '<';print '/';print $sInnerKey;print '>';}else{}
}
print '<';print '/e>';}else{}
}
print '<';print '/xjxobj>';}
function _printEscapedString_XML(&$sData){if(null===$sData){print '';return;}
if($this->bOutputEntities){print call_user_func_array('mb_convert_encoding',array(&$sData,'HTML-ENTITIES',$this->sCharacterEncoding));return;}
$nCDATA=0;$bNoOpenCDATA=(false===strpos($sData,'<'.'![CDATA['));if($bNoOpenCDATA){$bNoCloseCDATA=(false===strpos($sData,']]>'));if($bNoCloseCDATA){$bSpecialChars=(htmlspecialchars($sData,ENT_COMPAT,'UTF-8')!=$sData);if($bSpecialChars)
$nCDATA=1;}else
$nCDATA=2;}else
$nCDATA=2;if(0 < $nCDATA){print '<';print '![CDATA[';if(1 < $nCDATA){$aSegments=explode('<'.'![CDATA[',$sData);$aOutput=array();$nOutput=0;foreach(array_keys($aSegments)as $keySegment){$aFragments=explode(']]>',$aSegments[$keySegment]);$aStack=array();$nStack=0;foreach(array_keys($aFragments)as $keyFragment){if(0 < $nStack)
array_push($aStack,']]]]><','![CDATA[>',$aFragments[$keyFragment]);else
$aStack[]=$aFragments[$keyFragment];++$nStack;}
if(0 < $nOutput)
array_push($aOutput,'<','![]]><','![CDATA[CDATA[',implode('',$aStack));else
$aOutput[]=implode('',$aStack);++$nOutput;}
print implode('',$aOutput);}else
print $sData;print ']]>';}else
print $sData;}
function _encodeArray(&$mData){if('object'===gettype($mData))
$mData=get_object_vars($mData);if(false===is_array($mData))
return $mData;$aData=array();foreach(array_keys($mData)as $sKey)
$aData[]=array(
'k'=>$sKey,
'v'=>$this->_encodeArray($mData[$sKey])
);return $aData;}
}
class xajaxCustomResponse{var $sOutput;var $sContentType;var $sCharacterEncoding;var $bOutputEntities;function xajaxCustomResponse($sContentType){$this->sOutput='';$this->sContentType=$sContentType;$objResponseManager=&xajaxResponseManager::getInstance();$this->sCharacterEncoding=$objResponseManager->getCharacterEncoding();$this->bOutputEntities=$objResponseManager->getOutputEntities();}
function setCharacterEncoding($sCharacterEncoding){$this->sCharacterEncoding=$sCharacterEncoding;}
function setOutputEntities($bOutputEntities){$this->bOutputEntities=$bOutputEntities;}
function clear(){$this->sOutput='';}
function append($sOutput){$this->sOutput .=$sOutput;}
function absorb($objResponse){$this->sOutput .=$objResponse->getOutput();}
function getContentType(){return $this->sContentType;}
function getCharacterEncoding(){return $this->sCharacterEncoding;}
function getOutputEntities(){return $this->bOutputEntities;}
function getOutput(){return $this->sOutput;}
function printOutput(){$sContentType=$this->sContentType;$sCharacterSet=$this->sCharacterEncoding;header("content-type: {$sContentType}; charset={$sCharacterSet}");print $this->sOutput;}
}
class xajaxResponseManager{var $objResponse;var $sCharacterEncoding;var $bOutputEntities;var $aDebugMessages;function xajaxResponseManager(){$this->objResponse=NULL;$this->aDebugMessages=array();}
function&getInstance(){static $obj;if(!$obj){$obj=new xajaxResponseManager();}
return $obj;}
function configure($sName,$mValue){if('characterEncoding'==$sName){$this->sCharacterEncoding=$mValue;if(isset($this->objResponse))
$this->objResponse->setCharacterEncoding($this->sCharacterEncoding);}
else if('outputEntities'==$sName){if(true===$mValue||false===$mValue){$this->bOutputEntities=$mValue;if(isset($this->objResponse))
$this->objResponse->setOutputEntities($this->bOutputEntities);}
}
}
function clear(){$this->objResponse=NULL;}
function append($mResponse){if(is_a($mResponse,'xajaxResponse')){if(NULL==$this->objResponse){$this->objResponse=$mResponse;}else if(is_a($this->objResponse,'xajaxResponse')){if($this->objResponse!=$mResponse)
$this->objResponse->absorb($mResponse);}else{$objLanguageManager=&xajaxLanguageManager::getInstance();$this->debug(
$objLanguageManager->getText('XJXRM:MXRTERR')
. get_class($this->objResponse)
. ')'
);}
}else if(is_a($mResponse,'xajaxCustomResponse')){if(NULL==$this->objResponse){$this->objResponse=$mResponse;}else if(is_a($this->objResponse,'xajaxCustomResponse')){if($this->objResponse!=$mResponse)
$this->objResponse->absorb($mResponse);}else{$objLanguageManager=&xajaxLanguageManager::getInstance();$this->debug(
$objLanguageManager->getText('XJXRM:MXRTERR')
. get_class($this->objResponse)
. ')'
);}
}else{$objLanguageManager=&xajaxLanguageManager::getInstance();$this->debug($objLanguageManager->getText('XJXRM:IRERR'));}
}
function debug($sMessage){$this->aDebugMessages[]=$sMessage;}
function send(){if(NULL!=$this->objResponse){foreach($this->aDebugMessages as $sMessage)
$this->objResponse->debug($sMessage);$this->aDebugMessages=array();$this->objResponse->printOutput();}
}
function getCharacterEncoding(){return $this->sCharacterEncoding;}
function getOutputEntities(){return $this->bOutputEntities;}
}
class xajaxLanguageManager{var $aMessages;var $sLanguage;function xajaxLanguageManager(){$this->aMessages=array();$this->aMessages['en']=array(
'LOGHDR:01'=> '** xajax Error Log - ',
'LOGHDR:02'=> " **\n",
'LOGHDR:03'=> "\n\n\n",
'LOGERR:01'=> "** Logging Error **\n\nxajax was unable to write to the error log file:\n",
'LOGMSG:01'=> "** PHP Error Messages: **",
'CMPRSJS:RDERR:01'=> 'The xajax uncompressed Javascript file could not be found in the <b>',
'CMPRSJS:RDERR:02'=> '</b> folder. Error ',
'CMPRSJS:WTERR:01'=> 'The xajax compressed javascript file could not be written in the <b>',
'CMPRSJS:WTERR:02'=> '</b> folder. Error ',
'CMPRSPHP:WTERR:01'=> 'The xajax compressed file <b>',
'CMPRSPHP:WTERR:02'=> '</b> could not be written to. Error ',
'CMPRSAIO:WTERR:01'=> 'The xajax compressed file <b>',
'CMPRSAIO:WTERR:02'=> '/xajaxAIO.inc.php</b> could not be written to. Error ',
'DTCTURI:01'=> 'xajax Error: xajax failed to automatically identify your Request URI.',
'DTCTURI:02'=> 'Please set the Request URI explicitly when you instantiate the xajax object.',
'ARGMGR:ERR:01'=> 'Malformed object argument received: ',
'ARGMGR:ERR:02'=> ' <==> ',
'ARGMGR:ERR:03'=> 'The incoming xajax data could not be converted from UTF-8',
'XJXCTL:IAERR:01'=> 'Invalid attribute [',
'XJXCTL:IAERR:02'=> '] for element [',
'XJXCTL:IAERR:03'=> '].',
'XJXCTL:IRERR:01'=> 'Invalid request object passed to xajaxControl::setEvent',
'XJXCTL:IEERR:01'=> 'Invalid attribute (event name) [',
'XJXCTL:IEERR:02'=> '] for element [',
'XJXCTL:IEERR:03'=> '].',
'XJXCTL:MAERR:01'=> 'Missing required attribute [',
'XJXCTL:MAERR:02'=> '] for element [',
'XJXCTL:MAERR:03'=> '].',
'XJXCTL:IETERR:01'=> "Invalid end tag designation; should be forbidden or optional.\n",
'XJXCTL:ICERR:01'=> "Invalid class specified for html control; should be %inline, %block or %flow.\n",
'XJXCTL:ICLERR:01'=> 'Invalid control passed to addChild; should be derived from xajaxControl.',
'XJXCTL:ICLERR:02'=> 'Invalid control passed to addChild [',
'XJXCTL:ICLERR:03'=> '] for element [',
'XJXCTL:ICLERR:04'=> "].\n",
'XJXCTL:ICHERR:01'=> 'Invalid parameter passed to xajaxControl::addChildren; should be array of xajaxControl objects',
'XJXCTL:MRAERR:01'=> 'Missing required attribute [',
'XJXCTL:MRAERR:02'=> '] for element [',
'XJXCTL:MRAERR:03'=> '].',
'XJXPLG:GNERR:01'=> 'Response plugin should override the getName function.',
'XJXPLG:PERR:01'=> 'Response plugin should override the process function.',
'XJXPM:IPLGERR:01'=> 'Attempt to register invalid plugin: ',
'XJXPM:IPLGERR:02'=> ' should be derived from xajaxRequestPlugin or xajaxResponsePlugin.',
'XJXPM:MRMERR:01'=> 'Failed to locate registration method for the following: ',
'XJXRSP:EDERR:01'=> 'Passing character encoding to the xajaxResponse constructor is deprecated, instead use $xajax->configure("characterEncoding", ...);',
'XJXRSP:MPERR:01'=> 'Invalid or missing plugin name detected in call to xajaxResponse::plugin',
'XJXRSP:CPERR:01'=> "The \$sType parameter of addCreate has been deprecated. Use the addCreateInput() method instead.",
'XJXRSP:LCERR:01'=> "The xajax response object could not load commands as the data provided was not a valid array.",
'XJXRSP:AKERR:01'=> 'Invalid tag name encoded in array.',
'XJXRSP:IEAERR:01'=> 'Improperly encoded array.',
'XJXRSP:NEAERR:01'=> 'Non-encoded array detected.',
'XJXRSP:MBEERR:01'=> 'The xajax response output could not be converted to HTML entities because the mb_convert_encoding function is not available',
'XJXRSP:MXRTERR'=> 'Error: Cannot mix types in a single response.',
'XJXRSP:MXCTERR'=> 'Error: Cannot mix content types in a single response.',
'XJXRSP:MXCEERR'=> 'Error: Cannot mix character encodings in a single response.',
'XJXRSP:MXOEERR'=> 'Error: Cannot mix output entities (true/false) in a single response.',
'XJXRM:IRERR'=> 'An invalid response was returned while processing this request.',
'XJXRM:MXRTERR'=> 'Error: You cannot mix response types while processing a single request: '
);$this->sLanguage='en';}
function&getInstance(){static $obj;if(!$obj){$obj=new xajaxLanguageManager();}
return $obj;}
function configure($sName,$mValue){if('language'==$sName){if($mValue!==$this->sLanguage){$sFolder=dirname(__FILE__);require $sFolder . '/xajax_lang_' . $mValue . '.inc.php';$this->sLanguage=$mValue;}
}
}
function register($sLanguage,$aMessages){$this->aMessages[$sLanguage]=$aMessages;}
function getText($sMessage){if(isset($this->aMessages[$this->sLanguage]))
if(isset($this->aMessages[$this->sLanguage][$sMessage]))
return $this->aMessages[$this->sLanguage][$sMessage];return '(Unknown language or message identifier)'
. $this->sLanguage
. '::'
. $sMessage;}
}
class xajaxPlugin{}
class xajaxRequestPlugin extends xajaxPlugin{function configure($sName,$mValue){}
function register($aArgs){return false;}
function generateClientScript(){}
function canProcessRequest(){return false;}
function processRequest(){return false;}
}
class xajaxResponsePlugin extends xajaxPlugin{var $objResponse;function setResponse(&$objResponse){$this->objResponse=&$objResponse;}
function addCommand($aAttributes,$sData){$this->objResponse->addPluginCommand($this,$aAttributes,$sData);}
function getName(){}
function process(){}
}