Seditio Source
Root |
./othercms/b2evolution_7.2.3/rsc/ext/tiny_mce/plugins/spellchecker/includes/Engine.php
<?php
/**
 * Engine.php
 *
 * Copyright, Moxiecode Systems AB
 * Released under LGPL License.
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 *
 * Base class for all spellcheckers this takes in the words to check
 * spelling on and returns the suggestions.
 */

class TinyMCE_SpellChecker_Engine {
    private static
$engines = array();
    private
$config;

    public function
__constructor($config) {
       
$this->config = $config;
    }

   
/**
     * Spellchecks an array of words.
     *
     * @param String $lang Selected language code (like en_US or de_DE). Shortcodes like "en" and "de" work with enchant >= 1.4.1
     * @param Array $words Array of words to check.
     * @return Name/value object with arrays of suggestions.
     */
   
public function getSuggestions($lang, $words) {
        return array();
    }

   
/**
     * Return true/false if the engine is supported by the server.
     *
     * @return boolean True/false if the engine is supported.
     */
   
public function isSupported() {
        return
true;
    }

   
/**
     * Sets the config array used to create the instance.
     *
     * @param Array $config Name/value array with config options.
     */
   
public function setConfig($config) {
       
$this->config = $config;
    }

   
/**
     * Returns the config array used to create the instance.
     *
     * @return Array Name/value array with config options.
     */
   
public function getConfig() {
        return
$this->config;
    }

   
// Static methods

   
public static function processRequest($tinymceSpellcheckerConfig) {
       
$engine = self::get($tinymceSpellcheckerConfig["engine"]);
       
$engine = new $engine();
       
$engine->setConfig($tinymceSpellcheckerConfig);

       
header('Content-Type: application/json');
       
header('Content-Encoding: UTF-8');
       
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
       
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
       
header("Cache-Control: no-store, no-cache, must-revalidate");
       
header("Cache-Control: post-check=0, pre-check=0", false);
       
header("Pragma: no-cache");

       
$method = self::getParam("method", "spellcheck");
       
$lang = self::getParam("lang", "en_US");
       
$text = self::getParam("text");

        if (
$method == "spellcheck") {
            try {
                if (!
$text) {
                    throw new
Exception("Missing input parameter 'text'.");
                }

                if (!
$engine->isSupported()) {
                    throw new
Exception("Current spellchecker isn't supported.");
                }

               
$words = self::getWords($text);

                echo
json_encode((object) array(
                   
"words" => (object) $engine->getSuggestions($lang, $words)
                ));
            } catch (
Exception $e) {
                echo
json_encode((object) array(
                   
"error" => $e->getMessage()
                ));
            }
        } else {
            echo
json_encode((object) array(
               
"error" => "Invalid JSON input"
           
));
        }
    }

   
/**
     * Returns an request value by name without magic quoting.
     *
     * @param String $name Name of parameter to get.
     * @param String $default_value Default value to return if value not found.
     * @return String request value by name without magic quoting or default value.
     */
   
public static function getParam($name, $default_value = false) {
        if (isset(
$_POST[$name])) {
           
$req = $_POST;
        } else if (isset(
$_GET[$name])) {
           
$req = $_GET;
        } else {
            return
$default_value;
        }

       
// Handle magic quotes
       
if (ini_get("magic_quotes_gpc")) {
            if (
is_array($req[$name])) {
               
$out = array();

                foreach (
$req[$name] as $name => $value) {
                   
$out[stripslashes($name)] = stripslashes($value);
                }

                return
$out;
            }

            return
stripslashes($req[$name]);
        }

        return
$req[$name];
    }

    public static function
add($name, $className) {
       
self::$engines[$name] = $className;
    }

    public static function
get($name) {
        if (!isset(
self::$engines[$name])) {
            return
null;
        }

        return
self::$engines[$name];
    }

    public static function
getWords($text) {
       
preg_match_all('(\w{3,})u', $text, $matches);
       
$words = $matches[0];

        for (
$i = count($words) - 1;  $i >= 0; $i--) {
           
// Exclude words with numbers in them
           
if (preg_match('/[0-9]+/', $words[$i])) {
               
array_splice($words, $i, 1);
            }
        }

        return
$words;
    }
}

?>