/** * This is the main communications engine of xajax. The engine handles all * incoming xajax requests, calls the apporiate PHP functions (or * class/object methods) and passes the XML responses back to the * Javascript response handler. If your RequestURI is the same as your Web * page then this function should be called before any headers or HTML has * been sent. */ function processRequests() { $requestMode = -1; $sFunctionName = ""; $bFoundFunction = true; $bFunctionIsCatchAll = false; $sFunctionNameForSpecial = ""; $aArgs = array(); $sPreResponse = ""; $bEndRequest = false; $requestMode = $this->getRequestMode(); if ($requestMode == -1) { return; } if ($requestMode == XAJAX_POST) { $sFunctionName = $_POST["xajax"]; if (!empty($_POST["xajaxargs"])) { $aArgs = $_POST["xajaxargs"]; } } else { 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"); $sFunctionName = $_GET["xajax"]; if (!empty($_GET["xajaxargs"])) { $aArgs = $_GET["xajaxargs"]; } } // Use xajax error handler if necessary if ($this->bErrorHandler) { $GLOBALS['xajaxErrorHandlerText'] = ""; set_error_handler("xajaxErrorHandler"); } if ($this->sPreFunction) { if (!$this->_isFunctionCallable($this->sPreFunction)) { $bFoundFunction = false; $oResponse = new tx_xajax_response(); $oResponse->addAlert("Unknown Pre-Function " . $this->sPreFunction); } } //include any external dependencies associated with this function name if (array_key_exists($sFunctionName, $this->aFunctionIncludeFiles)) { ob_start(); include_once $this->aFunctionIncludeFiles[$sFunctionName]; ob_end_clean(); } if ($bFoundFunction) { $sFunctionNameForSpecial = $sFunctionName; if (!array_key_exists($sFunctionName, $this->aFunctions)) { if ($this->sCatchAllFunction) { $sFunctionName = $this->sCatchAllFunction; $bFunctionIsCatchAll = true; } else { $bFoundFunction = false; $oResponse = new tx_xajax_response(); $oResponse->addAlert("Unknown Function {$sFunctionName}."); } } } if ($bFoundFunction) { for ($i = 0; $i < sizeof($aArgs); $i++) { // If magic quotes is on, then we need to strip the slashes from the args if (get_magic_quotes_gpc() == 1 && is_string($aArgs[$i])) { $aArgs[$i] = stripslashes($aArgs[$i]); } if (stristr($aArgs[$i], "<xjxobj>") != false) { $aArgs[$i] = $this->_xmlToArray("xjxobj", $aArgs[$i]); } else { if (stristr($aArgs[$i], "<xjxquery>") != false) { $aArgs[$i] = $this->_xmlToArray("xjxquery", $aArgs[$i]); } else { if ($this->bDecodeUTF8Input) { $aArgs[$i] = $this->_decodeUTF8Data($aArgs[$i]); } } } } if ($this->sPreFunction) { $mPreResponse = $this->_callFunction($this->sPreFunction, array($sFunctionNameForSpecial, $aArgs)); if (is_array($mPreResponse) && $mPreResponse[0] === false) { $bEndRequest = true; $sPreResponse = $mPreResponse[1]; } else { $sPreResponse = $mPreResponse; } if ($bEndRequest) { $oResponse = $sPreResponse; } } if (!$bEndRequest) { if (!$this->_isFunctionCallable($sFunctionName)) { $oResponse = new tx_xajax_response(); $oResponse->addAlert("The Registered Function {$sFunctionName} Could Not Be Found."); } else { if ($bFunctionIsCatchAll) { $aArgs = array($sFunctionNameForSpecial, $aArgs); } $oResponse = $this->_callFunction($sFunctionName, $aArgs); } if (is_string($sResponse)) { $oResponse = new tx_xajax_response(); $oResponse->addAlert("No XML Response Was Returned By Function {$sFunctionName}.\n\nOutput: " . $oResponse); } else { if ($sPreResponse != "") { $oNewResponse = new tx_xajax_response($this->sEncoding, $this->bOutputEntities); $oNewResponse->loadXML($sPreResponse); $oNewResponse->loadXML($oResponse); $oResponse = $sNewResponse; } } } } $sContentHeader = "Content-type: text/xml;"; if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0) { $sContentHeader .= " charset=" . $this->sEncoding; } header($sContentHeader); if ($this->bErrorHandler && !empty($GLOBALS['xajaxErrorHandlerText'])) { $oErrorResponse = new tx_xajax_response(); $oErrorResponse->addAlert("** PHP Error Messages: **" . $GLOBALS['xajaxErrorHandlerText']); if ($this->sLogFile) { $fH = @fopen($this->sLogFile, "a"); if (!$fH) { $oErrorResponse->addAlert("** Logging Error **\n\nxajax was unable to write to the error log file:\n" . $this->sLogFile); } else { fwrite($fH, "** xajax Error Log - " . strftime("%b %e %Y %I:%M:%S %p") . " **" . $GLOBALS['xajaxErrorHandlerText'] . "\n\n\n"); fclose($fH); } } $oErrorResponse->loadXML($oResponse); $oResponse = $oErrorResponse; } if ($this->bCleanBuffer) { while (@ob_end_clean()) { } } print $oResponse->getOutput(); if ($this->bErrorHandler) { restore_error_handler(); } if ($this->bExitAllowed) { exit; } }