Ejemplo n.º 1
0
 public static function getDiskUsageStats($update = true)
 {
     $config = KTConfig::getSingleton();
     $cmd = KTUtil::findCommand('externalBinary/df', 'df');
     if ($cmd === false) {
         if ($update) {
             KTUtil::setSystemSetting('DiskUsage', 'n/a');
         }
         return false;
     }
     $warningPercent = $config->get('DiskUsage/warningThreshold', 15);
     $urgentPercent = $config->get('DiskUsage/urgentThreshold', 5);
     if (OS_WINDOWS) {
         $cmd = str_replace('/', '\\', $cmd);
         $res = KTUtil::pexec("\"{$cmd}\" -B 1 2>&1");
         $result = implode("\r\n", $res['out']);
     } else {
         if (strtolower(PHP_OS) == 'darwin') {
             $result = shell_exec($cmd . " -k 2>&1");
         } else {
             $result = shell_exec($cmd . " -B 1 2>&1");
         }
     }
     if (strpos($result, 'cannot read table of mounted file systems') !== false) {
         if ($update) {
             KTUtil::setSystemSetting('DiskUsage', 'n/a');
         }
         return false;
     }
     $result = explode("\n", $result);
     unset($result[0]);
     // gets rid of headings
     $usage = array();
     foreach ($result as $line) {
         if (empty($line)) {
             continue;
         }
         preg_match('/(.*)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\%\\s+(.*)/', $line, $matches);
         list($line, $filesystem, $size, $used, $avail, $usedp, $mount) = $matches;
         if ($size === 0 || empty($size)) {
             continue;
         }
         if (strtolower(PHP_OS) == 'darwin') {
             $size = $size * 1024;
             $used = $used * 1024;
             $avail = $avail * 1024;
         }
         $colour = '';
         if ($usedp >= 100 - $urgentPercent) {
             $colour = 'red';
         } elseif ($usedp >= 100 - $warningPercent) {
             $colour = 'orange';
         }
         $usage[] = array('filesystem' => trim($filesystem), 'size' => KTUtil::filesizeToString($size), 'used' => KTUtil::filesizeToString($used), 'available' => KTUtil::filesizeToString($avail), 'usage' => $usedp . '%', 'mounted' => trim($mount), 'colour' => $colour);
     }
     if ($update) {
         KTUtil::setSystemSetting('DiskUsage', serialize($usage));
     }
     return $usage;
 }
Ejemplo n.º 2
0
 function checkDF()
 {
     $df = KTUtil::findCommand('externalBinary/df', 'df');
     if (false === $df) {
         $this->addIssue('Storage Utilization', 'Could not locate the <i>df</i> binary.');
     }
 }
 public function __construct()
 {
     $config = KTConfig::getSingleton();
     $this->unzip = KTUtil::findCommand("import/unzip", 'unzip');
     $this->unzip = str_replace('\\', '/', $this->unzip);
     $this->unzip_params = $config->get('extractorParameters/unzip', '"{source}" "{part}" -d "{target_dir}"');
     parent::__construct();
 }
Ejemplo n.º 4
0
 function findLocalCommand()
 {
     if (OS_WINDOWS) {
         $this->command = 'c:\\antiword\\antiword.exe';
         $this->commandconfig = 'indexer/antiword';
         $this->args = array();
     }
     $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);
     return $sCommand;
 }
 public function __construct($targetExtension = 'html')
 {
     parent::__construct();
     $this->targetExtension = $targetExtension;
     $config =& KTConfig::getSingleton();
     $this->useOO = $config->get('indexer/useOpenOffice', true);
     $this->python = KTUtil::findCommand('externalBinary/python');
     $this->ooHost = $config->get('openoffice/host');
     $this->ooPort = $config->get('openoffice/port');
     $this->documentConverter = KT_DIR . '/bin/openoffice/DocumentConverter.py';
     if (!is_file($this->documentConverter)) {
         $this->documentConverter = false;
     }
 }
Ejemplo n.º 6
0
 function findLocalCommand()
 {
     $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);
     return $sCommand;
 }
