+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);
+ if ( ! is_resource ( $spell_proc ) ) {
+ // TODO: replace error_box() with sqspell_makeWindow()
+ error_box ( sprintf(_("Could not run the spellchecker command (%s)."),
+ htmlspecialchars($sqspell_command) ) );
+ // display footer (closes html tags) and stop script execution
+ $oTemplate->display('footer.tpl');
+ exit();
+ }
+ if ( ! @fwrite($pipes[0], $sqspell_new_text) ) {
+ // TODO: replace error_box() with sqspell_makeWindow()
+ error_box ( _("Error while writing to pipe.") );
+ // close all three $pipes here.
+ for($i=0; $i<=2; $i++) {
+ // disable all fclose error messages
+ @fclose($pipes[$i]);
+ }
+ // close html tags and abort script.
+ $oTemplate->display('footer.tpl');
+ exit();
+ }
+ 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),"\r\n"));
+ }
+ fclose($pipes[$i]);
+ }
+ $sqspell_exitcode=proc_close($spell_proc);
+} else {
+ // add slash to attachment directory, if it does not end with slash.
+ if (substr($attachment_dir, -1) != '/')
+ $attachment_dir = $attachment_dir . '/';
+
+ // find unused file in attachment directory
+ do {
+ $floc = $attachment_dir . md5($sqspell_new_text . microtime());
+ } while (file_exists($floc));
+
+ $fp = @fopen($floc, 'w');
+ if ( ! is_resource ($fp) ) {
+ // TODO: replace error_box() with sqspell_makeWindow()
+ error_box ( sprintf(_("Could not open temporary file '%s'."),
+ htmlspecialchars($floc) ) );
+ // failed to open temp file. abort script.
+ $oTemplate->display('footer.tpl');
+ exit();
+ }
+ if ( ! @fwrite($fp, $sqspell_new_text) ) {
+ // TODO: replace error_box() with sqspell_makeWindow()
+ error_box ( sprintf(_("Error while writing to temporary file '%s'."),
+ htmlspecialchars($floc) ) );
+ // close file descriptor
+ fclose($fp);
+ // failed writing to temp file. abort script.
+ $oTemplate->display('footer.tpl');
+ exit();
+ }
+ fclose($fp);
+ exec("$sqspell_command < $floc 2>&1", $sqspell_output, $sqspell_exitcode);
+ unlink($floc);
+}