X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=plugins%2Fsquirrelspell%2Fmodules%2Fcheck_me.mod;h=05c9af987bc875f8be605cd49fcace8713d6dca2;hp=40baaba34feb2683ea9da5f3cbd38fa82ac8b666;hb=6efba534294f6c7badff2e5436f1665247af7cc3;hpb=44d661aa1bdc1a6f35d03ac7e1aee4c93dbc2c93 diff --git a/plugins/squirrelspell/modules/check_me.mod b/plugins/squirrelspell/modules/check_me.mod index 40baaba3..05c9af98 100644 --- a/plugins/squirrelspell/modules/check_me.mod +++ b/plugins/squirrelspell/modules/check_me.mod @@ -1,17 +1,17 @@ + * @author Konstantin Riabitsev + * @copyright © 1999-2006 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) . "
"
-     . htmlspecialchars(join("\n", $sqspell_output)) . '
' +if (!empty($check->error)) { + $msg= '
' + . nl2br(htmlspecialchars($check->error)) . '
' . '
'; @@ -128,87 +114,56 @@ if ($sqspell_exitcode){ 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(htmlspecialchars($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(htmlspecialchars($check->error)); + } else { + $error_msg = _("Unknown error"); } - break; - } + $msg= '
' + . $error_msg + . '
' + . '
'; + sqspell_makeWindow(null, _("SquirrelSpell error."), null, $msg); + exit; } if ($errors){ @@ -218,7 +173,7 @@ if ($errors){ */ $extrajs="\n" . "\n"; - + displayHtmlHeader(_("SquirrelSpell Results"),$extrajs); @@ -292,7 +248,7 @@ if ($errors){ - + @@ -306,7 +262,7 @@ if ($errors){
- @@ -316,8 +272,8 @@ if ($errors){ echo $sptag . _("Line with an error:") . ''; ?>
- + @@ -327,7 +283,7 @@ if ($errors){ ?> @@ -422,7 +378,7 @@ if ($errors){ /** * AREN'T YOU SUCH A KNOW-IT-ALL! */ - $msg='
'. + $msg='
' . '
'; sqspell_makeWindow(null, _("No errors found"), null, $msg); @@ -435,4 +391,3 @@ if ($errors){ * End: * vim: syntax=php et ts=4 */ -?> \ No newline at end of file
- @@ -336,7 +292,7 @@ if ($errors){ ?> -
- +
@@ -399,15 +355,15 @@ if ($errors){
' - . ' '; + . _("Close and Commit") + . ' " onclick="if (confirm(\'' + . _("The spellcheck is not finished. Really close and commit changes?") + . '\')) sqspellCommitChanges()" />' + . ' '; ?>