Importación inicial con versión 3.7.0.2 original

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_SGD/tags/3.7.0.2_original@1 eb19766c-00d9-a042-a3a0-45cb8ec72764
This commit is contained in:
David Arranz 2010-09-10 16:45:26 +00:00
commit 28b02db2ea
4563 changed files with 884003 additions and 0 deletions

81
about.php Normal file
View File

@ -0,0 +1,81 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
// main library routines and defaults
require_once("config/dmsDefaults.php");
require_once(KT_LIB_DIR . "/unitmanagement/Unit.inc");
require_once(KT_LIB_DIR . "/templating/templating.inc.php");
require_once(KT_LIB_DIR . "/dispatcher.inc.php");
require_once(KT_LIB_DIR . "/widgets/forms.inc.php");
class KTAbout extends KTStandardDispatcher {
var $sSection = 'aboutkt';
function do_main() {
global $default;
$this->aBreadcrumbs = array(array('action' => 'aboutkt', 'name' => _kt("About")));
$oUser =& $this->oUser;
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate("ktcore/principals/about");
$aVersionInfo = explode(' ', $default->versionName);
foreach($aVersionInfo as $sVersionpiece){
if(substr($sVersionpiece, 1, 1) == '.'){
$sVersionNo = $sVersionpiece;
}else{
$sVersionName .= " ".$sVersionpiece;
}
}
$aTemplateData = array(
"context" => $this,
"versionname" => $sVersionName,
"versionnumber" => $sVersionNo,
'smallVersion' => substr($default->versionName, -18, -1),
);
return $oTemplate->render($aTemplateData);
}
}
$oDispatcher = new KTAbout();
$oDispatcher->dispatch();
?>

201
action.php Normal file
View File

@ -0,0 +1,201 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/actions/actionregistry.inc.php');
require_once(KT_LIB_DIR . '/dispatcher.inc.php');
// Strip html tags out of the request action to prevent XSS attacks
// This is done here to ensure that it is done for all places that use the variables.
$_REQUEST['fReturnAction'] = strip_tags($_REQUEST['fReturnAction']);
$_REQUEST['fReturnData'] = strip_tags($_REQUEST['fReturnData']);
/*
* Using KTStandardDispatcher for errorPage, overriding handleOutput as
* the document action dispatcher will handle that.
*/
/**
* Dispatcher for action.php/actionname
*
* This dispatcher looks up the action from the Action Registry, and
* then chains onto that action's dispatcher.
*/
class KTActionDispatcher extends KTStandardDispatcher {
/**
* Default dispatch
*
* Find the action, and then use its dispatcher. Error out nicely
* if we aren't so lucky.
*/
function do_main() {
$this->error = false;
$action = KTUtil::arrayGet($_SERVER, 'PATH_INFO');
$action = trim($action);
$action = trim($action, '/');
if (empty($action)) {
$this->error = true;
$this->errorPage(_kt('No action given'));
}
$oRegistry =& KTActionRegistry::getSingleton();
$aActionInfo = $oRegistry->getActionByNsname($action);
if (empty($aActionInfo)) {
$this->error = true;
$this->errorPage(sprintf(_kt('No such action exists in %s'), APP_NAME));
}
$sFilename = $aActionInfo[1];
if (!empty($sFilename)) {
require_once($sFilename);
}
$oAction = new $aActionInfo[0];
$oAction->dispatch();
}
function json_main() {
return $this->do_main();
}
function getBulkReturnUrl(){
$sReturnAction = $_REQUEST['fReturnAction'];
$sReturnData = $_REQUEST['fReturnData'];
$sAction = 'main';
$qs = '';
switch ($sReturnAction){
case 'browse':
$sReturnData = (empty($sReturnData)) ? $_REQUEST['fFolderId'] : $sReturnData;
$sTargetUrl = KTBrowseUtil::getUrlForFolder(Folder::get($sReturnData));
break;
case 'simpleSearch':
$sTargetUrl = KTBrowseUtil::getSimpleSearchBaseUrl();
$extra = 'fSearchableText='.$sReturnData;
break;
case 'booleanSearch':
$sTargetUrl = KTBrowseUtil::getBooleanSearchBaseUrl();
$sAction = 'performSearch';
$extra = 'boolean_search_id='.$sReturnData;
break;
case 'search2':
$sTargetUrl = KTBrowseUtil::getSearchResultURL();
$sAction = 'searchResults';
break;
default:
$sTargetUrl = $sReturnAction;
$sAction = '';
}
$qs = (!empty($sAction))? 'action='.$sAction : '';
$qs .= (!empty($extra))? '&'.$extra : '';
$sTargetUrl = KTUtil::addQueryString($sTargetUrl, $qs);
return $sTargetUrl;
}
function do_bulkaction() {
$act = (array) KTUtil::arrayGet($_REQUEST, 'submit',null);
$targets = array_keys($act);
if (!empty($targets)) {
$target = $targets[0];
} else {
$this->errorRedirectToBrowse(_kt('No action selected.'));
exit(0);
}
$aFolderSelection = KTUtil::arrayGet($_REQUEST, 'selection_f' , array());
$aDocumentSelection = KTUtil::arrayGet($_REQUEST, 'selection_d' , array());
$oFolder = Folder::get(KTUtil::arrayGet($_REQUEST, 'fFolderId', 1));
if (PEAR::isError($oFolder)) {
$redirectUrl = $this->getBulkReturnUrl();
if(!empty($redirectUrl)){
$this->addErrorMessage(_kt('Invalid folder selected.'));
redirect($redirectUrl);
exit(0);
}
$this->errorRedirectToBrowse(_kt('Invalid folder selected.'));
exit(0);
}
if (empty($aFolderSelection) && empty($aDocumentSelection)) {
$redirectUrl = $this->getBulkReturnUrl();
if(!empty($redirectUrl)){
$this->addErrorMessage(_kt('Please select documents or folders first.'));
redirect($redirectUrl);
exit(0);
}
$this->errorRedirectToBrowse(_kt('Please select documents or folders first.'), sprintf('fFolderId=%d', $oFolder->getId()));
exit(0);
}
// prepare for passing to bulk actions
$oActionRegistry =& KTActionRegistry::getSingleton();
$oAction =& $oActionRegistry->initializeAction($target, $this->oUser);
if(!$oAction || PEAR::isError($oAction)) {
$this->errorRedirectToBrowse(_kt('No such action.'));
exit(0);
}
$oAction->oFolder = $oFolder;
$oEntityList = new KTEntityList($aDocumentSelection, $aFolderSelection);
$oAction->setEntityList($oEntityList);
$oAction->redispatch('action', 'do_', $this);
// exit(0);
}
/**
* Handle output from this dispatcher.
*
* If there's an error in _this_ dispatcher, use the standard
* surroundings. If not, don't put anything around the output - the
* chained dispatcher will take care of that.
*/
function handleOutput ($data) {
if ($this->bJSONMode || $this->error) {
parent::handleOutput($data);
} else {
print $data;
}
}
}
$d = new KTActionDispatcher();
$d->dispatch();

171
admin.php Normal file
View File

@ -0,0 +1,171 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/templating/kt3template.inc.php');
require_once(KT_LIB_DIR . '/dispatcher.inc.php');
require_once(KT_LIB_DIR . '/widgets/portlet.inc.php');
require_once(KT_LIB_DIR . '/plugins/KTAdminNavigation.php');
class AdminSplashDispatcher extends KTAdminDispatcher {
var $category = '';
var $sSection = 'administration';
function AdminSplashDispatcher() {
$this->aBreadcrumbs = array(
array('url' => KTUtil::getRequestScriptName($_SERVER), 'name' => _kt('Administration')),
);
parent::KTAdminDispatcher();
}
function do_main() {
if ($this->category !== '') {
return $this->do_viewCategory();
};
// are we categorised, or not?
$oRegistry =& KTAdminNavigationRegistry::getSingleton();
$categories = $oRegistry->getCategories();
$KTConfig =& KTConfig::getSingleton();
$condensed_admin = $KTConfig->get('condensedAdminUI');
$aAllItems = array();
// we need to investigate sub_url solutions.
if ($condensed_admin) {
foreach ($categories as $aCategory) {
$aItems = $oRegistry->getItemsForCategory($aCategory['name']);
$aAllItems[$aCategory['name']] = $aItems;
}
}
$this->oPage->title = _kt('Administration') . ': ';
$oTemplating =& KTTemplating::getSingleton();
if ($condensed_admin) {
$oTemplate = $oTemplating->loadTemplate('kt3/admin_fulllist');
} else {
$oTemplate = $oTemplating->loadTemplate('kt3/admin_categories');
}
$aTemplateData = array(
'context' => $this,
'categories' => $categories,
'all_items' => $aAllItems,
'baseurl' => $_SERVER['PHP_SELF'],
);
return $oTemplate->render($aTemplateData);
}
function do_viewCategory() {
// are we categorised, or not?
$category = KTUtil::arrayGet($_REQUEST, 'fCategory', $this->category);
//Removing bad documents/fieldmanagement links from the Document Metadata and Workflow Configuration page.
if ($category == 'documents') {
$oPage =& $GLOBALS['main'];
$aJavascript[] = 'thirdpartyjs/jquery/jquery-1.3.2.js';
$oPage->requireJSResources($aJavascript);
$jscript .= "<script src='resources/js/kt_hideadminlink.js' type='text/javascript'></script>";
}
$oRegistry =& KTAdminNavigationRegistry::getSingleton();
$aCategory = $oRegistry->getCategory($category);
$aItems = $oRegistry->getItemsForCategory($category);
asort($aItems);
$this->aBreadcrumbs[] = array('name' => $aCategory['title'], 'url' => KTUtil::ktLink('admin.php',$category));
$this->oPage->title = _kt('Administration') . ': ' . $aCategory['title'];
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/admin_items');
$aTemplateData = array(
'context' => $this,
'category' => $aCategory,
'items' => $aItems,
'baseurl' => $_SERVER['PHP_SELF'],
'jscript' => $jscript,
);
return $oTemplate->render($aTemplateData);
}
}
$sub_url = KTUtil::arrayGet($_SERVER, 'PATH_INFO');
$sub_url = trim($sub_url);
$sub_url= trim($sub_url, '/');
if (empty($sub_url)) {
$oDispatcher = new AdminSplashDispatcher();
} else {
$oRegistry =& KTAdminNavigationRegistry::getSingleton();
if ($oRegistry->isRegistered($sub_url)) {
$oDispatcher = $oRegistry->getDispatcher($sub_url);
$aParts = explode('/',$sub_url);
$oRegistry =& KTAdminNavigationRegistry::getSingleton();
$aCategory = $oRegistry->getCategory($aParts[0]);
$oDispatcher->aBreadcrumbs = array();
$oDispatcher->aBreadcrumbs[] = array('action' => 'administration', 'name' => _kt('Administration'));
$oDispatcher->aBreadcrumbs[] = array('name' => $aCategory['title'], 'url' => KTUtil::ktLink('admin.php',$aParts[0]));
} else {
// FIXME (minor) redirect to no-suburl?
$oDispatcher = new AdminSplashDispatcher();
$oDispatcher->category = $sub_url;
}
}
// Implement an electronic signature for accessing the admin section, it will appear every 10 minutes
global $main;
global $default;
if($default->enableAdminSignatures && $_SESSION['electronic_signature_time'] < time()){
$sBaseUrl = KTUtil::kt_url();
$sUrl = KTPluginUtil::getPluginPath('electronic.signatures.plugin', true);
$heading = _kt('You are attempting to access Administration');
$main->setBodyOnload("javascript: showSignatureForm('{$sUrl}', '{$heading}', 'dms.administration.administration_section_access', 'admin', '{$sBaseUrl}/browse.php', 'close');");
}
$oDispatcher->dispatch(); // we _may_ be redirected at this point (see KTAdminNavigation)
?>

4
bin/.htaccess Normal file
View File

@ -0,0 +1,4 @@
Order deny,allow
Allow from all
IndexIgnore *.*

View File

@ -0,0 +1,47 @@
<?php
chdir(dirname(__FILE__));
require_once('../../config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/foldermanagement/compressionArchiveUtil.inc.php');
/**
* The download task provides 2 pieces of functionality. The first is to process the download queue and the second is to "ping" the download queue.
* The processing of the download queue will create the archives for the bulk download action and set a flag to indicate their completion.
* The "ping" will check if the flag has been set and inform the user that the archive is ready for download.
*/
$queue = new DownloadQueue();
// Check for a ping then check if the download is finished
$ping = isset($_POST['ping']) ? $_POST['ping'] : false;
if($ping == 'ping'){
$code = $_POST['code'];
$status = $queue->isDownloadAvailable($code);
if($status === false){
echo 'wait';
}else{
$str = '';
// display any error messages
if(!empty($status)){
$str = '<div><b>'._kt('The following errors occurred during the download').': </><br />';
$str .= '<table style="padding-top: 5px;" cellspacing="0" cellpadding="5">';
foreach ($status as $msg){
$str .= '<tr><td style="border: 1px #888 solid;">'.$msg.'</td></tr>';
}
$str .= '</table></div>';
}
echo $str;
}
exit(0);
}
if($queue->isLocked()){
exit(0);
}
// Not a ping, process the queue
$queue->processQueue();
exit(0);
?>

94
bin/automated_upgrade.php Normal file
View File

@ -0,0 +1,94 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('../config/dmsDefaults.php');
require_once(KT_DIR . '/lib/upgrades/upgrade.inc.php');
if (!($default->dbAdminUser && $default->dbAdminPass)) {
print "You need to set up the administrator user for your database.\n";
print "Consult docs/UPGRADE.txt for more information\n";
exit(1);
}
if (PEAR::isError($default->_admindb)) {
print "Your database administrator user credentials can not login.\n";
print "Consult docs/UPGRADE.txt for more information.\n";
exit(1);
}
$query = sprintf('SELECT value FROM %s WHERE name = "knowledgeTreeVersion"', $default->system_settings_table);
$lastVersion = DBUtil::getOneResultKey($query, 'value');
$currentVersion = $default->systemVersion;
$action = $_SERVER['argv'][1];
if (empty($action)) {
$action = 'show';
}
$upgrades = describeUpgrade($lastVersion, $currentVersion);
$i = 1;
foreach ($upgrades as $step) {
print "Upgrade step $i: " . $step->getDescription();
$bApplied = $step->isAlreadyApplied();
$i++;
if ($bApplied) {
print " (already applied)\n";
continue;
}
print "\n";
if ($action == 'show') {
continue;
}
$res = $step->performUpgrade();
print ' RESULT: ';
if ($res === true) {
print 'Success';
}
if (PEAR::isError($res)) {
if (is_a($res, strtolower('Upgrade_Already_Applied'))) {
print 'Already applied';
} else {
print "ERROR\n";
print $res->toString();
}
}
print "\n";
}
?>

199
bin/checkopenoffice.php Normal file
View File

@ -0,0 +1,199 @@
<?php
/**
*
* $Id:
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
chdir(realpath(dirname(__FILE__)));
require_once('../config/dmsDefaults.php');
/*
Script checks if open office is running, if it isn't then it attempts to start it.
Windows Vista always returns false if we try and check the host and port
so for windows we use the win32 service status checks.
*/
// Check if the calling function requires a return value
$sGiveOutput = (isset($argv[1]) && $argv[1] == 'output') ? true : false;
// Check indexed document count
// If the number of indexed documents is greater than the set amount, restart open office
// this clears open office's memory usage
$resetPoint = 50; // todo: put in config
$count = Indexer::getIndexedDocumentCount();
$restartOO = false;
if($count > $resetPoint){
$restartOO = true;
// reset the count
Indexer::updateIndexedDocumentCount(0);
$default->log->debug('Check Open Office Task: Restarting open office.');
}
// First we check the host:port to see if open office is running
$sCheckOO = SearchHelper::checkOpenOfficeAvailablity();
if(empty($sCheckOO) && !$restartOO){
// If the check returns empty then it is available on that port so we exit
if($sGiveOutput){
echo 1;
}
exit;
}
// Open office appears not to be running or requires a restart
if(OS_WINDOWS){
$OOService = 'ktopenoffice';
$default->log->debug('Check Open Office Task: ' . get_current_user());
if($restartOO){
// If Open office needs to be restarted - stop it here
$result_stop = win32_stop_service($OOService);
// Wait for the service to stop fully before trying to restart it
$continue = false;
$cnt = 0;
while($continue === false && $cnt < 15){
$result = win32_query_service_status($OOService);
if(isset($result['ProcessId']) && $result['ProcessId'] != 0){
// If there is still a process id then the service has not stopped yet.
sleep(2);
$continue = false;
$cnt++;
}else{
$continue = true;
}
}
}else{
// If this is vista, checking the port may not work so we query the service
$result = win32_query_service_status($OOService);
if(is_array($result)){
$iProcessId = $result['ProcessId'];
if(!empty($iProcessId) && $iProcessId != 0){
// If there is a process id (PID) then open office is running so we exit
if($sGiveOutput){
echo 1;
}
exit;
}
}
}
// Service is not running - log it and attempt to start
$default->log->error('Check Open Office Task: Open office service is not running... trying to start it.');
// Use the win32 service start
$result2 = win32_start_service($OOService);
if($result2 == 0){
// Service started successfully
$default->log->debug('Check Open Office Task: Open office service started.');
if($sGiveOutput){
echo 1;
}
exit;
}
$default->log->error('Check Open Office Task: Open office service could not be started. Error code '.$result2);
// Attempt using the dmsctl batch script
$sPath = realpath('../../bin/dmsctl.bat');
if(file_exists($sPath)){
$sCmd = "\"$sPath\" start";
$default->log->debug('Check Open Office Task: ' . get_current_user());
$default->log->debug('Check Open Office Task: ' . $sCmd);
$res = KTUtil::pexec($sCmd);
$default->log->debug('Check Open Office Task: Attempted start using dmsctl.bat.');
if($sGiveOutput){
echo 2;
}
exit;
}else{
$default->log->debug('Check Open Office Task: Can\'t find dmsctl.bat, this may be a source install.');
if($sGiveOutput){
echo 0;
}
exit;
}
}else{
// If the OS is Unix or Linux
$sPath = realpath('../../dmsctl.sh');
if(file_exists($sPath)){
// If Open office needs to be restarted - stop it here
if($restartOO){
$sCmd = "\"$sPath\" restart soffice >/dev/null &";
$default->log->debug('Check Open Office Task: ' . get_current_user());
$default->log->debug('Check Open Office Task: ' . $sCmd);
KTUtil::pexec($sCmd);
$default->log->debug('Check Open Office Task: Attempted restart using dmsctl.sh.');
}else{
$sCmd = "\"$sPath\" start soffice >/dev/null &";
$default->log->debug('Check Open Office Task: ' . get_current_user());
$default->log->debug('Check Open Office Task: ' . $sCmd);
KTUtil::pexec($sCmd);
$default->log->debug('Check Open Office Task: Attempted start using dmsctl.sh.');
}
if($sGiveOutput){
echo 2;
}
exit;
}else{
$default->log->debug('Check Open Office Task: Can\'t find dmsctl.sh, this may be a source install.');
if($sGiveOutput){
echo 0;
}
exit;
}
}
$default->log->debug('Check Open Office Task: Can\'t start Open office, this may be a source install.');
if($sGiveOutput){
echo 0;
}
exit(0);
?>

202
bin/cleanup.php Normal file
View File

