function is_active($oUser) { if (!Permission::userIsSystemAdministrator()) { return false; } $indexerDiagnosis = KTUtil::getSystemSetting('indexerDiagnostics'); $extractorDiagnosis = KTUtil::getSystemSetting('extractorDiagnostics'); if (!empty($indexerDiagnosis)) { $indexerDiagnosis = unserialize($indexerDiagnosis); } if (!empty($extractorDiagnosis)) { $extractorDiagnosis = unserialize($extractorDiagnosis); } if (empty($indexerDiagnosis) && empty($extractorDiagnosis)) { return false; } $this->indexerDiagnosis = $indexerDiagnosis; $this->extractorDiagnosis = array(); $result = array(); foreach ($extractorDiagnosis as $class => $diagnosis) { $name = $diagnosis['name']; $diag = $diagnosis['diagnosis']; $result[$diag][] = $name; } foreach ($result as $problem => $indexers) { if (empty($problem)) { continue; } $this->extractorDiagnosis[] = array('problem' => $problem, 'indexers' => $indexers); } $this->indexerDiagnosis = str_replace(array("\n", 'Administrator Guide'), array('<br>', sprintf("<a target='_blank' href=\"http://www.knowledgetree.com/go/ktAdminManual\">%s</a>", _kt('Administrator Guide'))), $this->indexerDiagnosis); return true; }
function render() { $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/search2/lucene_migration'); $config = KTConfig::getSingleton(); $batchDocuments = $config->get('indexer/batchMigrateDocuments'); $migratedDocuments = KTUtil::getSystemSetting('migratedDocuments', 0); $migratingDocuments = $this->migratingDocuments; $migrationStart = KTUtil::getSystemSetting('migrationStarted'); if (is_null($migrationStart)) { $migrationStartString = _kt('Not started'); $migrationPeriod = _kt('N/A'); $estimatedTime = _kt('Unknown'); $estimatedPeriod = $estimatedTime; } else { $migrationStartString = date('Y-m-d H:i:s', $migrationStart); $migrationTime = KTUtil::getSystemSetting('migrationTime', 0); $migrationPeriod = KTUtil::computePeriod($migrationTime, ''); // Cannot divide by zero so make it 1 $divMigratedDocuments = $migratedDocuments > 0 ? $migratedDocuments : 1; $timePerDocument = $migrationTime / $divMigratedDocuments; $estimatedPeriod = $timePerDocument * $migratingDocuments; $estimatedTime = date('Y-m-d H:i:s', $migrationStart + $estimatedPeriod); $estimatedPeriod = KTUtil::computePeriod($estimatedPeriod, ''); } $aTemplateData = array('context' => $this, 'batchDocuments' => $batchDocuments, 'batchPeriod' => 'Periodically', 'migrationStart' => $migrationStartString, 'migrationPeriod' => $migrationPeriod, 'migratedDocuments' => $migratedDocuments, 'migratingDocuments' => $migratingDocuments, 'estimatedTime' => $estimatedTime, 'estimatedPeriod' => $estimatedPeriod); return $oTemplate->render($aTemplateData); }
function is_active($oUser) { $usage = KTUtil::getSystemSetting('KTUsage'); if (empty($usage)) { return false; } $this->usage = unserialize($usage); return Permission::userIsSystemAdministrator(); }
function is_active($oUser) { $stats = KTUtil::getSystemSetting('indexerStats'); if (empty($stats)) { return false; } $this->stats = unserialize($stats); return Permission::userIsSystemAdministrator(); }
/** * Dispatch function */ function do_main() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Document Indexer Statistics')); $stats = KTUtil::getSystemSetting('indexerStats'); $this->stats = unserialize($stats); $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/search2/lucene_statistics'); $aTemplateData = array('context' => $this, 'stats' => $this->stats); return $oTemplate->render($aTemplateData); }
function is_active($oUser) { if (!Permission::userIsSystemAdministrator()) { return false; } $this->resources = KTUtil::getSystemSetting('externalResourceIssues'); if (empty($this->resources)) { return false; } $this->resources = unserialize($this->resources); return count($this->resources) > 0; }
/** * Dispatch function */ function do_main() { // Load Templating Engine $oTemplating =& KTTemplating::getSingleton(); // Set Template to use $oTemplate = $oTemplating->loadTemplate('ktcore/search2/indexing_status'); // Do a runtime Service Resource Check $checker = new ResourceChecker(); $checker->check(); // Get Results $serviceErrors = KTUtil::getSystemSetting('externalResourceIssues'); $serviceErrors = unserialize($serviceErrors); // Array to Hold Items not working $this->serviceErrors = array(); // A reference array to use with extractors that depend on the service $errorReference = array(); if (count($serviceErrors) > 0) { // Add Service Errors foreach ($serviceErrors as $error) { $this->serviceErrors[$error['name']] = array('name' => $error['name'], 'status' => $error['status'], 'help' => IndexingHelp::getHelp($error['name'])); // Create Reference to the array $errorReference[$error['status']] =& $this->serviceErrors[$error['name']]; } } // --------------------------- // Do a run time check for extractors not working Indexer::updateIndexStats(); // Get Results $extractorDiagnosis = KTUtil::getSystemSetting('extractorDiagnostics'); if (!empty($extractorDiagnosis)) { $extractorDiagnosis = unserialize($extractorDiagnosis); } // Create an Array to store errors $this->extractorErrors = array(); if (count($extractorDiagnosis > 0)) { foreach ($extractorDiagnosis as $extractor => $props) { // Check if Extractor fault is due to a service not running if (array_key_exists($props['diagnosis'], $errorReference)) { // One service may affect multiple extractors $errorReference[$props['diagnosis']]['alsoaffects'] = array(array('extractor' => $props['name'], 'affectedtypes' => IndexingHelp::affectedTypes($extractor))); } else { // Else list as normal extractor error $this->extractorErrors[$extractor] = array('name' => $props['name'], 'status' => $props['diagnosis'], 'help' => IndexingHelp::getHelp($extractor), 'affectedtypes' => IndexingHelp::affectedTypes($extractor)); } } } // Create URL to Send to Template $url = KTUtil::kt_url(); // Prepare Template Data $aTemplateData = array('context' => $this, 'serviceErrors' => $this->serviceErrors, 'extractorErrors' => $this->extractorErrors, 'url' => $url); // Send to template and render return $oTemplate->render($aTemplateData); }
function is_active($oUser) { if (OS_WINDOWS && (double) php_uname('r') >= 6) { return false; } $usage = KTUtil::getSystemSetting('DiskUsage'); if (empty($usage)) { return false; } $usage = unserialize($usage); $this->usage = $usage; return Permission::userIsSystemAdministrator(); }
public function migrateDocuments($max = null) { global $default; $default->log->info(_kt('migrateDocuments: starting')); if (!$this->doesDiagnosticsPass(true)) { $default->log->info(_kt('migrateDocuments: stopping - diagnostics problem. The dashboard will provide more information.')); return; } if (KTUtil::getSystemSetting('migrationComplete') == 'true') { $default->log->info(_kt('migrateDocuments: stopping - migration is complete.')); return; } $config =& KTConfig::getSingleton(); if (is_null($max)) { $max = $config->get('indexer/batchMigrateDocument', 500); } $lockFile = $config->get('cache/cacheDirectory') . '/migration.lock'; if (is_file($lockFile)) { $default->log->info(_kt('migrateDocuments: stopping - migration lockfile detected.')); return; } touch($lockFile); $startTime = KTUtil::getSystemSetting('migrationStarted'); if (is_null($startTime)) { KTUtil::setSystemSetting('migrationStarted', time()); } $maxLoops = 5; $max = ceil($max / $maxLoops); $start = KTUtil::getBenchmarkTime(); $noDocs = false; $numDocs = 0; for ($loop = 0; $loop < $maxLoops; $loop++) { $sql = "SELECT\n \t\t\tdocument_id, document_text\n\t\t\t\tFROM\n\t\t\t\t\tdocument_text\n\t\t\t\tORDER BY document_id\n \t\t\t\t\tLIMIT {$max}"; $result = DBUtil::getResultArray($sql); if (PEAR::isError($result)) { $default->log->info(_kt('migrateDocuments: db error')); break; } $docs = count($result); if ($docs == 0) { $noDocs = true; break; } $numDocs += $docs; foreach ($result as $docinfo) { $docId = $docinfo['document_id']; $document = Document::get($docId); if (PEAR::isError($document) || is_null($document)) { $sql = "DELETE FROM document_text WHERE document_id={$docId}"; DBUtil::runQuery($sql); $default->log->error(sprintf(_kt('migrateDocuments: Could not get document %d\'s document! Removing content!'), $docId)); continue; } $version = $document->getMajorVersionNumber() . '.' . $document->getMinorVersionNumber(); $targetFile = tempnam($tempPath, 'ktindexer'); if (file_put_contents($targetFile, $docinfo['document_text']) === false) { $default->log->error(sprintf(_kt('migrateDocuments: Cannot write to \'%s\' for document id %d'), $targetFile, $docId)); continue; } // free memory asap ;) unset($docinfo['document_text']); $title = $document->getName(); $indexStatus = $this->indexDocumentAndDiscussion($docId, $targetFile, $title, $version); if ($indexStatus) { $sql = "DELETE FROM document_text WHERE document_id={$docId}"; DBUtil::runQuery($sql); } else { $default->log->error(sprintf(_kt("migrateDocuments: Problem indexing document %d"), $docId)); } @unlink($targetFile); } } @unlink($lockFile); $time = KTUtil::getBenchmarkTime() - $start; KTUtil::setSystemSetting('migrationTime', KTUtil::getSystemSetting('migrationTime', 0) + $time); KTUtil::setSystemSetting('migratedDocuments', KTUtil::getSystemSetting('migratedDocuments', 0) + $numDocs); $default->log->info(sprintf(_kt('migrateDocuments: stopping - done in %d seconds!'), $time)); if ($noDocs) { $default->log->info(_kt('migrateDocuments: Completed!')); KTUtil::setSystemSetting('migrationComplete', 'true'); schedulerUtil::deleteByName('Index Migration'); $default->log->debug(_kt('migrateDocuments: Disabling \'Index Migration\' task by removing scheduler entry.')); } }
function do_resetPassword() { $email = $_REQUEST['email']; $user = $_REQUEST['username']; $password = $_REQUEST['password']; $confirm = $_REQUEST['confirm']; if (!($password == $confirm)) { return _kt('The passwords do not match, please re-enter them.'); } $password = md5($password); // Get user from db $sQuery = 'SELECT id FROM users WHERE username = ? AND email = ?'; $aParams = array($user, $email); $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id'); if (!is_numeric($id) || $id < 1) { //PEAR::isError($res) || is_null($res)){ return _kt('Please check that you have entered a valid username and email address.'); } // Check expiry $expiry = KTUtil::getSystemSetting('password_reset_expire-' . $id); if ($expiry < time()) { return _kt('The password reset key has expired, please send a new request.'); } // Update password $res = DBUtil::autoUpdate('users', array('password' => $password), $id); if (PEAR::isError($res) || is_null($res)) { return _kt('Your password could not be reset, please try again.'); } // Unset expiry date and key KTUtil::setSystemSetting('password_reset_expire-' . $id, ''); KTUtil::setSystemSetting('password_reset_key-' . $id, ''); // Email confirmation $url = KTUtil::addQueryStringSelf(''); $subject = APP_NAME . ': ' . _kt('password successfully reset'); $body = '<dd><p>'; $body .= _kt('Your password has been successfully reset, click the link below to login.'); $body .= "</p><p><a href = '{$url}'>" . _kt('Login') . '</a></p></dd>'; $oEmail = new Email(); $res = $oEmail->send($email, $subject, $body); if ($res === true) { return _kt('Your password has been successfully reset.'); } return _kt('An error occurred while sending the email, please try again or contact the System Administrator.'); }
function getKTVersion() { $version = KTUtil::getSystemSetting('knowledgeTreeVersion'); if (empty($version) || PEAR::isError($version)) { $version = file_get_contents(KT_DIR . 'docs/VERSION.txt'); } // remove newline that is in the version file $version = str_replace("\n", '', $version); return $version; }