X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;ds=inline;f=plugins%2Fsquirrelspell%2Fmodules%2Fcheck_me.mod;h=38cc3bcfdf4bb5d6f16e28e32e8f5281a72c0c5a;hb=c997cbe6f5a46d432d7733acb207dfcdfd00e49e;hp=a6cb6e8abfbb847ca0d57fe89cafcbf3b2f4ca8a;hpb=38c5802facc2ab80b03eef5496f7c6ba9152764a;p=squirrelmail.git diff --git a/plugins/squirrelspell/modules/check_me.mod b/plugins/squirrelspell/modules/check_me.mod index a6cb6e8a..38cc3bcf 100644 --- a/plugins/squirrelspell/modules/check_me.mod +++ b/plugins/squirrelspell/modules/check_me.mod @@ -1,20 +1,20 @@ ($Author$) - * @version $Date$ + * @author Konstantin Riabitsev + * @copyright 1999-2021 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version $Id$ + * @package plugins + * @subpackage squirrelspell */ /** @@ -36,18 +36,21 @@ function SpellLink($jscode, $title, $link) { /** * Declaring globals for users with E_ALL set. */ -global $SQSPELL_APP, $attachment_dir, $SQSPELL_EREG, $color; +global $SQSPELL_APP_DEFAULT, $SQSPELL_APP, $SQSPELL_SPELLCHECKER, + $SQSPELL_FORCE_POPEN, $attachment_dir, $color; -$sqspell_text = $_POST['sqspell_text']; -$sqspell_use_app = $_POST['sqspell_use_app']; +if (! sqgetGlobalVar('sqspell_text',$sqspell_text,SQ_POST)) { + $sqspell_text = ''; +} +if (! sqgetGlobalVar('sqspell_use_app',$sqspell_use_app,SQ_POST)) { + $sqspell_use_app = $SQSPELL_APP_DEFAULT; +} /** - * Now we explode the lines for three reasons: + * Now we explode the lines for two reasons: * 1) So we can ignore lines starting with ">" (reply's) * 2) So we can stop processing when we get to "--" on a single line, * which means that the signature is starting - * 3) So we can add an extra space at the beginning of each line. This way - * ispell/aspell don't treat these as command characters. */ $sqspell_raw_lines = explode("\n", $sqspell_text); for ($i=0; $i= 4.3.0, we can use proc_open and safe mode - * and not mess w/ temp files. Otherwise we will do it the old - * way, (minus the uneeded call to cat that messes up Wintel - * boxen.) - * Thanks Ray Ferguson for providing this patch. - */ -if( check_php_version ( 4, 3 ) ) { - $descriptorspec = array( - 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from - 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to - 2 => array('pipe', 'w'), // stderr is a pipe that the child will write to - ); - $spell_proc=proc_open($sqspell_command, $descriptorspec, $pipes); - fwrite($pipes[0], $sqspell_new_text); - fclose($pipes[0]); - $sqspell_output = array(); - for($i=1; $i<=2; $i++){ - while(!feof($pipes[$i])) - array_push($sqspell_output, rtrim(fgetss($pipes[$i],999),"\n")); - fclose($pipes[$i]); - } - $sqspell_exitcode=proc_close($spell_proc); +include_once(SM_PATH . 'plugins/squirrelspell/class/common.php'); + +$aParams = array(); +$aParams['words'] = sqspell_getLang($sqspell_use_app); + +if ($SQSPELL_SPELLCHECKER===1) { + include_once(SM_PATH . 'plugins/squirrelspell/class/php_pspell.php'); + $aParams['dictionary'] = $SQSPELL_APP[$sqspell_use_app]; + $aParams['charset'] = $default_charset; + $check = new php_pspell($aParams); } else { - do { - $floc = "$attachment_dir/" . md5($sqspell_new_text . microtime()); - } while (file_exists($floc)); - $fp=fopen($floc, 'w'); - fwrite($fp, $sqspell_new_text); - fclose($fp); - exec("$sqspell_command < $floc 2>&1", $sqspell_output, $sqspell_exitcode); - unlink($floc); + include_once(SM_PATH . 'plugins/squirrelspell/class/cmd_spell.php'); + $aParams['spell_command'] = $SQSPELL_APP[$sqspell_use_app]; + if ($SQSPELL_FORCE_POPEN) { + $aParams['use_proc_open'] = false; + } else { + $aParams['use_proc_open'] = check_php_version(4,3); + } + $aParams['temp_dir'] = $attachment_dir; + $aParams['debug'] = false; + $check = new cmd_spell($aParams); } /** - * Check if the execution was successful. Bail out if it wasn't. + * Check for class constructor function errors */ -if ($sqspell_exitcode){ - $msg= "
" - . sprintf(_("I tried to execute '%s', but it returned:"), - $sqspell_command) . "
"
-     . join("\n", htmlspecialchars($sqspell_output)) . "
" - . "
" - . "
"; +if (!empty($check->error)) { + $msg= '
' + . nl2br(sm_encode_html_special_chars($check->error)) + . '
' + . '
'; sqspell_makeWindow(null, _("SquirrelSpell is misconfigured."), null, $msg); exit; } -/** - * Load the user dictionary. - */ -$words=sqspell_getLang(sqspell_getWords(), $sqspell_use_app); -/** - * Define some variables to be used during the processing. - */ -$current_line=0; $missed_words=Array(); $misses = Array(); $locations = Array(); $errors=0; +$results = $check->check_text($sqspell_new_text); + /** - * Now we process the output of sqspell_command (ispell or aspell in - * ispell compatibility mode, whichever). I'm going to be scarce on - * comments here, since you can just look at the ispell/aspell output - * and figure out what's going on. ;) The best way to describe this is - * "Dark Magic". + * Check for execution errors */ -for ($i=0; $ierror)) { + $msg= '
' + . nl2br(sm_encode_html_special_chars($check->error)) + . '
' + . '
'; + sqspell_makeWindow(null, _("SquirrelSpell is misconfigured."), null, $msg); + exit; +} + +if (is_array($results)) { + // convert variables to old style squirrelspell results + if (!empty($results)) { + foreach(array_keys($results) as $word) { + if (isset($results[$word]['locations'])) { + $missed_words[] = $word; + $locations[$word] = implode(', ',$results[$word]['locations']); + if (isset($results[$word]['suggestions'])) { + $misses[$word] = implode(', ',$results[$word]['suggestions']); + } else { + $misses[$word] = '_NONE'; + } + } else { + // $word without 'locations'. ignore it + } + } + $errors = count($missed_words); } - break; - /** - * Line begins with "#". - * This means a misspelled word and no suggestions. - */ - case '#': - $tmparray = explode(" ", $sqspell_output[$i]); - $sqspell_word=$tmparray[1]; - /** - * - * Check if the word is in user dictionary. - */ - if (!$SQSPELL_EREG("\n$sqspell_word\n", $words)){ - $sqspell_symb=intval($tmparray[2])-1; - if (!isset($misses[$sqspell_word])) { - $misses[$sqspell_word] = '_NONE'; - $missed_words[$errors] = $sqspell_word; - $errors++; - } - if (isset($locations[$sqspell_word])) { - $locations[$sqspell_word] .= ', '; - } else { - $locations[$sqspell_word] = ''; - } - $locations[$sqspell_word] .= "$current_line:$sqspell_symb"; +} else { + if (!empty($check->error)) { + $error_msg = nl2br(sm_encode_html_special_chars($check->error)); + } else { + $error_msg = _("Unknown error"); } - break; - } + $msg= '
' + . $error_msg + . '
' + . '
'; + sqspell_makeWindow(null, _("SquirrelSpell error."), null, $msg); + exit; } if ($errors){ - /** - * So, there are errors - * This is the only place where the generic GUI-wrapper is not - * called, but generated right here. This is due to the complexity - * of the output. - */ - echo "\n" - . "\n" - . '' . _("SquirrelSpell Results") . ''; - /** - * Check if there are user-defined stylesheets. - */ - if ($theme_css != '') { - echo "\n"; - } /** * Load the spelling errors into JavaScript arrays * (More dark magic!) */ - echo "\n" - . "\n" - . "\n"; - + . "\n"; + + + displayHtmlHeader(_("SquirrelSpell Results"),$extrajs); + echo "\n"; @@ -305,13 +248,13 @@ if ($errors){ - + -
+
@@ -319,7 +262,7 @@ if ($errors){
- @@ -329,8 +272,8 @@ if ($errors){ echo $sptag . _("Line with an error:") . ''; ?>
- + @@ -340,7 +283,7 @@ if ($errors){ ?> - + - + - @@ -435,9 +378,9 @@ if ($errors){ /** * AREN'T YOU SUCH A KNOW-IT-ALL! */ - $msg="
" - . "
"; + $msg='
' . + '
'; sqspell_makeWindow(null, _("No errors found"), null, $msg); } @@ -448,4 +391,3 @@ if ($errors){ * End: * vim: syntax=php et ts=4 */ -?>
- @@ -349,7 +292,7 @@ if ($errors){ ?> - + onfocus="if(!this.value) this.value=document.forms[0].sqspell_error.value" /> - +


- +


- ' - . ' '; + + ' + . ' '; ?>