@ -0,0 +1,202 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('../config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/config/config.inc.php');
require_once(KT_LIB_DIR . '/browse/browseutil.inc.php');
$oConfig =& KTConfig::getSingleton();
$fsPath = $oConfig->get('urls/documentRoot');
$aIgnore = array(
'.', '..',
'CVS',
'.empty',
'.htaccess',
'.cvsignore',
);
$aFoldersToRemove = array();
$aFilesToRemove = array();
$aRepoDocumentProblems = array();
$aRepoFolderProblems = array();
$aRepoVersionProblems = array();
function checkFileVersion($path, $version) {
$fod = KTBrowseUtil::folderOrDocument($path);
if ($fod === false) {
// No document by that name, so no point checking version
// information.
return;
}
return true;
}
function checkFile($path, $first = true) {
$pattern = "/^(.*)-((?:\d+)\.(?:\d+))$/";
if (preg_match($pattern, $path, $matches)) {
if (checkFileVersion($matches[1], $matches[2])) {
// If it's a version, then don't check for full path
// below...
return;
}
}
$fod = KTBrowseUtil::folderOrDocument($path);
if ($fod === false) {
$GLOBALS['aFilesToRemove'][] = $path;
return;
}
}
function checkDirectory($path) {
global $fsPath, $aIgnore;
$fullpath = sprintf('%s/%s', $fsPath, $path);
if (!is_dir($fullpath)) {
print "Not a directory: $fullpath\n";
}
if ($path === '/Deleted') {
// Deleted files handled separately.
return;
}
if (!empty($path)) {
$fod = KTBrowseUtil::folderOrDocument($path);
if ($fod === false) {
$GLOBALS['aFoldersToRemove'][] = $path;
return;
}
}
$dh = @opendir($fullpath);
if ($dh === false) {
print "Could not open directory: $fullpath\n";
}
while (($filename = readdir($dh)) !== false) {
if (in_array($filename, $aIgnore)) { continue; }
$subrelpath = sprintf('%s/%s', $path, $filename);
$subfullpath = sprintf('%s/%s', $fsPath, $subrelpath);
if (is_dir($subfullpath)) {
checkDirectory($subrelpath);
}
if (is_file($subfullpath)) {
checkFile($subrelpath);
}
}
}
function checkRepoFolder($oFolder) {
global $fsPath, $aRepoFolderProblems;
$sFolderPath = sprintf('%s/%s', $oFolder->getFullPath(), $oFolder->getName());
$sFullPath = sprintf('%s/%s', $fsPath, $sFolderPath);
if (!is_dir($sFullPath)) {
$aRepoFolderProblems[] = $sFolderPath;
}
}
function checkRepoDocument($oDocument) {
global $fsPath, $aRepoDocumentProblems;
$sDocumentPath = $oDocument->getStoragePath();
$sFullPath = sprintf('%s/%s', $fsPath, $sDocumentPath);
if (!is_file($sFullPath)) {
$aRepoDocumentProblems[] = $sDocumentPath;
}
checkRepoVersions($oDocument);
}
function checkRepoVersions($oDocument) {
global $fsPath, $aRepoVersionProblems;
$table = 'document_transactions';
$aVersions = DBUtil::getResultArrayKey(array("SELECT DISTINCT version FROM $table WHERE document_id = ?", array($oDocument->getID())), 'version');
foreach($aVersions as $sVersion) {
if ($sVersion == $oDocument->getVersion()) {
continue;
}
$sDocumentPath = $oDocument->getStoragePath();
$sFullPath = sprintf('%s/%s-%s', $fsPath, $sDocumentPath, $sVersion);
if (!is_file($sFullPath)) {
$aRepoVersionProblems[] = array($sDocumentPath, $sVersion);
continue;
}
}
}
checkDirectory('');
print "\n";
print "Would remove these folders (and all their contents):\n";
foreach ($aFoldersToRemove as $path) {
print "\t$path\n";
}
print "\n";
print "Would remove these files:\n";
foreach ($aFilesToRemove as $path) {
print "\t$path\n";
}
print "\n";
$aFolders =& Folder::getList();
foreach ($aFolders as $oFolder) {
checkRepoFolder($oFolder);
}
print "These folders are not on the filesystem:\n";
foreach ($aRepoFolderProblems as $path) {
print "\t$path\n";
}
$aDocuments =& Document::getList(array('status_id = ?', array(LIVE)));
foreach ($aDocuments as $oDocument) {
checkRepoDocument($oDocument);
}
print "\n";
print "These documents are not on the filesystem:\n";
foreach ($aRepoDocumentProblems as $path) {
print "\t$path\n";
}
print "\n";
print "These documents have versions not on the filesystem:\n";
foreach ($aRepoVersionProblems as $path) {
list($path, $version) = $path;
print "\t$path - version $version\n";
}
print "\n";

58
bin/dbmaint.php Normal file
View File

@ -0,0 +1,58 @@
<?php
require_once('../config/dmsDefaults.php');
$action = 'check';
$sqlaction = 'check table';
if ($argc > 0)
{
foreach($argv as $arg)
{
$action=strtolower($arg);
switch ($action)
{
case 'repair':
$sqlaction='repair table';
break;
case 'optimize':
$sqlaction='optimize table';
break;
case 'help':
print "Usage: dbmaint.php repair|check|optimize\n";
exit;
case 'check':
default:
$action = 'check';
$sqlaction='check table';
break;
}
}
}
$default->log->info("DB Maintenance... \nAction selected: {$action}");
$sql = "show tables";
$tables = DBUtil::getResultArray($sql);
if(!empty($tables)){
foreach($tables as $table)
{
$key = array_keys($table);
$tablename=$table[$key[0]];
$sql = "$sqlaction $tablename;";
$result = DBUtil::getOneResult($sql);
if (PEAR::isError($result))
{
$default->log->error('Attempted: '.$sql);
$default->log->error(' *: '.$result->getMessage());
continue;
}
$default->log->info('Running: '.$sql .' - '. $result['Msg_text']);
}
}
$default->log->info('Done.');
exit;
?>

View File

@ -0,0 +1 @@
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" style="border:1px solid #000066; background-color:#DADADE"><tr><td style="font-family:Arial, Helvetica, sans-serif; font-size:14px; font-weight:bold; padding:10px; border-bottom: 1px solid #666666">[heading]</td></tr><tr><td style="font-size:12px; background-color:#FFFFFF; padding:10px 5px 20px 5px;"><pre>[content]</pre></td></tr></table>

22
bin/diagtools/winDiag.php Normal file
View File

@ -0,0 +1,22 @@
<?php
/*
$template=file_get_contents('ReportTemplate.html');
$rep=array();
$rep['running processes']=shell_exec('tasklist');
$rep['services']=shell_exec('sc query');
$rep['system path']=shell_exec('path');
$rep['environment variables']=shell_exec('set');
$report=array();
foreach ($rep as $test=>$results){
$test=ucwords($test);
$report[]=str_replace(array('[heading]','[content]'),array($test,$results),$template);
}
$report=join('',$report);
echo $report;
*/
?>

104
bin/expungeall.php Normal file
View File

@ -0,0 +1,104 @@
<?php
/**
*
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
require_once('../config/dmsDefaults.php');
require_once('../ktapi/ktapi.inc.php');
/**
* This script expects the following in the config.ini:
* [autoexpunge]
* admin=admin
* password=admin
* maximum=50
*
* admin and password is required to expunge documents from the system.
*
* maximum is the maximum number of documents that should be expunged from the system in one run.
*
*/
$start_time = time();
$config = KTConfig::getSingleton();
$user = $config->get('autoexpunge/admin','admin');
$password = $config->get('autoexpunge/password','admin');
$maximum = $config->get('autoexpunge/maximum',50);
$ktapi = new KTAPI();
$session = $ktapi->start_session($user, $password);
if (PEAR::isError($session))
{
$default->log->debug('Expunge_all task: Can\'t create session: '.$session->getMessage());
return;
}
$sql = sprintf("SELECT id FROM documents WHERE status_id=%d LIMIT %d", DELETED, $maximum);
$rows = DBUtil::getResultArray($sql);
$count = count($rows);
if ($count == 0)
{
$default->log->debug('Expunge_all task: Nothing to do.');
$session->logout();
return;
}
foreach($rows as $row)
{
$id = $row['id'];
$document = $ktapi->get_document_by_id($id);
$title = $document->get_title();
$default->log->info('Expunge_all task: Document to expunge, ID: '.$id.' Name: '.$title);
$result = $document->expunge();
if (PEAR::isError($result))
{
$default->log->error('Expunge_all task: document can\'t be expunged: '.$result->getMessage());
}
}
$end_time = time();
$diff = $end_time - $start_time;
$session->logout();
exit;
?>

49
bin/genpo.sh Normal file
View File

@ -0,0 +1,49 @@
#!/bin/sh
DIR=`dirname $0`
cd $DIR
cd ..
pwd
#pull in comm stuff
#cp -R ../commercial-plugins/alerts plugins/commercial/
#cp -R ../commercial-plugins/conditional-metadata plugins/commercial/
#cp -R ../commercial-plugins/custom-numbering plugins/commercial/
#cp -R ../commercial-plugins/documentcomparison plugins/commercial/
#cp -R ../commercial-plugins/network plugins/commercial/
#cp -R ../commercial-plugins/professional-reporting plugins/commercial/
#cp -R ../commercial-plugins/shortcuts plugins/commercial/
#cp -R ../commercial-plugins/wintools plugins/commercial/
#cp -R ../commercial-plugins/guidInserter plugins/commercial/
#cp -R ../commercial-plugins/clienttools plugins/commercial/
#cp -R ../commercial-plugins/electronic-signatures plugins/commercial/
#cp -R ../commercial-plugins/officeaddin plugins/commercial/
#cp -R ../ktofficeAddIn/ktoffice ktoffice
cp -R ../commercial-plugins plugins/commercial
cp -R ../ktofficeaddin/ktoffice ktoffice
rm -f i18n/templates.c
find resources -name "*.js" | sort | python ./bin/jsi18n.py > templates/ktcore/javascript_i18n.smarty
php bin/smarty_to_gettext.php . > i18n/templates.c
find . -type f -name "*.php" -o -name "*.inc" | sort | xgettext --no-wrap -d knowledgeTree -L PHP -s -f - --keyword=_kt -o i18n/knowledgeTree.pot
echo i18n/templates.c i18n/transactions.c i18n/permissions.c | xargs -n 1 | sort | xgettext --no-wrap -d knowledgeTree -j -s -f - -o i18n/knowledgeTree.pot
# ktoffice js tamplate file generation
cd ktoffice/pogenerator
php generatetemplate.php > ../../templates/ktcore/ktoffice_i18n.smarty
cd ../../
#remove comm stuff again
rm -rf plugins/commercial
rm -rf ktoffice
#alerts conditional-metadata custom-numbering documentcomparison i18n network professional-reporting shortcuts wintools guidInserter clienttools electronic-signatures officeaddin
# Manually append some strings with #appname# issues
echo ' ' >> i18n/knowledgeTree.pot
echo 'msgid "By default, KnowledgeTree controls its own users and groups and stores all information about them inside the database. In many situations, an organisation will already have a list of users and groups, and needs to use that existing information to allow access to the DMS. These <strong>Authentication Sources</strong> allow the system administrator to specify additional sources of authentication data."' >> i18n/knowledgeTree.pot
echo 'msgstr ""' >> i18n/knowledgeTree.pot
echo 'msgid "This report lists all mime types and extensions that can be identified by KnowledgeTree."' >> i18n/knowledgeTree.pot
echo 'msgstr ""' >> i18n/knowledgeTree.pot

65
bin/jsi18n.py Normal file
View File

@ -0,0 +1,65 @@
#!/usr/bin/python
#
# JS Gettext-style extractor.
import re
import sys
usage_str = '''
Extracts _() items in JS.
Usage: jsi18n.py [list of files] > output.smarty
'''
baseline = '''
/*
* Javascript (actual translations);
*/
{literal}
var i18n = {};
function _(trans_string) {
var newstr = i18n[trans_string];
if (!isUndefinedOrNull(newstr)) { return newstr; }
else {
return trans_string;
}
}
{/literal}
'''
peritem = "i18n['%s'] = '{i18n}%s{/i18n}';\n"
# this is not the best way to do this ...
class JSExtractor:
def __init__(self, filename):
self.strings = []
handle = file(filename, 'r')
self.content = handle.read()
handle.close()
def process(self):
proc = re.compile('(_\(\'(.*?)\'\))')
self.strings = [i[1] for i in proc.findall(self.content)]
def getStrings(self):
out = ''
for l in self.strings:
out += peritem%(l, l)
return out
if __name__ == '__main__':
fake_po = baseline
filelist = sys.stdin.readlines()
for filename in filelist:
processor = JSExtractor(filename[:-1])
processor.process()
fake_po += "\n// strings for file: %s\n"%(filename[:-1]);
fake_po += processor.getStrings()
print fake_po

Binary file not shown.

View File

@ -0,0 +1,9 @@
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=INFO, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

View File

@ -0,0 +1,6 @@
server.port=8875
server.paranoid=false
server.accept=127.0.0.1
server.deny=
indexer.directory=/var/lib/knowledgetree-ce/indexes
indexer.analyzer=org.apache.lucene.analysis.standard.StandardAnalyzer

View File

@ -0,0 +1,87 @@
Lucene XML-RPC Server
---------------------
Prerequisites
=============
This requires Java 1.5+ to be installed.
Starting the Lucene Server Manually
===================================
cd c:\program files\ktdms\knowledgeTree\bin\luceneserver
;cd /opt/ktdms/knowledgeTree/bin/luceneserver
java -jar ktlucene.jar
Starting the Lucene Server in the background under Windows
==========================================================
The best is to install a service wrapper application called JavaService. This can be obtained from http://forge.objectweb.org/projects/javaservice/ and is licensed under LGPL.
Rename JavaService.exe to KTLuceneService.exe and place it in the KTLUCENEDIR folder.
To install the service:
; you may need to edit the JVMLIB. note - there is also bin\client\jvm.dll sometimes.
SET JVMLIB=c:\j2sdk\jre\bin\server\jvm.dll
SET KTLUCENEDIR=c:\program files\ktdms\knowledgeTree\bin\luceneserver
SET KTLUCENECLASS=%PROXYDIR%\ktlucene.jar
SET OUTFILE=%KTLUCENEDIR%\out.txt
SET ERRFILE=%KTLUCENEDIR%\err.txt
KTLuceneService.exe -install "KTLuceneService" %JVMLIB% -Djava.class.path=%KTLUCENECLASS% -start KTLuceneService -auto -out %OUTFILE% -err %ERRFILE%
To uninstall the service:
KTLuceneService -uninstall "KTLuceneService"
Starting the Lucene Service in the background under Linux/Unix
==============================================================
cd c:\program files\ktdms\knowledgeTree\bin\luceneserver
;cd /opt/ktdms/knowledgeTree/bin/luceneserver
nohup java -jar ktlucene.jar 2>&1 &
KnowledgeTreeIndexer.Logging.properties
=======================================
The Lucene server uses log4j as the logging library. More information regarding
configuration may be obtained from http://www.apache.org
To enable debugging, change
log4j.rootLogger=INFO, A1
to
log4j.rootLogger=DEBUG, A1
TODO... discuss logrotation with log4j.
KnowledgeTreeIndexer.properties
===============================
; specifies the port on which the system will listen for requests
server.port=8080
; if paranoid, only 'acceptable ip addresses will be able to make requests.
server.paranoid=false
; the list of acceptable ip addresses
server.accept=127.0.0.1,192.168.1.1
; the folder where the lucene server will store the indexes
indexer.directory=../../var/indexes
Licensing
=========
The Java based KnowledgeTree XML-RPC Server utilises the following jar files:
commons-lang-2.3.jar - Apache License
log4j-1.2.14.jar - Apache License
lucene-core-2.1.0.jar - Apache License
lucene-highlighter-2.1.0.jar - Apache License
NTEventLogAppender.dll - Apache License
commons-logging-1.1.jar - Apache License
ws-commons-util-1.0.1.jar - Apache License
xmlrpc-common-3.0.jar - Apache License
xmlrpc-server-3.0.jar - Apache License
For more information, visit http://www.apache.org

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

149
bin/md5_validation.php Normal file
View File

@ -0,0 +1,149 @@
<?php
/**
* $Id: $
*
* Base class for database-backed objects
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
require_once('../config/dmsDefaults.php');
print "KnowledgeTree MD5 Validation Tool\n";
print "=================================\n\n";
print "NOTE: This utility make take some time to run to completion!\n\n";
$sql = "SELECT
dcv.id, dmv.document_id, MAX(dmv.id) AS metadata_version_id, MAX(dmv.metadata_version) AS metadata_version
FROM
document_content_version AS dcv
INNER JOIN document_metadata_version AS dmv ON dcv.id = dmv.content_version_id
GROUP BY
dcv.id
ORDER BY dcv.document_id";
$rows = DBUtil::getResultArray(array($sql));
$total = count($rows);
$problem = 0;
$ok = 0;
$no_hash = 0;
$current = 0;
$dots = 0;
foreach($rows as $row)
{
if (++$current % 100 == 0)
{
print '.';
if ($dots++ % 60 == 0)
{
print "\n";
}
}
$content_id = $row['id'];
$document_id = $row['document_id'];
$metadata_version = $row['metadata_version'];
$metadata_version_id = $row['metadata_version_id'];
$document = Document::get($document_id, $metadata_version_id);
$core = &$document->_oDocumentContentVersion;
$filename = $document->getFileName();
$md5 = $core->getStorageHash();
if (empty($md5))
{
if ($dots > 0) print "\n";
print("Document Id: $document_id - Content Id: $content_id - No MD5 hash available.\n");
$no_hash++;
$current = 0; $dots = 0;
// don't exit here, we do so later
}
$storage = KTStorageManagerUtil::getSingleton();
$storage_path = $storage->temporaryFile($document);
if (PEAR::isError($storage_path))
{
if ($dots > 0) print "\n";
print("Document Id: $document_id - Content Id: $content_id - Storage engine reported an error: " . $storage_path->getMessage() . "\n");
$no_hash++;
$current = 0; $dots = 0;
continue;
}
if (!file_exists($storage_path))
{
if ($dots > 0) print "\n";
print("Document Id: $document_id - Content Id: $content_id - File '$storage_path' cannot be found!\n");
$no_hash++;
$current = 0; $dots = 0;
continue;
}
$actual_md5 = md5_file($storage_path);
$storage->freeTemporaryFile($storage_path);
if (empty($md5))
{
$core->setStorageHash($actual_md5);
$core->update();
print("\tHash set to: $actual_md5\n");
continue;
}
if ($md5 != $actual_md5)
{
if ($dots > 0) print "\n";
print("Document Id: $document_id - Content ID: $content_id - MD5 difference\n");
print("\tStored MD5: $md5\n");
print("\tCurrent MD5: $actual_md5\n");
$problem++;
$current = 0; $dots = 0;
continue;
}
$ok++;
}
print("\nStatistics:\n");
print("\tNo Problem:\t$ok\n");
print("\tProblem:\t$problem\n");
print("\tNo Hash:\t$no_hash\n");
print("\tTotal:\t\t$total\n");
?>

View File

@ -0,0 +1,162 @@
#
# PyODConverter (Python OpenDocument Converter) v0.9 - 2007-04-05
#
# This script converts a document from one office format to another by
# connecting to an OpenOffice.org instance via Python-UNO bridge.
#
# Copyright (C) 2007 Mirko Nasato <mirko@artofsolving.com>
# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl.html
#
# Modified by Kevin Fourie <kevin@knowledgetree.com>
# Contributions by Xavier Duret, Conrad Vermeulen
#DEFAULT_OPENOFFICE_PORT = 8100
import os, sys, glob
extrapaths = glob.glob('/usr/lib*/openoffice*/program/') + glob.glob('/usr/lib*/ooo*/program') + [ '/Applications/NeoOffice.app/Contents/program', 'c:/program files/ktdms/openoffice/program' ]
ooProgramPath = os.environ.get('ooProgramPath')
if not ooProgramPath is None:
extrapaths = [ ooProgramPath ] + extrapaths
for path in extrapaths:
try:
sys.path.append(path)
import uno
os.environ['PATH'] = '%s:' % path + os.environ['PATH']
break
except ImportError:
sys.path.remove(path)
continue
else:
print >>sys.stderr, "PyODConverter: Cannot find the pyuno.so library in sys.path and known paths."
sys.exit(1)
from os.path import abspath, splitext
from com.sun.star.beans import PropertyValue
from com.sun.star.connection import NoConnectException
FAMILY_PRESENTATION = "Presentation"
FAMILY_SPREADSHEET = "Spreadsheet"
FAMILY_TEXT = "Text"
FAMILY_BY_EXTENSION = {
"odt": FAMILY_TEXT,
"sxw": FAMILY_TEXT,
"doc": FAMILY_TEXT,
"rtf": FAMILY_TEXT,
"txt": FAMILY_TEXT,
"wpd": FAMILY_TEXT,
"html": FAMILY_TEXT,
"ods": FAMILY_SPREADSHEET,
"sxc": FAMILY_SPREADSHEET,
"xls": FAMILY_SPREADSHEET,
"odp": FAMILY_PRESENTATION,
"sxi": FAMILY_PRESENTATION,
"ppt": FAMILY_PRESENTATION
}
FILTER_BY_EXTENSION = {
"pdf": {
FAMILY_TEXT: "writer_pdf_Export",
FAMILY_SPREADSHEET: "calc_pdf_Export",
FAMILY_PRESENTATION: "impress_pdf_Export"
},
"html": {
FAMILY_TEXT: "HTML (StarWriter)",
FAMILY_SPREADSHEET: "HTML (StarCalc)",
FAMILY_PRESENTATION: "impress_html_Export"
},
"odt": { FAMILY_TEXT: "writer8" },
"doc": { FAMILY_TEXT: "MS Word 97" },
"rtf": { FAMILY_TEXT: "Rich Text Format" },
"txt": { FAMILY_TEXT: "Text" },
"ods": { FAMILY_SPREADSHEET: "calc8" },
"xls": { FAMILY_SPREADSHEET: "MS Excel 97" },
"odp": { FAMILY_PRESENTATION: "impress8" },
"ppt": { FAMILY_PRESENTATION: "MS PowerPoint 97" },
"swf": { FAMILY_PRESENTATION: "impress_flash_Export" }
}
class DocumentConversionException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
def _unoProps(**args):
props = []
for key in args:
prop = PropertyValue()
prop.Name = key
prop.Value = args[key]
props.append(prop)
return tuple(props)
class DocumentConverter:
def __init__(self, host, port):
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
try:
context = resolver.resolve("uno:socket,host=%s,port=%s;urp;StarOffice.ComponentContext" % (host, port))
except NoConnectException:
raise DocumentConversionException, "failed to connect to OpenOffice.org on port %s" % port
self.desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)
def convert(self, inputFile, outputFile):
inputExt = self._fileExt(inputFile)
outputExt = self._fileExt(outputFile)
filterName = self._filterName(inputExt, outputExt)
inputUrl = self._fileUrl(argv[1])
outputUrl = self._fileUrl(argv[2])
document = self.desktop.loadComponentFromURL(inputUrl, "_blank", 0, _unoProps(Hidden=True, ReadOnly=True))
document.storeToURL(outputUrl, _unoProps(FilterName=filterName))
document.close(True)
def _filterName(self, inputExt, outputExt):
try:
family = FAMILY_BY_EXTENSION[inputExt]
except KeyError:
raise DocumentConversionException, "unknown input format: '%s'" % inputExt
try:
filterByFamily = FILTER_BY_EXTENSION[outputExt]
except KeyError:
raise DocumentConversionException, "unknown output format: '%s'" % outputExt
try:
return filterByFamily[family]
except KeyError:
raise DocumentConversionException, "unsupported conversion: from '%s' to '%s'" % (inputExt, outputExt)
def _fileExt(self, path):
ext = splitext(path)[1]
if ext is not None:
return ext[1:].lower()
def _fileUrl(self, path):
return uno.systemPathToFileUrl(abspath(path))
if __name__ == "__main__":
from sys import argv, exit
if len(argv) < 3:
print "USAGE: " + argv[0] + " <input-file> <output-file> <host> <port>"
exit(255)
try:
converter = DocumentConverter(argv[3],argv[4])
converter.convert(argv[1], argv[2])
except DocumentConversionException, exception:
print "ERROR! " + str(exception)
exit(1)

