Commit c79caf06a29896ee9b5cfd1f04b0deead30174c9
1 parent
22187144
Story ID:1166880:Updated Upgrade Refactor
Committed by: Jarrett Jordaan Reviewed by: Paul Barrett
Showing
13 changed files
with
1008 additions
and
55 deletions
setup/upgrade/lib/UpgradeItems.inc.php
0 → 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * $Id$ | |
| 4 | + * | |
| 5 | + * KnowledgeTree Community Edition | |
| 6 | + * Document Management Made Simple | |
| 7 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | + * | |
| 10 | + * This program is free software; you can redistribute it and/or modify it under | |
| 11 | + * the terms of the GNU General Public License version 3 as published by the | |
| 12 | + * Free Software Foundation. | |
| 13 | + * | |
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | + * details. | |
| 18 | + * | |
| 19 | + * You should have received a copy of the GNU General Public License | |
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | + * | |
| 25 | + * The interactive user interfaces in modified source and object code versions | |
| 26 | + * of this program must display Appropriate Legal Notices, as required under | |
| 27 | + * Section 5 of the GNU General Public License version 3. | |
| 28 | + * | |
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | + * Contributor( s): ______________________________________ | |
| 36 | + * | |
| 37 | + */ | |
| 38 | + | |
| 39 | +// {{{ Format of the descriptor | |
| 40 | +/** | |
| 41 | + * Format of the descriptor | |
| 42 | + * | |
| 43 | + * type*version*phase*simple description for uniqueness | |
| 44 | + * | |
| 45 | + * type is: sql, function, subupgrade, upgrade | |
| 46 | + * version is: 1.2.4, 2.0.0rc5 | |
| 47 | + * phase is: 0, 1, 0pre. Phase is _only_ evaluated by describeUpgrades. | |
| 48 | + * description is: anything, unique in terms of version and type. | |
| 49 | + */ | |
| 50 | +// }}} | |
| 51 | + | |
| 52 | +//require_once(KT_LIB_DIR . '/upgrades/UpgradeFunctions.inc.php'); | |
| 53 | +require_once('sqlfile.inc.php'); | |
| 54 | +require_once('datetime.inc'); | |
| 55 | + | |
| 56 | +// {{{ Upgrade_Already_Applied | |
| 57 | +class Upgrade_Already_Applied { //extends PEAR_Error { | |
| 58 | + function Upgrade_Already_Applied($oUpgradeItem) { | |
| 59 | + $this->oUpgradeItem = $oUpgradeItem; | |
| 60 | + } | |
| 61 | +} | |
| 62 | +// }}} | |
| 63 | + | |
| 64 | +class UpgradeItem extends InstallUtil { | |
| 65 | + var $type = ""; | |
| 66 | + var $name; | |
| 67 | + var $version; | |
| 68 | + var $description; | |
| 69 | + var $phase; | |
| 70 | + var $priority = 0; | |
| 71 | + var $parent; | |
| 72 | + var $date; | |
| 73 | + var $result; | |
| 74 | + | |
| 75 | + function UpgradeItem($name, $version, $description = null, $phase = 0, $priority = 0) { | |
| 76 | + $this->name = $name; | |
| 77 | + $this->version = $version; | |
| 78 | + if (is_null($description)) { | |
| 79 | + $description = $this->type . " upgrade to version " . $version . " phase " . $phase; | |
| 80 | + } | |
| 81 | + $this->description = $description; | |
| 82 | + $this->phase = $phase; | |
| 83 | + $this->priority = $priority; | |
| 84 | + parent::__construct(); | |
| 85 | +// print_r($this); | |
| 86 | +// die; | |
| 87 | + } | |
| 88 | + | |
| 89 | + function setParent($parent) { | |
| 90 | + $this->parent = $parent; | |
| 91 | + } | |
| 92 | + function setDate($date) { | |
| 93 | + $this->date = $date; | |
| 94 | + } | |
| 95 | + | |
| 96 | + function getDescriptor() { | |
| 97 | + return join("*", array($this->type, $this->version, $this->phase, $this->name)); | |
| 98 | + } | |
| 99 | + | |
| 100 | + function getDescription() { | |
| 101 | + return $this->description; | |
| 102 | + } | |
| 103 | + | |
| 104 | + function getVersion() { | |
| 105 | + return $this->version; | |
| 106 | + } | |
| 107 | + | |
| 108 | + function getPhase() { | |
| 109 | + return $this->phase; | |
| 110 | + } | |
| 111 | + | |
| 112 | + function getPriority() { | |
| 113 | + return $this->priority; | |
| 114 | + } | |
| 115 | + | |
| 116 | + function getType() { | |
| 117 | + return $this->type; | |
| 118 | + } | |
| 119 | + | |
| 120 | + function runDBQuery($query) { | |
| 121 | + require_once("../wizard/steps/configuration.php"); // configuration to read the ini path | |
| 122 | + $wizConfigHandler = new configuration(); | |
| 123 | + $configPath = $wizConfigHandler->readConfigPathIni(); | |
| 124 | + if(!is_object($this->iniUtilities)) { | |
| 125 | + parent::__construct(); | |
| 126 | + } | |
| 127 | + $this->iniUtilities->load($configPath); | |
| 128 | + $dconf = $this->iniUtilities->getSection('db'); | |
| 129 | + $this->dbUtilities->load($dconf['dbHost'], '', $dconf['dbUser'], $dconf['dbPass'], $dconf['dbName']); | |
| 130 | + $result = $this->dbUtilities->query($query); | |
| 131 | + $assArr = $this->dbUtilities->fetchAssoc($result); | |
| 132 | + return $assArr; | |
| 133 | + } | |
| 134 | + | |
| 135 | + function _upgradeTableInstalled() { | |
| 136 | + $query = "SELECT COUNT(id) FROM upgrades"; | |
| 137 | + $res = $this->runDBQuery($query); | |
| 138 | + if($res) { | |
| 139 | + return true; | |
| 140 | + } | |
| 141 | + return false; | |
| 142 | + } | |
| 143 | + | |
| 144 | + function isAlreadyApplied() { | |
| 145 | + if (!$this->_upgradeTableInstalled()) { | |
| 146 | + return false; | |
| 147 | + } | |
| 148 | + $query = "SELECT id FROM upgrades WHERE descriptor = '".$this->getDescriptor()."' AND result = 1"; | |
| 149 | + $res = $this->runDBQuery($query); | |
| 150 | + if($res) { | |
| 151 | + return true; | |
| 152 | + } | |
| 153 | + return false; | |
| 154 | + } | |
| 155 | + | |
| 156 | + function performUpgrade($force = false) { | |
| 157 | + $res = $this->isAlreadyApplied(); | |
| 158 | + if ($res === true) { | |
| 159 | + if ($force !== true) { | |
| 160 | + // PHP5: Exception | |
| 161 | + return new Upgrade_Already_Applied($this); | |
| 162 | + } | |
| 163 | + } | |
| 164 | +// if (PEAR::isError($res)) { | |
| 165 | +// return $res; | |
| 166 | +// } | |
| 167 | + $oCache =& KTCache::getSingleton(); | |
| 168 | + $save = $oCache->bEnabled; | |
| 169 | + $oCache->bEnabled = false; | |
| 170 | + $res = $this->_performUpgrade(); | |
| 171 | + $oCache->bEnabled = $save; | |
| 172 | +// if (PEAR::isError($res)) { | |
| 173 | +// $this->_recordUpgrade(false); | |
| 174 | +// return $res; | |
| 175 | +// } | |
| 176 | + $res = $this->_recordUpgrade(true); | |
| 177 | +// if (PEAR::isError($res)) { | |
| 178 | +// return $res; | |
| 179 | +// } | |
| 180 | + return true; | |
| 181 | + } | |
| 182 | + | |
| 183 | + function _performUpgrade() { | |
| 184 | +// return PEAR::raiseError("Unimplemented"); | |
| 185 | + } | |
| 186 | + | |
| 187 | + function _recordUpgrade($result) { | |
| 188 | + if (is_null($this->date)) { | |
| 189 | + $this->date = getCurrentDateTime(); | |
| 190 | + } | |
| 191 | + if ($this->parent) { | |
| 192 | + $parentid = $this->parent->getDescriptor(); | |
| 193 | + } else { | |
| 194 | + $parentid = null; | |
| 195 | + } | |
| 196 | + //TODO: Where is the code? | |
| 197 | + exit("add code"); | |
| 198 | + /*return $this->autoInsert(); | |
| 199 | + | |
| 200 | + DBUtil::autoInsert("upgrades", array( | |
| 201 | + "descriptor" => $this->getDescriptor(), | |
| 202 | + "description" => $this->description, | |
| 203 | + "date_performed" => $this->date, | |
| 204 | + "result" => $result, | |
| 205 | + "parent" => $parentid, | |
| 206 | + ));*/ | |
| 207 | + } | |
| 208 | + | |
| 209 | + // STATIC | |
| 210 | + function getAllUpgrades() { | |
| 211 | + return array(); | |
| 212 | + } | |
| 213 | + | |
| 214 | + | |
| 215 | +} | |
| 216 | + | |
| 217 | +class SQLUpgradeItem extends UpgradeItem { | |
| 218 | + function SQLUpgradeItem($path, $version = null, $description = null, $phase = null, $priority = null) { | |
| 219 | + $this->type = "sql"; | |
| 220 | + $this->priority = 0; | |
| 221 | + $details = $this->_getDetailsFromFileName($path); | |
| 222 | + if (is_null($version)) { | |
| 223 | + $version = $details[1]; | |
| 224 | + } | |
| 225 | + if (is_null($description)) { | |
| 226 | + $description = $details[2]; | |
| 227 | + } | |
| 228 | + if (is_null($phase)) { | |
| 229 | + $phase = $details[3]; | |
| 230 | + } | |
| 231 | + if (is_null($priority)) { | |
| 232 | + $priority = isset($details[4]) ? $details[4] : 0; | |
| 233 | + } | |
| 234 | + $this->UpgradeItem($path, $version, $description, $phase, $priority); | |
| 235 | + } | |
| 236 | + | |
| 237 | + /** | |
| 238 | + * Describe the SQL scripts that will be used to upgrade KnowledgeTree | |
| 239 | + * | |
| 240 | + * Return an array of arrays with two components: a string identifier | |
| 241 | + * that uniquely describes the step to be taken and a string which is an | |
| 242 | + * HTML-formatted description of the step to be taken. These will be | |
| 243 | + * returned in any order - describeUpgrade performs the ordering. | |
| 244 | + * | |
| 245 | + * @param string Original version (e.g., "1.2.4") | |
| 246 | + * @param string Current version (e.g., "2.0.2") | |
| 247 | + * | |
| 248 | + * @return array Array of SQLUpgradeItem describing steps to be taken | |
| 249 | + * | |
| 250 | + * STATIC | |
| 251 | + */ | |
| 252 | + function getUpgrades($origVersion, $currVersion) { | |
| 253 | +// global $default; | |
| 254 | + | |
| 255 | +// $sqlupgradedir = KT_DIR . '/sql/' . $default->dbType . '/upgrade/'; | |
| 256 | + $dbType = 'mysql'; | |
| 257 | + $sqlupgradedir = KT_DIR . 'sql/' . $dbType . '/upgrade/'; | |
| 258 | + $ret = array(); | |
| 259 | + | |
| 260 | + if (!is_dir($sqlupgradedir)) { | |
| 261 | +// return PEAR::raiseError("SQL Upgrade directory ($sqlupgradedir) not accessible"); | |
| 262 | + } | |
| 263 | + if (!($dh = opendir($sqlupgradedir))) { | |
| 264 | +// return PEAR::raiseError("SQL Upgrade directory ($sqlupgradedir) not accessible"); | |
| 265 | + } | |
| 266 | + | |
| 267 | + while (($file = readdir($dh)) !== false) { | |
| 268 | + // Each entry can be a file or a directory | |
| 269 | + // | |
| 270 | + // A file is legacy before the upgrade system was created, but | |
| 271 | + // will be supported anyway. | |
| 272 | + // | |
| 273 | + // A directory is the end-result version: so, 2.0.5 contains | |
| 274 | + // every script that differentiates it from a previous version, | |
| 275 | + // say, 2.0.5rc1 or 2.0.4. | |
| 276 | + // | |
| 277 | + if (in_array($file, array('.', '..', 'CVS'))) { | |
| 278 | + continue; | |
| 279 | + } | |
| 280 | + $fullpath = $sqlupgradedir . $file; | |
| 281 | + if (is_file($fullpath)) { | |
| 282 | + // Legacy file support, will be in form of | |
| 283 | + // 1.2.4-to-2.0.0.sql. | |
| 284 | + $details = SQLUpgradeItem::_getDetailsFromFileName($file); | |
| 285 | + if ($details) { | |
| 286 | + if (!gte_version($details[0], $origVersion)) { | |
| 287 | + continue; | |
| 288 | + } | |
| 289 | + if (!lte_version($details[1], $currVersion)) { | |
| 290 | + continue; | |
| 291 | + } | |
| 292 | + //print "Will run $file\n"; | |
| 293 | +// print_r($this->util->dbUtilities); | |
| 294 | +// die; | |
| 295 | + $ret[] = new SQLUpgradeItem($file); | |
| 296 | + } | |
| 297 | + } | |
| 298 | + if (is_dir($fullpath)) { | |
| 299 | + $subdir = $file; | |
| 300 | + if (!($subdh = opendir($fullpath))) { | |
| 301 | + continue; | |
| 302 | + } | |
| 303 | + while (($file = readdir($subdh)) !== false) { | |
| 304 | + $relpath = $subdir . '/' . $file; | |
| 305 | + $details = SQLUpgradeItem::_getDetailsFromFileName($relpath); | |
| 306 | + if ($details) { | |
| 307 | + if (!gte_version($details[0], $origVersion)) { | |
| 308 | + continue; | |
| 309 | + } | |
| 310 | + if (!lte_version($details[1], $currVersion)) { | |
| 311 | + continue; | |
| 312 | + } | |
| 313 | + //print "Will run $file\n"; | |
| 314 | +// print_r(SQLUpgradeItem::); | |
| 315 | +// die; | |
| 316 | +// new InstallUtil(); | |
| 317 | + $ret[] = new SQLUpgradeItem($relpath); | |
| 318 | + } | |
| 319 | + } | |
| 320 | + } | |
| 321 | + } | |
| 322 | + closedir($dh); | |
| 323 | + return $ret; | |
| 324 | + } | |
| 325 | + | |
| 326 | + function _getDetailsFromFileName($path) { | |
| 327 | + // Old format (pre 2.0.6) | |
| 328 | + $matched = preg_match('#^([\d.]*)-to-([\d.]*).sql$#', $path, $matches); | |
| 329 | + if ($matched != 0) { | |
| 330 | + $fromVersion = $matches[1]; | |
| 331 | + $toVersion = $matches[2]; | |
| 332 | + $description = "Database upgrade from version $fromVersion to $toVersion"; | |
| 333 | + $phase = 0; | |
| 334 | + return array($fromVersion, $toVersion, $description, $phase); | |
| 335 | + } | |
| 336 | + $matched = preg_match('#^([\d.]*)/(?:(\d*)-)?(.*)\.sql$#', $path, $matches); | |
| 337 | + //$matched = preg_match('#^([\d.]*)/(?:(\d*)-)?(.*):(?:(\d*))\.sql$#', $path, $matches); | |
| 338 | + if ($matched != 0) { | |
| 339 | + $fromVersion = $matches[1]; | |
| 340 | + $toVersion = $matches[1]; | |
| 341 | + $in = array('_'); | |
| 342 | + $out = array(' '); | |
| 343 | + $phase = (int)$matches[2]; | |
| 344 | + | |
| 345 | + //$priority = (int)$matches[4]; | |
| 346 | + $priority = 0; | |
| 347 | + $iPriority = preg_match('#^(.*)-(\d*)$#', $matches[3], $priorities); | |
| 348 | + if($iPriority != 0){ | |
| 349 | + $priority = $priorities[2]; | |
| 350 | + $matches[3] = $priorities[1]; | |
| 351 | + } | |
| 352 | + | |
| 353 | + $description = "Database upgrade to version $toVersion: " . ucfirst(str_replace($in, $out, $matches[3])); | |
| 354 | + return array($fromVersion, $toVersion, $description, $phase, $priority); | |
| 355 | + } | |
| 356 | + // XXX: handle new format | |
| 357 | + return null; | |
| 358 | + } | |
| 359 | + | |
| 360 | + function _performUpgrade() { | |
| 361 | +// global $default; | |
| 362 | + $dbType = 'mysql'; | |
| 363 | + $sqlupgradedir = KT_DIR . 'sql/' . $dbType . '/upgrade/'; | |
| 364 | + $queries = SQLFile::sqlFromFile($sqlupgradedir . $this->name); | |
| 365 | + exit('add code'); | |
| 366 | +// return DBUtil::runQueries($queries, $default->_admindb); | |
| 367 | + } | |
| 368 | + | |
| 369 | + | |
| 370 | +} | |
| 371 | + | |
| 372 | +class KTRebuildPermissionObserver { | |
| 373 | + function start() { | |
| 374 | + $this->lastBeat = time(); | |
| 375 | + } | |
| 376 | + function receiveMessage() { | |
| 377 | + $now = time(); | |
| 378 | + if ($this->lastBeat + 15 < $now) { | |
| 379 | + print "<!-- -->"; | |
| 380 | + ob_flush(); | |
| 381 | + flush(); | |
| 382 | + } | |
| 383 | + } | |
| 384 | + function end() { | |
| 385 | + } | |
| 386 | +} | |
| 387 | + | |
| 388 | +class RecordUpgradeItem extends UpgradeItem { | |
| 389 | + function RecordUpgradeItem ($version, $oldversion = null) { | |
| 390 | + $this->type = "upgrade"; | |
| 391 | + if (is_null($oldversion)) { | |
| 392 | + $this->description = "Upgrade to version $version"; | |
| 393 | + } else { | |
| 394 | + $this->description = "Upgrade from version $oldversion to $version"; | |
| 395 | + } | |
| 396 | + $this->phase = 99; | |
| 397 | + $this->version = $version; | |
| 398 | + $this->name = 'upgrade' . $version; | |
| 399 | + } | |
| 400 | + | |
| 401 | + function _performUpgrade() { | |
| 402 | +// $this->_deleteSmartyFiles(); | |
| 403 | +// $this->_deleteProxyFiles(); | |
| 404 | +// require_once(KT_LIB_DIR . '/cache/cache.inc.php'); | |
| 405 | +// $oCache =& KTCache::getSingleton(); | |
| 406 | +// $oCache->deleteAllCaches(); | |
| 407 | + // TODO : clear cache folder | |
| 408 | +// require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); | |
| 409 | + // TODO : What does this do | |
| 410 | +// $po =& new KTRebuildPermissionObserver($this); | |
| 411 | +// $po->start(); | |
| 412 | +// $oChannel =& KTPermissionChannel::getSingleton(); | |
| 413 | +// $oChannel->addObserver($po); | |
| 414 | + | |
| 415 | + set_time_limit(0); | |
| 416 | + ignore_user_abort(true); | |
| 417 | + | |
| 418 | +// KTPermissionUtil::rebuildPermissionLookups(true); | |
| 419 | +// $po->end(); | |
| 420 | + | |
| 421 | + $versionFile=KT_DIR . '/docs/VERSION-NAME.txt'; | |
| 422 | + $fp = fopen($versionFile,'rt'); | |
| 423 | + $systemVersion = fread($fp, filesize($versionFile)); | |
| 424 | + fclose($fp); | |
| 425 | + | |
| 426 | + $query = "UPDATE system_settings SET value = '$systemVersion' WHERE name = 'knowledgetreeVersion'"; | |
| 427 | + $this->runDBQuery($query); | |
| 428 | + $query = "UPDATE system_settings SET value = '{$this->version}' WHERE name = 'databaseVersion'"; | |
| 429 | + $assArray = $this->runDBQuery($query); | |
| 430 | + return !is_null($assArray); | |
| 431 | + } | |
| 432 | + | |
| 433 | + function _deleteSmartyFiles() { | |
| 434 | + $oConfig =& KTConfig::getSingleton(); | |
| 435 | + $dir = sprintf('%s/%s', $oConfig->get('urls/varDirectory'), 'tmp'); | |
| 436 | + | |
| 437 | + $dh = @opendir($dir); | |
| 438 | + if (empty($dh)) { | |
| 439 | + return; | |
| 440 | + } | |
| 441 | + $aFiles = array(); | |
| 442 | + while (false !== ($sFilename = readdir($dh))) { | |
| 443 | + if (substr($sFilename, -10) == "smarty.inc") { | |
| 444 | + $aFiles[] = sprintf('%s/%s', $dir, $sFilename); | |
| 445 | + } | |
| 446 | + if (substr($sFilename, -10) == "smarty.php") { | |
| 447 | + $aFiles[] = sprintf('%s/%s', $dir, $sFilename); | |
| 448 | + } | |
| 449 | + } | |
| 450 | + foreach ($aFiles as $sFile) { | |
| 451 | + @unlink($sFile); | |
| 452 | + } | |
| 453 | + } | |
| 454 | + | |
| 455 | + | |
| 456 | + function _deleteProxyFiles() { | |
| 457 | + $oKTConfig =& KTConfig::getSingleton(); | |
| 458 | + | |
| 459 | + | |
| 460 | + // from ktentityutil::_proxyCreate | |
| 461 | + $sDirectory = $oKTConfig->get('cache/proxyCacheDirectory'); | |
| 462 | + | |
| 463 | + if (!file_exists($sDirectory)) { | |
| 464 | + return; | |
| 465 | + } | |
| 466 | + $sRunningUser = KTUtil::running_user(); | |
| 467 | + if ($sRunningUser) { | |
| 468 | + $sDirectory = sprintf("%s/%s", $sDirectory, $sRunningUser); | |
| 469 | + } | |
| 470 | + if (!file_exists($sDirectory)) { | |
| 471 | + return ; | |
| 472 | + } | |
| 473 | + | |
| 474 | + $dh = @opendir($sDirectory); | |
| 475 | + if (empty($dh)) { | |
| 476 | + return; | |
| 477 | + } | |
| 478 | + $aFiles = array(); | |
| 479 | + while (false !== ($sFilename = readdir($dh))) { | |
| 480 | + | |
| 481 | + if (substr($sFilename, -8) == ".inc.php") { | |
| 482 | + $aFiles[] = sprintf('%s/%s', $sDirectory, $sFilename); | |
| 483 | + } | |
| 484 | + } | |
| 485 | + | |
| 486 | + foreach ($aFiles as $sFile) { | |
| 487 | + @unlink($sFile); | |
| 488 | + } | |
| 489 | + } | |
| 490 | +} | |
| 491 | + | |
| 492 | +?> | ... | ... |
setup/upgrade/lib/datetime.inc
0 → 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * $Id$ | |
| 4 | + * | |
| 5 | + * Contains datetime functions. | |
| 6 | + * | |
| 7 | + * KnowledgeTree Community Edition | |
| 8 | + * Document Management Made Simple | |
| 9 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 10 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 11 | + * | |
| 12 | + * This program is free software; you can redistribute it and/or modify it under | |
| 13 | + * the terms of the GNU General Public License version 3 as published by the | |
| 14 | + * Free Software Foundation. | |
| 15 | + * | |
| 16 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 17 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 18 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 19 | + * details. | |
| 20 | + * | |
| 21 | + * You should have received a copy of the GNU General Public License | |
| 22 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 23 | + * | |
| 24 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 25 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 26 | + * | |
| 27 | + * The interactive user interfaces in modified source and object code versions | |
| 28 | + * of this program must display Appropriate Legal Notices, as required under | |
| 29 | + * Section 5 of the GNU General Public License version 3. | |
| 30 | + * | |
| 31 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 32 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 33 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 34 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 35 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 36 | + * copyright notice. | |
| 37 | + * Contributor( s): ______________________________________ | |
| 38 | + */ | |
| 39 | + | |
| 40 | +/** | |
| 41 | + * Returns the current date time | |
| 42 | + * | |
| 43 | + * @return string the current date time (Y-m-d H:i:s) | |
| 44 | + */ | |
| 45 | +function getCurrentDateTime() { | |
| 46 | + return date("Y-m-d H:i:s", time()); | |
| 47 | +} | |
| 48 | + | |
| 49 | +/** | |
| 50 | + * Returns the specified date time, formatted as Y-m-d H:i:s | |
| 51 | + * | |
| 52 | + * @param int the date time to format | |
| 53 | + * @return string the formatted date time | |
| 54 | + */ | |
| 55 | +function formatDateTime($dateTime) { | |
| 56 | + return date("Y-m-d H:i:s", $dateTime); | |
| 57 | +} | |
| 58 | +?> | ... | ... |
setup/upgrade/lib/sqlfile.inc.php
0 → 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * $Id$ | |
| 4 | + * | |
| 5 | + * KnowledgeTree Community Edition | |
| 6 | + * Document Management Made Simple | |
| 7 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 8 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 9 | + * | |
| 10 | + * This program is free software; you can redistribute it and/or modify it under | |
| 11 | + * the terms of the GNU General Public License version 3 as published by the | |
| 12 | + * Free Software Foundation. | |
| 13 | + * | |
| 14 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 15 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 16 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 17 | + * details. | |
| 18 | + * | |
| 19 | + * You should have received a copy of the GNU General Public License | |
| 20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 24 | + * | |
| 25 | + * The interactive user interfaces in modified source and object code versions | |
| 26 | + * of this program must display Appropriate Legal Notices, as required under | |
| 27 | + * Section 5 of the GNU General Public License version 3. | |
| 28 | + * | |
| 29 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 30 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | + * copyright notice. | |
| 35 | + * Contributor( s): ______________________________________ | |
| 36 | + * | |
| 37 | + */ | |
| 38 | + | |
| 39 | +class SQLFile { | |
| 40 | + function sqlFromFile($path) { | |
| 41 | + return SQLFile::splitSQL(file_get_contents($path)); | |
| 42 | + } | |
| 43 | + | |
| 44 | + function splitSQL($sql) { | |
| 45 | + $instring = false; | |
| 46 | + $i = 0; | |
| 47 | + $remaining = $sql; | |
| 48 | + $query = ""; | |
| 49 | + $aQueries = array(); | |
| 50 | + | |
| 51 | + $strlen = strlen($sql); | |
| 52 | + | |
| 53 | + for ($i = 0; $i < $strlen; $i++) { | |
| 54 | + $c = $remaining[$i]; | |
| 55 | + if ($c === ";") { | |
| 56 | + $query .= substr($remaining, 0, $i + 1); | |
| 57 | + $aQueries[] = $query; | |
| 58 | + $query = ""; | |
| 59 | + $remaining = trim(substr($remaining, $i + 1)); | |
| 60 | + $i = 0; | |
| 61 | + $strlen = strlen($remaining); | |
| 62 | + continue; | |
| 63 | + } | |
| 64 | + if ($c === "`") { | |
| 65 | + $next = strpos($remaining, "`", $i); | |
| 66 | + if ($next === false) { | |
| 67 | + $query .= $remaining; | |
| 68 | + $aQueries[] = $query; | |
| 69 | + return $aQueries; | |
| 70 | + } | |
| 71 | + $query .= substr($remaining, 0, $next); | |
| 72 | + $remaining = substr($remaining, $next); | |
| 73 | + $i = 0; | |
| 74 | + $strlen = strlen($remaining); | |
| 75 | + continue; | |
| 76 | + } | |
| 77 | + if (($c === "'") || ($c === '"')) { | |
| 78 | + $stringchar = $c; | |
| 79 | + $notfound = true; | |
| 80 | + | |
| 81 | + while ($notfound) { | |
| 82 | + $next = strpos($remaining, $stringchar, $i + 1); | |
| 83 | + if ($next === false) { | |
| 84 | + $query .= $remaining; | |
| 85 | + $aQueries[] = $query; | |
| 86 | + return $aQueries; | |
| 87 | + } | |
| 88 | + $i = $next + 1; | |
| 89 | + $quotes = true; | |
| 90 | + $b = 1; | |
| 91 | + while ($remaining[$next - $b] === "\\") { | |
| 92 | + $quotes = !$quotes; | |
| 93 | + $b++; | |
| 94 | + } | |
| 95 | + if ($quotes) { | |
| 96 | + $notfound = false; | |
| 97 | + } | |
| 98 | + } | |
| 99 | + $query .= substr($remaining, 0, $next); | |
| 100 | + $remaining = substr($remaining, $next); | |
| 101 | + $i = 0; | |
| 102 | + $strlen = strlen($remaining); | |
| 103 | + continue; | |
| 104 | + } | |
| 105 | + | |
| 106 | + $nextdelim = SQLFile::_nextDelim($remaining); | |
| 107 | + if ($nextdelim === false) { | |
| 108 | + $query .= $remaining; | |
| 109 | + $aQueries[] = $query; | |
| 110 | + return $aQueries; | |
| 111 | + } | |
| 112 | + // $query .= substr($remaining, 0, $nextdelim); | |
| 113 | + } | |
| 114 | + return $aQueries; | |
| 115 | + } | |
| 116 | + | |
| 117 | + function _nextDelim($string) { | |
| 118 | + $q = strpos($string, "'"); | |
| 119 | + $d = strpos($string, '"'); | |
| 120 | + $b = strpos($string, "`"); | |
| 121 | + $s = strpos($string, ";"); | |
| 122 | + | |
| 123 | + $min = false; | |
| 124 | + foreach (array($q, $d, $b, $s) as $c) { | |
| 125 | + if ($min === false) { | |
| 126 | + $min = $c; | |
| 127 | + continue; | |
| 128 | + } | |
| 129 | + if ($c === false) { | |
| 130 | + continue; | |
| 131 | + } | |
| 132 | + if ($c < $min) { | |
| 133 | + $min = $c; | |
| 134 | + continue; | |
| 135 | + } | |
| 136 | + } | |
| 137 | + return $min; | |
| 138 | + } | |
| 139 | +} | |
| 140 | + | |
| 141 | +?> | ... | ... |
setup/upgrade/lib/upgrade.inc.php
0 → 100644
| 1 | +<?php | |
| 2 | +/** | |
| 3 | + * $Id$ | |
| 4 | + * | |
| 5 | + * Assists in discovering what needs to be done to upgrade one version | |
| 6 | + * of KnowledgeTree to another. | |
| 7 | + * | |
| 8 | + * KnowledgeTree Community Edition | |
| 9 | + * Document Management Made Simple | |
| 10 | + * Copyright (C) 2008, 2009 KnowledgeTree Inc. | |
| 11 | + * Portions copyright The Jam Warehouse Software (Pty) Limited | |
| 12 | + * | |
| 13 | + * This program is free software; you can redistribute it and/or modify it under | |
| 14 | + * the terms of the GNU General Public License version 3 as published by the | |
| 15 | + * Free Software Foundation. | |
| 16 | + * | |
| 17 | + * This program is distributed in the hope that it will be useful, but WITHOUT | |
| 18 | + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 19 | + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
| 20 | + * details. | |
| 21 | + * | |
| 22 | + * You should have received a copy of the GNU General Public License | |
| 23 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 24 | + * | |
| 25 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 26 | + * California 94120-7775, or email info@knowledgetree.com. | |
| 27 | + * | |
| 28 | + * The interactive user interfaces in modified source and object code versions | |
| 29 | + * of this program must display Appropriate Legal Notices, as required under | |
| 30 | + * Section 5 of the GNU General Public License version 3. | |
| 31 | + * | |
| 32 | + * In accordance with Section 7(b) of the GNU General Public License version 3, | |
| 33 | + * these Appropriate Legal Notices must retain the display of the "Powered by | |
| 34 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 35 | + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | |
| 36 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 37 | + * copyright notice. | |
| 38 | + * Contributor( s): ______________________________________ | |
| 39 | + */ | |
| 40 | + | |
| 41 | +require_once('UpgradeItems.inc.php'); | |
| 42 | + | |
| 43 | +//function setupAdminDatabase() { | |
| 44 | +// global $default; | |
| 45 | +// $dsn = array( | |
| 46 | +// 'phptype' => $default->dbType, | |
| 47 | +// 'username' => $default->dbAdminUser, | |
| 48 | +// 'password' => $default->dbAdminPass, | |
| 49 | +// 'hostspec' => $default->dbHost, | |
| 50 | +// 'database' => $default->dbName, | |
| 51 | +// 'port' => $default->dbPort, | |
| 52 | +// ); | |
| 53 | +// | |
| 54 | +// $options = array( | |
| 55 | +// 'debug' => 2, | |
| 56 | +// 'portability' => DB_PORTABILITY_ERRORS, | |
| 57 | +// 'seqname_format' => 'zseq_%s', | |
| 58 | +// ); | |
| 59 | +// | |
| 60 | +// $default->_admindb = &DB::connect($dsn, $options); | |
| 61 | +// if (PEAR::isError($default->_admindb)) { | |
| 62 | +// die($default->_admindb->toString()); | |
| 63 | +// } | |
| 64 | +// $default->_admindb->setFetchMode(DB_FETCHMODE_ASSOC); | |
| 65 | +// return; | |
| 66 | +//} | |
| 67 | +//setupAdminDatabase(); | |
| 68 | + | |
| 69 | +// {{{ Format of the descriptor | |
| 70 | +/** | |
| 71 | + * Format of the descriptor | |
| 72 | + * | |
| 73 | + * type*version*phase*simple description for uniqueness | |
| 74 | + * | |
| 75 | + * type is: sql, function, subupgrade, upgrade | |
| 76 | + * version is: 1.2.4, 2.0.0rc5 | |
| 77 | + * phase is: 0, 1, 0pre. Phase is _only_ evaluated by describeUpgrades. | |
| 78 | + * description is: anything, unique in terms of version and type. | |
| 79 | + */ | |
| 80 | +// }}} | |
| 81 | + | |
| 82 | +// {{{ describeUpgrade | |
| 83 | +/** | |
| 84 | + * Describe the upgrade path between two versions of KnowledgeTree. | |
| 85 | + * | |
| 86 | + * @param string Original version (e.g., "1.2.4") | |
| 87 | + * @param string Current version (e.g., "2.0.2") | |
| 88 | + * | |
| 89 | + * @return array Array of UpgradeItem describing steps to be taken | |
| 90 | + */ | |
| 91 | +function &describeUpgrade ($origVersion, $currVersion) { | |
| 92 | + // How to figure out what upgrades to do: | |
| 93 | + // | |
| 94 | + // 1. Get all SQL upgrades >= origVersion and <= currVersion | |
| 95 | + // 2. Get all Function upgrades >= origVersion and <= currVersion | |
| 96 | + // 3. Categorise each into version they upgrade to | |
| 97 | + // 4. Sort each version subgroup into correct order | |
| 98 | + // 5. Add "recordSubUpgrade" for each version there. | |
| 99 | + // 6. Add back into one big list again | |
| 100 | + // 7. Add "recordUpgrade" for whole thing | |
| 101 | + | |
| 102 | + // $recordUpgrade = array('upgrade*' . $currVersion, 'Upgrade to ' . $currVersion, null); | |
| 103 | + | |
| 104 | + $steps = array(); | |
| 105 | + foreach (array('SQLUpgradeItem') as $itemgen) { | |
| 106 | + $f = array($itemgen, 'getUpgrades'); | |
| 107 | + $ssteps =& call_user_func($f, $origVersion, $currVersion); | |
| 108 | + $scount = count($ssteps); | |
| 109 | + for ($i = 0; $i < $scount; $i++) { | |
| 110 | + $steps[] =& $ssteps[$i]; | |
| 111 | + } | |
| 112 | + } | |
| 113 | + $upgradestep =& new RecordUpgradeItem($currVersion, $origVersion); | |
| 114 | + $steps[] =& $upgradestep; | |
| 115 | + $stepcount = count($steps); | |
| 116 | + for ($i = 0; $i < $stepcount; $i++) { | |
| 117 | + $step =& $steps[$i]; | |
| 118 | + $step->setParent($upgradestep); | |
| 119 | + } | |
| 120 | + usort($steps, 'step_sort_func'); | |
| 121 | + | |
| 122 | + return $steps; | |
| 123 | +} | |
| 124 | +// }}} | |
| 125 | + | |
| 126 | +// {{{ step_sort_func | |
| 127 | +function step_sort_func ($obj1, $obj2) { | |
| 128 | + // Ugly hack to ensure that upgrade table is made first... | |
| 129 | + if ($obj1->name === "2.0.6/create_upgrade_table.sql") { | |
| 130 | + return -1; | |
| 131 | + } | |
| 132 | + if ($obj2->name === "2.0.6/create_upgrade_table.sql") { | |
| 133 | + return 1; | |
| 134 | + } | |
| 135 | + | |
| 136 | + // Priority upgrades run first | |
| 137 | + if ($obj1->getPriority() < $obj2->getPriority()) { | |
| 138 | + return 1; | |
| 139 | + } | |
| 140 | + if ($obj1->getPriority() > $obj2->getPriority()) { | |
| 141 | + return -1; | |
| 142 | + } | |
| 143 | + | |
| 144 | + // early version run first | |
| 145 | + $res = compare_version($obj1->getVersion(), $obj2->getVersion()); | |
| 146 | + if ($res !== 0) { | |
| 147 | + return $res; | |
| 148 | + } | |
| 149 | + // Order by phase | |
| 150 | + if ($obj1->getPhase() > $obj2->getPhase()) { | |
| 151 | + return 1; | |
| 152 | + } | |
| 153 | + if ($obj1->getPhase() < $obj2->getPhase()) { | |
| 154 | + return -1; | |
| 155 | + } | |
| 156 | + // Order by name | |
| 157 | + if ($obj1->name < $obj2->name) { | |
| 158 | + return -1; | |
| 159 | + } | |
| 160 | + if ($obj1->name > $obj2->name) { | |
| 161 | + return 1; | |
| 162 | + } | |
| 163 | + return 0; | |
| 164 | +} | |
| 165 | +// }}} | |
| 166 | + | |
| 167 | +// {{{ compare_version | |
| 168 | +/** | |
| 169 | + * Compares two version numbers and returns a value based on this comparison | |
| 170 | + * | |
| 171 | + * Using standard software version rules, such as 2.0.5rc1 comes before | |
| 172 | + * 2.0.5, and 2.0.5rc1 comes after 2.0.5alpha1, compare two version | |
| 173 | + * numbers, and determine which is the higher. | |
| 174 | + * | |
| 175 | + * XXX: Actually, just does $version1 < $version2 | |
| 176 | + * | |
| 177 | + * @param string First version number | |
| 178 | + * @param string Second version number | |
| 179 | + * | |
| 180 | + * @return int -1, 0, 1 | |
| 181 | + */ | |
| 182 | +function compare_version($version1, $version2) { | |
| 183 | + // XXX: Version comparisons should be better. | |
| 184 | + if ($version1 < $version2) { | |
| 185 | + return -1; | |
| 186 | + } | |
| 187 | + if ($version1 > $version2) { | |
| 188 | + return 1; | |
| 189 | + } | |
| 190 | + return 0; | |
| 191 | +} | |
| 192 | +// }}} | |
| 193 | + | |
| 194 | +// {{{ lte_version | |
| 195 | +/** | |
| 196 | + * Quick-hand for checking if a version number is lower-than-or-equal-to | |
| 197 | + */ | |
| 198 | +function lte_version($version1, $version2) { | |
| 199 | + if (in_array(compare_version($version1, $version2), array(-1, 0))) { | |
| 200 | + return true; | |
| 201 | + } | |
| 202 | + return false; | |
| 203 | +} | |
| 204 | +// }} | |
| 205 | + | |
| 206 | +// {{ gte_version | |
| 207 | +/** | |
| 208 | + * Quick-hand for checking if a version number is greater-than-or-equal-to | |
| 209 | + */ | |
| 210 | +function gte_version($version1, $version2) { | |
| 211 | + if (in_array(compare_version($version1, $version2), array(0, 1))) { | |
| 212 | + return true; | |
| 213 | + } | |
| 214 | + return false; | |
| 215 | +} | |
| 216 | +// }}} | |
| 217 | + | |
| 218 | +?> | ... | ... |
setup/upgrade/steps/upgradeDatabase.php
| ... | ... | @@ -43,7 +43,8 @@ |
| 43 | 43 | //require_once('../../config/dmsDefaults.php'); |
| 44 | 44 | //require_once(KT_LIB_DIR . '/config/config.inc.php'); |
| 45 | 45 | //require_once(KT_LIB_DIR . '/plugins/pluginutil.inc.php'); |
| 46 | -//define('KT_LIB_DIR', SYSTEM_DIR.'lib'.DS); | |
| 46 | +define('KT_DIR', SYSTEM_DIR); | |
| 47 | +define('KT_LIB_DIR', SYSTEM_DIR.'lib'); | |
| 47 | 48 | //require_once(SYSTEM_DIR . 'lib/upgrades/upgrade.inc.php'); |
| 48 | 49 | |
| 49 | 50 | class upgradeDatabase extends Step |
| ... | ... | @@ -92,10 +93,10 @@ class upgradeDatabase extends Step |
| 92 | 93 | * @var array |
| 93 | 94 | */ |
| 94 | 95 | public $storeInSession = true; |
| 95 | - | |
| 96 | + public $sysVersion = ''; | |
| 96 | 97 | protected $silent = false; |
| 97 | 98 | protected $temp_variables = array(); |
| 98 | - | |
| 99 | + public $paths = ''; | |
| 99 | 100 | /** |
| 100 | 101 | * Main control of database setup |
| 101 | 102 | * |
| ... | ... | @@ -143,17 +144,14 @@ class upgradeDatabase extends Step |
| 143 | 144 | |
| 144 | 145 | private function doRun($action = null) { |
| 145 | 146 | // $this->readConfig(KTConfig::getConfigFilename()); |
| 146 | - require_once("../wizard/steps/configuration.php"); // configuration to read the ini path | |
| 147 | - $wizConfigHandler = new configuration(); | |
| 148 | - $configPath = $wizConfigHandler->readConfigPathIni(); | |
| 149 | - $this->readConfig($configPath); | |
| 150 | - if($this->dbSettings['dbPort'] == '') { | |
| 151 | - $con = $this->util->dbUtilities->load($this->dbSettings['dbHost'], $this->dbSettings['dbUser'], | |
| 152 | - $this->dbSettings['dbPass'], $this->dbSettings['dbName']); | |
| 153 | - } else { | |
| 154 | - $con = $this->util->dbUtilities->load($this->dbSettings['dbHost'].":".$this->dbSettings['dbPort'], $this->dbSettings['dbUser'], | |
| 147 | + | |
| 148 | + $this->readConfig(); | |
| 149 | +// if($this->dbSettings['dbPort'] == '') { | |
| 150 | +// $con = $this->util->dbUtilities->load($this->dbSettings['dbHost'], '', $this->dbSettings['dbUser'],$this->dbSettings['dbPass'], $this->dbSettings['dbName']); | |
| 151 | +// } else { | |
| 152 | + $con = $this->util->dbUtilities->load($this->dbSettings['dbHost'], $this->dbSettings['dbPort'], $this->dbSettings['dbUser'], | |
| 155 | 153 | $this->dbSettings['dbPass'], $this->dbSettings['dbName']); |
| 156 | - } | |
| 154 | +// } | |
| 157 | 155 | |
| 158 | 156 | $this->temp_variables['action'] = $action; |
| 159 | 157 | if (is_null($action) || ($action == 'preview')) { |
| ... | ... | @@ -177,23 +175,19 @@ class upgradeDatabase extends Step |
| 177 | 175 | } |
| 178 | 176 | |
| 179 | 177 | private function generateUpgradeTable() { |
| 180 | -// global $default; | |
| 181 | - $v = $this->readVersion(); | |
| 182 | -// $this->temp_variables['systemVersion'] = $default->systemVersion; | |
| 183 | - $this->temp_variables['systemVersion'] = $v; | |
| 184 | - | |
| 185 | -// $query = sprintf('SELECT value FROM %s WHERE name = "databaseVersion"', $default->system_settings_table); | |
| 186 | - $query = sprintf('SELECT value FROM %s WHERE name = "databaseVersion"', 'config_settings'); | |
| 187 | - | |
| 178 | + $this->sysVersion = $this->readVersion(); | |
| 179 | + $this->temp_variables['systemVersion'] = $this->sysVersion; | |
| 180 | + $dconf = $this->util->iniUtilities->getSection('db'); | |
| 181 | + $query = sprintf('SELECT value FROM %s WHERE name = "databaseVersion"', 'system_settings'); | |
| 182 | + $this->util->dbUtilities->load($dconf['dbHost'], '', $dconf['dbUser'], $dconf['dbPass'], $dconf['dbName']); | |
| 188 | 183 | $result = $this->util->dbUtilities->query($query); |
| 184 | + $assArr = $this->util->dbUtilities->fetchAssoc($result); | |
| 189 | 185 | if ($result) { |
| 190 | - $lastVersionObj = $this->util->dbUtilities->fetchNextObject($result); | |
| 191 | - $lastVersion = $lastVersionObj->value; | |
| 186 | + $lastVersion = $assArr[0]['value']; | |
| 192 | 187 | } |
| 193 | - $currentVersion = $v; | |
| 194 | - | |
| 188 | + $currentVersion = $this->sysVersion; | |
| 189 | + require_once("lib/upgrade.inc.php"); | |
| 195 | 190 | $upgrades = describeUpgrade($lastVersion, $currentVersion); |
| 196 | - | |
| 197 | 191 | $ret = "<table border=1 cellpadding=1 cellspacing=1 width='100%'>\n"; |
| 198 | 192 | $ret .= "<tr bgcolor='darkgrey'><th width='10'>Code</th><th width='100%'>Description</th><th width='30'>Applied</th></tr>\n"; |
| 199 | 193 | $i=0; |
| ... | ... | @@ -259,8 +253,10 @@ class upgradeDatabase extends Step |
| 259 | 253 | } |
| 260 | 254 | } |
| 261 | 255 | |
| 262 | - private function readConfig($path) { | |
| 263 | - //$ini = $this->util->loadInstallIni($path); | |
| 256 | + private function readConfig() { | |
| 257 | + require_once("../wizard/steps/configuration.php"); // configuration to read the ini path | |
| 258 | + $wizConfigHandler = new configuration(); | |
| 259 | + $path = $wizConfigHandler->readConfigPathIni(); | |
| 264 | 260 | $this->util->iniUtilities->load($path); |
| 265 | 261 | $dbSettings = $this->util->iniUtilities->getSection('db'); |
| 266 | 262 | $this->dbSettings = array('dbHost'=> $dbSettings['dbHost'], |
| ... | ... | @@ -271,7 +267,11 @@ class upgradeDatabase extends Step |
| 271 | 267 | 'dbAdminUser'=> $dbSettings['dbAdminUser'], |
| 272 | 268 | 'dbAdminPass'=> $dbSettings['dbAdminPass'], |
| 273 | 269 | ); |
| 270 | + $this->paths = $this->util->iniUtilities->getSection('urls'); | |
| 271 | + $this->paths = array_merge($this->paths, $this->util->iniUtilities->getSection('cache')); | |
| 274 | 272 | $this->temp_variables['dbSettings'] = $this->dbSettings; |
| 273 | + $this->sysVersion = $this->readVersion(); | |
| 274 | + $this->cachePath = $wizConfigHandler->readCachePath(); | |
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | private function upgradeConfirm() |
| ... | ... | @@ -291,9 +291,10 @@ class upgradeDatabase extends Step |
| 291 | 291 | $errors = false; |
| 292 | 292 | |
| 293 | 293 | $this->temp_variables['detail'] = '<p>The table below describes the upgrades that have occurred to |
| 294 | - upgrade your KnowledgeTree installation to <strong>' . $default->systemVersion . '</strong>'; | |
| 294 | + upgrade your KnowledgeTree installation to <strong>' . $this->sysVersion . '</strong>'; | |
| 295 | 295 | |
| 296 | 296 | $pre_res = $this->performPreUpgradeActions(); |
| 297 | + | |
| 297 | 298 | if (PEAR::isError($pre_res)) { |
| 298 | 299 | $errors = true; |
| 299 | 300 | $this->temp_variables['preUpgrade'] = '<font color="red">Pre-Upgrade actions failed.</font>'; |
| ... | ... | @@ -336,7 +337,7 @@ class upgradeDatabase extends Step |
| 336 | 337 | // It should idealy work the same as the upgrades. |
| 337 | 338 | |
| 338 | 339 | // global $default; |
| 339 | - | |
| 340 | +// print_r($this->paths);die; | |
| 340 | 341 | // Lock the scheduler |
| 341 | 342 | $lockFile = $default->cacheDirectory . DIRECTORY_SEPARATOR . 'scheduler.lock'; |
| 342 | 343 | touch($lockFile); | ... | ... |
setup/upgrade/steps/upgradeWelcome.php
| ... | ... | @@ -40,12 +40,9 @@ |
| 40 | 40 | * @version Version 0.1 |
| 41 | 41 | */ |
| 42 | 42 | |
| 43 | -//require_once('../../config/dmsDefaults.php'); | |
| 44 | -//require_once KT_LIB_DIR . '/authentication/authenticationutil.inc.php'; | |
| 45 | - | |
| 46 | 43 | class upgradeWelcome extends step { |
| 47 | 44 | |
| 48 | - protected $silent = false; | |
| 45 | + protected $silent = true; | |
| 49 | 46 | protected $temp_variables = array(); |
| 50 | 47 | protected $error = array() ; |
| 51 | 48 | |
| ... | ... | @@ -84,7 +81,7 @@ class upgradeWelcome extends step { |
| 84 | 81 | private function checkPassword($username, $password) { |
| 85 | 82 | $dconf = $this->getDataFromPackage('installers', 'database'); // Use info from install |
| 86 | 83 | if($dconf) { |
| 87 | - $this->util->dbUtilities->load($dconf['dhost'], $dconf['duname'], $dconf['dpassword'], $dconf['dname']); | |
| 84 | + $this->util->dbUtilities->load($dconf['dhost'], $dbconf['dport'], $dconf['duname'], $dconf['dpassword'], $dconf['dname']); | |
| 88 | 85 | } else { |
| 89 | 86 | require_once("../wizard/steps/configuration.php"); // configuration to read the ini path |
| 90 | 87 | $wizConfigHandler = new configuration(); |
| ... | ... | @@ -93,7 +90,7 @@ class upgradeWelcome extends step { |
| 93 | 90 | $dconf = $this->util->iniUtilities->getSection('db'); |
| 94 | 91 | if($dconf['dbPort'] == 'default') |
| 95 | 92 | $dconf['dbPort'] = 3306; |
| 96 | - $this->util->dbUtilities->load($dconf['dbHost'].":".$dconf['dbPort'], $dconf['dbUser'], $dconf['dbPass'], $dconf['dbName']); | |
| 93 | + $this->util->dbUtilities->load($dconf['dbHost'],$dconf['dbPort'], $dconf['dbUser'], $dconf['dbPass'], $dconf['dbName']); | |
| 97 | 94 | $sQuery = "SELECT count(*) AS match_count FROM users WHERE username = '$username' AND password = '".md5($password)."'"; |
| 98 | 95 | $res = $this->util->dbUtilities->query($sQuery); |
| 99 | 96 | $ass = $this->util->dbUtilities->fetchAssoc($res); |
| ... | ... | @@ -110,7 +107,22 @@ class upgradeWelcome extends step { |
| 110 | 107 | return $this->error; |
| 111 | 108 | } |
| 112 | 109 | |
| 110 | + /** | |
| 111 | + * Returns step variables | |
| 112 | + * | |
| 113 | + * @author KnowledgeTree Team | |
| 114 | + * @param none | |
| 115 | + * @access public | |
| 116 | + * @return array | |
| 117 | + */ | |
| 118 | + public function getStepVars() | |
| 119 | + { | |
| 120 | + return $this->temp_variables; | |
| 121 | + } | |
| 113 | 122 | |
| 123 | + public function storeSilent() { | |
| 124 | + | |
| 125 | + } | |
| 114 | 126 | } |
| 115 | 127 | |
| 116 | 128 | ?> |
| 117 | 129 | \ No newline at end of file | ... | ... |
setup/wizard/dbUtilities.php
| ... | ... | @@ -101,12 +101,14 @@ class dbUtilities { |
| 101 | 101 | * @access public |
| 102 | 102 | */ |
| 103 | 103 | public function __construct() { |
| 104 | - | |
| 104 | + | |
| 105 | 105 | } |
| 106 | 106 | |
| 107 | - public function load($dhost = 'localhost', $duname, $dpassword, $dbname) { | |
| 107 | + public function load($dhost = 'localhost', $dport = 'default', $duname, $dpassword, $dbname) { | |
| 108 | 108 | if(!$this->isConnected($dhost, $duname, $dpassword, $dbname)) { |
| 109 | - $this->dbhost = $dhost; | |
| 109 | + if($dport == 'default' || $dport == '') | |
| 110 | + $dport = '3306'; | |
| 111 | + $this->dbhost = $dhost.":".$dport; | |
| 110 | 112 | $this->dbuname = $duname; |
| 111 | 113 | $this->dbpassword = $dpassword; |
| 112 | 114 | $this->dbconnection = @mysql_connect($dhost, $duname, $dpassword); | ... | ... |
setup/wizard/iniUtilities.php
setup/wizard/steps/complete.php
| ... | ... | @@ -142,7 +142,7 @@ class complete extends Step { |
| 142 | 142 | // retrieve database information from session |
| 143 | 143 | $dbconf = $this->getDataFromSession("database"); |
| 144 | 144 | // make db connection - admin |
| 145 | - $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dmsname'], $dbconf['dmspassword'], $dbconf['dname']); | |
| 145 | + $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dport'], $dbconf['dmsname'], $dbconf['dmspassword'], $dbconf['dname']); | |
| 146 | 146 | $loaded = $this->util->dbUtilities->getDatabaseLink(); |
| 147 | 147 | if (!$loaded) { |
| 148 | 148 | $this->temp_variables['dbConnectAdmin'] .= '<td><div class="cross"></div></td>' |
| ... | ... | @@ -157,7 +157,7 @@ class complete extends Step { |
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | // make db connection - user |
| 160 | - $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dmsusername'], $dbconf['dmsuserpassword'], $dbconf['dname']); | |
| 160 | + $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dport'], $dbconf['dmsusername'], $dbconf['dmsuserpassword'], $dbconf['dname']); | |
| 161 | 161 | $loaded = $this->util->dbUtilities->getDatabaseLink(); |
| 162 | 162 | // if we can log in to the database, check access |
| 163 | 163 | // TODO check write access? | ... | ... |
setup/wizard/steps/configuration.php
| ... | ... | @@ -307,7 +307,7 @@ class configuration extends Step |
| 307 | 307 | { |
| 308 | 308 | $conf = $this->getDataFromSession("configuration"); // get data from the server |
| 309 | 309 | $dbconf = $this->getDataFromSession("database"); |
| 310 | - $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dmsname'], $dbconf['dmspassword'], $dbconf['dname']); | |
| 310 | + $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dport'], $dbconf['dmsname'], $dbconf['dmspassword'], $dbconf['dname']); | |
| 311 | 311 | $server = $conf['server']; |
| 312 | 312 | $paths = $conf['paths']; |
| 313 | 313 | if ($this->util->isMigration()) { // Check if its an upgrade |
| ... | ... | @@ -355,7 +355,7 @@ class configuration extends Step |
| 355 | 355 | |
| 356 | 356 | private function writeDBSection($server) { |
| 357 | 357 | $dbconf = $this->getDataFromSession("database"); // retrieve database information from session |
| 358 | - $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']); // initialise the db connection | |
| 358 | + $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['dport'], $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']); // initialise the db connection | |
| 359 | 359 | $server = $this->registerDBConfig($server, $dbconf); // add db config to server variables |
| 360 | 360 | $table = 'config_settings'; |
| 361 | 361 | foreach($server as $item) { // write server settings to config_settings table and config.ini |
| ... | ... | @@ -577,12 +577,41 @@ class configuration extends Step |
| 577 | 577 | return $this->temp_variables['paths']['configFile']['path']; |
| 578 | 578 | } |
| 579 | 579 | $configPath = $this->getContentPath(); |
| 580 | - if(!$configPath) return false; | |
| 580 | + if(!$configPath) { | |
| 581 | + return false; | |
| 582 | + } | |
| 581 | 583 | $this->util->iniUtilities->load($configPath); |
| 582 | 584 | $data = $this->util->iniUtilities->getFileByLine(); |
| 583 | 585 | $firstline = true; |
| 584 | 586 | foreach ($data as $k=>$v) { |
| 585 | 587 | if(preg_match('/config.ini/', $k)) { // Find config.ini |
| 588 | + if($k == "config/config.ini") { // Source install and source upgrades | |
| 589 | + $configIniPath = realpath(SYSTEM_DIR.$k); | |
| 590 | + if($configIniPath) | |
| 591 | + return $configIniPath; | |
| 592 | + } | |
| 593 | + return $k; | |
| 594 | + } | |
| 595 | + } | |
| 596 | + | |
| 597 | + return false; | |
| 598 | + } | |
| 599 | + | |
| 600 | + public function readCachePath() { | |
| 601 | + $cachePath = $this->getCachePath(); | |
| 602 | + if(!$cachePath) { | |
| 603 | + return false; | |
| 604 | + } | |
| 605 | + $this->util->iniUtilities->load($cachePath); | |
| 606 | + $data = $this->util->iniUtilities->getFileByLine(); | |
| 607 | + $firstline = true; | |
| 608 | + foreach ($data as $k=>$v) { | |
| 609 | + if(preg_match('/cache/', $k)) { // Find config.ini | |
| 610 | + if($k == "var/cache") { // Source install and source upgrades | |
| 611 | + $configIniPath = realpath(SYSTEM_DIR.$k); | |
| 612 | + if($configIniPath) | |
| 613 | + return $configIniPath; | |
| 614 | + } | |
| 586 | 615 | return $k; |
| 587 | 616 | } |
| 588 | 617 | } | ... | ... |
setup/wizard/steps/database.php
| ... | ... | @@ -319,11 +319,11 @@ class database extends Step |
| 319 | 319 | $this->error['dmsuserpassword'] = "Passwords do not match: " . $this->dmsuserpassword." ". $this->getPassword2(); |
| 320 | 320 | return false; |
| 321 | 321 | } |
| 322 | - if($this->dport == '') { | |
| 323 | - $this->util->dbUtilities->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 324 | - } else { | |
| 325 | - $this->util->dbUtilities->load($this->dhost.":".$this->dport, $this->duname, $this->dpassword, $this->dname); | |
| 326 | - } | |
| 322 | +// if($this->dport == '') { | |
| 323 | +// $this->util->dbUtilities->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 324 | +// } else { | |
| 325 | + $this->util->dbUtilities->load($this->dhost, $this->dport, $this->duname, $this->dpassword, $this->dname); | |
| 326 | +// } | |
| 327 | 327 | if (!$this->util->dbUtilities->getDatabaseLink()) { |
| 328 | 328 | $this->error['con'] = "Could not connect to the database, please check username and password"; |
| 329 | 329 | return false; |
| ... | ... | @@ -582,7 +582,7 @@ class database extends Step |
| 582 | 582 | * @return object mysql connection |
| 583 | 583 | */ |
| 584 | 584 | private function connectMysql() { |
| 585 | - $this->util->dbUtilities->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 585 | + $this->util->dbUtilities->load($this->dhost, $this->dport, $this->duname, $this->dpassword, $this->dname); | |
| 586 | 586 | } |
| 587 | 587 | |
| 588 | 588 | /** |
| ... | ... | @@ -842,7 +842,7 @@ class database extends Step |
| 842 | 842 | $this->dpassword = 'root'; |
| 843 | 843 | $this->dname = 'dms_install'; |
| 844 | 844 | $this->dbbinary = 'mysql'; |
| 845 | - $this->util->dbUtilities->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 845 | + $this->util->dbUtilities->load($this->dhost, '', $this->duname, $this->dpassword, $this->dname); | |
| 846 | 846 | $this->createSchema(); |
| 847 | 847 | echo 'Schema loaded<br>'; |
| 848 | 848 | } | ... | ... |
setup/wizard/steps/install.php
| ... | ... | @@ -107,7 +107,7 @@ class install extends step |
| 107 | 107 | public function callHome() { |
| 108 | 108 | $conf = $this->getDataFromSession("install"); // retrieve database information from session |
| 109 | 109 | $dbconf = $this->getDataFromSession("database"); |
| 110 | - $this->util->dbUtilities->load($dbconf['dhost'], $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']); // initialise the db connection | |
| 110 | + $this->util->dbUtilities->load($dbconf['dhost'], '', $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']); // initialise the db connection | |
| 111 | 111 | $complete = 1; |
| 112 | 112 | if($conf['call_home'] == 'enable'){ |
| 113 | 113 | $complete = 0; | ... | ... |
setup/wizard/templates/complete.tpl
| ... | ... | @@ -136,7 +136,7 @@ |
| 136 | 136 | <?php if($migrate_check) { ?> |
| 137 | 137 | <a href="../upgrade/index.php" class="back button_next" style="width:190px;" onclick="javascript:{w.clearSessions();}">Goto Database Upgrade</a> |
| 138 | 138 | <?php } else { ?> |
| 139 | - <a href="../../login.php?redirect=<?php echo $redirect; ?>" class="back button_next" style="width:90px;" onclick="javascript:{w.clearSessions();}">Goto Login</a> | |
| 139 | + <a href="../../login.php?" class="back button_next" style="width:90px;" onclick="javascript:{w.clearSessions();}">Goto Login</a> | |
| 140 | 140 | <?php } ?> |
| 141 | 141 | <?php |
| 142 | 142 | if ($install_environment == 'Zend') { | ... | ... |