sendHeaders();
if (isset($_REQUEST['lang']) and $_REQUEST['lang']) $this->lang = $_REQUEST['lang'];
$this->pspell_personal_dictionary .= '/'.$this->lang.'.pws';
method_exists($this, $rpc) and $this->$rpc();
}
private function pspell() {
foreach($_REQUEST as $key => $value) {
$$key = html_entity_decode(urldecode(stripslashes(trim($value))));
}
// load the dictionary
$pspell_link = pspell_new_personal($this->pspell_personal_dictionary, $this->lang);
// return suggestions
if (isset($suggest)) {
exit(json_encode(pspell_suggest($pspell_link, urldecode($suggest))));
}
// return badly spelt words
elseif (isset($text)) {
$words = array();
foreach($text = explode(' ', urldecode($text)) as $word) {
if (!pspell_check($pspell_link, $word) and !in_array($word, $words)) {
$words[] = $word;
}
}
exit(json_encode($words));
}
// add word to personal dictionary
elseif (isset($addtodictionary)) {
$pspell_config = pspell_config_create('en');
@pspell_config_personal($pspell_config, $this->pspell_personal_dictionary) or die('can\'t find pspell dictionary');
$pspell_link = pspell_new_config($pspell_config);
@pspell_add_to_personal($pspell_link, strtolower($addtodictionary)) or die('You can\'t add a word to the dictionary that contains any punctuation.');
pspell_save_wordlist($pspell_link);
exit(array());
}
}
private function google() {
foreach($_REQUEST as $key => $value) {
$$key = html_entity_decode(urldecode(stripslashes(trim($value))));
}
// return badly spelt words from a chunk of text
if (isset($text)) {
$words = array();
foreach($matches = $this->getGoogleMatches($text) as $word) {
// position & length of badly spelt word
$word = substr($text, $word[1], $word[2]);
if (!in_array($word, $words)){
$words[] = $word;
}
}
exit(json_encode($words));
}
// return suggestions for a specific word
else if (isset($suggest)) {
$matches =
$this->getGoogleMatches($suggest) and
$matches[0][4] and
exit(json_encode(explode("\t", $matches[0][4]))) or
exit(json_encode(array()));
}
}
private function getGoogleMatches($str) {
$url = 'https://www.google.com';
$path = '/tbproxy/spell?lang='.$this->lang.'&hl=en';
// setup XML request
$xml = '';
$xml .= '';
$xml .= ''.$str.'';
// setup headers to be sent
$header = "POST {$path} HTTP/1.0 \r\n";
$header .= "MIME-Version: 1.0 \r\n";
$header .= "Content-type: text/xml; charset=utf-8 \r\n";
$header .= "Content-length: ".strlen($xml)." \r\n";
$header .= "Request-number: 1 \r\n";
$header .= "Document-type: Request \r\n";
$header .= "Connection: close \r\n\r\n";
$header .= $xml;
// response data
$xml_response = '';
// use curl if it exists
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$xml_response = curl_exec($ch);
curl_close($ch);
} else {
exit;
}
// grab and parse content, remove google XML formatting
$matches = array();
preg_match_all('/([^<]*)<\/c>/', $xml_response, $matches, PREG_SET_ORDER);
// note: google will return encoded data, no need to encode ut8 characters
return $matches;
}
private static function sendHeaders() {
header('Content-type: application/json'); // data type
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // no cache
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // no cache
header("Cache-Control: no-store, no-cache, must-revalidate"); // no cache
header("Cache-Control: post-check=0, pre-check=0", false); // no cache
}
}