133
bin/openoffice/pdfgen.py Normal file
View File

@ -0,0 +1,133 @@
#!/usr/bin/env python
#
# $Id$
#
# KnowledgeTree Community Edition
# Document Management Made Simple
# Copyright (C) 2008, 2009 KnowledgeTree Inc.
#
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License version 3 as published by the
# Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
# California 94120-7775, or email info@knowledgetree.com.
#
# The interactive user interfaces in modified source and object code versions
# of this program must display Appropriate Legal Notices, as required under
# Section 5 of the GNU General Public License version 3.
#
# In accordance with Section 7(b) of the GNU General Public License version 3,
# these Appropriate Legal Notices must retain the display of the "Powered by
# KnowledgeTree" logo and retain the original copyright notice. If the display of the
# logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
# must display the words "Powered by KnowledgeTree" and retain the original
# copyright notice.
# Contributor( s): ______________________________________
#
import os, sys, glob
extrapaths = glob.glob('/usr/lib*/openoffice*/program/') + glob.glob('/usr/lib*/ooo*/program') + [ '/Applications/NeoOffice.app/Contents/program', 'c:/program files/ktdms/openoffice/program' ]
ooProgramPath = os.environ.get('ooProgramPath')
if not ooProgramPath is None:
extrapaths = [ ooProgramPath ] + extrapaths
for path in extrapaths:
try:
sys.path.append(path)
import uno
os.environ['PATH'] = '%s:' % path + os.environ['PATH']
break
except ImportError:
sys.path.remove(path)
continue
else:
print >>sys.stderr, "PyODConverter: Cannot find the pyuno.so library in sys.path and known paths."
sys.exit(1)
from com.sun.star.beans import PropertyValue
NoConnectException = uno.getClass("com.sun.star.connection.NoConnectException")
IllegalArgumentException = uno.getClass("com.sun.star.lang.IllegalArgumentException")
RuntimeException = uno.getClass("com.sun.star.uno.RuntimeException")
IOException = uno.getClass("com.sun.star.io.IOException")
url_original = uno.systemPathToFileUrl(sys.argv[1])
url_save = uno.systemPathToFileUrl(sys.argv[2])
try:
### Get Service Manager
context = uno.getComponentContext()
resolver = context.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", context)
ctx = resolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext")
smgr = ctx.ServiceManager
### Load document
properties = []
p = PropertyValue()
p.Name = "Hidden"
p.Value = True
properties.append(p)
properties = tuple(properties)
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
except NoConnectException, e:
sys.stderr.write("OpenOffice process not found or not listening (" + e.Message + ")\n")
sys.exit(1)
except IllegalArgumentException, e:
sys.stderr.write("The url is invalid ( " + e.Message + ")\n")
sys.exit(1)
except RuntimeException, e:
sys.stderr.write("An unknown error occured: " + e.Message + "\n")
try:
doc = desktop.loadComponentFromURL(url_original, "_blank", 0, properties)
except IOException, e:
sys.stderr.write("URL couldn't be found or was corrupt (" + e.Message + ")\n")
sys.exit(1)
except IllegalArgumentException, e:
sys.stderr.write("Given parameters don't conform to the specification ( " + e.Message + ")\n")
sys.exit(1)
except RuntimeException, e:
sys.stderr.write("An unknown error occured: " + e.Message + "\n")
if doc == None:
sys.stderr.write("The document could not be opened for conversion. This could indicate an unsupported mimetype.\n")
sys.exit(1)
### Save File
properties = []
p = PropertyValue()
p.Name = "Overwrite"
p.Value = True
properties.append(p)
p = PropertyValue()
p.Name = "FilterName"
p.Value = 'writer_pdf_Export'
properties.append(p)
properties = tuple(properties)
try:
doc.storeToURL(url_save, properties)
doc.dispose()
except IOException, e:
sys.stderr.write("URL (" + url_save + ") couldn't be found or was corrupt (" + e.Message + ")\n")
sys.exit(1)
except IllegalArgumentException, e:
sys.stderr.write("Given parameters don't conform to the specification ( " + e.Message + ")\n")
sys.exit(1)
except RuntimeException, e:
sys.stderr.write("An unknown error occured: " + e.Message + "\n")

63
bin/recreateIndexes.php Normal file
View File

@ -0,0 +1,63 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
/*
* PURPOSE: This script will recreate the indexes on the database. It will also attempt to add foreign key constraints.
*
* It will produce 'errors' when there are issues. Many may be ignored as some do not apply to open source.
*/
define('USE_DB_ADMIN_USER',1);
chdir(dirname(__FILE__));
require_once('../config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/database/schema.inc.php');
print _kt('Recreate DB Indexes') . "...\n\n";
ini_set('display_errors','Off');
$schemautil = KTSchemaUtil::getSingleton();
$schemautil->dropForeignKeys();
$schemautil->dropPrimaryKeys();
$schemautil->dropIndexes();
$schemautil->createPrimaryKeys();
$schemautil->createForeignKeys();
$schemautil->createIndexes();
?>

73
bin/releaseKT.sh Normal file
View File

@ -0,0 +1,73 @@
#!/bin/sh
#
# script to checkout the latest tagged build from cvs and upload
# to the remote server of your choice
## functions
# displays the script usage message
#
usage() {
echo "usage: `basename $0` -b branch -v version"
echo " eg. `basename $0` -b BRANCH_1_0_1_20030728 -v 1.1.2"
exit 1
}
deploy() {
# cleanup
rm -rf $tmp 2> /dev/null
mkdir $tmp
# export kt
cd $tmp
cvs -d $cvsroot co -r $branch -N knowledgeTree
cvs -d $cvsroot co -r $branch -N "knowledgeTree/Documents/Root Folder/Default Unit"
find . -name CVS -exec rm -rf {} \; 2> /dev/null
# tar it up
rm /tmp/knowledgeTree-$version.tgz 2> /dev/null
tar -czvf /tmp/knowledgeTree-$version.tgz knowledgeTree
# convert src to windoze line-endings
find $tmp/knowledgeTree -name \*\.php -exec unix2dos {} \; 2> /dev/null
find $tmp/knowledgeTree -name \*\.inc -exec unix2dos {} \; 2> /dev/null
find $tmp/knowledgeTree -name \*\.txt -exec unix2dos {} \; 2> /dev/null
# zip it up
rm /tmp/knowledgeTree-$version.zip 2> /dev/null
zip -r /tmp/knowledgeTree-$version.zip knowledgeTree
# move them to this dir
cd -
mv /tmp/knowledgeTree-$version.* .
# clean up
rm -rf $tmp 2> /dev/null
}
# check the command line options
if [ $# -lt 2 ]; then
usage
fi
# process the params
while getopts ":b:v:" Option
do
case $Option in
b ) branch=$OPTARG;;
v ) version=$OPTARG;;
* ) usage;;
esac
done
# check that everything we want is set
if [ -z $branch -o -z $version ]; then
usage
fi
# setup up some paths and stuff
cvsroot=/usr/local/cvsroot
tmp=/tmp/dms
# now just do it
deploy

284
bin/scheduler.php Normal file
View File

@ -0,0 +1,284 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
chdir(dirname(__FILE__));
require_once('../config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/database/dbutil.inc');
// Set the time limit to 0 to prevent the script timing out
set_time_limit(0);
global $default;
// Check the lock file before starting
$lock = $default->cacheDirectory . DIRECTORY_SEPARATOR . 'scheduler.lock';
if(file_exists($lock)){
$default->log->debug('Scheduler: can\'t start - lock file exists');
exit(0);
}
// NOTE commented out because it was causing problems with the new locations in KnowledgeTree 3.7
/*
// If this is *nix and we are root then make sure file permisions are correct
if(!OS_WINDOWS && (get_current_user() == 'root'))
{
// The log files...
try {
$default->log->debug( 'Scheduler: setting owner to nobody on - '.$default->logDirectory);
exec('chown -R nobody:0 '.escapeshellcmd($default->logDirectory));
} catch(Exception $e) {
$default->log->error('Scheduler: can\'t set owner to nobody - '.$e);
}
}
*/
/* ** Set up functions ** */
// Calculate the next run time based on the frequency of iteration and the given time
function calculateRunTime($sFreq, $iTime) {
switch($sFreq){
case 'monthly':
$iDays = date('t');
$iDiff = (60*60)*24*$iDays;
break;
case 'weekly':
$iDiff = (60*60)*24*7;
break;
case 'daily':
$iDiff = (60*60)*24;
break;
case 'hourly':
$iDiff = (60*60);
break;
case 'half_hourly':
$iDiff = (60*30);
break;
case 'quarter_hourly':
$iDiff = (60*15);
break;
case '10mins':
$iDiff = (60*10);
break;
case '5mins':
$iDiff = (60*5);
break;
case '1min':
$iDiff = 60;
break;
case '30secs':
$iDiff = 30;
break;
case 'once':
$iDiff = 0;
break;
}
$iNextTime = $iTime + $iDiff;
return $iNextTime;
}
// Update the task information in the database
function updateTask($aFieldValues, $iId) {
DBUtil::autoUpdate('scheduler_tasks', $aFieldValues, $iId);
}
// Get the list of tasks due to be run from the database
function getTaskList() {
$now = date('Y-m-d H:i:s'); //time();
$query = "SELECT * FROM scheduler_tasks WHERE is_complete = 0 AND run_time < '{$now}' AND status != 'disabled'";
$result = DBUtil::getResultArray($query);
if (PEAR::isError($result)){
return false;
}
return $result;
}
/* ** Scheduler script ** */
$default->log->debug('Scheduler: starting');
// Get task list
$aList = getTaskList();
if (empty($aList))
{
$default->log->debug('Scheduler: stopping - nothing to do');
return;
}
// Loop through tasks and run
foreach($aList as $item)
{
$aUpdate = array();
$iEnd = 0; $iStart = 0; $iDuration = 0;
$sFreq = ''; $sParameters = '';
$retval = TRUE;
// Set up start variables
$sTask = $item['task'];
$sTaskUrl = $item['script_url'];
$iDuration = $item['run_duration'];
$sFreq = $item['frequency'];
$sParameters = $item['script_params'];
// Check if script is windows or *nix compatible
$ext = pathinfo($sTaskUrl, PATHINFO_EXTENSION);
$script = substr($sTaskUrl,0,-strlen($ext)-1);
if(OS_WINDOWS)
{
$mapping = array('sh'=>'bin','bat'=>'exe');
if (array_key_exists($ext, $mapping))
{
$sTaskUrl = $script . '.' . $mapping[$ext];
}
}
else
{
$mapping = array('bat'=>'sh', 'exe'=>'bin');
if (array_key_exists($ext, $mapping))
{
switch ($ext)
{
case 'exe':
if (is_executable(KT_DIR . '/' . $script))
{
$sTaskUrl = $script;
break;
}
default:
$sTaskUrl = $script . '.' . $mapping[$ext];
}
}
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')
{
$oKTConfig = KTConfig::getSingleton();
$phpPath = $oKTConfig->get('externalBinary/php', '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
{
$cmd .= (strtolower($sTask) == 'openoffice test') ? ' >/dev/null &' : ' 2>&1';
$default->log->debug("Scheduler cmd: $cmd");
$res = shell_exec($cmd);
}
// On completion - reset run time
$iEnd = KTUtil::getBenchmarkTime();
$iDuration = number_format($iEnd - $iStart,2);
$ignore = array('openoffice test');
if (!empty($res))
{
$func = in_array(strtolower($sTask), $ignore)?'debug':'info';
$default->log->$func("Scheduler - Task: $sTask");
$default->log->$func("Scheduler - Command: $cmd");
$default->log->$func("Scheduler - Output: $res");
$default->log->$func("Scheduler - Background tasks should not produce output. Please review why this is producing output.");
}
else
{
$default->log->debug("Scheduler - Task: {$sTask} completed in {$iDuration}s.");
}
if(($sFreq == 'once' || empty($sFreq)) && $retval !== FALSE)
{
// Set is_complete to true
$aUpdate['is_complete'] = '1';
}
else
{
$iNextTime = calculateRunTime($sFreq, $iTime);
$aUpdate['run_time'] = date('Y-m-d H:i:s', $iNextTime);
}
$aUpdate['previous_run_time'] = date('Y-m-d H:i:s', $iTime);
$aUpdate['run_duration'] = $iDuration;
updateTask($aUpdate, $item['id']);
}
$default->log->debug('Scheduler: stopping');
exit(0);
?>

132
bin/smarty_to_gettext.php Normal file
View File

@ -0,0 +1,132 @@
#!/usr/bin/env php
<?php
/**
* tsmarty2c.php - rips gettext strings from smarty template
*
* ------------------------------------------------------------------------- *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* ------------------------------------------------------------------------- *
*
* This command line script rips gettext strings from smarty file,
* and prints them to stdout in C format, that can later be used with the
* standard gettext tools.
*
* Usage:
* ./tsmarty2c.php <filename or directory> <file2> <..> > smarty.c
*
* If a parameter is a directory, the template files within will be parsed.
*
* @version $Id$
* @link http://smarty-gettext.sf.net/
* @author Sagi Bashari <sagi@boom.org.il>
* @copyright 2004-2005 Sagi Bashari
*/
// smarty open tag
$ldq = preg_quote('{');
// smarty close tag
$rdq = preg_quote('}');
// smarty command
$cmd = preg_quote('i18n');
// extensions of smarty files, used when going through a directory
$extensions = array('smarty');
// "fix" string - strip slashes, escape and convert new lines to \n
function fs($str)
{
$str = stripslashes($str);
$str = trim($str);
$str = str_replace('"', '\"', $str);
$str = str_replace("\n", '\n', $str);
return $str;
}
// rips gettext strings from $file and prints them in C format
function do_file($file)
{
$content = @file_get_contents($file);
if (empty($content)) {
return;
}
global $ldq, $rdq, $cmd;
preg_match_all(
"/{$ldq}\s*({$cmd})\s*([^{$rdq}]*){$rdq}([^{$ldq}]*){$ldq}\/\\1{$rdq}/",
$content,
$matches
);
for ($i=0; $i < count($matches[0]); $i++) {
// TODO: add line number
echo "/* $file */\n"; // credit: Mike van Lammeren 2005-02-14
$content = $matches[3][$i];
if (!preg_match('/formatmatters\s*=\s*["\']?\s*(.[^\"\']*)\s*["\']?/', $matches[2][$i], $match)) {
$replace = array(
'@ *[\n\r]+@' => ' ',
);
$content = preg_replace(array_keys($replace), array_values($replace), $content);
}
if (preg_match('/plural\s*=\s*["\']?\s*(.[^\"\']*)\s*["\']?/', $matches[2][$i], $match)) {
echo 'ngettext("'.fs($content).'","'.fs($match[1]).'",x);'."\n";
} else {
echo 'gettext("'.fs($content).'");'."\n";
}
echo "\n";
}
}
// go through a directory
function do_dir($dir)
{
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if ($entry == '.' || $entry == '..') {
continue;
}
$entry = $dir.'/'.$entry;
if (is_dir($entry)) { // if a directory, go through it
do_dir($entry);
} else { // if file, parse only if extension is matched
$pi = pathinfo($entry);
if (isset($pi['extension']) && in_array($pi['extension'], $GLOBALS['extensions'])) {
do_file($entry);
}
}
}
$d->close();
}
for ($ac=1; $ac < $_SERVER['argc']; $ac++) {
if (is_dir($_SERVER['argv'][$ac])) { // go through directory
do_dir($_SERVER['argv'][$ac]);
} else { // do file
do_file($_SERVER['argv'][$ac]);
}
}
?>

190
bin/storageverification.php Normal file
View File

@ -0,0 +1,190 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
require_once(dirname(__FILE__) . '/../config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/storage/storagemanager.inc.php');
// TODO: this does not verify files that are in the storage system, but not on the database. It is better that the storage system
// be in sync with the database. However, we should have a better way to query the storage driver to give us a list of files.
class StorageVerification
{
private $count;
private $lineCount;
private $doc;
const DOCS_PER_DOT = 100;
const DOTS_PER_LINE = 80;
private $nl;
private $tab;
private
function error($msg)
{
$doc = $this->doc;
$documentId = $doc->getId();
$path = $doc->getFullPath();
$filename = $doc->getFileName();
$storagePath = $doc->getStoragePath();
print "{$this->nl}{$this->nl}";
print "Problem with Document ID: {$documentId}{$this->nl}";
print "{$this->tab}Path: {$path}{$this->nl}";
print "{$this->tab}Filename: {$filename}{$this->nl}";
print "{$this->tab}StoragePath: {$storagePath}{$this->nl}";
print "{$this->tab}Problem: {$msg}{$this->nl}{$this->nl}";
flush();
$this->count = 0;
$this->lineCount = 0;
$this->clearCache();
}
private
function progress()
{
if ($this->count++ % StorageVerification::DOCS_PER_DOT == 0)
{
$this->lineCount++;
print '.';
flush();
}
if ($this->lineCount == StorageVerification::DOTS_PER_LINE )
{
print "{$this->nl}";
flush();
$this->lineCount = 0;
}
$this->clearCache();
}
private
function clearCache()
{
$metadataid = $this->doc->getMetadataVersionId();
$contentid = $this->doc->getContentVersionId();
$iId = $this->doc->getId();
$cache = KTCache::getSingleton();
$cache->remove('KTDocumentMetadataVersion/id', $metadataid);
$cache->remove('KTDocumentContentVersion/id', $contentid);
$cache->remove('KTDocumentCore/id', $iId);
$cache->remove('Document/id', $iId);
unset($GLOBALS['_OBJECTCACHE']['KTDocumentMetadataVersion'][$metadataid]);
unset($GLOBALS['_OBJECTCACHE']['KTDocumentContentVersion'][$contentid]);
unset($GLOBALS['_OBJECTCACHE']['KTDocumentCore'][$iId]);
unset($this->doc);
}
public
function run()
{
global $argc;
if (isset($argc))
{
$this->nl = "\n";
$this->tab = "\t";
print "Storage Verification{$this->nl}";
print "===================={$this->nl}";
}
else
{
$this->nl = '<br>';
$this->tab = '&nbsp;&nbsp;&nbsp;&nbsp;';
print "<b>Storage Verification</b>{$this->nl}";
}
$sql = "SELECT
dmv.id as metadata_version_id, dcv.document_id, dcv.md5hash, dcv.size
FROM
document_content_version dcv
INNER JOIN document_metadata_version dmv ON dcv.id=dmv.content_version_id";
$rows = DBUtil::getResultArray($sql);
$this->count = 0;
$this->lineCount = 0;
$storage =& KTStorageManagerUtil::getSingleton();
foreach($rows as $row)
{
$doc = Document::get($row['document_id'], $row['metadata_version_id']);
if (PEAR::isError($doc))
{
$msg = $doc->getMessage();
$this->error($doc, "Error with document: {$msg}");
continue;
}
$this->doc = $doc;
$tmpPath = $storage->temporaryFile($doc);
if (!file_exists($tmpPath))
{
$this->error("Temporary file could not be resolved: {$tmpPath}");
continue;
}
$expectedSize = $row['size'];
$currentSize = filesize($tmpPath);
if ($expectedSize != $currentSize)
{
$this->error("Filesize does not match. Expected: {$expectedSize} Current: {$currentSize}");
continue;
}
$expectedHash = $row['md5hash'];
$currentHash = md5_file($tmpPath);
if ($expectedHash != $currentHash)
{
$this->error("Hash does not match. Expected: {$expectedHash} Current: {$currentHash}");
continue;
}
$this->progress();
}
print "{$this->nl}Done.{$this->nl}{$this->nl}";
}
}
$verification = new StorageVerification();
$verification->run();
?>

198
bin/system_info.php Normal file
View File

@ -0,0 +1,198 @@
<?php
/**
*
* $Id:
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
/*
* Script to collect system information as part of a call home mechanism, no identifying information is stored.
*
* The following data is collected:
* Unique installation information: installation GUID, number of users in repository, number of documents in repository,
* operating system (platform, platform version, flavor if Linux), version and edition.
<installation guid>|<enabled user count>|<disabled user count>|<deleted user count>|
<live document count>|<deleted document count>|<archived document count>|
<KT version>|<KT edition>|<User licenses>|<OS info>
*/
chdir(realpath(dirname(__FILE__)));
require_once('../config/dmsDefaults.php');
global $default;
$default->log->debug('System information collection script starting...');
// Get installation guid
function getGuid()
{
$guid = KTUtil::getSystemIdentifier();
if(PEAR::isError($guid)){
$guid = '-';
}
return $guid;
}
// Get the number of users in the repository
function getUserCnt()
{
$query = 'select count(*) as cnt, disabled from users where id > 0 group by disabled;';
$result = DBUtil::getResultArray($query);
if(empty($result) || PEAR::isError($result)){
return '-|-|-';
}
$enabled = '-';
$disabled = '-';
$deleted = '-';
foreach ($result as $row){
switch($row['disabled']){
case 0: $enabled = $row['cnt']; break;
case 1: $disabled = $row['cnt']; break;
case 2: $deleted = $row['cnt']; break;
}
}
return "{$enabled}|{$disabled}|{$deleted}";
}
// Get the number of documents in the repository
function getDocCnt()
{
$query = 'select count(*) as cnt, status_id from documents d WHERE status_id IN (1,3,4) group by d.status_id;';
$result2 = DBUtil::getResultArray($query);
if(empty($result2) || PEAR::isError($result2)){
return '-|-|-';
}
$live = '-';
$deleted = '-';
$archived = '-';
foreach ($result2 as $row){
switch($row['status_id']){
case 1: $live = $row['cnt']; break;
case 3: $deleted = $row['cnt']; break;
case 4: $archived = $row['cnt']; break;
}
}
return "{$live}|{$deleted}|{$archived}";
}
// Get the version of KT
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;
}
// Get the edition of KT
function getKTEdition()
{
$edition = 'Community|-';
if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
$path = KTPluginUtil::getPluginPath('ktdms.wintools');
require_once($path . 'baobabkeyutil.inc.php');
$edition = BaobabKeyUtil::getName();
// this could be done with regular expressions...
// Remove the brackets around the name
$edition = substr($edition, 1);
$edition = substr($edition, 0, strlen($edition)-1);
// Remove the "users"
$pos = strpos($edition, 'users');
$edition = ($pos === false) ? $edition.'|-' : substr($edition, 0, $pos-1);
// Replace the , with |
$edition = str_replace(', ', '|', $edition);
}
return $edition;
}
// Get OS info - platform, version, linux flavour
function getOSInfo()
{
$server = php_uname();
$server_arr = explode(' ', $server);
// kernel version and os type - 32bit / 64bit
$kernel_v = $server_arr[2];
$os_v = array_pop($server_arr);
if(strpos($server, 'Darwin') !== false){
$os = 'Mac OS X';
}else if(strpos($server, 'Win') !== false){
$os = 'Windows';
// windows differs from *nix
// kernel version = windows version
// os version = build number
$kernel_v = $server_arr[3];
}else if(strpos($server, 'Linux') !== false) {
$os = 'Linux';
}else {
$os = 'Unix';
}
return $os.'|'.$kernel_v.'|'.$os_v;
}
function sendForm($data)
{
$url = 'http://ktnetwork.knowledgetree.com/call_home.php';
$data = http_build_query($data);
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
curl_close($ch);
}
$post_str = getGuid() .'|'. getUserCnt() .'|'. getDocCnt() .'|'. getKTVersion() .'|'. getKTEdition() .'|'. getOSInfo();
$data['system_info'] = $post_str;
sendForm($data);
$default->log->debug('System information collection script finishing.');
exit(0);
?>

