<?php

class REST
{

	public $_allow = array();
	public $_content_type = "application/json";
	public $_request = array();
	public $_header = array();
	private $_method = "";
	private $_code = 200;

	public function __construct()
	{
		$this->inputs();
	}

	public function get_referer()
	{
		return $_SERVER['HTTP_REFERER'];
	}

	public function response($data, $status)
	{
		$this->_code = ($status) ? $status : 200;
		$this->set_headers();
		echo $data;
		exit;
	}

	private function get_status_message()
	{
		$status = array(
			200 => 'OK',
			201 => 'Created',
			204 => 'No Content',
			404 => 'Not Found',
			406 => 'Not Acceptable',
			401 => 'Unauthorized'
		);
		return ($status[$this->_code]) ? $status[$this->_code] : $status[500];
	}

	public function get_request_method()
	{
		return $_SERVER['REQUEST_METHOD'];
	}

	private function inputs()
	{
		$this->_header = $this->get_request_header();

		switch ($this->get_request_method()) {
			case "POST":
				$this->_request = $this->cleanInputs($_POST);
				break;
			case "GET":
			case "DELETE":
				$this->_request = $this->cleanInputs($_GET);
				break;
			case "PUT":
				parse_str(file_get_contents("php://input"), $this->_request);
				$this->_request = $this->cleanInputs($this->_request);
				break;
			default:
				$this->response('', 406);
				break;
		}
	}

	private function cleanInputs($data)
	{
		$clean_input = array();
		if (is_array($data)) {
			foreach ($data as $k => $v) {
				$clean_input[$k] = $this->cleanInputs($v);
			}
		} else {
			//if(get_magic_quotes_gpc()) {
			//if((function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) || (ini_get('magic_quotes_sybase') && (strtolower(ini_get('magic_quotes_sybase'))!="off")) ){
			//$data = trim(stripslashes($data));//Last version v3.0
			//$data = trim(stripslashes_deep($data));
			//}
			if (ini_get('magic_quotes_sybase') && strtolower(ini_get('magic_quotes_sybase')) != "off") {
				$data = trim($this->stripslashes_deep($data));
			}
			$data = strip_tags($data);
			$clean_input = trim($data);
		}
		return $clean_input;
	}

	function stripslashes_deep($value)
	{
		$value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
		return $value;
	}
	private function get_request_header()
	{
		$headers = array();
		foreach ($_SERVER as $key => $value) {
			if (strpos($key, 'HTTP_') === 0) {
				$headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
			}
		}
		return $headers;
	}

	private function set_headers()
	{
		header("HTTP/1.1 " . $this->_code . " " . $this->get_status_message());
		header("Content-Type:" . $this->_content_type);

		header("Access-Control-Allow-Origin: *");
		header("Access-Control-Allow-Credentials: true");
		header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE');
		header('Access-Control-Max-Age: 60000');
		header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
	}
}