Ejemplo n.º 7
0
 /**
  * Get disk usage
  *
  * @param string $path
  */
 private function capture_df($path)
 {
     $df = KTUtil::findCommand('externalBinary/df', 'df');
     if (!file_exists($df) || !is_executable($df)) {
         return;
     }
     $df = popen($df, 'r');
     $content = fread($df, 10240);
     pclose($df);
     file_put_contents($path . '/df.txt', $content);
 }
 function init()
 {
     $oKTConfig =& KTConfig::getSingleton();
     $sBasedir = $oKTConfig->get("urls/tmpDirectory");
     $sTmpPath = tempnam($sBasedir, 'archiveimportstorage');
     if ($sTmpPath === false) {
         return PEAR::raiseError(_kt("Could not create temporary directory for archive storage"));
     }
     if (!file_exists($this->sZipPath)) {
         return PEAR::raiseError(_kt("Archive file given does not exist"));
     }
     unlink($sTmpPath);
     mkdir($sTmpPath, 0700);
     $this->sBasePath = $sTmpPath;
     // Set environment language to output character encoding
     $sOutputEncoding = $oKTConfig->get('export/encoding', 'UTF-8');
     $loc = $sOutputEncoding;
     putenv("LANG={$loc}");
     putenv("LANGUAGE={$loc}");
     $loc = setlocale(LC_ALL, $loc);
     // File Archive doesn't unzip properly so sticking to the original unzip functionality
     if ($this->sExtension == 'zip') {
         // ** Original zip functionality
         $sUnzipCommand = KTUtil::findCommand("import/unzip", "unzip");
         if (empty($sUnzipCommand)) {
             return PEAR::raiseError(_kt("unzip command not found on system"));
         }
         $aArgs = array($sUnzipCommand, "-q", "-n", "-d", $sTmpPath, $this->sZipPath);
         $aRes = KTUtil::pexec($aArgs);
         if ($aRes['ret'] !== 0) {
             return PEAR::raiseError(_kt("Could not retrieve contents from zip storage"));
         }
     } else {
         File_Archive::extract(File_Archive::readArchive($this->sExtension, File_Archive::readUploadedFile('file')), $dst = $sTmpPath);
     }
 }
 /**
  * Zip the temp folder
  */
 function createZipFile($bEchoStatus = FALSE)
 {
     if (empty($this->aPaths)) {
         return PEAR::raiseError(_kt("No folders or documents found to compress"));
     }
     // Set environment language to output character encoding
     $loc = $this->sOutputEncoding;
     putenv("LANG={$loc}");
     putenv("LANGUAGE={$loc}");
     $loc = setlocale(LC_ALL, $loc);
     $sManifest = sprintf("%s/%s", $this->sTmpPath, "MANIFEST");
     file_put_contents($sManifest, join("\n", $this->aPaths));
     $sZipFile = sprintf("%s/%s.zip", $this->sTmpPath, $this->sZipFileName);
     $sZipFile = str_replace('<', '', str_replace('</', '', str_replace('>', '', $sZipFile)));
     $sZipCommand = KTUtil::findCommand("export/zip", "zip");
     $aCmd = array($sZipCommand, "-r", $sZipFile, ".", "-i@MANIFEST");
     $sOldPath = getcwd();
     chdir($this->sTmpPath);
     // Note that the popen means that pexec will return a file descriptor
     $aOptions = array('popen' => 'r');
     $fh = KTUtil::pexec($aCmd, $aOptions);
     if ($bEchoStatus) {
         $last_beat = time();
         while (!feof($fh)) {
             if ($i % 1000 == 0) {
                 $this_beat = time();
                 if ($last_beat + 1 < $this_beat) {
                     $last_beat = $this_beat;
                     print "&nbsp;";
                 }
             }
             $contents = fread($fh, 4096);
             if ($contents) {
                 print nl2br($this->_convertEncoding($contents, false));
             }
             $i++;
         }
     }
     pclose($fh);
     // Save the zip file and path into session
     $_SESSION['zipcompression'] = KTUtil::arrayGet($_SESSION, 'zipcompression', array());
     $sExportCode = KTUtil::randomString();
     $_SESSION['zipcompression'][$sExportCode] = array('file' => $sZipFile, 'dir' => $this->sTmpPath);
     $_SESSION['zipcompression']['exportcode'] = $sExportCode;
     $this->sZipFile = $sZipFile;
     return $sExportCode;
 }