View File

@ -0,0 +1,27 @@
; TEST ALL PEAR LIBRARIES BEFORE UPGRADING INTO RELEASE
PATH=%PATH%;c:\php5\PEAR
pear channel-update pear.php.net
pear config-set php_dir "C:\kt\kt.trunk\thirdparty\pear"
pear config-set preferred_state stable
pear upgrade --alldeps PEAR
pear upgrade --alldeps Cache_Lite
pear upgrade --alldeps Config
pear upgrade --alldeps DB
pear upgrade --alldeps File
;pear upgrade --alldeps MDB2#mysql
pear upgrade --alldeps Log
pear upgrade --alldeps PHP_Compat
pear config-set preferred_state beta
pear upgrade --alldeps File_Gettext
pear upgrade --alldeps Net_LDAP
pear upgrade --alldeps SOAP
pear config-set preferred_state stable

View File

@ -0,0 +1,61 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
$checkup = true;
require_once('../../config/dmsDefaults.php');
$s = array(
"sql*2.99.5*0*2.99.5/dashlet_disabling.sql",
"sql*2.99.5*0*2.99.5/role_allocations.sql",
"sql*2.99.5*0*2.99.5/transaction_namespaces.sql",
"sql*2.99.5*0*2.99.5/fieldset_field_descriptions.sql",
"sql*2.99.5*0*2.99.5/role_changes.sql",
);
$sTable = KTUtil::getTableName('upgrades');
foreach ($s as $u) {
var_dump($u);
$f = array(
'descriptor' => $u,
'result' => true,
);
$res = DBUtil::autoInsert($sTable, $f);
var_dump($res);
}

View File

@ -0,0 +1,49 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once('../../config/dmsDefaults.php');
require_once(KT_DIR . '/lib/upgrades/UpgradeFunctions.inc.php');
$oUF = new UpgradeFunctions();
$aFuncs = $oUF->upgrades['2.0.6'];
foreach ($aFuncs as $sFunc) {
$f = array('UpgradeFunctions', $sFunc);
call_user_func($f);
}
?>

View File

@ -0,0 +1,50 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
$scriptPath = realpath(dirname(__FILE__) . '/taskrunner.bat');
win32_create_service(array(
'service' => 'ktscheduler',
'display' => 'ktdmsScheduler',
'path' => $scriptPath
));
//win32_start_service('ktscheduler');
?>

View File

@ -0,0 +1,150 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
$myservicename = 'ktscheduler';
// Connect to service dispatcher and notify that startup was successful
if (!win32_start_service_ctrl_dispatcher($myservicename)) die('Could not connect to service :'.$myservicename);
win32_set_service_status(WIN32_SERVICE_RUNNING);
// Scheduler is dependent on the mysql server being up,
// so we sleep for a minute to ensure the server is running before we start the scheduler
sleep(120);
chdir(dirname(__FILE__)); // need to be here to include dmsDefaults
require_once('../../config/dmsDefaults.php');
global $default;
$config = KTConfig::getSingleton();
$schedulerInterval = $config->get('KnowledgeTree/schedulerInterval',30); // interval in seconds
// Change to knowledgeTree/bin folder
$dir = realpath(dirname(__FILE__) . '/..');
chdir($dir);
// Setup php binary path
$phpPath = $config->get('externalBinary/php','php');
if (!is_file($phpPath))
{
$default->log->error("Scheduler: php not found: $phpPath");
exit;
}
$loop = true;
$bTableExists = false;
while(!$bTableExists){
switch (win32_get_last_control_message())
{
case WIN32_SERVICE_CONTROL_CONTINUE:
break; // Continue server routine
case WIN32_SERVICE_CONTROL_INTERROGATE:
win32_set_service_status(WIN32_SERVICE_RUNNING);
break; // Respond with status
case WIN32_SERVICE_CONTROL_STOP:
win32_set_service_status(WIN32_SERVICE_STOPPED);
$loop = false; // Terminate script
$bTableExists = true;
continue;
default:
}
$default->log->info("Scheduler Service: Checking if the scheduler_tasks table exists.");
$checkQuery = 'show tables';
$tableList = DBUtil::getResultArray($checkQuery);
if(!empty($tableList)){
foreach($tableList as $table){
if(in_array('scheduler_tasks', $table)){
$bTableExists = true;
}
}
}
if(!$bTableExists){
$default->log->error('Scheduler Service: Scheduler_tasks table does not exist, sleeping for 30 seconds');
sleep(30);
}
}
$default->log->info("Scheduler Service: starting main loop");
// Main Scheduler Service Loop
while ($loop)
{
switch (win32_get_last_control_message())
{
case WIN32_SERVICE_CONTROL_CONTINUE:
break; // Continue server routine
case WIN32_SERVICE_CONTROL_INTERROGATE:
win32_set_service_status(WIN32_SERVICE_RUNNING);
break; // Respond with status
case WIN32_SERVICE_CONTROL_STOP:
win32_set_service_status(WIN32_SERVICE_STOPPED);
$loop = false; // Terminate script
continue;
default:
}
// Run the scheduler script
$cmd = "\"$phpPath\" \"$dir/scheduler.php\"";
$default->log->info('Scheduler Service: cmd - ' .$cmd );
$WshShell = new COM("WScript.Shell");
$res = $WshShell->Run($cmd, 0, true);
//$cmd = str_replace( '/','\\',$cmd);
//$res = `$cmd 2>&1`;
if (!empty($res))
{
$default->log->error('Scheduler Service: unexpected output - ' .$res);
}
sleep($schedulerInterval);
}
win32_set_service_status(WIN32_SERVICE_STOPPED);
$default->log->error("Scheduler Service: exiting main loop");
?>

View File

@ -0,0 +1,42 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
var_dump(win32_query_service_status('ktscheduler'));
?>

3
bin/win32/taskrunner.bat Normal file
View File

@ -0,0 +1,3 @@
@echo off
"@@BITROCK_INSTALLDIR@@\php\php.exe" "@@BITROCK_INSTALLDIR@@\knowledgeTree\bin\win32\schedulerService.php"

View File

@ -0,0 +1,42 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
win32_delete_service('ktscheduler');
?>

BIN
bin/win32/winserv.exe Normal file

Binary file not shown.

441
browse.php Normal file
View File

@ -0,0 +1,441 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
// main library routines and defaults
require_once('config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/templating/templating.inc.php');
require_once(KT_LIB_DIR . '/templating/kt3template.inc.php');
require_once(KT_LIB_DIR . '/dispatcher.inc.php');
require_once(KT_LIB_DIR . '/util/ktutil.inc');
require_once(KT_LIB_DIR . '/browse/DocumentCollection.inc.php');
require_once(KT_LIB_DIR . '/browse/BrowseColumns.inc.php');
require_once(KT_LIB_DIR . '/browse/PartialQuery.inc.php');
require_once(KT_LIB_DIR . '/browse/browseutil.inc.php');
require_once(KT_LIB_DIR . '/foldermanagement/Folder.inc');
require_once(KT_LIB_DIR . '/documentmanagement/DocumentType.inc');
require_once(KT_LIB_DIR . '/documentmanagement/Document.inc');
require_once(KT_LIB_DIR . '/documentmanagement/DocumentField.inc');
require_once(KT_LIB_DIR . '/widgets/portlet.inc.php');
require_once(KT_LIB_DIR . '/actions/folderaction.inc.php');
require_once(KT_DIR . '/plugins/ktcore/KTFolderActions.php');
require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php');
require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
require_once(KT_LIB_DIR . '/users/userhistory.inc.php');
require_once(KT_LIB_DIR . '/browse/columnregistry.inc.php');
require_once(KT_LIB_DIR . '/actions/entitylist.php');
require_once(KT_LIB_DIR . '/actions/bulkaction.php');
$sectionName = 'browse';
class BrowseDispatcher extends KTStandardDispatcher {
var $sName = 'ktcore.actions.folder.view';
var $oFolder = null;
var $sSection = 'browse';
var $browse_mode = null;
var $query = null;
var $resultURL;
var $sHelpPage = 'ktcore/browse.html';
var $editable;
function BrowseDispatcher() {
$this->aBreadcrumbs = array(
array('action' => 'browse', 'name' => _kt('Browse')),
);
return parent::KTStandardDispatcher();
}
function check() {
$this->browse_mode = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', 'folder');
$action = KTUtil::arrayGet($_REQUEST, $this->event_var, 'main');
$this->editable = false;
// catch the alternative actions.
if ($action != 'main') {
return true;
}
// if we're going to main ...
// folder browse mode
if ($this->browse_mode == 'folder') {
$in_folder_id = KTUtil::arrayGet($_REQUEST, 'fFolderId');
if (empty($in_folder_id)) {
$oConfig = KTConfig::getSingleton();
if ($oConfig->get('tweaks/browseToUnitFolder')) {
$iHomeFolderId = $this->oUser->getHomeFolderId();
if ($iHomeFolderId) {
$in_folder_id = $iHomeFolderId;
}
}
}
$folder_id = (int) $in_folder_id; // conveniently, will be 0 if not possible.
if ($folder_id == 0) {
$folder_id = 1;
}
$_REQUEST['fBrowseMode'] = 'folder';
// here we need the folder object to do the breadcrumbs.
$oFolder =& Folder::get($folder_id);
if (PEAR::isError($oFolder)) {
return false; // just fail.
}
// check whether the user can edit this folder
$oPerm = KTPermission::getByName('ktcore.permissions.write');
if (KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPerm, $oFolder)) {
$this->editable = true;
} else {
$this->editable = false;
}
// set the title and breadcrumbs...
$this->oPage->setTitle(_kt('Browse'));
if (KTPermissionUtil::userHasPermissionOnItem($this->oUser, 'ktcore.permissions.folder_details', $oFolder)) {
$this->oPage->setSecondaryTitle($oFolder->getName());
} else {
if (KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) {
$this->oPage->setSecondaryTitle(sprintf('(%s)', $oFolder->getName()));
} else {
$this->oPage->setSecondaryTitle('...');
}
}
//Figure out if we came here by navigating trough a shortcut.
//If we came here from a shortcut, the breadcrumbspath should be relative
//to the shortcut folder.
$iSymLinkFolderId = KTUtil::arrayGet($_REQUEST, 'fShortcutFolder', null);
if(is_numeric($iSymLinkFolderId)){
$oBreadcrumbsFolder = Folder::get($iSymLinkFolderId);
$this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($oBreadcrumbsFolder,array('final' => false)));
$this->aBreadcrumbs[] = array('name'=>$oFolder->getName());
}else{
$this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($oFolder));
}
$this->oFolder =& $oFolder;
// we now have a folder, and need to create the query.
$aOptions = array(
'ignorepermissions' => KTBrowseUtil::inAdminMode($this->oUser, $oFolder),
);
$this->oQuery = new BrowseQuery($oFolder->getId(), $this->oUser, $aOptions);
$this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fFolderId=%d', $oFolder->getId()));
// and the portlets
$portlet = new KTActionPortlet(sprintf(_kt('About this folder')));
$aActions = KTFolderActionUtil::getFolderInfoActionsForFolder($this->oFolder, $this->oUser);
$portlet->setActions($aActions,$this->sName);
$this->oPage->addPortlet($portlet);
$portlet = new KTActionPortlet(sprintf(_kt('Actions on this folder')));
$aActions = KTFolderActionUtil::getFolderActionsForFolder($oFolder, $this->oUser);
$portlet->setActions($aActions,null);
$this->oPage->addPortlet($portlet);
} else if ($this->browse_mode == 'lookup_value') {
// browsing by a lookup value
$this->editable = false;
// check the inputs
$field = KTUtil::arrayGet($_REQUEST, 'fField', null);
$oField = DocumentField::get($field);
if (PEAR::isError($oField) || ($oField == false)) {
$this->errorRedirectToMain('No Field selected.');
exit(0);
}
$value = KTUtil::arrayGet($_REQUEST, 'fValue', null);
$oValue = MetaData::get($value);
if (PEAR::isError($oValue) || ($oValue == false)) {
$this->errorRedirectToMain('No Value selected.');
exit(0);
}
$this->oQuery = new ValueBrowseQuery($oField, $oValue);
$this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'],
sprintf('fBrowseMode=lookup_value&fField=%d&fValue=%d', $field, $value));
// setup breadcrumbs
$this->aBreadcrumbs =
array(
array('name' => _kt('Lookup Values'),
'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectField')),
array('name' => $oField->getName(),
'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectLookup&fField=' . $oField->getId())),
array('name' => $oValue->getName(),
'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fBrowseMode=lookup_value&fField=%d&fValue=%d', $field, $value))));
} else if ($this->browse_mode == 'document_type') {
// browsing by document type
$this->editable = false;
$doctype = KTUtil::arrayGet($_REQUEST, 'fType',null);
$oDocType = DocumentType::get($doctype);
if (PEAR::isError($oDocType) || ($oDocType == false)) {
$this->errorRedirectToMain('No Document Type selected.');
exit(0);
}
$this->oQuery = new TypeBrowseQuery($oDocType);
// FIXME probably want to redirect to self + action=selectType
$this->aBreadcrumbs[] = array('name' => _kt('Document Types'), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectType'));
$this->aBreadcrumbs[] = array('name' => $oDocType->getName(), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'fBrowseMode=document_type&fType=' . $oDocType->getId()));
$this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fType=%s&fBrowseMode=document_type', $doctype));;
} else {
// FIXME what should we do if we can't initiate the browse? we "pretend" to have no perms.
return false;
}
return true;
}
function do_main() {
$oColumnRegistry =& KTColumnRegistry::getSingleton();
$collection = new AdvancedCollection;
$collection->addColumns($oColumnRegistry->getColumnsForView('ktcore.views.browse'));
$aOptions = $collection->getEnvironOptions(); // extract data from the environment
$aOptions['result_url'] = $this->resultURL;
$aOptions['is_browse'] = true;
$collection->setOptions($aOptions);
$collection->setQueryObject($this->oQuery);
$collection->setColumnOptions('ktcore.columns.selection', array(
'rangename' => 'selection',
'show_folders' => true,
'show_documents' => true,
));
// get bulk actions
$aBulkActions = KTBulkActionUtil::getAllBulkActions();
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/browse');
$aTemplateData = array(
'context' => $this,
'collection' => $collection,
'browse_mode' => $this->browse_mode,
'isEditable' => $this->editable,
'bulkactions' => $aBulkActions,
'browseutil' => new KTBrowseUtil(),
'returnaction' => 'browse',
);
if ($this->oFolder) {
$aTemplateData['returndata'] = $this->oFolder->getId();
}
return $oTemplate->render($aTemplateData);
}
function do_selectField() {
$aFields = DocumentField::getList('has_lookup = 1');
if (empty($aFields)) {
$this->errorRedirectToMain(_kt('No lookup fields available.'));
exit(0);
}
$_REQUEST['fBrowseMode'] = 'lookup_value';
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/browse_lookup_selection');
$aTemplateData = array(
'context' => $this,
'fields' => $aFields,
);
return $oTemplate->render($aTemplateData);
}
function do_selectLookup() {
$field = KTUtil::arrayGet($_REQUEST, 'fField', null);
$oField = DocumentField::get($field);
if (PEAR::isError($oField) || ($oField == false) || (!$oField->getHasLookup())) {
$this->errorRedirectToMain('No Field selected.');
exit(0);
}
$_REQUEST['fBrowseMode'] = 'lookup_value';
$aValues = MetaData::getByDocumentField($oField);
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/browse_lookup_value');
$aTemplateData = array(
'context' => $this,
'oField' => $oField,
'values' => $aValues,
);
return $oTemplate->render($aTemplateData);
}
function do_selectType() {
$aTypes = DocumentType::getList();
// FIXME what is the error message?
$_REQUEST['fBrowseMode'] = 'document_type';
if (empty($aTypes)) {
$this->errorRedirectToMain('No document types available.');
exit(0);
}
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/browse_types');
$aTemplateData = array(
'context' => $this,
'document_types' => $aTypes,
);
return $oTemplate->render($aTemplateData);
}
function do_enableAdminMode() {
$iDocumentId = KTUtil::arrayGet($_REQUEST, 'fDocumentId');
$iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId');
if ($iDocumentId) {
$oDocument = Document::get($iDocumentId);
if (PEAR::isError($oDocument) || ($oDocument === false)) {
return null;
}
$iFolderId = $oDocument->getFolderId();
}
if (!Permission::userIsSystemAdministrator() && !Permission::isUnitAdministratorForFolder($this->oUser, $iFolderId)) {
$this->errorRedirectToMain(_kt('You are not an administrator'));
}
// log this entry
$oLogEntry =& KTUserHistory::createFromArray(array(
'userid' => $this->oUser->getId(),
'datetime' => date('Y-m-d H:i:s', time()),
'actionnamespace' => 'ktcore.user_history.enable_admin_mode',
'comments' => 'Admin Mode enabled',
'sessionid' => $_SESSION['sessionID'],
));
$aOpts = array(
'redirect_to' => 'main',
'message' => _kt('Unable to log admin mode entry. Not activating admin mode.'),
);
$this->oValidator->notError($oLogEntry, $aOpts);
$_SESSION['adminmode'] = true;
if ($_REQUEST['fDocumentId']) {
$_SESSION['KTInfoMessage'][] = _kt('Administrator mode enabled');
redirect(KTBrowseUtil::getUrlForDocument($iDocumentId));
exit(0);
}
if ($_REQUEST['fFolderId']) {
$this->successRedirectToMain(_kt('Administrator mode enabled'), sprintf('fFolderId=%d', $_REQUEST['fFolderId']));
}
$this->successRedirectToMain(_kt('Administrator mode enabled'));
}
function do_disableAdminMode() {
$iDocumentId = KTUtil::arrayGet($_REQUEST, 'fDocumentId');
$iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId');
if ($iDocumentId) {
$oDocument = Document::get($iDocumentId);
if (PEAR::isError($oDocument) || ($oDocument === false)) {
return null;
}
$iFolderId = $oDocument->getFolderId();
}
if (!Permission::userIsSystemAdministrator() && !Permission::isUnitAdministratorForFolder($this->oUser, $iFolderId)) {
$this->errorRedirectToMain(_kt('You are not an administrator'));
}
// log this entry
$oLogEntry =& KTUserHistory::createFromArray(array(
'userid' => $this->oUser->getId(),
'datetime' => date('Y-m-d H:i:s', time()),
'actionnamespace' => 'ktcore.user_history.disable_admin_mode',
'comments' => 'Admin Mode disabled',
'sessionid' => $_SESSION['sessionID'],
));
$aOpts = array(
'redirect_to' => 'main',
'message' => _kt('Unable to log admin mode exit. Not de-activating admin mode.'),
);
$this->oValidator->notError($oLogEntry, $aOpts);
$_SESSION['adminmode'] = false;
if ($_REQUEST['fDocumentId']) {
$_SESSION['KTInfoMessage'][] = _kt('Administrator mode disabled');
redirect(KTBrowseUtil::getUrlForDocument($iDocumentId));
exit(0);
}
if ($_REQUEST['fFolderId']) {
$this->successRedirectToMain(_kt('Administrator mode disabled'), sprintf('fFolderId=%d', $_REQUEST['fFolderId']));
}
$this->successRedirectToMain(_kt('Administrator mode disabled'));
}
}
$oDispatcher = new BrowseDispatcher();
$oDispatcher->dispatch();
?>

