WordPress.org

Make WordPress Core

Ticket #9798: 9798.wp_googlespell-2.patch

File 9798.wp_googlespell-2.patch, 6.0 KB (added by bforchhammer, 6 years ago)
  • wp-includes/js/tinymce/plugins/spellchecker/classes/WP_GoogleSpell.php

     
     1<?php 
     2/** 
     3 * Extension of TinyMCE GoogleSpell class for Wordpress 
     4 *  
     5 * WP_GoogleSpell extends TinyMCE's GoogleSpell class. It overrides the way in which the  
     6 * http request to google is executed and uses WP_Http instead of curl/fsockopen. 
     7 * 
     8 * In order to use this class the "general.engine" value in config.php 
     9 * (wp-includes/js/tinymce/plugins/spellchecker) needs to be set to "WP_GoogleSpell" 
     10 * instead of "GoogleSpell". 
     11 * 
     12 * @link http://trac.wordpress.org/ticket/9798 Request for proxy support for spellchecking 
     13 * 
     14 * @package WordPress 
     15 * @subpackage TinyMCE 
     16 * @since 2.8.0 
     17 * @author Benedikt Forchhammer <b.forchhammer@mind2.de> 
     18 */ 
     19 
     20// Wordpress functions and classes 
     21require_once(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))) . '/wp-load.php'); 
     22 
     23// The SpellChecking Engine which we want to extend 
     24require_once(dirname(__FILE__) . '/GoogleSpell.php'); 
     25 
     26class WP_GoogleSpell extends GoogleSpell { 
     27 
     28        function &_getMatches($lang, $str) { 
     29                if (class_exists('WP_Http')) { 
     30                        $http = new WP_Http(); 
     31                         
     32                        // request url 
     33                        $host = "www.google.com:443"; 
     34                        $path = "/tbproxy/spell?lang=" . $lang . "&hl=en"; 
     35                        $url = "https://" . $host . $path; 
     36                                                 
     37                        // Setup XML request 
     38                        $xml = '<?xml version="1.0" encoding="utf-8" ?><spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"><text>' . $str . '</text></spellrequest>'; 
     39                         
     40                        // set up request arguments. 
     41                        // [bforchhammer] sslverify disabled because it did not work on our server / should possibly be enabled by default? 
     42                        $args = array( 'body' => $xml, 'sslverify' => false ); 
     43 
     44                        $response = $http->post($url, $args); 
     45                         
     46                        if (is_wp_error($response)) { 
     47                                echo implode("\n", $response->get_error_messages()); 
     48                                return array(); 
     49                        } 
     50                        else { 
     51                                // Grab and parse content 
     52                                $matches = array(); 
     53                                preg_match_all('/<c o="([^"]*)" l="([^"]*)" s="([^"]*)">([^<]*)<\/c>/', $response['body'], $matches, PREG_SET_ORDER); 
     54                         
     55                                return $matches; 
     56                        } 
     57                } 
     58                else { 
     59                        $this->throwError('WP_Http class has not been loaded'); 
     60                } 
     61        } 
     62         
     63        /** 
     64         * Checks if a word is on the exception list of "correctly spelled words". 
     65         * 
     66         * @param {String} $word The word to check 
     67         * @param {Bool} false if the word is on the exception list. 
     68         */ 
     69        function checkWPWord($word) { 
     70                $exceptions = array_keys($this->getWPExceptionList()); 
     71                return !in_array($word, $exceptions); 
     72        } 
     73         
     74        /** 
     75         * Returns suggestions of for a specific word using the list of  
     76         * Wordpress Spelling Exceptions 
     77         * 
     78         * @param {String} $lang Language code like sv or en. 
     79         * @param {String} $word Specific word to get suggestions for. 
     80         * @return {Array} Array of suggestions for the specified word. 
     81         */ 
     82        function getWPSuggestions($lang, $word) {        
     83                $exceptions = $this->getWPExceptionList(); 
     84                 
     85                $suggestions = array(); 
     86                foreach ($exceptions as $good => $bad) { 
     87                        if (in_array($word, $bad)) $suggestions[] = $good; 
     88                }                
     89                return $suggestions; 
     90        } 
     91         
     92        /** 
     93         * Get List of Wordpress Spelling Exceptions 
     94         * 
     95         * Use filter 'mce_spellcheck_exceptions' to add custom exceptions to this list. 
     96         * 
     97         * @return {Array} List of Spelling Exceptions in the format array( $correctly-spelled-word -> array( 'misspelled', 'words', 'to be replaced')) 
     98         */ 
     99        function getWPExceptionList() { 
     100                $defaults = array( 
     101                        'WordPress' => array('Word Press', 'wordpress', 'wordPress', 'Wordpress') 
     102                ); 
     103                return apply_filters('mce_spellcheck_exceptions', $defaults); 
     104        } 
     105         
     106        /** 
     107         * Spellchecks an array of words. 
     108         * 
     109         * Ignores words that are on the list of Wordpress Spelling Exceptions. 
     110         * 
     111         * @param {String} $lang Language code like sv or en. 
     112         * @param {Array} $words Array of words to spellcheck. 
     113         * @return {Array} Array of misspelled words. 
     114         */ 
     115        function &checkWords($lang, $words) { 
     116                $words = array_filter($words, array($this, 'checkWPWord')); 
     117                return parent::checkWords($lang, $words); 
     118        } 
     119 
     120        /** 
     121         * Returns suggestions of for a specific word. 
     122         * 
     123         * Merges Wordpress Spelling Exceptions (filter 'mce_spellcheck_exceptions') 
     124         * with google's list of suggestions. 
     125         * 
     126         * @param {String} $lang Language code like sv or en. 
     127         * @param {String} $word Specific word to get suggestions for. 
     128         * @return {Array} Array of suggestions for the specified word. 
     129         */ 
     130        function &getSuggestions($lang, $word) { 
     131                $wp_suggestions = $this->getWPSuggestions($lang, $word); 
     132                $google_suggestions = parent::getSuggestions($lang, $word); 
     133                return array_merge($wp_suggestions, $google_suggestions); 
     134        } 
     135         
     136        /** 
     137         * GoogleSpell::_unhtmlentities remove e option from preg_replace calls 
     138         * 
     139         * @see http://core.trac.wordpress.org/ticket/8689  
     140         */ 
     141        function _unhtmlentities($string) { 
     142                $string = preg_replace('~&#x([0-9a-f]+);~i', 'chr(hexdec("\\1"))', $string); 
     143                $string = preg_replace('~&#([0-9]+);~', 'chr(\\1)', $string); 
     144 
     145                $trans_tbl = get_html_translation_table(HTML_ENTITIES); 
     146                $trans_tbl = array_flip($trans_tbl); 
     147 
     148                return strtr($string, $trans_tbl); 
     149        } 
     150} 
     151?> 
     152 No newline at end of file 
  • wp-includes/js/tinymce/plugins/spellchecker/config.php

     
    66 * @copyright Copyright © 2007, Moxiecode Systems AB, All rights reserved. 
    77 */ 
    88        // General settings 
    9         $config['general.engine'] = 'GoogleSpell'; 
     9        //$config['general.engine'] = 'GoogleSpell'; 
     10        $config['general.engine'] = 'WP_GoogleSpell'; 
    1011        //$config['general.engine'] = 'PSpell'; 
    1112        //$config['general.engine'] = 'PSpellShell'; 
    1213        //$config['general.remote_rpc_url'] = 'http://some.other.site/some/url/rpc.php';