Commit 67f92c0396753fe1e87b592d3646d5cea8bfd35c

Authored by megan_w
1 parent cfc0ba99

KTS-2859

"Unable to upload files in Windows XP and Windows 2003 - seemingly an MS Word issue only."
Fixed. Added a batch file to call antiword.exe, should prevent the browser from hanging.

Committed by: Megan Watson
Reviewed by: Conrad Vermeulen



git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/STABLE/branches/3.4.6-Release-Branch@7937 c91229c3-7414-0410-bfa2-8a42b809f60b
bin/exec_files.bat 0 → 100755
  1 +%1 %2 >> %3
0 \ No newline at end of file 2 \ No newline at end of file
lib/util/ktutil.inc
@@ -185,7 +185,7 @@ class KTUtil { @@ -185,7 +185,7 @@ class KTUtil {
185 } else { 185 } else {
186 $sCmd = $aCmd; 186 $sCmd = $aCmd;
187 } 187 }
188 - 188 +
189 $sAppend = KTUtil::arrayGet($aOptions, 'append'); 189 $sAppend = KTUtil::arrayGet($aOptions, 'append');
190 if ($sAppend) { 190 if ($sAppend) {
191 $sCmd .= " >> " . escapeshellarg($sAppend); 191 $sCmd .= " >> " . escapeshellarg($sAppend);
@@ -207,16 +207,26 @@ class KTUtil { @@ -207,16 +207,26 @@ class KTUtil {
207 $iRet = ''; 207 $iRet = '';
208 208
209 if(OS_WINDOWS){ 209 if(OS_WINDOWS){
210 - $sCmd = 'call '.$sCmd; 210 + $wait = false;
  211 + if(isset($aOptions['exec_wait']) && ($aOptions['exec_wait'] == 'true')){
  212 + $wait = true;
  213 + }
  214 +
  215 + $WshShell = new COM("WScript.Shell");
  216 + $res = $WshShell->Run($sCmd, 0, $wait);
  217 +
  218 + $iRet = 0;
  219 + $aOutput = array($res);
  220 + }else{
  221 + exec($sCmd, $aOutput, $iRet);
211 } 222 }
212 - exec($sCmd, $aOutput, $iRet);  
213 223
214 $aRet['ret'] = $iRet; 224 $aRet['ret'] = $iRet;
215 $aRet['out'] = $aOutput; 225 $aRet['out'] = $aOutput;
216 return $aRet; 226 return $aRet;
217 } 227 }
218 // }}} 228 // }}}
219 - 229 +
220 // {{{ winexec 230 // {{{ winexec
221 /** 231 /**
222 * Execute a command on a windows platform. 232 * Execute a command on a windows platform.
plugins/ktstandard/contents/WordIndexer.php
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 * License Version 1.1.2 ("License"); You may not use this file except in 6 * License Version 1.1.2 ("License"); You may not use this file except in
7 * compliance with the License. You may obtain a copy of the License at 7 * compliance with the License. You may obtain a copy of the License at
8 * http://www.knowledgetree.com/KPL 8 * http://www.knowledgetree.com/KPL
9 - * 9 + *
10 * Software distributed under the License is distributed on an "AS IS" 10 * Software distributed under the License is distributed on an "AS IS"
11 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. 11 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
12 * See the License for the specific language governing rights and 12 * See the License for the specific language governing rights and
@@ -17,9 +17,9 @@ @@ -17,9 +17,9 @@
17 * (ii) the KnowledgeTree copyright notice 17 * (ii) the KnowledgeTree copyright notice
18 * in the same form as they appear in the distribution. See the License for 18 * in the same form as they appear in the distribution. See the License for
19 * requirements. 19 * requirements.
20 - * 20 + *
21 * The Original Code is: KnowledgeTree Open Source 21 * The Original Code is: KnowledgeTree Open Source
22 - * 22 + *
23 * The Initial Developer of the Original Code is The Jam Warehouse Software 23 * The Initial Developer of the Original Code is The Jam Warehouse Software
24 * (Pty) Ltd, trading as KnowledgeTree. 24 * (Pty) Ltd, trading as KnowledgeTree.
25 * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright 25 * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright
@@ -39,9 +39,9 @@ class KTWordIndexerTrigger extends KTBaseIndexerTrigger { @@ -39,9 +39,9 @@ class KTWordIndexerTrigger extends KTBaseIndexerTrigger {
39 var $commandconfig = 'indexer/catdoc'; // could be any application. 39 var $commandconfig = 'indexer/catdoc'; // could be any application.
40 var $args = array("-w", "-d", "UTF-8"); 40 var $args = array("-w", "-d", "UTF-8");
41 var $use_pipes = true; 41 var $use_pipes = true;
42 - 42 +
43 function extract_contents($sFilename, $sTempFilename) { 43 function extract_contents($sFilename, $sTempFilename) {
44 - if (OS_WINDOWS) { 44 + if (OS_WINDOWS) {
45 $this->command = 'c:\antiword\antiword.exe'; 45 $this->command = 'c:\antiword\antiword.exe';
46 $this->commandconfig = 'indexer/antiword'; 46 $this->commandconfig = 'indexer/antiword';
47 $this->args = array(); 47 $this->args = array();
@@ -52,32 +52,55 @@ class KTWordIndexerTrigger extends KTBaseIndexerTrigger { @@ -52,32 +52,55 @@ class KTWordIndexerTrigger extends KTBaseIndexerTrigger {
52 if (empty($sCommand)) { 52 if (empty($sCommand)) {
53 return false; 53 return false;
54 } 54 }
55 -  
56 - if (OS_WINDOWS) { 55 +
  56 + if (OS_WINDOWS) {
57 $sDir = dirname(dirname($sCommand)); 57 $sDir = dirname(dirname($sCommand));
58 - putenv('HOME=' . $sDir); 58 + putenv('HOME=' . $sDir);
  59 + $sBatDir = KT_DIR.'\bin\exec_files.bat';
  60 +
  61 + $cmdline = array($sCommand);
  62 + $cmdline = kt_array_merge($cmdline, $this->args);
  63 +
  64 + $sCmd_1 = KTUtil::safeShellString($cmdline);
  65 + $sCmd_2 = escapeshellarg($sFilename);
  66 + $sCmd_3 = escapeshellarg($sTempFilename);
  67 +
  68 + $sCmd_1 = str_replace( '/','\\',$sCmd_1);
  69 + $sCmd_2 = str_replace( '/','\\',$sCmd_2);
  70 + $sCmd_3 = str_replace( '/','\\',$sCmd_3);
  71 +
  72 + $iRet = '';
  73 +
  74 + $sBat = '"'.$sBatDir.'" '.$sCmd_1.' '.$sCmd_2.' '.$sCmd_3;
  75 + $sBat = str_replace( '/','\\',$sBat);
  76 +
  77 + $WshShell = new COM("WScript.Shell");
  78 + $res = $WshShell->Run($sBat, 0, true);
  79 +
  80 + $contents = file_get_contents($sTempFilename);
  81 + return $contents;
59 } 82 }
60 return parent::extract_contents($sFilename, $sTempFilename); 83 return parent::extract_contents($sFilename, $sTempFilename);
61 } 84 }
62 - 85 +
63 function findLocalCommand() { 86 function findLocalCommand() {
64 if (OS_WINDOWS) { 87 if (OS_WINDOWS) {
65 $this->command = 'c:\antiword\antiword.exe'; 88 $this->command = 'c:\antiword\antiword.exe';
66 $this->commandconfig = 'indexer/antiword'; 89 $this->commandconfig = 'indexer/antiword';
67 $this->args = array(); 90 $this->args = array();
68 - } 91 + }
69 $sCommand = KTUtil::findCommand($this->commandconfig, $this->command); 92 $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);
70 return $sCommand; 93 return $sCommand;
71 } 94 }
72 - 95 +
73 function getDiagnostic() { 96 function getDiagnostic() {
74 $sCommand = $this->findLocalCommand(); 97 $sCommand = $this->findLocalCommand();
75 - 98 +
76 // can't find the local command. 99 // can't find the local command.
77 if (empty($sCommand)) { 100 if (empty($sCommand)) {
78 return sprintf(_kt('Unable to find required command for indexing. Please ensure that <strong>%s</strong> is installed and in the %s Path. For more information on indexers and helper applications, please <a href="%s">visit the %s site</a>.'), $this->command, APP_NAME, $this->support_url, APP_NAME); 101 return sprintf(_kt('Unable to find required command for indexing. Please ensure that <strong>%s</strong> is installed and in the %s Path. For more information on indexers and helper applications, please <a href="%s">visit the %s site</a>.'), $this->command, APP_NAME, $this->support_url, APP_NAME);
79 } 102 }
80 - 103 +
81 return null; 104 return null;
82 } 105 }
83 } 106 }