18
call_home.php Normal file
View File

@ -0,0 +1,18 @@
<?php
/*
* Data incoming format: <installation guid>|<user count>|<document count>|<KT version>|<KT edition>|<OS info>
*/
$data = isset($_REQUEST['system_info']) ? strip_tags($_REQUEST['system_info']) : '';
if(empty($data)){
exit(0);
}
$file = 'var/system_info.txt';
$fp = fopen($file, 'a');
fwrite($fp, $data."\n");
fclose($fp);
exit(0);
?>

2
config/.htaccess Normal file
View File

@ -0,0 +1,2 @@
Order deny,allow
Deny from all

1
config/cache-path Normal file
View File

@ -0,0 +1 @@
var/cache

1
config/config-path Normal file
View File

@ -0,0 +1 @@
/etc/knowledgetree-ce/config.ini

149
config/config.ini Normal file
View File

@ -0,0 +1,149 @@
; ----------------------------------------------------------------
; At a minimum, you may need to change some of settings in this
; db section.
; ----------------------------------------------------------------
[db]
; The Database Engine to use. Currently mysql is the only
; supported type.
dbType = mysql
; Database login details
dbHost = localhost
dbName = dms
dbUser = dms
dbPass = djw9281js
dbPort = default
dbAdminUser = dmsadmin
dbAdminPass = js9281djw
[KnowledgeTree]
; ----------------------------------------------------------------
; The options in this section should automatically be detected by
; KnowledgeTree. Please DO NOT set these manually if you do not
; need to, as you may introduce errors in your system.
; ----------------------------------------------------------------
; install path (file path)
;
; Leave as default to have it automatically detected.
;
fileSystemRoot = default
; Webserver name (host name)
;
; Leave as default to have it automatically detected.
;
serverName = default
; Whether ssl is enabled or not
;
; Leave as default to have it automatically detected.
;
sslEnabled = false
; Path to the web application from the root of the web site.
; If KT is at http://example.org/foo/, then rootUrl should be '/foo'
;
; Leave as default to have it automatically detected.
;
rootUrl = default
; Whether the platform supports PATH_INFO or not. Currently defaults to
; true, but later will attempt to determine somehow.
pathInfoSupport = default
; Where to look for binaries on your system. This defaults to the path
; set for your web server, which works well for Unix-like systems, but
; may need some changing for Windows systems.
execSearchPath = default
; Use new Dashboard.
; Defaults to true
useNewDashboard = default
; Which level of logging to use. DEBUG, INFO, WARN, ERROR
; Defaults to INFO
; logLevel = DEBUG
; The location of the mime magic file
; Defaults to /usr/share/file/magic
magicDatabase = default
[storage]
; By default uses KTOnDiskHashedStorageManager
; manager = KTOnDiskHashedStorageManager
manager = default
[ui]
; Main logo
;mainLogo = ${rootUrl}/resources/oemlogo.png
; the logo's width in pixels
;mainLogoWidth = 219px
; ALT text - for accessibility purposes.
;mainLogoTitle = ACME Knowledge Management Systems
; URL on the main logo
;mainLogoUrl = ${rootUrl}
; powered by kt logo
;powerLogo = ${rootUrl}/resources/powered-by-kt.png
; the logo's width in pixels
;powerLogoWidth = 130px
; ALT text - for accessibility purposes.
;powerLogoTitle = Powered by KnowledgeTree
; use the additional IE specific GIF theme overrides.
; using this means that arbitrary theme packs may not work without
; having GIF versions available.
; ieGIF = true
ieGIF = default
; Set to true to automatically refresh the page after the session would
; have expired.
automaticRefresh = default
; "dot" command location
dot = dot
[tweaks]
; If you want to enable PHP error logging to the log/php_error_log
; file, change the following to true
phpErrorLogFile = false
[urls]
; directories
varDirectory = ${fileSystemRoot}/var
logDirectory = ${varDirectory}/log
documentRoot = ${varDirectory}/Documents
uiDirectory = ${fileSystemRoot}/presentation/lookAndFeel/knowledgeTree
tmpDirectory = ${varDirectory}/tmp
;dedicated feed url
;dedicatedrsstitle = RSS Feed Title
;dedicatedrssurl =
; files
stopwordsFile = ${fileSystemRoot}/config/stopwords.txt
[session]
; Set to true to force sessions to come from the same IP address
; ipTracking = false
[export]
; encoding to use in bulk export plugin
; default is set to UTF-8
; encoding = cp1252
encoding = default
[cache]
;
; enable/disable the cache and set the cache location
;
cacheEnabled = true
cacheDirectory = ${varDirectory}/cache
cachePlugins = true

671
config/dmsDefaults.php Normal file
View File

@ -0,0 +1,671 @@
<?php
/**
* $Id$
*
* Defines KnowledgeTree application defaults.
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): Guenter Roeck______________________________________
*
*/
// stuff in the new installer section database upgrade fails without this
global $default;
if (defined('DMS_DEFAULTS_INCLUDED'))
{
return;
}
define('DMS_DEFAULTS_INCLUDED',1);
define('LATEST_WEBSERVICE_VERSION',2);
if (function_exists('apd_set_pprof_trace')) {
apd_set_pprof_trace();
}
// Default settings differ, we need some of these, so force the matter.
// Can be overridden here if actually necessary.
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('magic_quotes_runtime', '0');
ini_set('arg_separator.output', '&');
$microtime_simple = explode(' ', microtime());
$_KT_starttime = (float) $microtime_simple[1] + (float) $microtime_simple[0];
unset($microtime_simple);
// If not defined, set KT_DIR based on my usual location in the tree
if (!defined('KT_DIR')) {
$rootLoc = realpath(dirname(__FILE__) . '/..');
if (substr(PHP_OS, 0, 3) == 'WIN') {
$rootLoc = str_replace('\\','/',$rootLoc);
}
define('KT_DIR', $rootLoc);
}
if (!defined('KT_LIB_DIR')) {
define('KT_LIB_DIR', KT_DIR . '/lib');
}
// If not defined, set KT_STACK_DIR based on my usual location in the tree
// TODO: This needs to use a config.ini entry if available
if (!defined('KT_STACK_DIR')) {
$stackLoc = realpath(dirname(__FILE__) . '/../..');
if (substr(PHP_OS, 0, 3) == 'WIN') {
$stackLoc = str_replace('\\','/',$stackLoc);
}
define('KT_STACK_DIR', $stackLoc);
}
// PATH_SEPARATOR added in PHP 4.3.0
if (!defined('PATH_SEPARATOR')) {
if (substr(PHP_OS, 0, 3) == 'WIN') {
define('PATH_SEPARATOR', ';');
} else {
define('PATH_SEPARATOR', ':');
}
}
require_once(KT_LIB_DIR . '/validation/customerror.php');
// {{{ prependPath()
function prependPath ($path) {
$include_path = ini_get('include_path');
ini_set('include_path', $path . PATH_SEPARATOR . $include_path);
}
// }}}
prependPath(KT_DIR . '/thirdparty/ZendFramework/library');
prependPath(KT_DIR . '/thirdparty/pear');
prependPath(KT_DIR . '/thirdparty/Smarty');
prependPath(KT_DIR . '/thirdparty/simpletest');
prependPath(KT_DIR . '/thirdparty/xmlrpc-2.2/lib');
prependPath(KT_DIR . '/ktapi');
prependPath(KT_DIR . '/search2');
require_once('PEAR.php');
// Give everyone access to legacy PHP functions
require_once(KT_LIB_DIR . '/util/legacy.inc');
// Give everyone access to KTUtil utility functions
require_once(KT_LIB_DIR . '/util/ktutil.inc');
require_once(KT_LIB_DIR . '/ktentity.inc');
require_once(KT_LIB_DIR . '/config/config.inc.php');
require_once(KT_DIR . '/search2/indexing/indexerCore.inc.php');
// {{{ KTInit
class KTInit {
// {{{ setupLogging()
function setupLogging () {
global $default;
$oKTConfig =& KTConfig::getSingleton();
if(!defined('APP_NAME')) {
define('APP_NAME', $oKTConfig->get('ui/appName', 'KnowledgeTree'));
}
define('KT_LOG4PHP_DIR', KT_DIR . '/thirdparty/apache-log4php/src/main/php' . DIRECTORY_SEPARATOR);
define('LOG4PHP_CONFIGURATION', KT_DIR . '/config/ktlog.ini');
define('LOG4PHP_DEFAULT_INIT_OVERRIDE', true);
require_once(KT_LOG4PHP_DIR . 'LoggerManager.php');
require_once(KT_LOG4PHP_DIR . 'LoggerPropertyConfigurator.php');
$configurator = new LoggerPropertyConfigurator();
$repository = LoggerManager::getLoggerRepository();
$properties = @parse_ini_file(LOG4PHP_CONFIGURATION);
$properties['log4php.appender.default'] = 'LoggerAppenderDailyFile';
$properties['log4php.appender.default.layout'] = 'LoggerPatternLayout';
$properties['log4php.appender.default.layout.conversionPattern'] = '%d{Y-m-d | H:i:s} | %p | %t | %r | %X{userid} | %X{db} | %c | %M | %m%n';
$properties['log4php.appender.default.datePattern'] = 'Y-m-d';
$logDir = $oKTConfig->get('urls/logDirectory');
$properties['log4php.appender.default.file'] = $logDir . '/kt%s.' . KTUtil::running_user() . '.log.txt';
// get the log level set in the configuration settings to override the level set in ktlog.ini
// for the default / main logging. Additional logging can be configured through the ini file
$logLevel = $oKTConfig->get('KnowledgeTree/logLevel');
$properties['log4php.rootLogger'] = $logLevel . ', default';
session_start();
$configurator->doConfigureProperties($properties, $repository);
$userId = isset($_SESSION['userID'])?$_SESSION['userID']:'n/a';
LoggerMDC::put('userid', $userId);
LoggerMDC::put('db', $oKTConfig->get('db/dbName'));
$default->log = LoggerManager::getLogger('default');
$default->queryLog = LoggerManager::getLogger('sql');
$default->timerLog = LoggerManager::getLogger('timer');
$default->phpErrorLog = LoggerManager::getLogger('php');
}
// }}}
// {{{ setupI18n()
/**
* setupI18n
*
*/
function setupI18n () {
require_once(KT_LIB_DIR . '/i18n/i18nutil.inc.php');
require_once('HTTP.php');
global $default;
$language = KTUtil::arrayGet($_COOKIE, 'kt_language');
if ($language) {
$default->defaultLanguage = $language;
}
}
// }}}
// {{{ cleanGlobals()
function cleanGlobals () {
/*
* Borrowed from TikiWiki
*
* Copyright (c) 2002-2004, Luis Argerich, Garland Foster,
* Eduardo Polidor, et. al.
*/
if (ini_get('register_globals')) {
$aGlobals = array($_ENV, $_GET, $_POST, $_COOKIE, $_SERVER);
foreach ($aGlobals as $superglob) {
foreach ($superglob as $key => $val) {
if (isset($GLOBALS[$key]) && $GLOBALS[$key] == $val) {
unset($GLOBALS[$key]);
}
}
}
}
}
// }}}
// {{{ cleanMagicQuotesItem()
function cleanMagicQuotesItem (&$var) {
if (is_array($var)) {
foreach ($var as $key => $val) {
$this->cleanMagicQuotesItem($var[$key]);
}
} else {
// XXX: Make it look pretty
$var = stripslashes($var);
}
}
// }}}
// {{{ cleanMagicQuotes()
function cleanMagicQuotes () {
if (get_magic_quotes_gpc()) {
$this->cleanMagicQuotesItem($_GET);
$this->cleanMagicQuotesItem($_POST);
$this->cleanMagicQuotesItem($_REQUEST);
$this->cleanMagicQuotesItem($_COOKIE);
}
}
// }}}
// {{{ setupServerVariables
function setupServerVariables() {
$oKTConfig =& KTConfig::getSingleton();
$bPathInfoSupport = $oKTConfig->get('KnowledgeTree/pathInfoSupport');
if ($bPathInfoSupport) {
// KTS-21: Some environments (FastCGI only?) don't set PATH_INFO
// correctly, but do set ORIG_PATH_INFO.
$path_info = KTUtil::arrayGet($_SERVER, 'PATH_INFO');
$orig_path_info = KTUtil::arrayGet($_SERVER, 'ORIG_PATH_INFO');
if (empty($path_info) && !empty($orig_path_info)) {
$_SERVER['PATH_INFO'] = strip_tags($_SERVER['ORIG_PATH_INFO']);
$_SERVER['PHP_SELF'] .= $_SERVER['PATH_INFO'];
}
$env_path_info = KTUtil::arrayGet($_SERVER, 'REDIRECT_kt_path_info');
if (empty($path_info) && !empty($env_path_info)) {
$_SERVER['PATH_INFO'] = strip_tags($env_path_info);
$_SERVER['PHP_SELF'] .= $_SERVER['PATH_INFO'];
}
// KTS-50: IIS (and probably most non-Apache web servers) don't
// set REQUEST_URI. Fake it.
$request_uri = KTUtil::arrayGet($_SERVER, 'REQUEST_URI');
if (empty($request_uri)) {
$_SERVER['REQUEST_URI'] = strip_tags(KTUtil::addQueryString($_SERVER['PHP_SELF'], $_SERVER['QUERY_STRING']));
}
} else {
unset($_SERVER['PATH_INFO']);
}
$script_name = strip_tags(KTUtil::arrayGet($_SERVER, 'SCRIPT_NAME'));
$php_self = strip_tags(KTUtil::arrayGet($_SERVER, 'PHP_SELF'));
$_SERVER['SCRIPT_NAME'] = $script_name;
$_SERVER['PHP_SELF'] = $php_self;
$kt_path_info = strip_tags(KTUtil::arrayGet($_REQUEST, 'kt_path_info'));
if (!empty($kt_path_info)) {
$_SERVER['PHP_SELF'] .= '?kt_path_info=' . $kt_path_info;
$_SERVER['PATH_INFO'] = $kt_path_info;
}
$sServerName = $oKTConfig->get('KnowledgeTree/serverName');
$_SERVER['HTTP_HOST'] = $sServerName;
}
// }}}
// {{{ setupRandomSeed()
function setupRandomSeed () {
mt_srand(hexdec(substr(md5(microtime()), -8)) & 0x7fffffff);
}
// }}}
// {{{ handleInitError()
function handleInitError($oError) {
global $checkup;
$msg = $oError->toString();
if ($checkup === true) {
echo $msg;
exit(0);
//return;
}
if (KTUtil::arrayGet($_SERVER, 'REQUEST_METHOD')) {
session_start();
$_SESSION['sErrorMessage'] = $msg;
$url = KTUtil::kt_url().'/customerrorpage.php';
// Redirect to custom error page
header('Location: '.$url.$qs);
/* A lot of steps to display the error page ... are they really needed?
require_once(KT_LIB_DIR . '/dispatcher.inc.php');
$oDispatcher =new KTErrorDispatcher($oError);
$oDispatcher->dispatch();
*/
} else {
print $msg . "\n";
}
exit(0);
}
// }}}
static function detectMagicFile()
{
$knownPaths = array(
'/usr/share/file/magic', // the old default
'/etc/httpd/conf/magic', // fedora's location
'/etc/magic' // worst case scenario. Noticed this is sometimes empty and containing a reference to somewher else
);
foreach($knownPaths as $path)
{
if (file_exists($path))
{
return $path;
}
}
return KT_DIR . '/config/magic';
}
static protected $handlerMapping = array(
E_WARNING=>'warn',
E_USER_WARNING=>'warn',
E_NOTICE=>'info',
E_USER_NOTICE=>'info',
E_ERROR=>'error',
E_USER_ERROR=>'error'
);
// {{{ handlePHPError()
static function handlePHPError($code, $message, $file, $line) {
global $default;
$priority = 'info';
if (array_key_exists($code, KTInit::$handlerMapping))
{
$priority = KTInit::$handlerMapping[$code];
}
if (empty($priority))
{
$priority = 'info';
}
$msg = $message . ' in ' . $file . ' at line ' . $line;
if (isset($default->phpErrorLog))
{
$default->phpErrorLog->$priority($msg);
}
}
// }}}
function catchFatalErrors()
{
ini_set('display_errors','On');
$phperror='><div id="phperror" style="display:none">';
ini_set('error_prepend_string',$phperror);
$CustomErrorPage = KTUtil::kt_url().'/customerrorpage.php';
$phperror='</div>><form name="catcher" action="'.$CustomErrorPage.'" method="post" ><input type="hidden" name="fatal" value=""></form>
<script> document.catcher.fatal.value = document.getElementById("phperror").innerHTML; document.catcher.submit();</script>';
ini_set('error_append_string',$phperror);
}
// {{{ guessRootUrl()
function guessRootUrl() {
$urlpath = $_SERVER['SCRIPT_NAME'];
$bFound = false;
$rootUrl = '';
while ($urlpath) {
if (file_exists(KT_DIR . '/' . $urlpath)) {
$bFound = true;
break;
}
$i = strpos($urlpath, '/');
if ($i === false) {
break;
}
if ($rootUrl)
{
$rootUrl .= '/';
}
$rootUrl .= substr($urlpath, 0, $i);
$urlpath = substr($urlpath, $i + 1);
}
if ($bFound) {
if ($rootUrl) {
$rootUrl = '/' . $rootUrl;
}
// If the rootUrl contains KT_DIR then it is the full path and not relative to the apache document root
// We return an empty string which will work for all stack installs but might break source installs.
// However this situation should only crop up when running background scripts and can be avoided by setting
// the rootUrl in the config settings.
if(strpos($rootUrl, KT_DIR) !== false){
return '';
}
return $rootUrl;
}
return '';
}
// }}}
// {{{ getDynamicConfigSettings
//This function gets the intial config settings which can only be resolved by using php
function getDynamicConfigSettings()
{
$oKTConfig =& KTConfig::getSingleton();
// Override the config setting - KT_DIR is resolved on page load
$oKTConfig->setdefaultns('KnowledgeTree', 'fileSystemRoot', KT_DIR);
// Set ssl to enabled if using https - if the server variable is not set, allow the config setting to take precedence
if (array_key_exists('HTTPS', $_SERVER)) {
if (strtolower($_SERVER['HTTPS']) === 'on') {
$oKTConfig->setdefaultns('KnowledgeTree', 'sslEnabled', 'true');
}
}
$oKTConfig->setdefaultns('KnowledgeTree', 'serverName', $_SERVER['HTTP_HOST']);
// Check for the config setting before overriding with the resolved setting
$serverName = $oKTConfig->get('KnowledgeTree/serverName');
$rootUrl = $oKTConfig->get('KnowledgeTree/rootUrl');
$execSearchPath = $oKTConfig->get('KnowledgeTree/execSearchPath');
$magicDatabase = $oKTConfig->get('KnowledgeTree/magicDatabase');
// base server name
if(empty($serverName) || $serverName == 'default'){
$oKTConfig->setdefaultns('KnowledgeTree', 'serverName', KTUtil::getServerName());
}
// the sub directory or root url
if(empty($rootUrl) || $rootUrl == 'default'){
$oKTConfig->setdefaultns('KnowledgeTree', 'rootUrl', $this->guessRootUrl());
}
// path to find the executable binaries
if(empty($execSearchPath) || $execSearchPath == 'default'){
$oKTConfig->setdefaultns('KnowledgeTree', 'execSearchPath', $_SERVER['PATH']);
}
// path to magic database
if(empty($magicDatabase) || $magicDatabase == 'default'){
$oKTConfig->setdefaultns('KnowledgeTree', 'magicDatabase', KTInit::detectMagicFile());
}
}
// }}}
// {{{ initConfig
function initConfig() {
global $default;
$oKTConfig = KTConfig::getSingleton();
// Override the config setting - KT_DIR is resolved on page load
$oKTConfig->setdefaultns('KnowledgeTree', 'fileSystemRoot', KT_DIR);
// TODO: refactor when all the config settings are stored in the database
// Check for the config cache
$use_cache = false;
$store_cache = true;
$cachePath = $oKTConfig->getCacheFilename();
if (file_exists($cachePath)) {
$configPath = $oKTConfig->getConfigFilename();
// This check can be removed once all config settings are in the database
// Check if the config file has been updated since the last time the cache file was generated.
$cachestat = stat($cachePath);
$configstat = stat($configPath);
$tval = 9;
if ($cachestat[$tval] > $configstat[$tval]) {
$use_cache = true;
$store_cache = false;
}
if ($use_cache) {
$use_cache = $oKTConfig->loadCache($cachePath);
}
}else{
if(!isset($_SERVER['HTTP_HOST']) || empty($_SERVER['HTTP_HOST'])){
// If the http_host server variable is not set then the serverName gets set to localhost
// We don't want to store this setting so we set store_cache to false
$store_cache = false;
}
}
if(!$use_cache) {
//Read in DB settings and config settings
$oKTConfig->readDBConfig();
}
$dbSetup = $oKTConfig->setupDB();
if(PEAR::isError($dbSetup))
{
/* We need to setup the language handler to display this error correctly */
$this->setupI18n();
$this->handleInitError($dbSetup);
}
// Read in the config settings from the database
// Create the global $default array
if(!$use_cache) $res = $oKTConfig->readConfig();
// Get default server url settings
$this->getDynamicConfigSettings();
if($store_cache && isset($cachePath)){
@touch($cachePath);
if (is_writable($cachePath)) {
$oKTConfig->createCache($cachePath);
}
}
}
// }}}
// {{{ initTesting
function initTesting() {
$oKTConfig =& KTConfig::getSingleton();
$sConfigFile = trim(@file_get_contents(KT_DIR . '/config/test-config-path'));
if (empty($sConfigFile)) {
$sConfigFile = 'config/test.ini';
}
if (!KTUtil::isAbsolutePath($sConfigFile)) {
$sConfigFile = sprintf('%s/%s', KT_DIR, $sConfigFile);
}
if (!file_exists($sConfigFile)) {
$this->handleInitError(PEAR::raiseError('Test infrastructure not configured'));
exit(0);
}
$res = $oKTConfig->loadFile($sConfigFile);
if (PEAR::isError($res)) {
return $res;
}
$_SESSION['userID'] = 1;
}
// }}}
}
// }}}
$KTInit = new KTInit();
$KTInit->initConfig();
$KTInit->setupI18n();
//====================================
define('KTLOG_CACHE',false);
if (isset($GLOBALS['kt_test'])) {
$KTInit->initTesting();
}
$oKTConfig = KTConfig::getSingleton();
if($oKTConfig->get('CustomErrorMessages/customerrormessages') == 'on')
{
$KTInit->catchFatalErrors();
}
if (phpversion()<5){
$rootUrl = $KTInit->guessRootUrl();
$sErrorPage = 'http://'.$_SERVER['HTTP_HOST'].$rootUrl.'/'.'customerrorpage.php';
session_start();
$_SESSION['sErrorMessage'] = 'KnowledgeTree now requires that PHP version 5 is installed. PHP version 4 is no longer supported.';
header('location:'. $sErrorPage ) ;
exit(0);
}
$KTInit->setupServerVariables();
// instantiate log
$loggingSupport = $KTInit->setupLogging();
// Send all PHP errors to a file (and maybe a window)
set_error_handler(array('KTInit', 'handlePHPError'));
$KTInit->setupRandomSeed();
$GLOBALS['KTRootUrl'] = $oKTConfig->get('KnowledgeTree/rootUrl');
require_once(KT_LIB_DIR . '/database/lookup.inc');
// table mapping entries
include('tableMappings.inc');
$default->systemVersion = trim(file_get_contents(KT_DIR . '/docs/VERSION.txt'));
$default->versionName = trim(file_get_contents(KT_DIR . '/docs/VERSION-NAME.txt'));
$KTInit->cleanGlobals();
$KTInit->cleanMagicQuotes();
// site map definition
require_once(KT_DIR . '/config/siteMap.inc');
require_once(KT_LIB_DIR . '/session/Session.inc');
require_once(KT_LIB_DIR . '/session/control.inc');
require_once(KT_LIB_DIR . '/plugins/pluginutil.inc.php');
if ($checkup !== true) {
// Replace function later
/* ** Get the page being loaded and load the plugins specific to the page ** */
$sScriptName = $GLOBALS['_SERVER']['SCRIPT_NAME'];
$sScript = basename($sScriptName);
$pos = strpos($sScript, '.');
$sType = substr($sScript, 0, $pos);
KTPluginUtil::loadPlugins($sType);
}
if ($checkup !== true) {
if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
$path = KTPluginUtil::getPluginPath('ktdms.wintools');
require_once($path . 'baobabkeyutil.inc.php');
$name = BaobabKeyUtil::getName();
if ($name) {
$default->versionName = sprintf('%s %s', $default->versionName, $name);
}
}else{
$default->versionName = $default->versionName.' '._kt('(Community Edition)');
}
}
if (!extension_loaded('mbstring'))
{
require_once(KT_LIB_DIR . '/mbstring.inc.php');
}
require_once(KT_LIB_DIR . '/templating/kt3template.inc.php');
$GLOBALS['main'] =new KTPage();
?>