Ejemplo n.º 10
0
 function extract_contents($sFilename, $sTempFilename)
 {
     $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);
     if (empty($sCommand)) {
         return false;
     }
     $cmdline = array($sCommand);
     $cmdline = kt_array_merge($cmdline, $this->args);
     $cmdline[] = $sFilename;
     $aOptions = array();
     $aOptions['exec_wait'] = 'true';
     if ($this->use_pipes) {
         $aOptions["append"] = $sTempFilename;
     } else {
         $cmdline[] = $sTempFilename;
     }
     $aRet = KTUtil::pexec($cmdline, $aOptions);
     $this->aCommandOutput = $aRet['out'];
     $contents = file_get_contents($sTempFilename);
     return $contents;
 }
Ejemplo n.º 11
0
 /**
  * Method for downloading the document as a pdf.
  *
  * @deprecated
  * @return true on success else false
  */
 function do_pdfdownload_deprecated()
 {
     $oDocument = $this->oDocument;
     $oStorage =& KTStorageManagerUtil::getSingleton();
     $oConfig =& KTConfig::getSingleton();
     $default = realpath(str_replace('\\', '/', KT_DIR . '/../openoffice/program'));
     putenv('ooProgramPath=' . $oConfig->get('openoffice/programPath', $default));
     $cmdpath = KTUtil::findCommand('externalBinary/python');
     // Check if openoffice and python are available
     if ($cmdpath == false || !file_exists($cmdpath) || empty($cmdpath)) {
         // Set the error messsage and redirect to view document
         $this->addErrorMessage(_kt('An error occurred generating the PDF - please contact the system administrator. Python binary not found.'));
         redirect(generateControllerLink('viewDocument', sprintf('fDocumentId=%d', $oDocument->getId())));
         exit(0);
     }
     //get the actual path to the document on the server
     $sPath = sprintf("%s/%s", $oConfig->get('urls/documentRoot'), $oStorage->getPath($oDocument));
     if (file_exists($sPath)) {
         // Get a tmp file
         $sTempFilename = tempnam('/tmp', 'ktpdf');
         // We need to handle Windows differently - as usual ;)
         if (substr(PHP_OS, 0, 3) == 'WIN') {
             $cmd = "\"" . $cmdpath . "\" \"" . KT_DIR . "/bin/openoffice/pdfgen.py\" \"" . $sPath . "\" \"" . $sTempFilename . "\"";
             $cmd = str_replace('/', '\\', $cmd);
             // TODO: Check for more errors here
             // SECURTIY: Ensure $sPath and $sTempFilename are safe or they could be used to excecute arbitrary commands!
             // Excecute the python script. TODO: Check this works with Windows
             $res = `"{$cmd}" 2>&1`;
             //print($res);
             //print($cmd);
             //exit;
         } else {
             // TODO: Check for more errors here
             // SECURTIY: Ensure $sPath and $sTempFilename are safe or they could be used to excecute arbitrary commands!
             // Excecute the python script.
             $cmd = $cmdpath . ' ' . KT_DIR . '/bin/openoffice/pdfgen.py ' . escapeshellcmd($sPath) . ' ' . escapeshellcmd($sTempFilename);
             $res = shell_exec($cmd . " 2>&1");
             //print($res);
             //print($cmd);
             //exit;
         }
         // Check the tempfile exists and the python script did not return anything (which would indicate an error)
         if (file_exists($sTempFilename) && $res == '') {
             $mimetype = 'application/pdf';
             $size = filesize($sTempFilename);
             $name = substr($oDocument->getFileName(), 0, strrpos($oDocument->getFileName(), '.')) . '.pdf';
             KTUtil::download($sTempFilename, $mimetype, $size, $name);
             // Remove the tempfile
             unlink($sTempFilename);
             // Create the document transaction
             $oDocumentTransaction =& new DocumentTransaction($oDocument, 'Document downloaded as PDF', 'ktcore.transactions.download', $aOptions);
             $oDocumentTransaction->create();
             // Just stop here - the content has already been sent.
             exit(0);
         } else {
             // Set the error messsage and redirect to view document
             $this->addErrorMessage(_kt('An error occurred generating the PDF - please contact the system administrator. ' . $res));
             redirect(generateControllerLink('viewDocument', sprintf('fDocumentId=%d', $oDocument->getId())));
             exit(0);
         }
     } else {
         // Set the error messsage and redirect to view document
         $this->addErrorMessage(_kt('An error occurred generating the PDF - please contact the system administrator. The path to the document did not exist.'));
         redirect(generateControllerLink('viewDocument', sprintf('fDocumentId=%d', $oDocument->getId())));
         exit(0);
     }
 }
