<?php
/**
* The Exception class is the internal static class used to output user defined
* exceptions to the output stream.
*
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @copyright (c) 2003 amfphp.org
* @package flashservices
* @subpackage exception
* @author Justin Watkins Original Design
* @version $Id$
*/
/**
* Linked classes
*/
require_once(AMFPHP_BASE . "shared/app/Constants.php");
/**
* Remove the html formatting of the error messages so they can be easily formatted
* inside flash.
*/
@ini_set("html_errors", 0);
class MessageException {
/**
* Constructor for the Exception class. This is how you build a new
* error instance.
*
* @param string $code The code string to return to the flash client :: THIS SHOULD PROBABLY BE SET AUTOMATICALLY ::
* @param string $description A short reason why the error occured
* @param string $file The file name that the error occured
* @param int $line The line number where the error was detected
*/
function MessageException ($code, $description, $file, $line, $detailCode = 'AMFPHP_RUNTIME_ERROR') {
$this->code = $detailCode;
$this->description = $description; // pass the description
$this->details = $file; // pass the details
$this->level = MessageException::getFriendlyError($code);
$this->line = $line; // pass the line number
}
/**
* throwException provides the means to raise an exception. This method will
* stop the further execution of the remote method, but not hault the execution
* of the entire process. Using the built in PHP exception system will stop
* the entire process and not allow us to report very detailed information back
* to the client, especially if there are multiple methods.
*
* When we upgrade to PHP 5, using the try...catch syntax will make this much easier.
*
* @static
* @param AMFBody $body The AMFBody object to apply the exception to.
* @param AMFException @exception The exception object to throw
* @see AMFBody
*/
function throwException (&$body, $exception) {
$body->responseURI = $body->responseIndex . "/onStatus";
$results = &$body->getResults();
if($GLOBALS['amfphp']['encoding'] == 'amf3')
{
$results = new ErrorMessage();
$results->correlationId = $GLOBALS['amfphp']['lastMessageId'];
$results->faultCode = $exception->code;
$results->faultDetail = $exception->details . ' on line ' . $exception->line;
$results->faultString = $exception->description;
}
elseif($GLOBALS['amfphp']['encoding'] == 'amf0')
{
$results["description"] = $exception->description;
$results["details"] = $exception->details;
$results["level"] = $exception->level;
$results["line"] = $exception->line;
$results["code"] = $exception->code;
}
else
{
$results['faultCode'] = $exception->code;
$results['faultDetail'] = $exception->details . ' on line ' . $exception->line;
$results['faultString'] = $exception->description;
}
}
function getFriendlyError ($err) {
$errortype = array (1 => "Error",
2 => "Warning",
4 => "Parsing Error",
8 => "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024 => "User Notice",
2048 => "Strict error",
);
if(isset($errortype[$err]))
{
return $errortype[$err];
}
else
{
return "Unknown error type";
}
}
}
?>