4
config/ktlog.ini Normal file
View File

@ -0,0 +1,4 @@
log4php.rootLogger = INFO, default
;log4php.logger.sql= DEBUG
;log4php.logger.timer= DEBUG
log4php.logger.php= ERROR

13136
config/magic Normal file

File diff suppressed because it is too large Load Diff

83
config/siteMap.inc Normal file
View File

@ -0,0 +1,83 @@
<?php
/**
* $Id$
*
* Defines site mappings- actions, pages and permissions.
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
require_once(KT_LIB_DIR . '/session/SiteMap.inc');
$default->siteMap = new SiteMap(false);
// action, page, section, group with access, link text
// general pages
$default->siteMap->addPage('login', '/login.php', 'General', None, '');
// dashboard
$default->siteMap->addPage('dashboard', '/dashboard.php', 'General', Guest, 'dashboard');
// old dashboard
$default->siteMap->addPage('olddashboard', '/olddashboard.php', 'General', Guest, 'olddashboard');
// dashboard news
//pages for manage documents section
$default->siteMap->addPage('browse', '/browse.php', 'Manage Documents', Guest, _kt('browse documents'));
$default->siteMap->addPage('viewDocument', '/view.php', 'Manage Documents', Guest, _kt('View Document'), false);
$default->siteMap->addPage('editDocument', '/edit.php', 'Manage Documents', Guest, _kt('Edit Document'), false);
// pages for administration section
$default->siteMap->addDefaultPage('administration', '/admin.php', 'Administration', UnitAdmin, _kt('Administration'));
// pages for advanced search section
$default->siteMap->addDefaultPage('advancedSearch', '/search/advancedSearchBL.php', 'Advanced Search', Guest, _kt('Advanced Search'), true);
$default->siteMap->addPage('booleanSearch', '/search/booleanSearch.php', 'Boolean Search', Guest, _kt('Boolean Search'), false);
$default->siteMap->addSectionColour('Advanced Search', 'th', 'A1571B');
$default->siteMap->addSectionColour('Standard Search', 'th', 'A1571B');
// pages for prefs section
$default->siteMap->addDefaultPage('preferences', '/preferences.php', 'Preferences', User, _kt('Preferences'));
// pages for about section
$default->siteMap->addDefaultPage('aboutkt', '/about.php', 'About', Guest, _kt('About'));
// pages for Help section
$default->siteMap->addDefaultPage('help', '/presentation/lookAndFeel/knowledgeTree/help.php', 'Help', Guest, _kt('Help'));
// pages for logout section section
$default->siteMap->addDefaultPage('logout', '/presentation/logout.php', 'Logout', Guest, _kt('Logout'));
?>

544
config/stopwords.txt Normal file
View File

@ -0,0 +1,544 @@
a's
able
about
above
according
accordingly
across
actually
after
afterwards
again
against
ain't
all
allow
allows
almost
alone
along
already
also
although
always
am
among
amongst
an
and
another
any
anybody
anyhow
anyone
anything
anyway
anyways
anywhere
apart
appear
appreciate
appropriate
are
aren't
around
as
aside
ask
asking
associated
at
available
away
awfully
be
became
because
become
becomes
becoming
been
before
beforehand
behind
being
believe
below
beside
besides
best
better
between
beyond
both
brief
but
by
c'mon
c's
came
can
can't
cannot
cant
cause
causes
certain
certainly
changes
clearly
co
com
come
comes
concerning
consequently
consider
considering
contain
containing
contains
corresponding
could
couldn't
course
currently
definitely
described
despite
did
didn't
different
do
does
doesn't
doing
don't
done
down
downwards
during
each
edu
eg
eight
either
else
elsewhere
enough
entirely
especially
et
etc
even
ever
every
everybody
everyone
everything
everywhere
ex
exactly
example
except
far
few
fifth
first
five
followed
following
follows
for
former
formerly
forth
four
from
further
furthermore
get
gets
getting
given
gives
go
goes
going
gone
got
gotten
greetings
had
hadn't
happens
hardly
has
hasn't
have
haven't
having
he
he's
hello
help
hence
her
here
here's
hereafter
hereby
herein
hereupon
hers
herself
hi
him
himself
his
hither
hopefully
how
howbeit
however
i'd
i'll
i'm
i've
ie
if
ignored
immediate
in
inasmuch
inc
indeed
indicate
indicated
indicates
inner
insofar
instead
into
inward
is
isn't
it
it'd
it'll
it's
its
itself
just
keep
keeps
kept
know
knows
known
last
lately
later
latter
latterly
least
less
lest
let
let's
like
liked
likely
little
look
looking
looks
ltd
mainly
many
may
maybe
me
mean
meanwhile
merely
might
more
moreover
most
mostly
much
must
my
myself
name
namely
nd
near
nearly
necessary
need
needs
neither
never
nevertheless
new
next
nine
no
nobody
non
none
noone
nor
normally
not
nothing
novel
now
nowhere
obviously
of
off
often
oh
ok
okay
old
on
once
one
ones
only
onto
or
other
others
otherwise
ought
our
ours
ourselves
out
outside
over
overall
own
particular
particularly
per
perhaps
placed
please
plus
possible
presumably
probably
provides
que
quite
qv
rather
rd
re
really
reasonably
regarding
regardless
regards
relatively
respectively
right
said
same
saw
say
saying
says
second
secondly
see
seeing
seem
seemed
seeming
seems
seen
self
selves
sensible
sent
serious
seriously
seven
several
shall
she
should
shouldn't
since
six
so
some
somebody
somehow
someone
something
sometime
sometimes
somewhat
somewhere
soon
sorry
specified
specify
specifying
still
sub
such
sup
sure
t's
take
taken
tell
tends
th
than
thank
thanks
thanx
that
that's
thats
the
their
theirs
them
themselves
then
thence
there
there's
thereafter
thereby
therefore
therein
theres
thereupon
these
they
they'd
they'll
they're
they've
think
third
this
thorough
thoroughly
those
though
three
through
throughout
thru
thus
to
together
too
took
toward
towards
tried
tries
truly
try
trying
twice
two
un
under
unfortunately
unless
unlikely
until
unto
up
upon
us
use
used
useful
uses
using
usually
value
various
very
via
viz
vs
want
wants
was
wasn't
way
we
we'd
we'll
we're
we've
welcome
well
went
were
weren't
what
what's
whatever
when
whence
whenever
where
where's
whereafter
whereas
whereby
wherein
whereupon
wherever
whether
which
while
whither
who
who's
whoever
whole
whom
whose
why
will
willing
wish
with
within
without
won't
wonder
would
would
wouldn't
yes
yet
you
you'd
you'll
you're
you've
your
yours
yourself
yourselves
zero

171
config/tableMappings.inc Normal file
View File

@ -0,0 +1,171 @@
<?php
/**
* $Id$
*
* Stores the table mappings.
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
// Table mappings
// session information
$default->sessions_table = 'active_sessions';
//data types table
$default->data_types_table ='data_types';
// document type fields
$default->document_fields_table = 'document_fields';
$default->fieldsets_table = 'fieldsets';
// links document
$default->document_fields_link_table = 'document_fields_link';
// document subscriptions
$default->document_subscriptions_table = 'document_subscriptions';
// document transaction types
$default->transaction_types_table = 'document_transaction_types_lookup';
// document transactions
$default->document_transactions_table = 'document_transactions';
// links document types to document type fields
$default->document_type_fields_table = 'document_type_fields_link';
// links document types to document type fields
$default->document_type_fieldsets_table = 'document_type_fieldsets_link';
// document type information
$default->document_types_table = 'document_types_lookup';
// stores documents
$default->documents_table = 'documents';
//link folders to doc types
$default->folder_doctypes_table = 'folder_doctypes_link';
// stores folder subscriptions
$default->folder_subscriptions_table = 'folder_subscriptions';
// stores folders
$default->folders_table = 'folders';
// stores group information
$default->groups_table = 'groups_lookup';
// links groups to units
$default->groups_units_table = 'groups_units_link';
// links -- DEPRECATED
//$default->quicklinks_table = 'links';
// Table with metadata
$default->metadata_table = 'metadata_lookup';
// Table with mime info
$default->mimetypes_table = 'mime_types';
// dashboard news table
$default->news_table = 'news';
// organisation information
$default->organisations_table = 'organisations_lookup';
// stores role information (name and access)
$default->roles_table = 'roles';
// sitemap access classes
$default->site_access_table = 'site_access_lookup';
// sitemap sections
$default->site_sections_table = 'site_sections_lookup';
// sitemap definition
$default->sitemap_table = 'sitemap';
// stores default system settings
$default->system_settings_table = 'system_settings';
// Table with discussion threads
$default->discussion_threads_table = 'discussion_threads';
// Table with discussion comments
$default->discussion_comments_table = 'discussion_comments';
// Table with unit information
$default->units_table = 'units_lookup';
// Table with unit organisation link tables
$default->units_organisations_table = 'units_organisations_link';
// Table with user info
$default->users_table = 'users';
// links groups to users
$default->users_groups_table = 'users_groups_link';
// Table with web documents info for web publishing
$default->web_documents_table = 'web_documents';
// Table with web documents info for web publishing
$default->web_documents_status_table = 'web_documents_status_lookup';
// stores websites for web publishing
$default->web_sites_table = 'web_sites';
//stores help text
$default->help_table = 'help';
$default->document_text_table = 'document_text';
$default->document_link_table = 'document_link';
// archive settings
$default->document_archiving_table = 'document_archiving_link';
$default->archiving_type_lookup_table = 'archiving_type_lookup';
$default->archiving_settings_table = 'archiving_settings';
$default->time_period_table = 'time_period';
$default->time_unit_lookup_table = 'time_unit_lookup';
$default->archive_restoration_table = 'archive_restoration_request';
$default->status_table = 'status_lookup';
$default->search_permissions_table = 'search_document_user_link';
$default->document_link_types_table = 'document_link_types';
$default->upgrades_table = 'upgrades';
$default->help_replacement_table = 'help_replacement';
$default->permissions_table = 'permissions';
$default->permission_objects_table = 'permission_objects';
$default->permission_descriptors_table = 'permission_descriptors';
$default->permission_assignments_table = 'permission_assignments';
$default->permission_descriptor_groups_table = 'permission_descriptor_groups';
$default->permission_descriptor_roles_table = 'permission_descriptor_roles';
$default->permission_descriptor_users_table = 'permission_descriptor_users';
$default->permission_lookups_table = 'permission_lookups';
$default->permission_lookup_assignments_table = 'permission_lookup_assignments';
$default->groups_groups_table = 'groups_groups_link';
$default->metadata_treenode_table = 'metadata_lookup_tree';
$default->metadata_condition_table = 'metadata_lookup_condition';
$default->md_condition_table = 'metadata_lookup_condition';
$default->md_condition_chain_table = 'metadata_lookup_condition_chain';
$default->field_orders_table = 'field_orders';
$default->workflows_table = 'workflows';
$default->workflow_states_table = 'workflow_states';
$default->workflow_transitions_table = 'workflow_transitions';
$default->workflow_state_transitions_table = 'workflow_state_transitions';
$default->workflow_documents_table = 'workflow_documents';
$default->workflow_actions_table = 'workflow_actions';
$default->workflow_state_actions_table = 'workflow_state_actions';
$default->field_value_instances_table = 'field_value_instances';
$default->field_behaviours_table = 'field_behaviours';
$default->field_behaviour_options_table = 'field_behaviour_options';
$default->document_transaction_text_table = 'document_transaction_text';
$default->document_searchable_text_table = 'document_searchable_text';
$default->saved_searches_table = 'saved_searches';
$default->permission_dynamic_conditions_table = 'permission_dynamic_conditions';
$default->permission_dynamic_assignments_table = 'permission_dynamic_assignments';
$default->notifications_table = 'notifications';
$default->authentication_sources_table = 'authentication_sources';
$default->dashlet_disable_table = 'dashlet_disables';
$default->role_allocations_table = 'role_allocations';
$default->document_role_allocations_table = 'document_role_allocations';
$default->plugins_table = 'plugins';
$default->document_metadata_version_table = 'document_metadata_version';
$default->document_content_version_table = 'document_content_version';
$default->trigger_selection_table = 'trigger_selection';
$default->type_workflow_map_table = 'type_workflow_map';
$default->folder_workflow_map_table = 'folder_workflow_map';
$default->workflow_state_permission_assignments_table = 'workflow_state_permission_assignments';
?>

10
config/test.ini Normal file
View File

@ -0,0 +1,10 @@
[db]
; The Database Engine to use. Currently mysql is the only
; supported type.
dbType = mysql
dbHost = localhost
dbName = dms-test
dbUser = dmsadmin
dbPass = js9281djw
dbPort = default

167
control.php Normal file
View File

@ -0,0 +1,167 @@
<?php
/*
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*/
// check if system has been installed
require_once("setup/wizard/installUtil.php");
// Check if system has been installed
$iu = new InstallUtil();
if(!$iu->isSystemInstalled()) {
$iu->redirect("setup/wizard");
exit(0);
}
// main library routines and defaults
require_once('config/dmsDefaults.php');
/**
* Controller page -- controls the web application by responding to a set of
* defined actions. The controller performs session handling, page-level
* authentication and forwards the request to the appropriate handling
* page.
*/
// -------------------------------
// page start
// -------------------------------
$action = $_REQUEST['action'];
if ($action != 'login') {
// check the session, but don't redirect if the check fails
$ret = checkSessionAndRedirect(false);
if ($ret === true) {
//get around the problem with search
if (strcmp($_REQUEST['fForStandardSearch'], 'yes') == 0) {
$action = 'standardSearch';
} else if (!isset($action)) {
// session check succeeds, so default action should be the dashboard if no action was specified
$action = 'dashboard';
}
} else {
// session check fails, so default action should be the login form if no action was specified
$oKTConfig = KTConfig::getSingleton();
$dest = 'login';
if ($oKTConfig->get('allowAnonymousLogin', false)) { $dest = 'dashboard'; }
if (!isset($action)) {
$action = $dest;
} elseif ($action <> $dest) {
// we have a controller link and auth has failed, so redirect to the login page
// with the controller link as the redirect
$url = generateControllerUrl('login');
$redirect = urlencode($_SERVER[PHP_SELF] . '?' . $_SERVER['QUERY_STRING']);
if ((strlen($redirect) > 1)) {
$url = $url . '&redirect=' . $redirect;
}
if (PEAR::isError($ret)) {
$url = $url . '&errorMessage=' . urlencode($ret->getMessage());
session_start();
$_SESSION['errormessage']['login'] = $ret->getMessage();
}
redirect($url);
exit(0);
}
}
}
// we appear to have some encoding/decoding issues, so we need to force-check for %30 type situations
$queryString = KTUtil::arrayGet($_REQUEST, 'qs', '');
if (is_array($queryString)) {
$aStrings = array();
foreach ($queryString as $k => $v) {
$aStrings[] = $k . '=' . $v;
}
$queryString = join('&', $aStrings);
} elseif (count(preg_match('#\%#', $queryString) != 0)) {
$queryString = urldecode($queryString);
}
if (empty($queryString)) {
// need to strip query string params from action before attempting to retrieve from sitemap
$queryString = '';
// check for the presence of additional params
if (strstr($_SERVER['QUERY_STRING'], '&')) {
// strip and save the querystring
$queryString = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], '&')+1, strlen($_SERVER['QUERY_STRING']));
} else if (strstr($_SERVER['QUERY_STRING'], '?')) {
// strip and save the querystring
$queryString = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], '?')+1, strlen($_SERVER['QUERY_STRING']));
// update
$action = substr($_SERVER['QUERY_STRING'], 0, strpos($_SERVER['QUERY_STRING'], '?'));
}
}
if ($action == 'dashboard') {
$oKTConfig = KTConfig::getSingleton();
if(!$oKTConfig->get('useNewDashboard')) $action = 'olddashboard';
}
// retrieve the page from the sitemap (checks whether this user has access to the requested page)
$page = $default->siteMap->getPage($action, isset($_SESSION['userID']) ? $_SESSION['userID'] : '');
if (!$page) {
// this user doesn't have permission to access the page
// or there is no page mapping for the requested action
// redirect to no permission page
$default->log->error("control.php getPage failed for ($action, " . $_SESSION['userID'] . ")");
redirect("$default->uiUrl/noAccess.php");
} else {
$page = $default->rootUrl . $page;
// set authorised flag and redirect
// strip querystring from the page returned from the sitemap
// before setting page authorisation flag (since checkSession checks page level
// access by checking $_SESSION["pageAccess"][$_SERVER["PHP_SELF"] ie. without querystring(?)
$paramStart=strpos($page, '?');
if ($paramStart !== false) {
$accessPage = substr($page, 0, $paramStart);
} else {
$accessPage = $page;
}
$_SESSION['pageAccess'][$accessPage] = true;
// if we have a querystring add it on
if (strlen($queryString) > 0) {
$page .= ($paramStart !== false)?'&':'?';
$page .= $queryString;
$default->log->info("control.php: about to redirect to $page");
}
redirect($page);
}
?>

86
customerrorpage.php Normal file
View File