Ejemplo n.º 12
0
     if (!is_executable(KT_DIR . '/' . $script) && $ext != 'php') {
         $default->log->error("Scheduler: The script '{$sTaskUrl}' is not executable.");
         continue;
     }
 }
 $file = realpath(KT_DIR . '/' . $sTaskUrl);
 if ($file === false) {
     $default->log->error("Scheduler: The script '{$sTaskUrl}' cannot be resolved.");
     continue;
 }
 $iTime = time();
 $iStart = KTUtil::getBenchmarkTime();
 // Run the script
 $cmd = "\"{$file}\" {$sParameters}";
 if ($ext == 'php') {
     $phpPath = KTUtil::findCommand('externalBinary/php');
     // being protective as some scripts work on relative paths
     $dirname = dirname($file);
     chdir($dirname);
     $cmd = "\"{$phpPath}\" {$cmd}";
 }
 if (OS_WINDOWS) {
     $default->log->debug("Scheduler - dirname: {$dirname} cmd: {$cmd}");
     //$WshShell = new COM("WScript.Shell");
     //$res = $WshShell->Run($cmd, 0, true);
     KTUtil::pexec($cmd);
 } else {
     $res = shell_exec($cmd . " 2>&1");
 }
 // On completion - reset run time
 $iEnd = KTUtil::getBenchmarkTime();
Ejemplo n.º 13
0
 function findLocalCommand()
 {
     putenv('LANG=en_US.UTF-8');
     $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);
     return $sCommand;
 }
Ejemplo n.º 14
0
 function extract_contents($sFilename, $sTmpFilename)
 {
     $sUnzipCommand = KTUtil::findCommand("import/unzip", "unzip");
     if (empty($sUnzipCommand)) {
         return;
     }
     $oKTConfig =& KTConfig::getSingleton();
     $sBasedir = $oKTConfig->get("urls/tmpDirectory");
     $this->sTmpPath = tempnam($sBasedir, 'opendocumentextract');
     if ($this->sTmpPath === false) {
         return;
     }
     unlink($this->sTmpPath);
     mkdir($this->sTmpPath, 0700);
     $sCmd = array($sUnzipCommand, "-q", "-n", "-d", $this->sTmpPath, $sFilename);
     KTUtil::pexec($sCmd, array('exec_wait' => 'true'));
     $sManifest = sprintf("%s/%s", $this->sTmpPath, "META-INF/manifest.xml");
     if (OS_WINDOWS) {
         $sManifest = str_replace('/', '\\', $sManifest);
     }
     if (!file_exists($sManifest)) {
         $this->cleanup();
         return;
     }
     $sContentFile = sprintf("%s/%s", $this->sTmpPath, "content.xml");
     if (OS_WINDOWS) {
         $sContentFile = str_replace('/', '\\', $sContentFile);
     }
     if (!file_exists($sContentFile)) {
         $this->cleanup();
         return;
     }
     $sContent = file_get_contents($sContentFile);
     $sContent = preg_replace("@(</?[^>]*>)+@", " ", $sContent);
     $this->cleanup();
     return $sContent;
 }
Ejemplo n.º 15
0
 /**
  * Initialise the extractor.
  *
  * @param string $section The section in the config file.
  * @param string $appname The application name in the config file.
  * @param string $command The command that can be run.
  * @param string $displayname
  * @param string $params
  */
 public function __construct($section, $appname, $command, $displayname, $params)
 {
     parent::__construct();
     $this->application = KTUtil::findCommand("{$section}/{$appname}", $command);
     $this->command = $command;
     $this->displayname = $displayname;
     $this->params = $params;
 }