*/ require_once ("domframework/http.php"); /** Allow to manage the REST protocol by using the users output types */ class rest { /** Allowed types by default */ public $allowedtypes = array ("json", "xml", "txt", "csv"); /** Converted types */ private $convert = array ( "application/json" => "json", "application/xml" => "xml", "text/plain" => "txt", "text/csv" => "csv", ); /** This method allow to choose the type of plugin to use on output * Based on the HTTP_ACCEPT parameter provided by the user * @return string like "json", "xml", "txt", "csv" */ public function chooseType () // {{{ { $type = reset ($this->allowedtypes); if (isset ($_SERVER["HTTP_ACCEPT"])) { // Must work with the complete definition to match, and by the name of // the output plugin at the end $convert = array_intersect ($this->convert, $this->allowedtypes); $type = array_search (reset ($this->allowedtypes), $this->convert); $http = new http; $type = $http->bestChoice ($_SERVER["HTTP_ACCEPT"], array_keys ($convert), $type); $type = $this->convert[$type]; } return $type; } // }}} /** Display the message (which can be a string, an array, an integer...) * into the type asked by the client if it is allowed. * By default, the JSON type is used * @param string $message Message to be displayed by the output type * @param integer|null $code HTTP code to use */ function display ($message, $code = 200) // {{{ { $http = new http; $text = $http->codetext ($code); header ($_SERVER["SERVER_PROTOCOL"]." $code $text"); $type = $this->chooseType (); require_once ("domframework/output$type.php"); $constr = __NAMESPACE__."\\output$type"; $method = "out"; $obj = new $constr (); $obj->$method ($message); } // }}} }