@ -0,0 +1,86 @@
<?php
/**
* $Id$
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
session_start();
// Get the error message
$error = isset($_POST['fatal']) ? $_POST['fatal'] : '';
$error = isset($_SESSION['sErrorMessage']) ? $_SESSION['sErrorMessage'] : $error;
unset($_SESSION['sErrorMessage']);
//Finding root Url
$sHost = $_SERVER['HTTP_HOST'];
$sScriptName = dirname($_SERVER['SCRIPT_NAME']);
$sRoot = $sHost.$sScriptName;
$sLastChar = substr($sScriptName, -1, 1);
$sScriptName = ($sLastChar == '\\' || $sLastChar == '/') ? substr($sScriptName, 0, -1) : $sScriptName;
$bSSLEnabled = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? true : false;
$sRootUrl = ($bSSLEnabled ? 'https://' : 'http://').$sRoot;
$error = strip_tags($error);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Knowledgetree - Desklet</title>
<link rel="stylesheet" type="text/css" href="<?php echo $sRootUrl ?>/resources/css/errors.css" />
<script type="text/javascript">
function Click()
{
var open = document.getElementById('exp');
open.style.display = 'block';
var border = document.getElementById('error-container');
border.style.height = '220px';
}
</script>
</head>
<body>
<div id="error-container">
<div id="acc-error">
<h1>An Error Has Occurred</h1>
<p>You have encountered a problem with your document management system.</p>
<p>Please contact your systems administrator.</p>
<p>For more information on the error click here: <img src="<?php echo $sRootUrl ?>/resources/graphics/info.gif" style="cursor: pointer;" onclick="Click()" />
<div id ="exp" style="display: none; "> <?php echo $error; ?></div>
</p>
</div>
</div>
</body>
</html>

183
dashboard.php Normal file
View File

@ -0,0 +1,183 @@
<?php
/**
* $Id$
*
* Main dashboard page -- This page is presented to the user after login.
* It contains a high level overview of the users subscriptions, checked out
* document, pending approval routing documents, etc.
*
* KnowledgeTree Community Edition
* Document Management Made Simple
* Copyright (C) 2008, 2009 KnowledgeTree Inc.
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 3 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*/
// main library routines and defaults
require_once('config/dmsDefaults.php');
require_once(KT_LIB_DIR . '/unitmanagement/Unit.inc');
require_once(KT_LIB_DIR . '/dashboard/dashletregistry.inc.php');
require_once(KT_LIB_DIR . '/dashboard/dashlet.inc.php');
require_once(KT_LIB_DIR . '/templating/templating.inc.php');
require_once(KT_LIB_DIR . '/templating/kt3template.inc.php');
require_once(KT_LIB_DIR . '/dispatcher.inc.php');
require_once(KT_LIB_DIR . '/dashboard/DashletDisables.inc.php');
$sectionName = 'dashboard';
class DashboardDispatcher extends KTStandardDispatcher {
var $notifications = array();
var $sHelpPage = 'ktcore/dashboard.html';
function DashboardDispatcher() {
$this->aBreadcrumbs = array(
array('action' => 'dashboard', 'name' => _kt('Dashboard')),
);
return parent::KTStandardDispatcher();
}
function do_main() {
$this->oPage->setShowPortlets(false);
// retrieve action items for the user.
// FIXME what is the userid?
$oDashletRegistry =& KTDashletRegistry::getSingleton();
$aDashlets = $oDashletRegistry->getDashlets($this->oUser);
$this->sSection = 'dashboard';
$this->oPage->setBreadcrumbDetails(_kt('Home'));
$this->oPage->title = _kt('Dashboard');
// simplistic improvement over the standard rendering: float half left
// and half right. +Involves no JS -can leave lots of white-space at the bottom.
$aDashletsLeft = array();
$aDashletsRight = array();
$i = 0;
foreach ($aDashlets as $oDashlet) {
if(strpos(strtolower($oDashlet->sTitle), 'welcome to knowledgetree') !== false && !empty($aDashletsLeft)){
array_unshift($aDashletsLeft, $oDashlet);
}else{
if ($i == 0) { $aDashletsLeft[] = $oDashlet; }
else {$aDashletsRight[] = $oDashlet; }
}
$i += 1;
$i %= 2;
}
// javascript - broken input focus
// using this code causes focus problems in the Go To Document dashlet:
// while the input can be focused, it requires clicking the text to the LEFT
// of the input, which is not expected nor obvious nor user friendly
/*
$this->oPage->requireJSResource('thirdpartyjs/extjs/adapter/yui/yui-utilities.js');
$this->oPage->requireJSResource('resources/js/DDList.js');
*/
// javascript - working input focus - restoring yui fixes the focus problem
// yahoo
$this->oPage->requireJSResource('thirdpartyjs/yui/yahoo/yahoo.js');
$this->oPage->requireJSResource('thirdpartyjs/yui/event/event.js');
$this->oPage->requireJSResource('thirdpartyjs/yui/dom/dom.js');
$this->oPage->requireJSResource('thirdpartyjs/yui/dragdrop/dragdrop.js');
$this->oPage->requireJSResource('resources/js/DDList.js');
$this->oUser->refreshDashboadState();
// dashboard
$sDashboardState = $this->oUser->getDashboardState();
$sDSJS = 'var savedState = ';
if($sDashboardState == null) {
$sDSJS .= 'false';
$sDashboardState = false;
} else {
$sDSJS .= $sDashboardState;
}
$sDSJS .= ';';
$this->oPage->requireJSStandalone($sDSJS);
$this->oPage->requireJSResource('resources/js/dashboard.js');
// render
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('kt3/dashboard');
$aTemplateData = array(
'context' => $this,
'dashlets_left' => $aDashletsLeft,
'dashlets_right' => $aDashletsRight,
);
return $oTemplate->render($aTemplateData);
}
// return some kind of ID for each dashlet
// currently uses the class name
function _getDashletId($oDashlet) {
return get_class($oDashlet);
}
// disable a dashlet.
// FIXME this very slightly violates the separation of concerns, but its not that flagrant.
function do_disableDashlet() {
$sNamespace = KTUtil::arrayGet($_REQUEST, 'fNamespace');
$iUserId = $this->oUser->getId();
if (empty($sNamespace)) {
$this->errorRedirectToMain('No dashlet specified.');
exit(0);
}
// do the "delete"
$this->startTransaction();
$aParams = array('sNamespace' => $sNamespace, 'iUserId' => $iUserId);
$oDD = KTDashletDisable::createFromArray($aParams);
if (PEAR::isError($oDD)) {
$this->errorRedirectToMain('Failed to disable the dashlet.');
}
$this->commitTransaction();
$this->successRedirectToMain('Dashlet disabled.');
}
function json_saveDashboardState() {
$sState = KTUtil::arrayGet($_REQUEST, 'state', array('error'=>true));
$this->oUser->setDashboardState($sState);
return array('success' => true);
}
}
$oDispatcher = new DashboardDispatcher();
$oDispatcher->dispatch();
?>

5
default.htm Normal file
View File

@ -0,0 +1,5 @@
<html>
<head>
<meta http-equiv="refresh" content="0; url=control.php"/>
</head>
</html>

105
dmsctl.bat Normal file
View File

@ -0,0 +1,105 @@
@echo off
rem KnowledgeTree Control Script
rem ============= SET ENVIRONMENT VARIABLES ==============
set INSTALL_PATH=%~dp0
cd ..
cd ..
set ZEND_PATH=%CD%
cd %INSTALL_PATH%
cd ..
set KTDMS_PATH=%CD%
cd %INSTALL_PATH%
set JAVA_BIN=%KTDMS_PATH%\jre\bin\java.exe
set SOFFICE_PATH=%KTDMS_PATH%\openoffice
set SOFFICE_BIN=%SOFFICE_PATH%\program\soffice.exe
set SOFFICE_PORT=8100
set OpenofficeServiceName=KTOpenoffice
set SchedulerServiceName=KTScheduler
set LuceneServiceName=KTLucene
set MySQLServiceName=MySQL_ZendServer51
rem ============= MAIN ==============
IF NOT ""%1"" == ""start"" IF NOT ""%1"" == ""path"" IF NOT ""%1"" == ""stop"" IF NOT ""%1"" == ""restart"" IF NOT ""%1"" == ""install"" IF NOT ""%1"" == ""uninstall"" goto help
goto %1
:help
echo USAGE:
echo.
echo dmsctl.bat ^<start^|stop^|restart^|install^|uninstall^> [servicename]
echo.
echo help - this screen
echo.
echo start - start the services
echo stop - stop the services
echo restart - restart the services
echo.
echo install - install the services
echo uninstall - uninstall the services
echo.
echo servicename - optional service name to start/stop only that service.
echo only mysql is supported for individual control at this time.
echo.
goto end
:start
IF ""%2"" == ""mysql"" goto start_mysql
echo Starting services
sc start %OpenofficeServiceName%
sc start %LuceneServiceName%
ping -n 7 127.0.0.1 > null
sc start %SchedulerServiceName%
goto end
:stop
IF ""%2"" == ""mysql"" goto stop_mysql
echo Stopping services
sc stop %LuceneServiceName%
sc stop %SchedulerServiceName%
sc stop %OpenofficeServiceName%
ping -n 7 127.0.0.1 > null
IF ""%1"" == ""restart"" goto start
goto end
:start_mysql
echo Starting MySQL Service
sc start %MySQLServiceName%
goto end
:stop_mysql
echo Stopping MySQL Service
sc stop %MySQLServiceName%
goto end
:restart
goto stop
:uninstall
echo Uninstalling services
sc delete %LuceneServiceName%
sc delete %SchedulerServiceName%
sc delete %OpenofficeServiceName%
goto end
:path
echo ZEND_PATH == %ZEND_PATH%
echo KTDMS_PATH == %KTDMS_PATH%
echo INSTALL_PATH == %INSTALL_PATH%
echo JAVA_BIN == %JAVA_BIN%
echo SOFFICE_PATH == %SOFFICE_PATH%
echo SOFFICE_BIN == %SOFFICE_BIN%
goto end
:install
echo Installing services
IF EXIST "%INSTALL_PATH%\var\bin\officeinstall.bat" call "%INSTALL_PATH%\var\bin\officeinstall.bat"
IF EXIST "%INSTALL_PATH%\var\bin\officeinstall.bat" echo The Open Office automatic service was successfully installed.
IF EXIST "%INSTALL_PATH%\var\bin\schedulerinstall.bat" call "%INSTALL_PATH%\var\bin\schedulerinstall.bat"
IF EXIST "%INSTALL_PATH%\var\bin\schedulerinstall.bat" echo The Scheduler automatic service was successfully installed.
IF EXIST "%INSTALL_PATH%\var\bin\luceneinstall.bat" call "%INSTALL_PATH%\var\bin\luceneinstall.bat"
goto end
:end

486
dmsctl.sh Normal file
View File

@ -0,0 +1,486 @@
#!/bin/bash
# Boot KnowledgeTree services
# chkconfig: 2345 55 25
# description: KnowledgeTree Services
#
# processname: ktdms
cd $(dirname $0)
HOSTNAME=`hostname`
RETVAL=0
PID=""
ERROR=0
SERVER=all
VDISPLAY="99"
INSTALL_PATH=`pwd`
JAVABIN=/usr/bin/java
ZEND_DIR=/usr/local/zend
# exits if the UID is not 0 [root]
check_root_privileges()
{
ID="id -u"
MYUID=`$ID 2> /dev/null`
if [ ! -z "$MYUID" ]; then
if [ $MYUID != 0 ]; then
echo "You need root privileges to run this script!";
exit 1
fi
else
echo "Could not detect UID";
exit 1
fi
}
if [ -f /etc/zce.rc ];then
. /etc/zce.rc
else
echo "/etc/zce.rc doesn't exist!"
exit 1;
fi
check_root_privileges
# OpenOffice
SOFFICEFILE=soffice
SOFFICE_PIDFILE=$INSTALL_PATH/var/log/soffice.bin.pid
SOFFICE_PID=""
SOFFICE_PORT="8100"
SOFFICEBIN=/usr/share/ktdms-office/ktdms-office/openoffice/program/soffice
SOFFICE="$SOFFICEBIN -nofirststartwizard -nologo -headless -accept=socket,host=127.0.0.1,port=$SOFFICE_PORT;urp;StarOffice.ServiceManager"
SOFFICE_STATUS=""
# Lucene
LUCENE_PIDFILE=$INSTALL_PATH/var/log/lucene.pid
LUCENE_PID=""
LUCENE="$JAVABIN -Xms512M -Xmx512M -jar ktlucene.jar"
LUCENE_STATUS=""
# Scheduler
SCHEDULER_PATH="$INSTALL_PATH/bin/"
SCHEDULER_PIDFILE=$INSTALL_PATH/var/log/scheduler.pid
SCHEDULER_PID=""
SCHEDULERBIN="$INSTALL_PATH/var/bin/schedulerTask.sh"
SCHEDULER="$SCHEDULERBIN"
SCHEDULER_STATUS=""
# MySQL: modify if needed for your installation
MYSQL_PATH=/etc/init.d
MYSQLBIN=mysql
MYSQL_PIDFILE=/var/run/mysqld/mysqld.pid
MYSQL_PID=""
MYSQL_STATUS=""
get_pid() {
PID=""
PIDFILE=$1
# check for pidfile
if [ -f $PIDFILE ] ; then
exec 6<&0
exec < $PIDFILE
read pid
PID=$pid
exec 0<&6 6<&-
fi
}
get_soffice_pid() {
get_pid $SOFFICE_PIDFILE
if [ ! $PID ]; then
return
fi
if [ $PID -gt 0 ]; then
SOFFICE_PID=$PID
fi
}
get_lucene_pid() {
get_pid $LUCENE_PIDFILE
if [ ! $PID ]; then
return
fi
if [ $PID -gt 0 ]; then
LUCENE_PID=$PID
fi
}
get_scheduler_pid() {
get_pid $SCHEDULER_PIDFILE
if [ ! $PID ]; then
return
fi
if [ $PID -gt 0 ]; then
SCHEDULER_PID=$PID
fi
}
get_mysql_pid() {
get_pid $MYSQL_PIDFILE
if [ ! $PID ]; then
return
fi
if [ $PID -gt 0 ]; then
MYSQL_PID=$PID
fi
}
is_service_running() {
PID=$1
if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
RUNNING=1
else
RUNNING=0
fi
return $RUNNING
}
is_soffice_running() {
get_soffice_pid
is_service_running $SOFFICE_PID
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
SOFFICE_STATUS="openoffice not running"
else
SOFFICE_STATUS="openoffice already running"
fi
return $RUNNING
}
is_lucene_running() {
get_lucene_pid
is_service_running $LUCENE_PID
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
LUCENE_STATUS="lucene not running"
else
LUCENE_STATUS="lucene already running"
fi
return $RUNNING
}
is_scheduler_running() {
get_scheduler_pid
is_service_running $SCHEDULER_PID
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
SCHEDULER_STATUS="scheduler not running"
else
SCHEDULER_STATUS="scheduler already running"
fi
return $RUNNING
}
is_mysql_running() {
get_mysql_pid
is_service_running $MYSQL_PID
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
MYSQL_STATUS="mysql not running"
else
MYSQL_STATUS="mysql already running"
fi
return $RUNNING
}
start_soffice() {
is_soffice_running
RUNNING=$?
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: openoffice (pid $SOFFICE_PID) already running"
else
if [ -x $SOFFICEBIN ]; then
nohup $SOFFICE &> $INSTALL_PATH/var/log/dmsctl.log &
if [ $? -eq 0 ]; then
echo "$0 $ARG: openoffice started at port $SOFFICE_PORT"
ps ax | grep $SOFFICEBIN | awk {'print $1'} > $SOFFICE_PIDFILE
sleep 2
else
echo "$0 $ARG: openoffice could not be started"
ERROR=3
fi
else
echo "$0 $ARG: path to openoffice binary ($SOFFICEBIN) could not be found"
ERROR=3
fi
fi
}
stop_soffice() {
NO_EXIT_ON_ERROR=$1
is_soffice_running
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
echo "$0 $ARG: $SOFFICE_STATUS"
if [ "x$NO_EXIT_ON_ERROR" != "xno_exit" ]; then
exit
else
return
fi
fi
get_soffice_pid
if killall $SOFFICEFILE; then
echo "$0 $ARG: openoffice stopped"
else
echo "$0 $ARG: openoffice could not be stopped"
ERROR=4
fi
}
start_lucene() {
is_lucene_running
RUNNING=$?
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: lucene (pid $LUCENE_PID) already running"
else
cd $INSTALL_PATH/bin/luceneserver
nohup $LUCENE &> $INSTALL_PATH/var/log/dmsctl.log &
if [ $? -eq 0 ]; then
echo "$0 $ARG: lucene started"
ps ax | grep ktlucene.jar | awk {'print $1'} > $LUCENE_PIDFILE
sleep 2
else
echo "$0 $ARG: lucene could not be started"
ERROR=3
fi
cd $INSTALL_PATH
fi
}
stop_lucene() {
NO_EXIT_ON_ERROR=$1
is_lucene_running
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
echo "$0 $ARG: $LUCENE_STATUS"
if [ "x$NO_EXIT_ON_ERROR" != "xno_exit" ]; then
exit
else
return
fi
fi
get_lucene_pid
cd $INSTALL_PATH/search2/indexing/bin
$ZEND_DIR/bin/php shutdown.php positive &> $INSTALL_PATH/var/log/dmsctl.log
exit=$?
sleep 5
if [ $exit -eq 0 ]; then
echo "$0 $ARG: lucene stopped"
else
echo "$0 $ARG: lucene could not be stopped"
ERROR=4
fi
}
start_scheduler() {
is_scheduler_running
RUNNING=$?
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: scheduler (pid $SCHEDULER_PID) already running"
else
cd $SCHEDULER_PATH
nohup $SCHEDULER &> $INSTALL_PATH/var/log/dmsctl.log &
if [ $? -eq 0 ]; then
echo "$0 $ARG: scheduler started"
ps ax | grep $SCHEDULERBIN | awk {'print $1'} > $SCHEDULER_PIDFILE
sleep 2
else
echo "$0 $ARG: scheduler could not be started"
ERROR=3
fi
fi
}
stop_scheduler() {
NO_EXIT_ON_ERROR=$1
is_scheduler_running
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
echo "$0 $ARG: $SCHEDULER_STATUS"
if [ "x$NO_EXIT_ON_ERROR" != "xno_exit" ]; then
exit
else
return
fi
fi
get_scheduler_pid
if kill $SCHEDULER_PID ; then
echo "$0 $ARG: scheduler stopped"
else
echo "$0 $ARG: scheduler could not be stopped"
ERROR=4
fi
}
start_mysql() {
is_mysql_running
RUNNING=$?
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: mysql (pid $MYSQL_PID) already running"
else
nohup $MYSQL_PATH/$MYSQLBIN start &> $INSTALL_PATH/var/log/dmsctl.log &
if [ $? -eq 0 ]; then
echo "$0 $ARG: mysql started"
ps ax | grep $MYSQLBIN | awk {'print $1'} > $MYSQL_PIDFILE
sleep 2
else
echo "$0 $ARG: mysql could not be started"
ERROR=3
fi
fi
}
stop_mysql() {
NO_EXIT_ON_ERROR=$1
is_mysql_running
RUNNING=$?
if [ $RUNNING -eq 0 ]; then
echo "$0 $ARG: $MYSQL_STATUS"
if [ "x$NO_EXIT_ON_ERROR" != "xno_exit" ]; then
exit
else
return
fi
fi
get_mysql_pid
if kill $MYSQL_PID ; then
echo "$0 $ARG: mysql stopped"
else
echo "$0 $ARG: mysql could not be stopped"
ERROR=4
fi
}
help() {
echo "usage: $0 help"
echo " $0 (start|stop|restart)"
echo " $0 (start|stop|restart) scheduler"
echo " $0 (start|stop|restart) soffice"
echo " $0 (start|stop|restart) lucene"
echo " $0 (start|stop|restart) mysql"
cat <<EOF
help - this screen
start - start the service(s)
stop - stop the service(s)
restart - restart or start the service(s)
EOF
exit 0
}
noserver() {
echo -e "ERROR: $1 is not a valid server. Please, select 'scheduler', 'soffice' or 'lucene'\n"
help
}
firstrun() {
echo "We running for the first time, FIX ZEND"
if grep --quiet LD_LIBRARAY_PATH /etc/zce.rc ; then
echo "Nothing to be done ... maybe"
else
echo "PATH=/usr/local/zend/bin:$PATH" >> /etc/zce.rc
if [ -z $LD_LIBRARY_PATH ] ; then
echo "LD_LIBRARY_PATH=$ZEND_DIR/lib" >> /etc/zce.rc
else
echo "LD_LIBRARY_PATH=$ZEND_DIR/lib:$LD_LIBRARY_PATH" >> /etc/zce.rc
fi
fi
touch $INSTALL_PATH/var/bin/dmsinit.lock
$ZEND_DIR/bin/zendctl.sh restart
}
[ $# -lt 1 ] && help
if [ ! -z ${2} ]; then
[ "${2}" != "mysql" ] && [ "${2}" != "apache" ] && [ "${2}" != "agent" ] && [ "${2}" != "scheduler" ] && [ "${2}" != "soffice" ] && [ "${2}" != "lucene" ] && noserver $2
SERVER=$2
fi
if [ "x$3" != "x" ]; then
MYSQL_PASSWORD=$3
fi
# Are we running for first time
if [ -e "/usr/share/knowledgetree/var/bin/dmsinit.lock" ]
then
echo "";
else
if grep --quiet LD_LIBRARAY_PATH /etc/zce.rc ; then
echo "Nothing to be done ... maybe"
else
echo "PATH=/usr/local/zend/bin:$PATH" >> /etc/zce.rc
if [ -z $LD_LIBRARY_PATH ] ; then
echo "LD_LIBRARY_PATH=$ZEND_DIR/lib" >> /etc/zce.rc
else
echo "LD_LIBRARY_PATH=$ZEND_DIR/lib:$LD_LIBRARY_PATH" >> /etc/zce.rc
fi
fi
touch $INSTALL_PATH/var/bin/dmsinit.lock
$ZEND_DIR/bin/zendctl.sh restart
fi
#if [ "ls /usr/share/knowledgetree/var/bin/dmsinit.lock" != "" ] ; then
# echo "No lock"
#e#lse
# echo "lock"
#f#i
#if [ -f "/usr/share/knowledgetree/var/bin/dmsinit.lock"] ; then
# firstrun
#else
# echo 'safd';
# exit 1;
#fi
#[[ -e $INSTALL_PATH/var/bin/dmsinit.lock ]] || firstrun
case $1 in
help) help
;;
start)
if [ "${SERVER}" != "all" ]; then
start_${2}
else
start_soffice
start_lucene
start_scheduler
#[[ -e $ZEND_DIR/bin/zendctl.sh ]] && $ZEND_DIR/bin/zendctl.sh restart
fi
;;
stop) if [ "${SERVER}" != "all" ]; then
stop_${2}
else
stop_scheduler "no_exit"
stop_lucene "no_exit"
stop_soffice "no_exit"
fi
;;
restart) if [ "${SERVER}" != "all" ]; then
stop_${2} "no_exit"
sleep 2
start_${2}
else
stop_scheduler "no_exit"
stop_lucene "no_exit"
stop_soffice "no_exit"
start_soffice
start_lucene
start_scheduler
fi
;;
esac
exit $ERROR

