web/wp-includes/js/tinymce/plugins/spellchecker/rpc.php
author ymh
Fri, 12 Mar 2010 13:29:04 +0000
changeset 1 0d28b7c10758
permissions -rw-r--r--
First commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
 * $Id: rpc.php 822 2008-04-28 13:45:03Z spocke $
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
 * @package MCManager.includes
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
 * @author Moxiecode
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
 * @copyright Copyright � 2004-2007, Moxiecode Systems AB, All rights reserved.
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
require_once("./includes/general.php");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
// Set RPC response headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
header('Content-Type: text/plain');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
header('Content-Encoding: UTF-8');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
header("Cache-Control: no-store, no-cache, must-revalidate");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
header("Cache-Control: post-check=0, pre-check=0", false);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
header("Pragma: no-cache");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
$raw = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
// Try param
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
if (isset($_POST["json_data"]))
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
	$raw = getRequestParam("json_data");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
// Try globals array
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
if (!$raw && isset($_GLOBALS) && isset($_GLOBALS["HTTP_RAW_POST_DATA"]))
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
	$raw = $_GLOBALS["HTTP_RAW_POST_DATA"];
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
// Try globals variable
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
if (!$raw && isset($HTTP_RAW_POST_DATA))
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
	$raw = $HTTP_RAW_POST_DATA;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
// Try stream
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
if (!$raw) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
	if (!function_exists('file_get_contents')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
		$fp = fopen("php://input", "r");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
		if ($fp) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
			$raw = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
			while (!feof($fp))
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
				$raw = fread($fp, 1024);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
			fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
	} else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
		$raw = "" . file_get_contents("php://input");
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
// No input data
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
if (!$raw)
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
	die('{"result":null,"id":null,"error":{"errstr":"Could not get raw post data.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
// Passthrough request to remote server
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
if (isset($config['general.remote_rpc_url'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
	$url = parse_url($config['general.remote_rpc_url']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
	// Setup request
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
	$req = "POST " . $url["path"] . " HTTP/1.0\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
	$req .= "Connection: close\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
	$req .= "Host: " . $url['host'] . "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
	$req .= "Content-Length: " . strlen($raw) . "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
	$req .= "\r\n" . $raw;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
	if (!isset($url['port']) || !$url['port'])
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
		$url['port'] = 80;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
	$errno = $errstr = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
	$socket = fsockopen($url['host'], intval($url['port']), $errno, $errstr, 30);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
	if ($socket) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
		// Send request headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
		fputs($socket, $req);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
		// Read response headers and data
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
		$resp = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
		while (!feof($socket))
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
				$resp .= fgets($socket, 4096);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
		fclose($socket);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
		// Split response header/data
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
		$resp = explode("\r\n\r\n", $resp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
		echo $resp[1]; // Output body
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
	die();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
// Get JSON data
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
$json = new Moxiecode_JSON();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
$input = $json->decode($raw);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
// Execute RPC
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
if (isset($config['general.engine'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
	$spellchecker = new $config['general.engine']($config);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
	$result = call_user_func_array(array($spellchecker, $input['method']), $input['params']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
} else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
	die('{"result":null,"id":null,"error":{"errstr":"You must choose an spellchecker engine in the config.php file.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
// Request and response id should always be the same
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
$output = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
	"id" => $input->id,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
	"result" => $result,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
	"error" => null
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
// Return JSON encoded string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
echo $json->encode($output);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
?>