739
dmsctl.vbs Normal file
View File

@ -0,0 +1,739 @@
'
' KnowledgeTree
'
'
'
' Service Name Consts
Const KTOFFICE = "KTOpenoffice"
Const KTSCHEDULER = "KTScheduler"
Const KTLUCENE = "KTLucene"
' Service Control Manager Error Code Consts
Const SVC_SUCCESS = 0 ' Success
Const SVC_NOT_SUPPORTED = 1 ' Not Supported
Const SVC_ACCESS_DENIED = 2 ' Access Denied
Const SVC_DEPENDENT_SERVICES_RUNNING = 3 ' Dependent Services Running
Const SVC_INVALID_SERVICE_CONTROL = 4 ' Invalid Service Control
Const SVC_SERVICE_CANNOT_ACCEPT_CONTROL = 5 ' Service Cannot Accept Control
Const SVC_SERVICE_NOT_ACTIVE = 6 ' Service Not Active
Const SVC_SERVICE_REQUEST_TIMEOUT = 7 ' Service Request Timeout
Const SVC_UNKNOWN_FAILURE = 8 ' Unknown Failure
Const SVC_PATH_NOT_FOUND = 9 ' Path Not Found
Const SVC_SERVICE_ALREADY_RUNNING = 10 ' Service Already Running
Const SVC_SERVICE_DATABASE_LOCKED = 11 ' Service Database Locked
Const SVC_SERVICE_DEPENDENCY_DELETED = 12 ' Service Dependency Deleted
Const SVC_SERVICE_DEPENDENCY_FAILURE = 13 ' Service Dependency Failure
Const SVC_SERVICE_DISABLED = 14 ' Service Disabled
Const SVC_SERVICE_LOGON_FAILURE = 15 ' Service Logon Failure
Const SVC_SERVICE_MARKED_FOR_DELETION = 16 ' Service Marked For Deletion
Const SVC_SERVICES_NO_THREAD = 17 ' Service No Thread
Const SVC_STATUS_CIRCULAR_DEPENDENCY = 18 ' Status Circular Dependency
Const SVC_STATUS_DUPLICATE_NAME = 19 ' Status Duplicate Name
Const SVC_INVALID_NAME = 20 ' Status Invalid Name
Const SVC_STATUS_INVALID_PARAMETER = 21 ' Status Invalid Parameter
Const SVC_INVALID_SERVICES_ACCOUNT = 22 ' Status Invalid Service Account
Const SVC_STATUS_SERVICE_EXISTS = 23 ' Status Service Exists
Const SVC_SERVICE_ALREADY_PAUSED = 24 ' Service Already Paused
Dim strComputer, currOS, currDir, doRunAs, lastErrorCode
' Detecting the current directory
Set oFso = CreateObject("Scripting.FileSystemObject")
currDir = oFso.GetParentFolderName(Wscript.ScriptFullName)
strComputer = "."
currOS = ""
doRunAs = false
' Detecting the current OS
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
currOS = objOperatingSystem.Caption & " " & objOperatingSystem.Version
currOS = trim(currOS)
Next
Public Function isWindowsVista()
isWindowsVista = false
If left(currOS, 19) = "Microsoft Windows Vista" Then
isWindowsVista = TRUE
End If
End Function
Public Function isWindows7()
isWindows7 = false
If left(currOS, 19) = "Microsoft Windows 7" Then
isWindows7 = TRUE
End If
End Function
Public Function isWindows2008()
isWindows2008 = false
If mid(currOS, 27, 42) = "2008 Enterprise" Then
isWindows2008 = TRUE
End If
End Function
' Will call this further down when the individual services need starting
If doRunAs = TRUE Then
'runAs "C:\Program Files (x86)\Zend\ktdms\knowledgetree", "dmsctl_install.bat"
End If
Public Sub runAs(ByVal strFolder, ByVal strFile)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strFolder)
Set objFolderItem = objFolder.ParseName(strFile)
objFolderItem.InvokeVerb "runas"
End Sub
dim objArgs, errMsg, result, strUsage, isSuccess
strUsage = "USAGE:" &_
"dmsctl.vbs <start|stop|restart|install|uninstall> [servicename]" & vbNewLine &_
vbNewLine &_
"help - this screen " & vbNewLine &_
"start - start the services" & vbNewLine &_
"stop - stop the services" & vbNewLine &_
"restart - restart the services" & vbNewLine &_
"install - install the services" & vbNewLine &_
"uninstall - uninstall the services" & vbNewLine &_
vbNewLine &_
"servicename - optional service name to start/stop only that service." & vbNewLine &_
" only mysql is supported for individual control at this time."
Set objArgs = WScript.Arguments
If (objArgs.count < 1) Then
Wscript.Echo strUsage
Else
Select Case objArgs.Item(0)
Case "install"
isSuccess = TRUE ' Track if anything went wrong
' Installing KTOffice
result = exec(currDir & "\var\bin\officeinstall.bat")
'Install Failed
If result = 0 Then
isSuccess = false
writeLog "The " & KTOFFICE & " KnowledgeTree service could not be installed."
Else
writeLog "The " & KTOFFICE & " KnowledgeTree service was successfully installed."
End If
' Installing KTScheduler
result = exec(currDir & "\var\bin\schedulerinstall.bat")
'Install Failed
If result = 0 Then
isSuccess = false
writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be installed."
Else
writeLog "The " & KTSCHEDULER & " KnowledgeTree service was successfully installed."
End If
' Installing KTLucene
result = exec(currDir & "\var\bin\luceneinstall.bat")
'Install Failed
If result = 0 Then
isSuccess = false
writeLog "The " & KTLUCENE & " KnowledgeTree service could not be installed."
Else
writeLog "The " & KTLUCENE & " KnowledgeTree service was successfully installed."
End If
If (isSuccess) Then
Wscript.Echo "The KnowledgeTree services were successfully installed"
Else
Wscript.Echo "There were errors installing the KnowledgeTree services please see the log for details ('knowledgetree/var/log/dmsctl.log')"
End If
Case "start"
If (objArgs.count > 1) Then
Select Case objArgs.Item(1)
Case "soffice"
isSuccess = TRUE
svcName = KTOFFICE
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = FALSE
writeLog "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTOFFICE & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTOFFICE
Else
writeLog KTOFFICE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service was successfully started"
Else
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "scheduler"
isSuccess = TRUE
svcName = KTSCHEDULER
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = FALSE
writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTSCHEDULER & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTSCHEDULER
Else
writeLog KTSCHEDULER & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service was successfully started"
Else
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "lucene"
isSuccess = TRUE
svcName = KTLUCENE
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
writeLog "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTLUCENE & " KnowledgeTree service was successfully started"
End If
writeLog "Successfully started " & KTLUCENE
Else
writeLog KTLUCENE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service was successfully started"
Else
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
End Select
Else
isSuccess = TRUE
svcName = KTOFFICE
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
writeLog "Couldn't start. " & KTOFFICE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully started " & KTOFFICE
End If
Else
writeLog KTOFFICE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTSCHEDULER
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
writeLog "Couldn't start " & KTSCHEDULER & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully started " & KTSCHEDULER
End If
Else
writeLog KTSCHEDULER & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTLUCENE
If (NOT isServiceStarted(svcName)) Then
If (NOT startService(svcName)) Then
isSuccess = false
writeLog "Couldn't start " & KTLUCENE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully started " & KTLUCENE
End If
Else
writeLog KTLUCENE & " already started. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The KnowledgeTree services were successfully started"
Else
Wscript.Echo "There were errors starting the KnowledgeTree services please see the log for details ('knowledgetree/var/log/dmsctl.log')"
End If
End If
Case "stop"
If (objArgs.count > 1) Then
Select Case objArgs.Item(1)
Case "soffice"
isSuccess = TRUE
svcName = KTOFFICE
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTOFFICE & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTOFFICE
Else
writeLog KTOFFICE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service was successfully stopped"
Else
Wscript.Echo "The " & KTOFFICE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "scheduler"
isSuccess = TRUE
svcName = KTSCHEDULER
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTSCHEDULER & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTSCHEDULER
Else
writeLog KTSCHEDULER & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service was successfully stopped"
Else
Wscript.Echo "The " & KTSCHEDULER & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
Case "lucene"
isSuccess = TRUE
svcName = KTLUCENE
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "The " & KTLUCENE & " KnowledgeTree service was successfully stopped"
End If
writeLog "Successfully stopped " & KTLUCENE
Else
writeLog KTLUCENE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service was successfully stopped"
Else
Wscript.Echo "The " & KTLUCENE & " KnowledgeTree service could not be stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
End Select
Else
'Stopping all the services
isSuccess = TRUE
svcName = KTOFFICE
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "Couldn't stop." & KTOFFICE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully stopped " & KTOFFICE
End If
Else
writeLog KTOFFICE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTSCHEDULER
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "Couldn't stop." & KTSCHEDULER & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully stopped " & KTSCHEDULER
End If
Else
writeLog KTSCHEDULER & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
svcName = KTLUCENE
If (isServiceStarted(svcName)) Then
If (NOT stopService(svcName)) Then
isSuccess = false
writeLog "Couldn't stop." & KTLUCENE & " Result Code: " & getServiceErrorMessage(lastErrorCode)
Else
writeLog "Successfully stopped " & KTLUCENE
End If
Else
writeLog KTLUCENE & " already stopped. Result Code: " & getServiceErrorMessage(lastErrorCode)
End If
If (isSuccess) Then
Wscript.Echo "The KnowledgeTree services were successfully stopped"
Else
Wscript.Echo "There were errors sopping the KnowledgeTree services please see the log for details ('knowledgetree/var/log/dmsctl.log')"
End If
End If
Case "uninstall"
isSuccess = TRUE
svcName = KTOFFICE
If (NOT uninstallService(svcName)) Then
isSuccess = false
writeLog "The KnowledgeTree KTOffice service could not be uninstalled"
End If
svcName = KTSCHEDULER
If (NOT uninstallService(svcName)) Then
isSuccess = false
writeLog "The KnowledgeTree KTScheduler service could not be uninstalled"
End If
svcName = KTLUCENE
If (NOT uninstallService(svcName)) Then
isSuccess = false
writeLog "The KnowledgeTree KTLucene service could not be uninstalled"
End If
If (isSuccess) Then
Wscript.Echo "The KnowledgeTree services were uninstalled"
Else
Wscript.Echo "There were errors uninstalling the KnowledgeTree services please see the log for details ('knowledgetree/var/log/dmsctl.log')"
End If
Case "uninstall_old" 'Depricated : This method prevents verbose error logging, using WMI to uninstall instead
isSuccess = TRUE ' Track if anything went wrong
' Stopping Then FALSE
'svcName = KTOFFICE
'If (isServiceStarted(svcName)) Then
' If (NOT stopService(svcName)) Then
' isSuccess = false
' End If
'End If
' FALSE KTOffice
result = exec("sc delete " & KTOFFICE)
'Uninstall Failed
If result = 0 Then
isSuccess = false
writeLog "The KnowledgeTree KTOffice service could not be uninstalled"
End If
' Stopping Then FALSE
'svcName = KTSCHEDULER
'If (isServiceStarted(svcName)) Then
' If (NOT stopService(svcName)) Then
' isSuccess = false
' End If
'End If
' FALSE KTScheduler
result = exec("sc delete " & KTSCHEDULER)
'Uninstall Failed
If result = 0 Then
isSuccess = false
writeLog "The KnowledgeTree KTScheduler service could not be uninstalled"
End If
' Stopping Then FALSE
'svcName = KTLUCENE
'If (isServiceStarted(svcName)) Then
' If (NOT stopService(svcName)) Then
' isSuccess = FALSE
' End If
'End If
' FALSE KTLucene
result = exec("sc delete " & KTLUCENE)
'Uninstall Failed
If result = 0 Then
isSuccess = FALSE
writeLog "The KnowledgeTree KTLucene service could not be uninstalled"
End If
If (isSuccess) Then
Wscript.Echo "The KnowledgeTree services were uninstalled"
Else
Wscript.Echo "There were errors uninstalling the KnowledgeTree services please see the log for details ('knowledgetree/var/log/dmsctl.log')"
End If
Case Else
Wscript.Echo strUsage
End Select
End If
' Method to check if a service is installed
Public Function isServiceInstalled(ByVal svcName)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Obtain an instance of the the class
' using a key property value.
isServiceInstalled = FALSE
svcQry = "SELECT * from Win32_Service"
Set objOutParams = objWMIService.ExecQuery(svcQry)
For Each objSvc in objOutParams
Select Case objSvc.Name
Case svcName
isServiceInstalled = TRUE
End Select
Next
If (Not isServiceInstalled) Then
lastErrorCode = SVC_INVALID_NAME
End If
End Function
' Method to interrogate a service
Public Function isServiceStarted(ByVal svcName)
If (NOT isServiceInstalled( svcName )) Then
isServiceStarted = FALSE
Exit Function
End If
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_Service.Name='" & svcName & "'")
' no InParameters to define
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_Service.Name='" & svcName & "'", "InterrogateService")
lastErrorCode = objOutParams.ReturnValue
If (objOutParams.ReturnValue = SVC_SERVICE_NOT_ACTIVE) Then
isServiceStarted = FALSE
Else
isServiceStarted = TRUE
End If
end Function
' Method to start a service
Public Function startService(ByVal svcName)
If (NOT isServiceInstalled( svcName )) Then
writeLog "The KnowledgeTree " & svcName & " service could not be started because it isn't installed. Run 'dmsctl.vbs install' to correct."
startService = FALSE
Exit Function
End If
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_Service.Name='" & svcName &"'")
' no InParameters to define
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_Service.Name='" & svcName & "'", "StartService")
lastErrorCode = objOutParams.ReturnValue
If (objOutParams.ReturnValue = SVC_SUCCESS) Then
startService = TRUE
Else
startService = FALSE
End If
End Function
' Method to stop a service
Public Function stopService(ByVal svcName)
If (NOT isServiceInstalled( svcName )) Then
writeLog "The KnowledgeTree " & svcName & " service could not be stopped because it isn't installed. Run 'dmsctl.vbs install' to correct."
stopService = FALSE
Exit Function
End If
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_Service.Name='" & svcName &"'")
' no InParameters to define
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_Service.Name='" & svcName & "'", "StopService")
lastErrorCode = objOutParams.ReturnValue
If (objOutParams.ReturnValue = SVC_SUCCESS) Then
stopService = TRUE
Else
stopService = FALSE
End If
End Function
' Method to uninstall a service
Public Function uninstallService(ByVal svcName)
If (NOT isServiceInstalled( svcName )) Then
uninstallService = TRUE ' Service already uninstalled so return TRUE
Exit Function
End If
wasStopped = TRUE
If (NOT stopService(svcName)) Then
wasStopped = FALSE
End If
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_Service.Name='" & svcName & "'")
' no InParameters to define
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_Service.Name='" & svcName & "'", "Delete")
lastErrorCode = objOutParams.ReturnValue
If (objOutParams.ReturnValue = SVC_SUCCESS) Then
uninstallService = TRUE
Else
uninstallService = FALSE
' Extra Event logging to assist the Administrator
If (wasStopped) Then
writeLog "The KnowledgeTree " & svcName & " service could not be uninstalled because it could not be stopped. Stop this service manually before uninstalling."
uninstallService = FALSE ' Must be stop service before it can be uninstalled
End If
End If
End Function
' Execute a command
Public Function exec(ByVal cmd)
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec(cmd)
Do While oExec.Status = 0
WScript.Sleep 100
Loop
exec = oExec.Status
End Function
Public Sub createCustomEventLog(ByVal strName)
Const NO_VALUE = Empty
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite _
"HKLM\System\CurrentControlSet\Services\EventLog\" & strName & "\", NO_VALUE
End Sub
' Event logging only works on Server 2003, 2000 and XP
Public Sub logEvent(ByVal strMessage)
' Disabled until Windows Vista detection has been tested.
'If (NOT isWindowsVista() AND NOT isWindows7() AND NOT isWindows2008()) Then
' Const EVENT_SUCCESS = 0
' Set objShell = Wscript.CreateObject("Wscript.Shell")
' objShell.LogEvent EVENT_SUCCESS, strMessage
'End If
End Sub
' Event logging only works on Server 2003, 2000 and XP
Public Sub writeLog(ByVal strMessage)
Set objFSO = CreateObject("Scripting.FileSystemObject")
ForAppending = 8
Set objTextFile = objFSO.OpenTextFile (currDir & "\var\log\dmsctl.log", ForAppending, True)
objTextFile.WriteLine strMessage
objTextFile.Close
End Sub
Public Function getServiceErrorMessage(ByVal errCode)
Select Case errCode
Case SVC_SUCCESS
getServiceErrorMessage = "Success"
Case SVC_NOT_SUPPORTED
getServiceErrorMessage = "Not Supported"
Case SVC_ACCESS_DENIED
getServiceErrorMessage = "Access Denied"
Case SVC_DEPENDENT_SERVICES_RUNNING
getServiceErrorMessage = "Dependent Services Running"
Case SVC_INVALID_SERVICE_CONTROL
getServiceErrorMessage = "Invalid Service Control"
Case SVC_SERVICE_CANNOT_ACCEPT_CONTROL
getServiceErrorMessage = "Service Cannot Accept Control"
Case SVC_SERVICE_NOT_ACTIVE
getServiceErrorMessage = "Service Not Active"
Case SVC_SERVICE_REQUEST_TIMEOUT
getServiceErrorMessage = "Service Request Timeout"
Case SVC_UNKNOWN_FAILURE
getServiceErrorMessage = "Unknown Failure"
Case SVC_PATH_NOT_FOUND
getServiceErrorMessage = "Path Not Found"
Case SVC_SERVICE_ALREADY_RUNNING
getServiceErrorMessage = "Service Already Running"
Case SVC_SERVICE_DATABASE_LOCKED
getServiceErrorMessage = "Service Database Locked"
Case SVC_SERVICE_DEPENDENCY_DELETED
getServiceErrorMessage = "Service Dependency Deleted"
Case SVC_SERVICE_DEPENDENCY_FAILURE
getServiceErrorMessage = "Service Dependency Failure"
Case SVC_SERVICE_DISABLED
getServiceErrorMessage = "Service Disabled"
Case SVC_SERVICE_LOGON_FAILURE
getServiceErrorMessage = "Service Logon Failure"
Case SVC_SERVICE_MARKED_FOR_DELETION
getServiceErrorMessage = "Service Marked For Deletion"
Case SVC_SERVICES_NO_THREAD
getServiceErrorMessage = "Service No Thread"
Case SVC_STATUS_CIRCULAR_DEPENDENCY
getServiceErrorMessage = "Status Circular Dependency"
Case SVC_STATUS_DUPLICATE_NAME
getServiceErrorMessage = "Status Duplicate Name"
Case SVC_INVALID_NAME
getServiceErrorMessage = "Status Invalid Name"
Case SVC_STATUS_INVALID_PARAMETER
getServiceErrorMessage = "Status Invalid Parameter"
Case SVC_INVALID_SERVICES_ACCOUNT
getServiceErrorMessage = "Status Invalid Service Account"
Case SVC_STATUS_SERVICE_EXISTS
getServiceErrorMessage = "Status Service Exists"
Case SVC_SERVICE_ALREADY_PAUSED
getServiceErrorMessage = "Service Already Paused"
Case Else
getServiceErrorMessage = "Unknown Failure"
End Select
End Function

3
dmsctl_install.bat Normal file
View File

@ -0,0 +1,3 @@
rem KnowledgeTree UAC Run installer as Administrator for Windows 7 and Vista
@echo off
call dmsctl.bat install

Some files were not shown because too many files have changed in this diff Show More