Commit d03540dfb5449cc2fca768f536d4ed521cde4eca
Merge branch 'edge' of github.com:ktgit/knowledgetree into edge
Showing
15 changed files
with
5026 additions
and
4986 deletions
setup/wizard/installUtil.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Installer Utilities Library | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | -class InstallUtil { | |
| 43 | - /** | |
| 44 | - * Constructs installation object | |
| 45 | - * | |
| 46 | - * @author KnowledgeTree Team | |
| 47 | - * @access public | |
| 48 | - */ | |
| 49 | - public function __construct() { | |
| 50 | - } | |
| 51 | - | |
| 52 | - /** | |
| 53 | - * Check if system needs to be installed | |
| 54 | - * | |
| 55 | - * @author KnowledgeTree Team | |
| 56 | - * @access public | |
| 57 | - * @param none | |
| 58 | - * @return boolean | |
| 59 | - */ | |
| 60 | - public function isSystemInstalled() { | |
| 61 | - if (file_exists(dirname(__FILE__)."/install")) { | |
| 62 | - | |
| 63 | - return true; | |
| 64 | - } | |
| 65 | - | |
| 66 | - return false; | |
| 67 | - } | |
| 68 | - | |
| 69 | - public function error($error) { | |
| 70 | - $template_vars['error'] = $error; | |
| 71 | - $file = "templates/error.tpl"; | |
| 72 | - if (!file_exists($file)) { | |
| 73 | - return false; | |
| 74 | - } | |
| 75 | - extract($template_vars); // Extract the vars to local namespace | |
| 76 | - ob_start(); | |
| 77 | - include($file); | |
| 78 | - $contents = ob_get_contents(); | |
| 79 | - ob_end_clean(); | |
| 80 | - echo $contents; | |
| 81 | - } | |
| 82 | - /** | |
| 83 | - * Check if system needs to be installed | |
| 84 | - * | |
| 85 | - * @author KnowledgeTree Team | |
| 86 | - * @access public | |
| 87 | - * @param none | |
| 88 | - * @return mixed | |
| 89 | - */ | |
| 90 | - public function checkStructurePermissions() { | |
| 91 | - // Check if Wizard Directory is writable | |
| 92 | - if(!$this->_checkPermission(WIZARD_DIR)) { | |
| 93 | - return 'wizard'; | |
| 94 | - } | |
| 95 | - | |
| 96 | - return true; | |
| 97 | - } | |
| 98 | - | |
| 99 | - /** | |
| 100 | - * Redirect | |
| 101 | - * | |
| 102 | - * This function redirects the client. This is done by issuing | |
| 103 | - * a "Location" header and exiting if wanted. If you set $rfc2616 to true | |
| 104 | - * HTTP will output a hypertext note with the location of the redirect. | |
| 105 | - * | |
| 106 | - * @static | |
| 107 | - * @access public | |
| 108 | - * have already been sent. | |
| 109 | - * @param string $url URL where the redirect should go to. | |
| 110 | - * @param bool $exit Whether to exit immediately after redirection. | |
| 111 | - * @param bool $rfc2616 Wheter to output a hypertext note where we're | |
| 112 | - * redirecting to (Redirecting to <a href="...">...</a>.) | |
| 113 | - * @return mixed Returns true on succes (or exits) or false if headers | |
| 114 | - */ | |
| 115 | - public function redirect($url, $exit = true, $rfc2616 = false) | |
| 116 | - { | |
| 117 | - if (headers_sent()) { | |
| 118 | - return false; | |
| 119 | - } | |
| 120 | - | |
| 121 | - $url = $this->absoluteURI($url); | |
| 122 | - header('Location: '. $url); | |
| 123 | - | |
| 124 | - if ( $rfc2616 && isset($_SERVER['REQUEST_METHOD']) && | |
| 125 | - $_SERVER['REQUEST_METHOD'] != 'HEAD') { | |
| 126 | - printf('Redirecting to: <a href="%s">%s</a>.', $url, $url); | |
| 127 | - } | |
| 128 | - if ($exit) { | |
| 129 | - exit; | |
| 130 | - } | |
| 131 | - return true; | |
| 132 | - } | |
| 133 | - | |
| 134 | - /** | |
| 135 | - * Absolute URI | |
| 136 | - * | |
| 137 | - * This function returns the absolute URI for the partial URL passed. | |
| 138 | - * The current scheme (HTTP/HTTPS), host server, port, current script | |
| 139 | - * location are used if necessary to resolve any relative URLs. | |
| 140 | - * | |
| 141 | - * Offsets potentially created by PATH_INFO are taken care of to resolve | |
| 142 | - * relative URLs to the current script. | |
| 143 | - * | |
| 144 | - * You can choose a new protocol while resolving the URI. This is | |
| 145 | - * particularly useful when redirecting a web browser using relative URIs | |
| 146 | - * and to switch from HTTP to HTTPS, or vice-versa, at the same time. | |
| 147 | - * | |
| 148 | - * @author Philippe Jausions <Philippe.Jausions@11abacus.com> | |
| 149 | - * @static | |
| 150 | - * @access public | |
| 151 | - * @param string $url Absolute or relative URI the redirect should go to. | |
| 152 | - * @param string $protocol Protocol to use when redirecting URIs. | |
| 153 | - * @param integer $port A new port number. | |
| 154 | - * @return string The absolute URI. | |
| 155 | - */ | |
| 156 | - public function absoluteURI($url = null, $protocol = null, $port = null) | |
| 157 | - { | |
| 158 | - // filter CR/LF | |
| 159 | - $url = str_replace(array("\r", "\n"), ' ', $url); | |
| 160 | - | |
| 161 | - // Mess around with already absolute URIs | |
| 162 | - if (preg_match('!^([a-z0-9]+)://!i', $url)) { | |
| 163 | - if (empty($protocol) && empty($port)) { | |
| 164 | - return $url; | |
| 165 | - } | |
| 166 | - if (!empty($protocol)) { | |
| 167 | - $url = $protocol .':'. end($array = explode(':', $url, 2)); | |
| 168 | - } | |
| 169 | - if (!empty($port)) { | |
| 170 | - $url = preg_replace('!^(([a-z0-9]+)://[^/:]+)(:[\d]+)?!i', | |
| 171 | - '\1:'. $port, $url); | |
| 172 | - } | |
| 173 | - return $url; | |
| 174 | - } | |
| 175 | - | |
| 176 | - $host = 'localhost'; | |
| 177 | - if (!empty($_SERVER['HTTP_HOST'])) { | |
| 178 | - list($host) = explode(':', $_SERVER['HTTP_HOST']); | |
| 179 | - } elseif (!empty($_SERVER['SERVER_NAME'])) { | |
| 180 | - list($host) = explode(':', $_SERVER['SERVER_NAME']); | |
| 181 | - } | |
| 182 | - | |
| 183 | - if (empty($protocol)) { | |
| 184 | - if (isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'], 'on')) { | |
| 185 | - $protocol = 'https'; | |
| 186 | - } else { | |
| 187 | - $protocol = 'http'; | |
| 188 | - } | |
| 189 | - if (!isset($port) || $port != intval($port)) { | |
| 190 | - $port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80; | |
| 191 | - } | |
| 192 | - } | |
| 193 | - | |
| 194 | - if ($protocol == 'http' && $port == 80) { | |
| 195 | - unset($port); | |
| 196 | - } | |
| 197 | - if ($protocol == 'https' && $port == 443) { | |
| 198 | - unset($port); | |
| 199 | - } | |
| 200 | - | |
| 201 | - $server = $protocol .'://'. $host . (isset($port) ? ':'. $port : ''); | |
| 202 | - | |
| 203 | - if (!strlen($url)) { | |
| 204 | - $url = isset($_SERVER['REQUEST_URI']) ? | |
| 205 | - $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']; | |
| 206 | - } | |
| 207 | - | |
| 208 | - if ($url{0} == '/') { | |
| 209 | - return $server . $url; | |
| 210 | - } | |
| 211 | - | |
| 212 | - // Check for PATH_INFO | |
| 213 | - if (isset($_SERVER['PATH_INFO']) && strlen($_SERVER['PATH_INFO']) && | |
| 214 | - $_SERVER['PHP_SELF'] != $_SERVER['PATH_INFO']) { | |
| 215 | - $path = dirname(substr($_SERVER['PHP_SELF'], 0, -strlen($_SERVER['PATH_INFO']))); | |
| 216 | - } else { | |
| 217 | - $path = dirname($_SERVER['PHP_SELF']); | |
| 218 | - } | |
| 219 | - | |
| 220 | - if (substr($path = strtr($path, '\\', '/'), -1) != '/') { | |
| 221 | - $path .= '/'; | |
| 222 | - } | |
| 223 | - | |
| 224 | - return $server . $path . $url; | |
| 225 | - } | |
| 226 | - | |
| 227 | - /** | |
| 228 | - * Check whether a given directory / file path exists and is writable | |
| 229 | - * | |
| 230 | - * @author KnowledgeTree Team | |
| 231 | - * @access private | |
| 232 | - * @param string $dir The directory / file to check | |
| 233 | - * @param boolean $create Whether to create the directory if it doesn't exist | |
| 234 | - * @return array The message and css class to use | |
| 235 | - */ | |
| 236 | - private function _checkPermission($dir) | |
| 237 | - { | |
| 238 | - if(is_readable($dir) && is_writable($dir)) { | |
| 239 | - return true; | |
| 240 | - } else { | |
| 241 | - return false; | |
| 242 | - } | |
| 243 | - | |
| 244 | - } | |
| 245 | - | |
| 246 | - /** | |
| 247 | - * Check whether a given directory / file path exists and is writable | |
| 248 | - * | |
| 249 | - * @author KnowledgeTree Team | |
| 250 | - * @access private | |
| 251 | - * @param string $dir The directory / file to check | |
| 252 | - * @param boolean $create Whether to create the directory if it doesn't exist | |
| 253 | - * @return array The message and css class to use | |
| 254 | - */ | |
| 255 | - public function checkPermission($dir, $create=false) | |
| 256 | - { | |
| 257 | - $exist = 'Directory doesn\'t exist'; | |
| 258 | - $write = 'Directory not writable'; | |
| 259 | - $ret = array('class' => 'cross'); | |
| 260 | - | |
| 261 | - if(!file_exists($dir)){ | |
| 262 | - if($create === false){ | |
| 263 | - $this->done = false; | |
| 264 | - $ret['msg'] = $exist; | |
| 265 | - return $ret; | |
| 266 | - } | |
| 267 | - $par_dir = dirname($dir); | |
| 268 | - if(!file_exists($par_dir)){ | |
| 269 | - $this->done = false; | |
| 270 | - $ret['msg'] = $exist; | |
| 271 | - return $ret; | |
| 272 | - } | |
| 273 | - if(!is_writable($par_dir)){ | |
| 274 | - $this->done = false; | |
| 275 | - $ret['msg'] = $exist; | |
| 276 | - return $ret; | |
| 277 | - } | |
| 278 | - mkdir($dir, '0755'); | |
| 279 | - } | |
| 280 | - | |
| 281 | - if(is_writable($dir)){ | |
| 282 | - $ret['class'] = 'tick'; | |
| 283 | - | |
| 284 | - return $ret; | |
| 285 | - } | |
| 286 | - | |
| 287 | - $this->done = false; | |
| 288 | - $ret['msg'] = $write; | |
| 289 | - return $ret; | |
| 290 | - } | |
| 291 | - | |
| 292 | - /** | |
| 293 | - * Change permissions on a directory helper | |
| 294 | - * | |
| 295 | - * @author KnowledgeTree Team | |
| 296 | - * @access public | |
| 297 | - * @param string $folderPath The directory / file to check | |
| 298 | - * @return boolean | |
| 299 | - */ | |
| 300 | - public function canChangePermissions($folderPath) { | |
| 301 | - return $this->_chmodRecursive($folderPath, 0755); | |
| 302 | - } | |
| 303 | - | |
| 304 | - /** | |
| 305 | - * Change permissions on a directory (recursive) | |
| 306 | - * | |
| 307 | - * @author KnowledgeTree Team | |
| 308 | - * @access private | |
| 309 | - * @param string $folderPath The directory / file to check | |
| 310 | - * @param boolean $create Whether to create the directory if it doesn't exist | |
| 311 | - * @return boolean | |
| 312 | - */ | |
| 313 | - private function _chmodRecursive($path, $filemode) { | |
| 314 | - if (!is_dir($path)) | |
| 315 | - return chmod($path, $filemode); | |
| 316 | - $dh = opendir($path); | |
| 317 | - while (($file = readdir($dh)) !== false) { | |
| 318 | - if($file != '.' && $file != '..') { | |
| 319 | - $fullpath = $path.'/'.$file; | |
| 320 | - if(is_link($fullpath)) | |
| 321 | - return false; | |
| 322 | - elseif(!is_dir($fullpath)) { | |
| 323 | - $perms = substr(sprintf('%o', fileperms($fullpath)), -4); | |
| 324 | - if($perms != $filemode) | |
| 325 | - if (!chmod($fullpath, $filemode)) | |
| 326 | - return false; | |
| 327 | - } elseif(!$this->chmodRecursive($fullpath, $filemode)) | |
| 328 | - return false; | |
| 329 | - } | |
| 330 | - } | |
| 331 | - closedir($dh); | |
| 332 | - $perms = substr(sprintf('%o', fileperms($path)), -4); | |
| 333 | - if($perms != $filemode) { | |
| 334 | - if(chmod($path, $filemode)) | |
| 335 | - return true; | |
| 336 | - else | |
| 337 | - return false; | |
| 338 | - } else { | |
| 339 | - return true; | |
| 340 | - } | |
| 341 | - } | |
| 342 | - | |
| 343 | - /** | |
| 344 | - * Check if a file can be written to a folder | |
| 345 | - * | |
| 346 | - * @author KnowledgeTree Team | |
| 347 | - * @access public | |
| 348 | - * @param string $filename the path to the file to create | |
| 349 | - * @return boolean | |
| 350 | - */ | |
| 351 | - public function canWriteFile($filename) { | |
| 352 | - $fh = fopen($filename, "w+"); | |
| 353 | - if($fr = fwrite($fh, 'test') === false) { | |
| 354 | - return false; | |
| 355 | - } | |
| 356 | - | |
| 357 | - fclose($fh); | |
| 358 | - return true; | |
| 359 | - } | |
| 360 | - | |
| 361 | - /** | |
| 362 | - * Attempt using the php-java bridge | |
| 363 | - * | |
| 364 | - * @author KnowledgeTree Team | |
| 365 | - * @access public | |
| 366 | - * @param none | |
| 367 | - * @return boolean | |
| 368 | - */ | |
| 369 | - public function javaBridge() { | |
| 370 | - try { | |
| 371 | - $javaSystem = new Java('java.lang.System'); | |
| 372 | - } catch (JavaException $e) { | |
| 373 | - return false; | |
| 374 | - } | |
| 375 | - return true; | |
| 376 | - } | |
| 377 | - | |
| 378 | - /** | |
| 379 | - * Check if Zend Bridge is enabled | |
| 380 | - * | |
| 381 | - * @author KnowledgeTree Team | |
| 382 | - * @param none | |
| 383 | - * @access public | |
| 384 | - * @return boolean | |
| 385 | - */ | |
| 386 | - public function zendBridge() { | |
| 387 | - $mods = get_loaded_extensions(); | |
| 388 | - if(in_array('Zend Java Bridge', $mods)) | |
| 389 | - return true; | |
| 390 | - else | |
| 391 | - return false; | |
| 392 | - } | |
| 393 | - | |
| 394 | - /** | |
| 395 | - * Attempt java detection | |
| 396 | - * | |
| 397 | - * @author KnowledgeTree Team | |
| 398 | - * @access public | |
| 399 | - * @param none | |
| 400 | - * @return boolean | |
| 401 | - */ | |
| 402 | - public function tryJava1() { | |
| 403 | - $response = $this->pexec("java -version"); // Java Runtime Check | |
| 404 | - if(empty($response['out'])) { | |
| 405 | - return ''; | |
| 406 | - } | |
| 407 | - | |
| 408 | - return 'java'; | |
| 409 | - } | |
| 410 | - | |
| 411 | - /** | |
| 412 | - * Attempt java detection | |
| 413 | - * | |
| 414 | - * @author KnowledgeTree Team | |
| 415 | - * @access public | |
| 416 | - * @param none | |
| 417 | - * @return boolean | |
| 418 | - */ | |
| 419 | - public function tryJava2() { | |
| 420 | - $response = $this->pexec("java"); // Java Runtime Check | |
| 421 | - if(empty($response['out'])) { | |
| 422 | - return ''; | |
| 423 | - } | |
| 424 | - | |
| 425 | - return 'java'; | |
| 426 | - } | |
| 427 | - | |
| 428 | - /** | |
| 429 | - * Attempt java detection | |
| 430 | - * | |
| 431 | - * @author KnowledgeTree Team | |
| 432 | - * @access public | |
| 433 | - * @param none | |
| 434 | - * @return boolean | |
| 435 | - */ | |
| 436 | - public function tryJava3() { | |
| 437 | - $response = $this->pexec("whereis java"); // Java Runtime Check | |
| 438 | - if(empty($response['out'])) { | |
| 439 | - return ''; | |
| 440 | - } | |
| 441 | - $broke = explode(' ', $response['out'][0]); | |
| 442 | - foreach ($broke as $r) { | |
| 443 | - $match = preg_match('/bin/', $r); | |
| 444 | - if($match) { | |
| 445 | - return preg_replace('/java:/', '', $r); | |
| 446 | - } | |
| 447 | - } | |
| 448 | - } | |
| 449 | - | |
| 450 | - /** | |
| 451 | - * Check if user entered location of JRE | |
| 452 | - * | |
| 453 | - * @author KnowledgeTree Team | |
| 454 | - * @param none | |
| 455 | - * @access private | |
| 456 | - * @return mixed | |
| 457 | - */ | |
| 458 | - public function javaSpecified() { | |
| 459 | - if(isset($_POST['java'])) { | |
| 460 | - if($_POST['java'] != '') { | |
| 461 | - return $_POST['java']; | |
| 462 | - } else { | |
| 463 | - return false; | |
| 464 | - } | |
| 465 | - } else { | |
| 466 | - return false; | |
| 467 | - } | |
| 468 | - } | |
| 469 | - | |
| 470 | - /** | |
| 471 | - * Check if user entered location of PHP | |
| 472 | - * | |
| 473 | - * @author KnowledgeTree Team | |
| 474 | - * @param none | |
| 475 | - * @access private | |
| 476 | - * @return mixed | |
| 477 | - */ | |
| 478 | - public function phpSpecified() { | |
| 479 | - if(isset($_POST['php'])) { | |
| 480 | - if($_POST['php'] != '') { | |
| 481 | - return $_POST['php']; | |
| 482 | - } else { | |
| 483 | - return false; | |
| 484 | - } | |
| 485 | - } else { | |
| 486 | - return false; | |
| 487 | - } | |
| 488 | - } | |
| 489 | - | |
| 490 | - public function openOfficeSpecified() { | |
| 491 | - if(isset($_POST['soffice'])) { | |
| 492 | - if($_POST['soffice'] != '') { | |
| 493 | - return $_POST['soffice']; | |
| 494 | - } else { | |
| 495 | - return false; | |
| 496 | - } | |
| 497 | - } else { | |
| 498 | - return false; | |
| 499 | - } | |
| 500 | - } | |
| 501 | - | |
| 502 | - /** | |
| 503 | - * Get session data from post | |
| 504 | - * | |
| 505 | - * @author KnowledgeTree Team | |
| 506 | - * @params none | |
| 507 | - * @access private | |
| 508 | - * @return boolean | |
| 509 | - */ | |
| 510 | - public function getDataFromSession($class) { | |
| 511 | - if(empty($_SESSION[$class])) { | |
| 512 | - return false; | |
| 513 | - } | |
| 514 | - | |
| 515 | - return $_SESSION[$class]; | |
| 516 | - } | |
| 517 | - | |
| 518 | - /** | |
| 519 | - * Determine the location of JAVA_HOME | |
| 520 | - * | |
| 521 | - * @author KnowledgeTree Team | |
| 522 | - * @param none | |
| 523 | - * @access private | |
| 524 | - * @return mixed | |
| 525 | - */ | |
| 526 | - function getJava() { | |
| 527 | - $response = $this->tryJava1(); | |
| 528 | - if(!is_array($response)) { | |
| 529 | - $response = $this->tryJava2(); | |
| 530 | - if(!is_array($response)) { | |
| 531 | - $response = $this->tryJava3(); | |
| 532 | - } | |
| 533 | - } | |
| 534 | - | |
| 535 | - return $response; | |
| 536 | - } | |
| 537 | - | |
| 538 | - /** | |
| 539 | - * Determine the location of PHP | |
| 540 | - * | |
| 541 | - * @author KnowledgeTree Team | |
| 542 | - * @param none | |
| 543 | - * @access private | |
| 544 | - * @return mixed | |
| 545 | - */ | |
| 546 | - function getPhp() { | |
| 547 | - $cmd = "whereis php"; | |
| 548 | - $res = $this->getPhpHelper($cmd); | |
| 549 | - if($res != '') { | |
| 550 | - return $res; | |
| 551 | - } | |
| 552 | - $cmd = "which php"; | |
| 553 | - return $this->getPhpHelper($cmd); | |
| 554 | - } | |
| 555 | - | |
| 556 | - function getPhpHelper($cmd) { | |
| 557 | - $response = $this->pexec($cmd); | |
| 558 | - if(is_array($response['out'])) { | |
| 559 | - if (isset($response['out'][0])) { | |
| 560 | - $broke = explode(' ', $response['out'][0]); | |
| 561 | - foreach ($broke as $r) { | |
| 562 | - $match = preg_match('/bin/', $r); | |
| 563 | - if($match) { | |
| 564 | - return preg_replace('/php:/', '', $r); | |
| 565 | - } | |
| 566 | - } | |
| 567 | - } | |
| 568 | - } | |
| 569 | - | |
| 570 | - return ''; | |
| 571 | - } | |
| 572 | - | |
| 573 | - function getOpenOffice() { | |
| 574 | - $cmd = "whereis soffice"; | |
| 575 | - $res = $this->getOpenOfficeHelper($cmd); | |
| 576 | - if($res != '') { | |
| 577 | - return $res; | |
| 578 | - } | |
| 579 | - $cmd = "which soffice"; | |
| 580 | - return $this->getOpenOfficeHelper($cmd); | |
| 581 | - } | |
| 582 | - | |
| 583 | - function getOpenOfficeHelper($cmd) { | |
| 584 | - $response = $this->pexec($cmd); | |
| 585 | - if(is_array($response['out'])) { | |
| 586 | - if (isset($response['out'][0])) { | |
| 587 | - $broke = explode(' ', $response['out'][0]); | |
| 588 | - foreach ($broke as $r) { | |
| 589 | - $match = preg_match('/bin/', $r); | |
| 590 | - if($match) { | |
| 591 | - return preg_replace('/soffice:/', '', $r); | |
| 592 | - } | |
| 593 | - } | |
| 594 | - } | |
| 595 | - } | |
| 596 | - | |
| 597 | - return ''; | |
| 598 | - } | |
| 599 | - | |
| 600 | - | |
| 601 | - /** | |
| 602 | - * Portably execute a command on any of the supported platforms. | |
| 603 | - * | |
| 604 | - * @author KnowledgeTree Team | |
| 605 | - * @access public | |
| 606 | - * @param string $aCmd | |
| 607 | - * @param array $aOptions | |
| 608 | - * @return array | |
| 609 | - */ | |
| 610 | - public function pexec($aCmd, $aOptions = null) { | |
| 611 | - if (is_array($aCmd)) { | |
| 612 | - $sCmd = $this->safeShellString($aCmd); | |
| 613 | - } else { | |
| 614 | - $sCmd = $aCmd; | |
| 615 | - } | |
| 616 | - $sAppend = $this->arrayGet($aOptions, 'append'); | |
| 617 | - if ($sAppend) { | |
| 618 | - $sCmd .= " >> " . escapeshellarg($sAppend); | |
| 619 | - } | |
| 620 | - $sPopen = $this->arrayGet($aOptions, 'popen'); | |
| 621 | - if ($sPopen) { | |
| 622 | - if (WINDOWS_OS) { | |
| 623 | - $sCmd = "start /b \"kt\" " . $sCmd; | |
| 624 | - } | |
| 625 | - return popen($sCmd, $sPopen); | |
| 626 | - } | |
| 627 | - // for exec, check return code and output... | |
| 628 | - $aRet = array(); | |
| 629 | - $aOutput = array(); | |
| 630 | - $iRet = ''; | |
| 631 | - if(WINDOWS_OS) { | |
| 632 | - $sCmd = 'call '.$sCmd; | |
| 633 | - } | |
| 634 | - | |
| 635 | - exec($sCmd, $aOutput, $iRet); | |
| 636 | - $aRet['ret'] = $iRet; | |
| 637 | - $aRet['out'] = $aOutput; | |
| 638 | - | |
| 639 | - return $aRet; | |
| 640 | - } | |
| 641 | - | |
| 642 | - /** | |
| 643 | - * | |
| 644 | - * | |
| 645 | - * @author KnowledgeTree Team | |
| 646 | - * @access public | |
| 647 | - * @return string | |
| 648 | - */ | |
| 649 | - public function arrayGet($aArray, $sKey, $mDefault = null, $bDefaultIfEmpty = true) { | |
| 650 | - if (!is_array($aArray)) { | |
| 651 | - $aArray = (array) $aArray; | |
| 652 | - } | |
| 653 | - | |
| 654 | - if ($aArray !== 0 && $aArray !== '0' && empty($aArray)) { | |
| 655 | - return $mDefault; | |
| 656 | - } | |
| 657 | - if (array_key_exists($sKey, $aArray)) { | |
| 658 | - $mVal =& $aArray[$sKey]; | |
| 659 | - if (empty($mVal) && $bDefaultIfEmpty) { | |
| 660 | - return $mDefault; | |
| 661 | - } | |
| 662 | - return $mVal; | |
| 663 | - } | |
| 664 | - return $mDefault; | |
| 665 | - } | |
| 666 | - | |
| 667 | - /** | |
| 668 | - * | |
| 669 | - * | |
| 670 | - * @author KnowledgeTree Team | |
| 671 | - * @access public | |
| 672 | - * @return string | |
| 673 | - */ | |
| 674 | - public function safeShellString () { | |
| 675 | - $aArgs = func_get_args(); | |
| 676 | - $aSafeArgs = array(); | |
| 677 | - if (is_array($aArgs[0])) { | |
| 678 | - $aArgs = $aArgs[0]; | |
| 679 | - } | |
| 680 | - $aSafeArgs[] = escapeshellarg(array_shift($aArgs)); | |
| 681 | - if (is_array($aArgs[0])) { | |
| 682 | - $aArgs = $aArgs; | |
| 683 | - } | |
| 684 | - foreach ($aArgs as $sArg) { | |
| 685 | - if (empty($sArg)) { | |
| 686 | - $aSafeArgs[] = "''"; | |
| 687 | - } else { | |
| 688 | - $aSafeArgs[] = escapeshellarg($sArg); | |
| 689 | - } | |
| 690 | - } | |
| 691 | - return join(" ", $aSafeArgs); | |
| 692 | - } | |
| 693 | - | |
| 694 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Installer Utilities Library | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | +class InstallUtil { | |
| 43 | + | |
| 44 | + private $salt = 'install'; | |
| 45 | + /** | |
| 46 | + * Constructs installation object | |
| 47 | + * | |
| 48 | + * @author KnowledgeTree Team | |
| 49 | + * @access public | |
| 50 | + */ | |
| 51 | + public function __construct() { | |
| 52 | + } | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * Check if system needs to be installed | |
| 56 | + * | |
| 57 | + * @author KnowledgeTree Team | |
| 58 | + * @access public | |
| 59 | + * @param none | |
| 60 | + * @return boolean | |
| 61 | + */ | |
| 62 | + public function isSystemInstalled() { | |
| 63 | + if (file_exists(dirname(__FILE__)."/install")) { | |
| 64 | + | |
| 65 | + return true; | |
| 66 | + } | |
| 67 | + | |
| 68 | + return false; | |
| 69 | + } | |
| 70 | + | |
| 71 | + public function error($error) { | |
| 72 | + $template_vars['error'] = $error; | |
| 73 | + $file = "templates/error.tpl"; | |
| 74 | + if (!file_exists($file)) { | |
| 75 | + return false; | |
| 76 | + } | |
| 77 | + extract($template_vars); // Extract the vars to local namespace | |
| 78 | + ob_start(); | |
| 79 | + include($file); | |
| 80 | + $contents = ob_get_contents(); | |
| 81 | + ob_end_clean(); | |
| 82 | + echo $contents; | |
| 83 | + } | |
| 84 | + /** | |
| 85 | + * Check if system needs to be installed | |
| 86 | + * | |
| 87 | + * @author KnowledgeTree Team | |
| 88 | + * @access public | |
| 89 | + * @param none | |
| 90 | + * @return mixed | |
| 91 | + */ | |
| 92 | + public function checkStructurePermissions() { | |
| 93 | + // Check if Wizard Directory is writable | |
| 94 | + if(!$this->_checkPermission(WIZARD_DIR)) { | |
| 95 | + return 'wizard'; | |
| 96 | + } | |
| 97 | + | |
| 98 | + return true; | |
| 99 | + } | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * Redirect | |
| 103 | + * | |
| 104 | + * This function redirects the client. This is done by issuing | |
| 105 | + * a "Location" header and exiting if wanted. If you set $rfc2616 to true | |
| 106 | + * HTTP will output a hypertext note with the location of the redirect. | |
| 107 | + * | |
| 108 | + * @static | |
| 109 | + * @access public | |
| 110 | + * have already been sent. | |
| 111 | + * @param string $url URL where the redirect should go to. | |
| 112 | + * @param bool $exit Whether to exit immediately after redirection. | |
| 113 | + * @param bool $rfc2616 Wheter to output a hypertext note where we're | |
| 114 | + * redirecting to (Redirecting to <a href="...">...</a>.) | |
| 115 | + * @return mixed Returns true on succes (or exits) or false if headers | |
| 116 | + */ | |
| 117 | + public function redirect($url, $exit = true, $rfc2616 = false) | |
| 118 | + { | |
| 119 | + if (headers_sent()) { | |
| 120 | + return false; | |
| 121 | + } | |
| 122 | + | |
| 123 | + $url = $this->absoluteURI($url); | |
| 124 | + header('Location: '. $url); | |
| 125 | + | |
| 126 | + if ( $rfc2616 && isset($_SERVER['REQUEST_METHOD']) && | |
| 127 | + $_SERVER['REQUEST_METHOD'] != 'HEAD') { | |
| 128 | + printf('Redirecting to: <a href="%s">%s</a>.', $url, $url); | |
| 129 | + } | |
| 130 | + if ($exit) { | |
| 131 | + exit; | |
| 132 | + } | |
| 133 | + return true; | |
| 134 | + } | |
| 135 | + | |
| 136 | + /** | |
| 137 | + * Absolute URI | |
| 138 | + * | |
| 139 | + * This function returns the absolute URI for the partial URL passed. | |
| 140 | + * The current scheme (HTTP/HTTPS), host server, port, current script | |
| 141 | + * location are used if necessary to resolve any relative URLs. | |
| 142 | + * | |
| 143 | + * Offsets potentially created by PATH_INFO are taken care of to resolve | |
| 144 | + * relative URLs to the current script. | |
| 145 | + * | |
| 146 | + * You can choose a new protocol while resolving the URI. This is | |
| 147 | + * particularly useful when redirecting a web browser using relative URIs | |
| 148 | + * and to switch from HTTP to HTTPS, or vice-versa, at the same time. | |
| 149 | + * | |
| 150 | + * @author Philippe Jausions <Philippe.Jausions@11abacus.com> | |
| 151 | + * @static | |
| 152 | + * @access public | |
| 153 | + * @param string $url Absolute or relative URI the redirect should go to. | |
| 154 | + * @param string $protocol Protocol to use when redirecting URIs. | |
| 155 | + * @param integer $port A new port number. | |
| 156 | + * @return string The absolute URI. | |
| 157 | + */ | |
| 158 | + public function absoluteURI($url = null, $protocol = null, $port = null) | |
| 159 | + { | |
| 160 | + // filter CR/LF | |
| 161 | + $url = str_replace(array("\r", "\n"), ' ', $url); | |
| 162 | + | |
| 163 | + // Mess around with already absolute URIs | |
| 164 | + if (preg_match('!^([a-z0-9]+)://!i', $url)) { | |
| 165 | + if (empty($protocol) && empty($port)) { | |
| 166 | + return $url; | |
| 167 | + } | |
| 168 | + if (!empty($protocol)) { | |
| 169 | + $url = $protocol .':'. end($array = explode(':', $url, 2)); | |
| 170 | + } | |
| 171 | + if (!empty($port)) { | |
| 172 | + $url = preg_replace('!^(([a-z0-9]+)://[^/:]+)(:[\d]+)?!i', | |
| 173 | + '\1:'. $port, $url); | |
| 174 | + } | |
| 175 | + return $url; | |
| 176 | + } | |
| 177 | + | |
| 178 | + $host = 'localhost'; | |
| 179 | + if (!empty($_SERVER['HTTP_HOST'])) { | |
| 180 | + list($host) = explode(':', $_SERVER['HTTP_HOST']); | |
| 181 | + } elseif (!empty($_SERVER['SERVER_NAME'])) { | |
| 182 | + list($host) = explode(':', $_SERVER['SERVER_NAME']); | |
| 183 | + } | |
| 184 | + | |
| 185 | + if (empty($protocol)) { | |
| 186 | + if (isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'], 'on')) { | |
| 187 | + $protocol = 'https'; | |
| 188 | + } else { | |
| 189 | + $protocol = 'http'; | |
| 190 | + } | |
| 191 | + if (!isset($port) || $port != intval($port)) { | |
| 192 | + $port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80; | |
| 193 | + } | |
| 194 | + } | |
| 195 | + | |
| 196 | + if ($protocol == 'http' && $port == 80) { | |
| 197 | + unset($port); | |
| 198 | + } | |
| 199 | + if ($protocol == 'https' && $port == 443) { | |
| 200 | + unset($port); | |
| 201 | + } | |
| 202 | + | |
| 203 | + $server = $protocol .'://'. $host . (isset($port) ? ':'. $port : ''); | |
| 204 | + | |
| 205 | + if (!strlen($url)) { | |
| 206 | + $url = isset($_SERVER['REQUEST_URI']) ? | |
| 207 | + $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']; | |
| 208 | + } | |
| 209 | + | |
| 210 | + if ($url{0} == '/') { | |
| 211 | + return $server . $url; | |
| 212 | + } | |
| 213 | + | |
| 214 | + // Check for PATH_INFO | |
| 215 | + if (isset($_SERVER['PATH_INFO']) && strlen($_SERVER['PATH_INFO']) && | |
| 216 | + $_SERVER['PHP_SELF'] != $_SERVER['PATH_INFO']) { | |
| 217 | + $path = dirname(substr($_SERVER['PHP_SELF'], 0, -strlen($_SERVER['PATH_INFO']))); | |
| 218 | + } else { | |
| 219 | + $path = dirname($_SERVER['PHP_SELF']); | |
| 220 | + } | |
| 221 | + | |
| 222 | + if (substr($path = strtr($path, '\\', '/'), -1) != '/') { | |
| 223 | + $path .= '/'; | |
| 224 | + } | |
| 225 | + | |
| 226 | + return $server . $path . $url; | |
| 227 | + } | |
| 228 | + | |
| 229 | + /** | |
| 230 | + * Check whether a given directory / file path exists and is writable | |
| 231 | + * | |
| 232 | + * @author KnowledgeTree Team | |
| 233 | + * @access private | |
| 234 | + * @param string $dir The directory / file to check | |
| 235 | + * @param boolean $create Whether to create the directory if it doesn't exist | |
| 236 | + * @return array The message and css class to use | |
| 237 | + */ | |
| 238 | + private function _checkPermission($dir) | |
| 239 | + { | |
| 240 | + if(is_readable($dir) && is_writable($dir)) { | |
| 241 | + return true; | |
| 242 | + } else { | |
| 243 | + return false; | |
| 244 | + } | |
| 245 | + | |
| 246 | + } | |
| 247 | + | |
| 248 | + /** | |
| 249 | + * Check whether a given directory / file path exists and is writable | |
| 250 | + * | |
| 251 | + * @author KnowledgeTree Team | |
| 252 | + * @access private | |
| 253 | + * @param string $dir The directory / file to check | |
| 254 | + * @param boolean $create Whether to create the directory if it doesn't exist | |
| 255 | + * @return array The message and css class to use | |
| 256 | + */ | |
| 257 | + public function checkPermission($dir, $create=false) | |
| 258 | + { | |
| 259 | + $exist = 'Directory doesn\'t exist'; | |
| 260 | + $write = 'Directory not writable'; | |
| 261 | + $ret = array('class' => 'cross'); | |
| 262 | + | |
| 263 | + if(!file_exists($dir)){ | |
| 264 | + if($create === false){ | |
| 265 | + $this->done = false; | |
| 266 | + $ret['msg'] = $exist; | |
| 267 | + return $ret; | |
| 268 | + } | |
| 269 | + $par_dir = dirname($dir); | |
| 270 | + if(!file_exists($par_dir)){ | |
| 271 | + $this->done = false; | |
| 272 | + $ret['msg'] = $exist; | |
| 273 | + return $ret; | |
| 274 | + } | |
| 275 | + if(!is_writable($par_dir)){ | |
| 276 | + $this->done = false; | |
| 277 | + $ret['msg'] = $exist; | |
| 278 | + return $ret; | |
| 279 | + } | |
| 280 | + mkdir($dir, '0755'); | |
| 281 | + } | |
| 282 | + | |
| 283 | + if(is_writable($dir)){ | |
| 284 | + $ret['class'] = 'tick'; | |
| 285 | + | |
| 286 | + return $ret; | |
| 287 | + } | |
| 288 | + | |
| 289 | + $this->done = false; | |
| 290 | + $ret['msg'] = $write; | |
| 291 | + return $ret; | |
| 292 | + } | |
| 293 | + | |
| 294 | + /** | |
| 295 | + * Change permissions on a directory helper | |
| 296 | + * | |
| 297 | + * @author KnowledgeTree Team | |
| 298 | + * @access public | |
| 299 | + * @param string $folderPath The directory / file to check | |
| 300 | + * @return boolean | |
| 301 | + */ | |
| 302 | + public function canChangePermissions($folderPath) { | |
| 303 | + return $this->_chmodRecursive($folderPath, 0755); | |
| 304 | + } | |
| 305 | + | |
| 306 | + /** | |
| 307 | + * Change permissions on a directory (recursive) | |
| 308 | + * | |
| 309 | + * @author KnowledgeTree Team | |
| 310 | + * @access private | |
| 311 | + * @param string $folderPath The directory / file to check | |
| 312 | + * @param boolean $create Whether to create the directory if it doesn't exist | |
| 313 | + * @return boolean | |
| 314 | + */ | |
| 315 | + private function _chmodRecursive($path, $filemode) { | |
| 316 | + if (!is_dir($path)) | |
| 317 | + return chmod($path, $filemode); | |
| 318 | + $dh = opendir($path); | |
| 319 | + while (($file = readdir($dh)) !== false) { | |
| 320 | + if($file != '.' && $file != '..') { | |
| 321 | + $fullpath = $path.'/'.$file; | |
| 322 | + if(is_link($fullpath)) | |
| 323 | + return false; | |
| 324 | + elseif(!is_dir($fullpath)) { | |
| 325 | + $perms = substr(sprintf('%o', fileperms($fullpath)), -4); | |
| 326 | + if($perms != $filemode) | |
| 327 | + if (!chmod($fullpath, $filemode)) | |
| 328 | + return false; | |
| 329 | + } elseif(!$this->chmodRecursive($fullpath, $filemode)) | |
| 330 | + return false; | |
| 331 | + } | |
| 332 | + } | |
| 333 | + closedir($dh); | |
| 334 | + $perms = substr(sprintf('%o', fileperms($path)), -4); | |
| 335 | + if($perms != $filemode) { | |
| 336 | + if(chmod($path, $filemode)) | |
| 337 | + return true; | |
| 338 | + else | |
| 339 | + return false; | |
| 340 | + } else { | |
| 341 | + return true; | |
| 342 | + } | |
| 343 | + } | |
| 344 | + | |
| 345 | + /** | |
| 346 | + * Check if a file can be written to a folder | |
| 347 | + * | |
| 348 | + * @author KnowledgeTree Team | |
| 349 | + * @access public | |
| 350 | + * @param string $filename the path to the file to create | |
| 351 | + * @return boolean | |
| 352 | + */ | |
| 353 | + public function canWriteFile($filename) { | |
| 354 | + $fh = fopen($filename, "w+"); | |
| 355 | + if($fr = fwrite($fh, 'test') === false) { | |
| 356 | + return false; | |
| 357 | + } | |
| 358 | + | |
| 359 | + fclose($fh); | |
| 360 | + return true; | |
| 361 | + } | |
| 362 | + | |
| 363 | + /** | |
| 364 | + * Attempt using the php-java bridge | |
| 365 | + * | |
| 366 | + * @author KnowledgeTree Team | |
| 367 | + * @access public | |
| 368 | + * @param none | |
| 369 | + * @return boolean | |
| 370 | + */ | |
| 371 | + public function javaBridge() { | |
| 372 | + try { | |
| 373 | + $javaSystem = new Java('java.lang.System'); | |
| 374 | + } catch (JavaException $e) { | |
| 375 | + return false; | |
| 376 | + } | |
| 377 | + return true; | |
| 378 | + } | |
| 379 | + | |
| 380 | + /** | |
| 381 | + * Check if Zend Bridge is enabled | |
| 382 | + * | |
| 383 | + * @author KnowledgeTree Team | |
| 384 | + * @param none | |
| 385 | + * @access public | |
| 386 | + * @return boolean | |
| 387 | + */ | |
| 388 | + public function zendBridge() { | |
| 389 | + $mods = get_loaded_extensions(); | |
| 390 | + if(in_array('Zend Java Bridge', $mods)) | |
| 391 | + return true; | |
| 392 | + else | |
| 393 | + return false; | |
| 394 | + } | |
| 395 | + | |
| 396 | + /** | |
| 397 | + * Attempt java detection | |
| 398 | + * | |
| 399 | + * @author KnowledgeTree Team | |
| 400 | + * @access public | |
| 401 | + * @param none | |
| 402 | + * @return boolean | |
| 403 | + */ | |
| 404 | + public function tryJava1() { | |
| 405 | + $response = $this->pexec("java -version"); // Java Runtime Check | |
| 406 | + if(empty($response['out'])) { | |
| 407 | + return ''; | |
| 408 | + } | |
| 409 | + | |
| 410 | + return 'java'; | |
| 411 | + } | |
| 412 | + | |
| 413 | + /** | |
| 414 | + * Attempt java detection | |
| 415 | + * | |
| 416 | + * @author KnowledgeTree Team | |
| 417 | + * @access public | |
| 418 | + * @param none | |
| 419 | + * @return boolean | |
| 420 | + */ | |
| 421 | + public function tryJava2() { | |
| 422 | + $response = $this->pexec("java"); // Java Runtime Check | |
| 423 | + if(empty($response['out'])) { | |
| 424 | + return ''; | |
| 425 | + } | |
| 426 | + | |
| 427 | + return 'java'; | |
| 428 | + } | |
| 429 | + | |
| 430 | + /** | |
| 431 | + * Attempt java detection | |
| 432 | + * | |
| 433 | + * @author KnowledgeTree Team | |
| 434 | + * @access public | |
| 435 | + * @param none | |
| 436 | + * @return boolean | |
| 437 | + */ | |
| 438 | + public function tryJava3() { | |
| 439 | + $response = $this->pexec("whereis java"); // Java Runtime Check | |
| 440 | + if(empty($response['out'])) { | |
| 441 | + return ''; | |
| 442 | + } | |
| 443 | + $broke = explode(' ', $response['out'][0]); | |
| 444 | + foreach ($broke as $r) { | |
| 445 | + $match = preg_match('/bin/', $r); | |
| 446 | + if($match) { | |
| 447 | + return preg_replace('/java:/', '', $r); | |
| 448 | + } | |
| 449 | + } | |
| 450 | + } | |
| 451 | + | |
| 452 | + /** | |
| 453 | + * Check if user entered location of JRE | |
| 454 | + * | |
| 455 | + * @author KnowledgeTree Team | |
| 456 | + * @param none | |
| 457 | + * @access private | |
| 458 | + * @return mixed | |
| 459 | + */ | |
| 460 | + public function javaSpecified() { | |
| 461 | + if(isset($_POST['java'])) { | |
| 462 | + if($_POST['java'] != '') { | |
| 463 | + return $_POST['java']; | |
| 464 | + } else { | |
| 465 | + return false; | |
| 466 | + } | |
| 467 | + } else { | |
| 468 | + return false; | |
| 469 | + } | |
| 470 | + } | |
| 471 | + | |
| 472 | + /** | |
| 473 | + * Check if user entered location of PHP | |
| 474 | + * | |
| 475 | + * @author KnowledgeTree Team | |
| 476 | + * @param none | |
| 477 | + * @access private | |
| 478 | + * @return mixed | |
| 479 | + */ | |
| 480 | + public function phpSpecified() { | |
| 481 | + if(isset($_POST['php'])) { | |
| 482 | + if($_POST['php'] != '') { | |
| 483 | + return $_POST['php']; | |
| 484 | + } else { | |
| 485 | + return false; | |
| 486 | + } | |
| 487 | + } else { | |
| 488 | + return false; | |
| 489 | + } | |
| 490 | + } | |
| 491 | + | |
| 492 | + public function openOfficeSpecified() { | |
| 493 | + if(isset($_POST['soffice'])) { | |
| 494 | + if($_POST['soffice'] != '') { | |
| 495 | + return $_POST['soffice']; | |
| 496 | + } else { | |
| 497 | + return false; | |
| 498 | + } | |
| 499 | + } else { | |
| 500 | + return false; | |
| 501 | + } | |
| 502 | + } | |
| 503 | + | |
| 504 | + /** | |
| 505 | + * Get session data from post | |
| 506 | + * | |
| 507 | + * @author KnowledgeTree Team | |
| 508 | + * @params none | |
| 509 | + * @access private | |
| 510 | + * @return boolean | |
| 511 | + */ | |
| 512 | + public function getDataFromSession($class) { | |
| 513 | + if(empty($_SESSION[$this->salt][$class])) { | |
| 514 | + return false; | |
| 515 | + } | |
| 516 | + | |
| 517 | + return $_SESSION[$this->salt][$class]; | |
| 518 | + } | |
| 519 | + | |
| 520 | + /** | |
| 521 | + * Determine the location of JAVA_HOME | |
| 522 | + * | |
| 523 | + * @author KnowledgeTree Team | |
| 524 | + * @param none | |
| 525 | + * @access private | |
| 526 | + * @return mixed | |
| 527 | + */ | |
| 528 | + function getJava() { | |
| 529 | + $response = $this->tryJava1(); | |
| 530 | + if(!is_array($response)) { | |
| 531 | + $response = $this->tryJava2(); | |
| 532 | + if(!is_array($response)) { | |
| 533 | + $response = $this->tryJava3(); | |
| 534 | + } | |
| 535 | + } | |
| 536 | + | |
| 537 | + return $response; | |
| 538 | + } | |
| 539 | + | |
| 540 | + /** | |
| 541 | + * Determine the location of PHP | |
| 542 | + * | |
| 543 | + * @author KnowledgeTree Team | |
| 544 | + * @param none | |
| 545 | + * @access private | |
| 546 | + * @return mixed | |
| 547 | + */ | |
| 548 | + function getPhp() { | |
| 549 | + $cmd = "whereis php"; | |
| 550 | + $res = $this->getPhpHelper($cmd); | |
| 551 | + if($res != '') { | |
| 552 | + return $res; | |
| 553 | + } | |
| 554 | + $cmd = "which php"; | |
| 555 | + return $this->getPhpHelper($cmd); | |
| 556 | + } | |
| 557 | + | |
| 558 | + function getPhpHelper($cmd) { | |
| 559 | + $response = $this->pexec($cmd); | |
| 560 | + if(is_array($response['out'])) { | |
| 561 | + if (isset($response['out'][0])) { | |
| 562 | + $broke = explode(' ', $response['out'][0]); | |
| 563 | + foreach ($broke as $r) { | |
| 564 | + $match = preg_match('/bin/', $r); | |
| 565 | + if($match) { | |
| 566 | + return preg_replace('/php:/', '', $r); | |
| 567 | + } | |
| 568 | + } | |
| 569 | + } | |
| 570 | + } | |
| 571 | + | |
| 572 | + return ''; | |
| 573 | + } | |
| 574 | + | |
| 575 | + function getOpenOffice() { | |
| 576 | + $cmd = "whereis soffice"; | |
| 577 | + $res = $this->getOpenOfficeHelper($cmd); | |
| 578 | + if($res != '') { | |
| 579 | + return $res; | |
| 580 | + } | |
| 581 | + $cmd = "which soffice"; | |
| 582 | + return $this->getOpenOfficeHelper($cmd); | |
| 583 | + } | |
| 584 | + | |
| 585 | + function getOpenOfficeHelper($cmd) { | |
| 586 | + $response = $this->pexec($cmd); | |
| 587 | + if(is_array($response['out'])) { | |
| 588 | + if (isset($response['out'][0])) { | |
| 589 | + $broke = explode(' ', $response['out'][0]); | |
| 590 | + foreach ($broke as $r) { | |
| 591 | + $match = preg_match('/bin/', $r); | |
| 592 | + if($match) { | |
| 593 | + return preg_replace('/soffice:/', '', $r); | |
| 594 | + } | |
| 595 | + } | |
| 596 | + } | |
| 597 | + } | |
| 598 | + | |
| 599 | + return ''; | |
| 600 | + } | |
| 601 | + | |
| 602 | + | |
| 603 | + /** | |
| 604 | + * Portably execute a command on any of the supported platforms. | |
| 605 | + * | |
| 606 | + * @author KnowledgeTree Team | |
| 607 | + * @access public | |
| 608 | + * @param string $aCmd | |
| 609 | + * @param array $aOptions | |
| 610 | + * @return array | |
| 611 | + */ | |
| 612 | + public function pexec($aCmd, $aOptions = null) { | |
| 613 | + if (is_array($aCmd)) { | |
| 614 | + $sCmd = $this->safeShellString($aCmd); | |
| 615 | + } else { | |
| 616 | + $sCmd = $aCmd; | |
| 617 | + } | |
| 618 | + $sAppend = $this->arrayGet($aOptions, 'append'); | |
| 619 | + if ($sAppend) { | |
| 620 | + $sCmd .= " >> " . escapeshellarg($sAppend); | |
| 621 | + } | |
| 622 | + $sPopen = $this->arrayGet($aOptions, 'popen'); | |
| 623 | + if ($sPopen) { | |
| 624 | + if (WINDOWS_OS) { | |
| 625 | + $sCmd = "start /b \"kt\" " . $sCmd; | |
| 626 | + } | |
| 627 | + return popen($sCmd, $sPopen); | |
| 628 | + } | |
| 629 | + // for exec, check return code and output... | |
| 630 | + $aRet = array(); | |
| 631 | + $aOutput = array(); | |
| 632 | + $iRet = ''; | |
| 633 | + if(WINDOWS_OS) { | |
| 634 | + $sCmd = 'call '.$sCmd; | |
| 635 | + } | |
| 636 | + | |
| 637 | + exec($sCmd, $aOutput, $iRet); | |
| 638 | + $aRet['ret'] = $iRet; | |
| 639 | + $aRet['out'] = $aOutput; | |
| 640 | + | |
| 641 | + return $aRet; | |
| 642 | + } | |
| 643 | + | |
| 644 | + /** | |
| 645 | + * | |
| 646 | + * | |
| 647 | + * @author KnowledgeTree Team | |
| 648 | + * @access public | |
| 649 | + * @return string | |
| 650 | + */ | |
| 651 | + public function arrayGet($aArray, $sKey, $mDefault = null, $bDefaultIfEmpty = true) { | |
| 652 | + if (!is_array($aArray)) { | |
| 653 | + $aArray = (array) $aArray; | |
| 654 | + } | |
| 655 | + | |
| 656 | + if ($aArray !== 0 && $aArray !== '0' && empty($aArray)) { | |
| 657 | + return $mDefault; | |
| 658 | + } | |
| 659 | + if (array_key_exists($sKey, $aArray)) { | |
| 660 | + $mVal =& $aArray[$sKey]; | |
| 661 | + if (empty($mVal) && $bDefaultIfEmpty) { | |
| 662 | + return $mDefault; | |
| 663 | + } | |
| 664 | + return $mVal; | |
| 665 | + } | |
| 666 | + return $mDefault; | |
| 667 | + } | |
| 668 | + | |
| 669 | + /** | |
| 670 | + * | |
| 671 | + * | |
| 672 | + * @author KnowledgeTree Team | |
| 673 | + * @access public | |
| 674 | + * @return string | |
| 675 | + */ | |
| 676 | + public function safeShellString () { | |
| 677 | + $aArgs = func_get_args(); | |
| 678 | + $aSafeArgs = array(); | |
| 679 | + if (is_array($aArgs[0])) { | |
| 680 | + $aArgs = $aArgs[0]; | |
| 681 | + } | |
| 682 | + $aSafeArgs[] = escapeshellarg(array_shift($aArgs)); | |
| 683 | + if (is_array($aArgs[0])) { | |
| 684 | + $aArgs = $aArgs; | |
| 685 | + } | |
| 686 | + foreach ($aArgs as $sArg) { | |
| 687 | + if (empty($sArg)) { | |
| 688 | + $aSafeArgs[] = "''"; | |
| 689 | + } else { | |
| 690 | + $aSafeArgs[] = escapeshellarg($sArg); | |
| 691 | + } | |
| 692 | + } | |
| 693 | + return join(" ", $aSafeArgs); | |
| 694 | + } | |
| 695 | + | |
| 696 | +} | |
| 695 | 697 | ?> |
| 696 | 698 | \ No newline at end of file | ... | ... |
setup/wizard/installer.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Installer Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | - | |
| 43 | -class Installer { | |
| 44 | - /** | |
| 45 | - * Reference to simple xml object | |
| 46 | - * | |
| 47 | - * @author KnowledgeTree Team | |
| 48 | - * @access protected | |
| 49 | - * @var object SimpleXMLElement | |
| 50 | - */ | |
| 51 | - protected $simpleXmlObj = null; | |
| 52 | - | |
| 53 | - /** | |
| 54 | - * Reference to step action object | |
| 55 | - * | |
| 56 | - * @author KnowledgeTree Team | |
| 57 | - * @access protected | |
| 58 | - * @var object StepAction | |
| 59 | - */ | |
| 60 | - protected $stepAction = null; | |
| 61 | - | |
| 62 | - /** | |
| 63 | - * Reference to session object | |
| 64 | - * | |
| 65 | - * @author KnowledgeTree Team | |
| 66 | - * @access protected | |
| 67 | - * @var object Session | |
| 68 | - */ | |
| 69 | - protected $session = null; | |
| 70 | - | |
| 71 | - /** | |
| 72 | - * List of installation steps as strings | |
| 73 | - * | |
| 74 | - * @author KnowledgeTree Team | |
| 75 | - * @access protected | |
| 76 | - * @var array string | |
| 77 | - */ | |
| 78 | - protected $stepClassNames = array(); | |
| 79 | - | |
| 80 | - /** | |
| 81 | - * List of installation steps as human readable strings | |
| 82 | - * | |
| 83 | - * @author KnowledgeTree Team | |
| 84 | - * @access protected | |
| 85 | - * @var array string | |
| 86 | - */ | |
| 87 | - protected $stepNames = array(); | |
| 88 | - | |
| 89 | - /** | |
| 90 | - * List of installation steps as human readable strings | |
| 91 | - * | |
| 92 | - * @author KnowledgeTree Team | |
| 93 | - * @access protected | |
| 94 | - * @var array string | |
| 95 | - */ | |
| 96 | - protected $stepObjects = array(); | |
| 97 | - | |
| 98 | - /** | |
| 99 | - * Order in which steps have to be installed | |
| 100 | - * | |
| 101 | - * @author KnowledgeTree Team | |
| 102 | - * @access protected | |
| 103 | - * @var array string | |
| 104 | - */ | |
| 105 | - protected $installOrders = array(); | |
| 106 | - | |
| 107 | - /** | |
| 108 | - * List of installation properties | |
| 109 | - * | |
| 110 | - * @author KnowledgeTree Team | |
| 111 | - * @access protected | |
| 112 | - * @var array string | |
| 113 | - */ | |
| 114 | - protected $installProperties = array(); | |
| 115 | - | |
| 116 | - /** | |
| 117 | - * Flag if a step object needs confirmation | |
| 118 | - * | |
| 119 | - * @author KnowledgeTree Team | |
| 120 | - * @access protected | |
| 121 | - * @var boolean | |
| 122 | - */ | |
| 123 | - protected $stepConfirmation = false; | |
| 124 | - | |
| 125 | - /** | |
| 126 | - * Flag if a step object needs confirmation | |
| 127 | - * | |
| 128 | - * @author KnowledgeTree Team | |
| 129 | - * @access protected | |
| 130 | - * @var boolean | |
| 131 | - */ | |
| 132 | - protected $stepDisplayFirst = false; | |
| 133 | - | |
| 134 | - private $installerAction = ''; | |
| 135 | - | |
| 136 | - /** | |
| 137 | - * Constructs installation object | |
| 138 | - * | |
| 139 | - * @author KnowledgeTree Team | |
| 140 | - * @access public | |
| 141 | - * @param object Session $session Instance of the Session object | |
| 142 | - */ | |
| 143 | - public function __construct($session = null) { | |
| 144 | - $this->session = $session; | |
| 145 | - } | |
| 146 | - | |
| 147 | - /** | |
| 148 | - * Read xml configuration file | |
| 149 | - * | |
| 150 | - * @author KnowledgeTree Team | |
| 151 | - * @param string $name of config file | |
| 152 | - * @access private | |
| 153 | - * @return object | |
| 154 | - */ | |
| 155 | - private function _readXml($name = "config.xml") { | |
| 156 | - try { | |
| 157 | - $this->simpleXmlObj = simplexml_load_file(CONF_DIR.$name); | |
| 158 | - } catch (Exception $e) { | |
| 159 | - $iutil = new InstallUtil(); | |
| 160 | - $iutil->error("Error reading configuration file: $name"); | |
| 161 | - exit(); | |
| 162 | - } | |
| 163 | - } | |
| 164 | - | |
| 165 | - /** | |
| 166 | - * Checks if first step of installer | |
| 167 | - * | |
| 168 | - * @author KnowledgeTree Team | |
| 169 | - * @param none | |
| 170 | - * @access private | |
| 171 | - * @return boolean | |
| 172 | - */ | |
| 173 | - private function _firstStep() { | |
| 174 | - if(isset($_GET['step_name'])) { | |
| 175 | - return false; | |
| 176 | - } | |
| 177 | - | |
| 178 | - return true; | |
| 179 | - } | |
| 180 | - | |
| 181 | - /** | |
| 182 | - * Checks if first step of installer | |
| 183 | - * | |
| 184 | - * @author KnowledgeTree Team | |
| 185 | - * @param none | |
| 186 | - * @access private | |
| 187 | - * @return boolean | |
| 188 | - */ | |
| 189 | - private function _firstStepPeriod() { | |
| 190 | - if(isset($_GET['step_name'])) { | |
| 191 | - if($_GET['step_name'] != 'welcome') | |
| 192 | - return false; | |
| 193 | - } | |
| 194 | - | |
| 195 | - return true; | |
| 196 | - } | |
| 197 | - | |
| 198 | - /** | |
| 199 | - * Returns next step | |
| 200 | - * | |
| 201 | - * @author KnowledgeTree Team | |
| 202 | - * @param none | |
| 203 | - * @access private | |
| 204 | - * @return string | |
| 205 | - */ | |
| 206 | - private function _getNextStep() { | |
| 207 | - return $this->_getStepName(1); | |
| 208 | - } | |
| 209 | - | |
| 210 | - /** | |
| 211 | - * Returns previous step | |
| 212 | - * | |
| 213 | - * @author KnowledgeTree Team | |
| 214 | - * @param none | |
| 215 | - * @access private | |
| 216 | - * @return string | |
| 217 | - */ | |
| 218 | - private function _getPreviousStep() { | |
| 219 | - return $this->_getStepName(-1); | |
| 220 | - } | |
| 221 | - | |
| 222 | - /** | |
| 223 | - * Returns the step name, given a position | |
| 224 | - * | |
| 225 | - * @author KnowledgeTree Team | |
| 226 | - * @param integer $pos current position | |
| 227 | - * @access private | |
| 228 | - * @return string $name | |
| 229 | - */ | |
| 230 | - private function _getStepName($pos = 0) { | |
| 231 | - if($this->_firstStep()) { | |
| 232 | - $step = (string) $this->simpleXmlObj->steps->step[0]; | |
| 233 | - } else { | |
| 234 | - $pos += $this->getStepPosition(); | |
| 235 | - $step = (string) $this->simpleXmlObj->steps->step[$pos]; | |
| 236 | - } | |
| 237 | - | |
| 238 | - return $step; | |
| 239 | - } | |
| 240 | - | |
| 241 | - /** | |
| 242 | - * Executes next step | |
| 243 | - * | |
| 244 | - * @author KnowledgeTree Team | |
| 245 | - * @param none | |
| 246 | - * @access private | |
| 247 | - * @return string | |
| 248 | - */ | |
| 249 | - private function _proceed() { | |
| 250 | - $step_name = $this->_getNextStep(); | |
| 251 | - | |
| 252 | - return $this->_runStepAction($step_name); | |
| 253 | - } | |
| 254 | - | |
| 255 | - /** | |
| 256 | - * Executes previous step | |
| 257 | - * | |
| 258 | - * @author KnowledgeTree Team | |
| 259 | - * @param none | |
| 260 | - * @access private | |
| 261 | - * @return string | |
| 262 | - */ | |
| 263 | - private function _backward() { | |
| 264 | - $step_name = $this->_getPreviousStep(); | |
| 265 | - | |
| 266 | - return $this->_runStepAction($step_name); | |
| 267 | - } | |
| 268 | - | |
| 269 | - /** | |
| 270 | - * Executes step landing | |
| 271 | - * | |
| 272 | - * @author KnowledgeTree Team | |
| 273 | - * @param none | |
| 274 | - * @access private | |
| 275 | - * @return string | |
| 276 | - */ | |
| 277 | - private function _landing() { | |
| 278 | - $step_name = $this->_getStepName(); | |
| 279 | - | |
| 280 | - return $this->_runStepAction($step_name); | |
| 281 | - } | |
| 282 | - | |
| 283 | - /** | |
| 284 | - * Executes step based on step class name | |
| 285 | - * | |
| 286 | - * @author KnowledgeTree Team | |
| 287 | - * @param string $step_name | |
| 288 | - * @access private | |
| 289 | - * @return string | |
| 290 | - */ | |
| 291 | - private function _runStepAction($stepName) { | |
| 292 | - $this->stepAction = new stepAction($stepName); | |
| 293 | - $this->stepAction->setUpStepAction($this->getSteps(), $this->getStepNames(), $this->getStepConfirmation(), $this->stepDisplayFirst(), $this->getSession(), $this->getInstallProperties()); | |
| 294 | - | |
| 295 | - return $this->stepAction->doAction(); | |
| 296 | - } | |
| 297 | - | |
| 298 | - private function stepDisplayFirst() { | |
| 299 | - if($this->installerAction == 'edit') | |
| 300 | - return false; // | |
| 301 | - $class = $this->stepAction->createStep(); // Get step class | |
| 302 | - return $class->displayFirst(); // Check if class needs to display first | |
| 303 | - } | |
| 304 | - | |
| 305 | - /** | |
| 306 | - * Set steps class names in string format | |
| 307 | - * | |
| 308 | - * @author KnowledgeTree Team | |
| 309 | - * @param none | |
| 310 | - * @access private | |
| 311 | - * @return array | |
| 312 | - */ | |
| 313 | - private function _getInstallOrders() { | |
| 314 | - return $this->installOrders; | |
| 315 | - } | |
| 316 | - | |
| 317 | - /** | |
| 318 | - * Set steps as names | |
| 319 | - * | |
| 320 | - * @author KnowledgeTree Team | |
| 321 | - * @param none | |
| 322 | - * @access private | |
| 323 | - * @return void | |
| 324 | - */ | |
| 325 | - private function _xmlStepsToArray() { | |
| 326 | - if(isset($this->simpleXmlObj)) { | |
| 327 | - foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 328 | - $step_name = (string) $d_step[0]; | |
| 329 | - $this->stepClassNames[] = $step_name; | |
| 330 | - } | |
| 331 | - $this->_loadToSession('stepClassNames', $this->stepClassNames); | |
| 332 | - } | |
| 333 | - } | |
| 334 | - | |
| 335 | - /** | |
| 336 | - * Set steps as human readable strings | |
| 337 | - * | |
| 338 | - * @author KnowledgeTree Team | |
| 339 | - * @param none | |
| 340 | - * @access private | |
| 341 | - * @return void | |
| 342 | - */ | |
| 343 | - private function _xmlStepsNames() { | |
| 344 | - if(isset($this->simpleXmlObj)) { | |
| 345 | - foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 346 | - $step_name = (string) $d_step[0]; | |
| 347 | - $this->stepNames[$step_name] = (string) $d_step['name']; | |
| 348 | - } | |
| 349 | - $this->_loadToSession('stepNames', $this->stepNames); | |
| 350 | - } | |
| 351 | - } | |
| 352 | - | |
| 353 | - /** | |
| 354 | - * Set steps install order | |
| 355 | - * | |
| 356 | - * @author KnowledgeTree Team | |
| 357 | - * @param none | |
| 358 | - * @access private | |
| 359 | - * @return void | |
| 360 | - */ | |
| 361 | - private function _xmlStepsOrders() { | |
| 362 | - if(isset($this->simpleXmlObj)) { | |
| 363 | - foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 364 | - if(isset($d_step['order'])) { | |
| 365 | - $step_name = (string) $d_step[0]; | |
| 366 | - $order = (string) $d_step['order']; | |
| 367 | - $this->installOrders[$order] = $step_name; // Store step install order | |
| 368 | - } | |
| 369 | - } | |
| 370 | - $this->_loadToSession('installOrders', $this->installOrders); | |
| 371 | - } | |
| 372 | - } | |
| 373 | - | |
| 374 | - /** | |
| 375 | - * Set install properties | |
| 376 | - * | |
| 377 | - * @author KnowledgeTree Team | |
| 378 | - * @param none | |
| 379 | - * @access private | |
| 380 | - * @return void | |
| 381 | - */ | |
| 382 | - private function _xmlInstallProperties() { | |
| 383 | - if(isset($this->simpleXmlObj)) { | |
| 384 | - $this->installProperties['install_version'] = (string) $this->simpleXmlObj['version']; | |
| 385 | - $this->installProperties['install_type'] = (string) $this->simpleXmlObj['type']; | |
| 386 | - $this->_loadToSession('installProperties', $this->installProperties); | |
| 387 | - } | |
| 388 | - } | |
| 389 | - | |
| 390 | - /** | |
| 391 | - * Install steps | |
| 392 | - * | |
| 393 | - * @author KnowledgeTree Team | |
| 394 | - * @param none | |
| 395 | - * @access private | |
| 396 | - * @return void | |
| 397 | - */ | |
| 398 | - private function _runStepsInstallers() { | |
| 399 | - $steps = $this->_getInstallOrders(); | |
| 400 | - for ($i=1; $i< count($steps)+1; $i++) { | |
| 401 | - $this->_installHelper($steps[$i]); | |
| 402 | - } | |
| 403 | - | |
| 404 | - $this->_completeInstall(); | |
| 405 | - } | |
| 406 | - | |
| 407 | - /** | |
| 408 | - * Complete install cleanup process | |
| 409 | - * | |
| 410 | - * @author KnowledgeTree Team | |
| 411 | - * @param none | |
| 412 | - * @access private | |
| 413 | - * @return void | |
| 414 | - */ | |
| 415 | - private function _completeInstall() { | |
| 416 | - @touch("install"); | |
| 417 | - } | |
| 418 | - | |
| 419 | - /** | |
| 420 | - * Install steps helper | |
| 421 | - * | |
| 422 | - * @author KnowledgeTree Team | |
| 423 | - * @param none | |
| 424 | - * @access private | |
| 425 | - * @return void | |
| 426 | - */ | |
| 427 | - private function _installHelper($className) { | |
| 428 | - $stepAction = new stepAction($className); // Instantiate a step action | |
| 429 | - $class = $stepAction->createStep(); // Get step class | |
| 430 | - if($class) { // Check if class Exists | |
| 431 | - if($class->runInstall()) { // Check if step needs to be installed | |
| 432 | - $class->setDataFromSession($className); // Set Session Information | |
| 433 | - $class->setPostConfig(); // Set any posted variables | |
| 434 | - $response = $class->installStep(); // Run install step | |
| 435 | - // TODO : Break on error response | |
| 436 | - } | |
| 437 | - } else { | |
| 438 | - $iutil = new InstallUtil(); | |
| 439 | - $iutil->error("Class File Missing in Step Directory: $className"); | |
| 440 | - exit(); | |
| 441 | - } | |
| 442 | - } | |
| 443 | - | |
| 444 | - /** | |
| 445 | - * Reset all session information on welcome landing | |
| 446 | - * | |
| 447 | - * @author KnowledgeTree Team | |
| 448 | - * @param none | |
| 449 | - * @access private | |
| 450 | - * @return void | |
| 451 | - */ | |
| 452 | - private function _resetSessions() { | |
| 453 | - if($this->session) { | |
| 454 | - if($this->_firstStepPeriod()) { | |
| 455 | - foreach ($this->getSteps() as $class) { | |
| 456 | - $this->session->un_setClass($class); | |
| 457 | - } | |
| 458 | - foreach ($this->getStepNames() as $class) { | |
| 459 | - $this->session->un_setClass($class); | |
| 460 | - } | |
| 461 | - foreach ($this->_getInstallOrders() as $class) { | |
| 462 | - $this->session->un_setClass($class); | |
| 463 | - } | |
| 464 | - } | |
| 465 | - } | |
| 466 | - } | |
| 467 | - | |
| 468 | - function _loadFromSessions() { | |
| 469 | - $this->stepClassNames = $this->session->get('stepClassNames'); | |
| 470 | - if(!$this->stepClassNames) { | |
| 471 | - $this->_xmlStepsToArray(); // String steps | |
| 472 | - } | |
| 473 | - $this->stepNames = $this->session->get('stepNames'); | |
| 474 | - if(!$this->stepNames) { | |
| 475 | - $this->_xmlStepsNames(); | |
| 476 | - } | |
| 477 | - $this->installOrders = $this->session->get('installOrders'); | |
| 478 | - if(!$this->installOrders) { | |
| 479 | - $this->_xmlStepsOrders(); | |
| 480 | - } | |
| 481 | - $this->installProperties = $this->session->get('installProperties'); | |
| 482 | - if(!$this->installProperties) { | |
| 483 | - $this->_xmlInstallProperties(); | |
| 484 | - } | |
| 485 | - } | |
| 486 | - | |
| 487 | - private function loadNeeded() { | |
| 488 | - $this->_readXml(); // Xml steps | |
| 489 | - // Make sure session is cleared | |
| 490 | - $this->_resetSessions(); | |
| 491 | - $this->_loadFromSessions(); | |
| 492 | - if(isset($_POST['Next'])) { | |
| 493 | - $this->installerAction = 'next'; | |
| 494 | - $this->response = 'next'; | |
| 495 | - } elseif (isset($_POST['Previous'])) { | |
| 496 | - $this->installerAction = 'previous'; | |
| 497 | - $this->response = 'previous'; | |
| 498 | - } elseif (isset($_POST['Confirm'])) { | |
| 499 | - $this->installerAction = 'confirm'; | |
| 500 | - $this->response = 'next'; | |
| 501 | - } elseif (isset($_POST['Install'])) { | |
| 502 | - $this->installerAction = 'install'; | |
| 503 | - $this->response = 'next'; | |
| 504 | - } elseif (isset($_POST['Edit'])) { | |
| 505 | - $this->installerAction = 'edit'; | |
| 506 | - $this->response = 'next'; | |
| 507 | - } else { | |
| 508 | - $this->response = ''; | |
| 509 | - $this->installerAction = ''; | |
| 510 | - } | |
| 511 | - } | |
| 512 | - | |
| 513 | - /** | |
| 514 | - * Main control to handle the flow of install | |
| 515 | - * | |
| 516 | - * @author KnowledgeTree Team | |
| 517 | - * @param none | |
| 518 | - * @access public | |
| 519 | - * @return void | |
| 520 | - */ | |
| 521 | - public function step() { | |
| 522 | - $this->loadNeeded(); | |
| 523 | - switch($this->response) { | |
| 524 | - case 'next': | |
| 525 | - $step_name = $this->_getStepName(); | |
| 526 | - $res = $this->_runStepAction($step_name); | |
| 527 | - if($res == 'next') | |
| 528 | - $this->_proceed(); // Load next window | |
| 529 | - elseif ($res == 'install') { | |
| 530 | - $this->_runStepsInstallers(); // Load landing | |
| 531 | - $this->_proceed(); // Load next window | |
| 532 | - } elseif ($res == 'confirm') { | |
| 533 | - if(!$this->stepDisplayFirst()) | |
| 534 | - $this->stepConfirmation = true; | |
| 535 | - $this->_landing(); | |
| 536 | - } elseif ($res == 'landing') { | |
| 537 | - $this->_landing(); | |
| 538 | - } else { | |
| 539 | - } | |
| 540 | - break; | |
| 541 | - case 'previous': | |
| 542 | - $this->_backward(); // Load previous page | |
| 543 | - break; | |
| 544 | - default: | |
| 545 | - // TODO : handle silent | |
| 546 | - $this->_landing(); | |
| 547 | - break; | |
| 548 | - } | |
| 549 | - $this->stepAction->paintAction(); // Display step | |
| 550 | - } | |
| 551 | - | |
| 552 | - /** | |
| 553 | - * Returns the step number | |
| 554 | - * | |
| 555 | - * @author KnowledgeTree Team | |
| 556 | - * @param none | |
| 557 | - * @access public | |
| 558 | - * @return integer $pos | |
| 559 | - */ | |
| 560 | - public function getStepPosition() { | |
| 561 | - $pos = 0; | |
| 562 | - foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 563 | - $step = (string) $d_step; | |
| 564 | - if ($step == $_GET['step_name']) { | |
| 565 | - break; | |
| 566 | - } | |
| 567 | - $pos++; | |
| 568 | - } | |
| 569 | - if(isset($_GET['step'])) { | |
| 570 | - if($_GET['step'] == "next") | |
| 571 | - $pos = $pos+1; | |
| 572 | - else | |
| 573 | - $pos = $pos-1; | |
| 574 | - } | |
| 575 | - | |
| 576 | - return $pos; | |
| 577 | - } | |
| 578 | - | |
| 579 | - /** | |
| 580 | - * Returns the step names for classes | |
| 581 | - * | |
| 582 | - * @author KnowledgeTree Team | |
| 583 | - * @param none | |
| 584 | - * @access public | |
| 585 | - * @return array | |
| 586 | - */ | |
| 587 | - public function getSteps() { | |
| 588 | - return $this->stepClassNames; | |
| 589 | - } | |
| 590 | - | |
| 591 | - /** | |
| 592 | - * Returns the steps as human readable string | |
| 593 | - * | |
| 594 | - * @author KnowledgeTree Team | |
| 595 | - * @param none | |
| 596 | - * @access public | |
| 597 | - * @return array | |
| 598 | - */ | |
| 599 | - public function getStepNames() { | |
| 600 | - return $this->stepNames; | |
| 601 | - } | |
| 602 | - | |
| 603 | - /** | |
| 604 | - * Returns whether or not a confirmation step is needed | |
| 605 | - * | |
| 606 | - * @author KnowledgeTree Team | |
| 607 | - * @param none | |
| 608 | - * @access public | |
| 609 | - * @return boolean | |
| 610 | - */ | |
| 611 | - public function getStepConfirmation() { | |
| 612 | - return $this->stepConfirmation; | |
| 613 | - } | |
| 614 | - | |
| 615 | - /** | |
| 616 | - * Return install properties | |
| 617 | - * | |
| 618 | - * @author KnowledgeTree Team | |
| 619 | - * @param string | |
| 620 | - * @access public | |
| 621 | - * @return string | |
| 622 | - */ | |
| 623 | - public function getInstallProperties() { | |
| 624 | - return $this->installProperties; | |
| 625 | - } | |
| 626 | - | |
| 627 | - /** | |
| 628 | - * Returns session | |
| 629 | - * | |
| 630 | - * @author KnowledgeTree Team | |
| 631 | - * @param none | |
| 632 | - * @access public | |
| 633 | - * @return boolean | |
| 634 | - */ | |
| 635 | - public function getSession() { | |
| 636 | - return $this->session; | |
| 637 | - } | |
| 638 | - | |
| 639 | - /** | |
| 640 | - * Dump of SESSION | |
| 641 | - * | |
| 642 | - * @author KnowledgeTree Team | |
| 643 | - * @param none | |
| 644 | - * @access public | |
| 645 | - * @return array | |
| 646 | - */ | |
| 647 | - public function showSession() { | |
| 648 | - echo '<pre>'; | |
| 649 | - print_r($_SESSION); | |
| 650 | - echo '</pre>'; | |
| 651 | - } | |
| 652 | - | |
| 653 | - /** | |
| 654 | - * Display errors that are not allowing the installer to operate | |
| 655 | - * | |
| 656 | - * @author KnowledgeTree Team | |
| 657 | - * @param none | |
| 658 | - * @access public | |
| 659 | - * @return void | |
| 660 | - */ | |
| 661 | - public function resolveErrors($errors) { | |
| 662 | - echo $errors; | |
| 663 | - exit(); | |
| 664 | - } | |
| 665 | - | |
| 666 | - private function _loadToSession($type, $values) { | |
| 667 | - if($values) { | |
| 668 | - $this->session->set($type , $values); | |
| 669 | - } | |
| 670 | - } | |
| 671 | -} | |
| 672 | - | |
| 673 | -?> | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Installer Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | + | |
| 43 | +class Installer { | |
| 44 | + /** | |
| 45 | + * Reference to simple xml object | |
| 46 | + * | |
| 47 | + * @author KnowledgeTree Team | |
| 48 | + * @access protected | |
| 49 | + * @var object SimpleXMLElement | |
| 50 | + */ | |
| 51 | + protected $simpleXmlObj = null; | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * Reference to step action object | |
| 55 | + * | |
| 56 | + * @author KnowledgeTree Team | |
| 57 | + * @access protected | |
| 58 | + * @var object StepAction | |
| 59 | + */ | |
| 60 | + protected $stepAction = null; | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * Reference to session object | |
| 64 | + * | |
| 65 | + * @author KnowledgeTree Team | |
| 66 | + * @access protected | |
| 67 | + * @var object Session | |
| 68 | + */ | |
| 69 | + protected $session = null; | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * List of installation steps as strings | |
| 73 | + * | |
| 74 | + * @author KnowledgeTree Team | |
| 75 | + * @access protected | |
| 76 | + * @var array string | |
| 77 | + */ | |
| 78 | + protected $stepClassNames = array(); | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * List of installation steps as human readable strings | |
| 82 | + * | |
| 83 | + * @author KnowledgeTree Team | |
| 84 | + * @access protected | |
| 85 | + * @var array string | |
| 86 | + */ | |
| 87 | + protected $stepNames = array(); | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * List of installation steps as human readable strings | |
| 91 | + * | |
| 92 | + * @author KnowledgeTree Team | |
| 93 | + * @access protected | |
| 94 | + * @var array string | |
| 95 | + */ | |
| 96 | + protected $stepObjects = array(); | |
| 97 | + | |
| 98 | + /** | |
| 99 | + * Order in which steps have to be installed | |
| 100 | + * | |
| 101 | + * @author KnowledgeTree Team | |
| 102 | + * @access protected | |
| 103 | + * @var array string | |
| 104 | + */ | |
| 105 | + protected $installOrders = array(); | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * List of installation properties | |
| 109 | + * | |
| 110 | + * @author KnowledgeTree Team | |
| 111 | + * @access protected | |
| 112 | + * @var array string | |
| 113 | + */ | |
| 114 | + protected $installProperties = array(); | |
| 115 | + | |
| 116 | + /** | |
| 117 | + * Flag if a step object needs confirmation | |
| 118 | + * | |
| 119 | + * @author KnowledgeTree Team | |
| 120 | + * @access protected | |
| 121 | + * @var boolean | |
| 122 | + */ | |
| 123 | + protected $stepConfirmation = false; | |
| 124 | + | |
| 125 | + /** | |
| 126 | + * Flag if a step object needs confirmation | |
| 127 | + * | |
| 128 | + * @author KnowledgeTree Team | |
| 129 | + * @access protected | |
| 130 | + * @var boolean | |
| 131 | + */ | |
| 132 | + protected $stepDisplayFirst = false; | |
| 133 | + | |
| 134 | + private $installerAction = ''; | |
| 135 | + | |
| 136 | + /** | |
| 137 | + * Constructs installation object | |
| 138 | + * | |
| 139 | + * @author KnowledgeTree Team | |
| 140 | + * @access public | |
| 141 | + * @param object Session $session Instance of the Session object | |
| 142 | + */ | |
| 143 | + public function __construct($session = null) { | |
| 144 | + $this->session = $session; | |
| 145 | + } | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * Read xml configuration file | |
| 149 | + * | |
| 150 | + * @author KnowledgeTree Team | |
| 151 | + * @param string $name of config file | |
| 152 | + * @access private | |
| 153 | + * @return object | |
| 154 | + */ | |
| 155 | + private function _readXml($name = "config.xml") { | |
| 156 | + try { | |
| 157 | + $this->simpleXmlObj = simplexml_load_file(CONF_DIR.$name); | |
| 158 | + } catch (Exception $e) { | |
| 159 | + $iutil = new InstallUtil(); | |
| 160 | + $iutil->error("Error reading configuration file: $name"); | |
| 161 | + exit(); | |
| 162 | + } | |
| 163 | + } | |
| 164 | + | |
| 165 | + /** | |
| 166 | + * Checks if first step of installer | |
| 167 | + * | |
| 168 | + * @author KnowledgeTree Team | |
| 169 | + * @param none | |
| 170 | + * @access private | |
| 171 | + * @return boolean | |
| 172 | + */ | |
| 173 | + private function _firstStep() { | |
| 174 | + if(isset($_GET['step_name'])) { | |
| 175 | + return false; | |
| 176 | + } | |
| 177 | + | |
| 178 | + return true; | |
| 179 | + } | |
| 180 | + | |
| 181 | + /** | |
| 182 | + * Checks if first step of installer | |
| 183 | + * | |
| 184 | + * @author KnowledgeTree Team | |
| 185 | + * @param none | |
| 186 | + * @access private | |
| 187 | + * @return boolean | |
| 188 | + */ | |
| 189 | + private function _firstStepPeriod() { | |
| 190 | + if(isset($_GET['step_name'])) { | |
| 191 | + if($_GET['step_name'] != 'welcome') | |
| 192 | + return false; | |
| 193 | + } | |
| 194 | + | |
| 195 | + return true; | |
| 196 | + } | |
| 197 | + | |
| 198 | + /** | |
| 199 | + * Returns next step | |
| 200 | + * | |
| 201 | + * @author KnowledgeTree Team | |
| 202 | + * @param none | |
| 203 | + * @access private | |
| 204 | + * @return string | |
| 205 | + */ | |
| 206 | + private function _getNextStep() { | |
| 207 | + return $this->_getStepName(1); | |
| 208 | + } | |
| 209 | + | |
| 210 | + /** | |
| 211 | + * Returns previous step | |
| 212 | + * | |
| 213 | + * @author KnowledgeTree Team | |
| 214 | + * @param none | |
| 215 | + * @access private | |
| 216 | + * @return string | |
| 217 | + */ | |
| 218 | + private function _getPreviousStep() { | |
| 219 | + return $this->_getStepName(-1); | |
| 220 | + } | |
| 221 | + | |
| 222 | + /** | |
| 223 | + * Returns the step name, given a position | |
| 224 | + * | |
| 225 | + * @author KnowledgeTree Team | |
| 226 | + * @param integer $pos current position | |
| 227 | + * @access private | |
| 228 | + * @return string $name | |
| 229 | + */ | |
| 230 | + private function _getStepName($pos = 0) { | |
| 231 | + if($this->_firstStep()) { | |
| 232 | + $step = (string) $this->simpleXmlObj->steps->step[0]; | |
| 233 | + } else { | |
| 234 | + $pos += $this->getStepPosition(); | |
| 235 | + $step = (string) $this->simpleXmlObj->steps->step[$pos]; | |
| 236 | + } | |
| 237 | + | |
| 238 | + return $step; | |
| 239 | + } | |
| 240 | + | |
| 241 | + /** | |
| 242 | + * Executes next step | |
| 243 | + * | |
| 244 | + * @author KnowledgeTree Team | |
| 245 | + * @param none | |
| 246 | + * @access private | |
| 247 | + * @return string | |
| 248 | + */ | |
| 249 | + private function _proceed() { | |
| 250 | + $step_name = $this->_getNextStep(); | |
| 251 | + | |
| 252 | + return $this->_runStepAction($step_name); | |
| 253 | + } | |
| 254 | + | |
| 255 | + /** | |
| 256 | + * Executes previous step | |
| 257 | + * | |
| 258 | + * @author KnowledgeTree Team | |
| 259 | + * @param none | |
| 260 | + * @access private | |
| 261 | + * @return string | |
| 262 | + */ | |
| 263 | + private function _backward() { | |
| 264 | + $step_name = $this->_getPreviousStep(); | |
| 265 | + | |
| 266 | + return $this->_runStepAction($step_name); | |
| 267 | + } | |
| 268 | + | |
| 269 | + /** | |
| 270 | + * Executes step landing | |
| 271 | + * | |
| 272 | + * @author KnowledgeTree Team | |
| 273 | + * @param none | |
| 274 | + * @access private | |
| 275 | + * @return string | |
| 276 | + */ | |
| 277 | + private function _landing() { | |
| 278 | + $step_name = $this->_getStepName(); | |
| 279 | + | |
| 280 | + return $this->_runStepAction($step_name); | |
| 281 | + } | |
| 282 | + | |
| 283 | + /** | |
| 284 | + * Executes step based on step class name | |
| 285 | + * | |
| 286 | + * @author KnowledgeTree Team | |
| 287 | + * @param string $step_name | |
| 288 | + * @access private | |
| 289 | + * @return string | |
| 290 | + */ | |
| 291 | + private function _runStepAction($stepName) { | |
| 292 | + $this->stepAction = new stepAction($stepName); | |
| 293 | + $this->stepAction->setUpStepAction($this->getSteps(), $this->getStepNames(), $this->getStepConfirmation(), $this->stepDisplayFirst(), $this->getSession(), $this->getInstallProperties()); | |
| 294 | + | |
| 295 | + return $this->stepAction->doAction(); | |
| 296 | + } | |
| 297 | + | |
| 298 | + private function stepDisplayFirst() { | |
| 299 | + if($this->installerAction == 'edit') | |
| 300 | + return false; // | |
| 301 | + $class = $this->stepAction->createStep(); // Get step class | |
| 302 | + return $class->displayFirst(); // Check if class needs to display first | |
| 303 | + } | |
| 304 | + | |
| 305 | + /** | |
| 306 | + * Set steps class names in string format | |
| 307 | + * | |
| 308 | + * @author KnowledgeTree Team | |
| 309 | + * @param none | |
| 310 | + * @access private | |
| 311 | + * @return array | |
| 312 | + */ | |
| 313 | + private function _getInstallOrders() { | |
| 314 | + return $this->installOrders; | |
| 315 | + } | |
| 316 | + | |
| 317 | + /** | |
| 318 | + * Set steps as names | |
| 319 | + * | |
| 320 | + * @author KnowledgeTree Team | |
| 321 | + * @param none | |
| 322 | + * @access private | |
| 323 | + * @return void | |
| 324 | + */ | |
| 325 | + private function _xmlStepsToArray() { | |
| 326 | + if(isset($this->simpleXmlObj)) { | |
| 327 | + foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 328 | + $step_name = (string) $d_step[0]; | |
| 329 | + $this->stepClassNames[] = $step_name; | |
| 330 | + } | |
| 331 | + $this->_loadToSession('stepClassNames', $this->stepClassNames); | |
| 332 | + } | |
| 333 | + } | |
| 334 | + | |
| 335 | + /** | |
| 336 | + * Set steps as human readable strings | |
| 337 | + * | |
| 338 | + * @author KnowledgeTree Team | |
| 339 | + * @param none | |
| 340 | + * @access private | |
| 341 | + * @return void | |
| 342 | + */ | |
| 343 | + private function _xmlStepsNames() { | |
| 344 | + if(isset($this->simpleXmlObj)) { | |
| 345 | + foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 346 | + $step_name = (string) $d_step[0]; | |
| 347 | + $this->stepNames[$step_name] = (string) $d_step['name']; | |
| 348 | + } | |
| 349 | + $this->_loadToSession('stepNames', $this->stepNames); | |
| 350 | + } | |
| 351 | + } | |
| 352 | + | |
| 353 | + /** | |
| 354 | + * Set steps install order | |
| 355 | + * | |
| 356 | + * @author KnowledgeTree Team | |
| 357 | + * @param none | |
| 358 | + * @access private | |
| 359 | + * @return void | |
| 360 | + */ | |
| 361 | + private function _xmlStepsOrders() { | |
| 362 | + if(isset($this->simpleXmlObj)) { | |
| 363 | + foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 364 | + if(isset($d_step['order'])) { | |
| 365 | + $step_name = (string) $d_step[0]; | |
| 366 | + $order = (string) $d_step['order']; | |
| 367 | + $this->installOrders[$order] = $step_name; // Store step install order | |
| 368 | + } | |
| 369 | + } | |
| 370 | + $this->_loadToSession('installOrders', $this->installOrders); | |
| 371 | + } | |
| 372 | + } | |
| 373 | + | |
| 374 | + /** | |
| 375 | + * Set install properties | |
| 376 | + * | |
| 377 | + * @author KnowledgeTree Team | |
| 378 | + * @param none | |
| 379 | + * @access private | |
| 380 | + * @return void | |
| 381 | + */ | |
| 382 | + private function _xmlInstallProperties() { | |
| 383 | + if(isset($this->simpleXmlObj)) { | |
| 384 | + $this->installProperties['install_version'] = (string) $this->simpleXmlObj['version']; | |
| 385 | + $this->installProperties['install_type'] = (string) $this->simpleXmlObj['type']; | |
| 386 | + $this->_loadToSession('installProperties', $this->installProperties); | |
| 387 | + } | |
| 388 | + } | |
| 389 | + | |
| 390 | + /** | |
| 391 | + * Install steps | |
| 392 | + * | |
| 393 | + * @author KnowledgeTree Team | |
| 394 | + * @param none | |
| 395 | + * @access private | |
| 396 | + * @return void | |
| 397 | + */ | |
| 398 | + private function _runStepsInstallers() { | |
| 399 | + $steps = $this->_getInstallOrders(); | |
| 400 | + for ($i=1; $i< count($steps)+1; $i++) { | |
| 401 | + $this->_installHelper($steps[$i]); | |
| 402 | + } | |
| 403 | + | |
| 404 | + $this->_completeInstall(); | |
| 405 | + } | |
| 406 | + | |
| 407 | + /** | |
| 408 | + * Complete install cleanup process | |
| 409 | + * | |
| 410 | + * @author KnowledgeTree Team | |
| 411 | + * @param none | |
| 412 | + * @access private | |
| 413 | + * @return void | |
| 414 | + */ | |
| 415 | + private function _completeInstall() { | |
| 416 | + @touch("install"); | |
| 417 | + } | |
| 418 | + | |
| 419 | + /** | |
| 420 | + * Install steps helper | |
| 421 | + * | |
| 422 | + * @author KnowledgeTree Team | |
| 423 | + * @param none | |
| 424 | + * @access private | |
| 425 | + * @return void | |
| 426 | + */ | |
| 427 | + private function _installHelper($className) { | |
| 428 | + $stepAction = new stepAction($className); // Instantiate a step action | |
| 429 | + $class = $stepAction->createStep(); // Get step class | |
| 430 | + if($class) { // Check if class Exists | |
| 431 | + if($class->runInstall()) { // Check if step needs to be installed | |
| 432 | + $class->setDataFromSession($className); // Set Session Information | |
| 433 | + $class->setPostConfig(); // Set any posted variables | |
| 434 | + $response = $class->installStep(); // Run install step | |
| 435 | + // TODO : Break on error response | |
| 436 | + } | |
| 437 | + } else { | |
| 438 | + $iutil = new InstallUtil(); | |
| 439 | + $iutil->error("Class File Missing in Step Directory: $className"); | |
| 440 | + exit(); | |
| 441 | + } | |
| 442 | + } | |
| 443 | + | |
| 444 | + /** | |
| 445 | + * Reset all session information on welcome landing | |
| 446 | + * | |
| 447 | + * @author KnowledgeTree Team | |
| 448 | + * @param none | |
| 449 | + * @access private | |
| 450 | + * @return void | |
| 451 | + */ | |
| 452 | + private function _resetSessions() { | |
| 453 | + if($this->session) { | |
| 454 | + if($this->_firstStepPeriod()) { | |
| 455 | + foreach ($this->getSteps() as $class) { | |
| 456 | + $this->session->un_setClass($class); | |
| 457 | + } | |
| 458 | + foreach ($this->getStepNames() as $class) { | |
| 459 | + $this->session->un_setClass($class); | |
| 460 | + } | |
| 461 | + foreach ($this->_getInstallOrders() as $class) { | |
| 462 | + $this->session->un_setClass($class); | |
| 463 | + } | |
| 464 | + } | |
| 465 | + } | |
| 466 | + } | |
| 467 | + | |
| 468 | + function _loadFromSessions() { | |
| 469 | + $this->stepClassNames = $this->session->get('stepClassNames'); | |
| 470 | + if(!$this->stepClassNames) { | |
| 471 | + $this->_xmlStepsToArray(); // String steps | |
| 472 | + } | |
| 473 | + $this->stepNames = $this->session->get('stepNames'); | |
| 474 | + if(!$this->stepNames) { | |
| 475 | + $this->_xmlStepsNames(); | |
| 476 | + } | |
| 477 | + $this->installOrders = $this->session->get('installOrders'); | |
| 478 | + if(!$this->installOrders) { | |
| 479 | + $this->_xmlStepsOrders(); | |
| 480 | + } | |
| 481 | + $this->installProperties = $this->session->get('installProperties'); | |
| 482 | + if(!$this->installProperties) { | |
| 483 | + $this->_xmlInstallProperties(); | |
| 484 | + } | |
| 485 | + } | |
| 486 | + | |
| 487 | + private function loadNeeded() { | |
| 488 | + $this->_readXml(); // Xml steps | |
| 489 | + // Make sure session is cleared | |
| 490 | + $this->_resetSessions(); | |
| 491 | + $this->_loadFromSessions(); | |
| 492 | + if(isset($_POST['Next'])) { | |
| 493 | + $this->installerAction = 'next'; | |
| 494 | + $this->response = 'next'; | |
| 495 | + } elseif (isset($_POST['Previous'])) { | |
| 496 | + $this->installerAction = 'previous'; | |
| 497 | + $this->response = 'previous'; | |
| 498 | + } elseif (isset($_POST['Confirm'])) { | |
| 499 | + $this->installerAction = 'confirm'; | |
| 500 | + $this->response = 'next'; | |
| 501 | + } elseif (isset($_POST['Install'])) { | |
| 502 | + $this->installerAction = 'install'; | |
| 503 | + $this->response = 'next'; | |
| 504 | + } elseif (isset($_POST['Edit'])) { | |
| 505 | + $this->installerAction = 'edit'; | |
| 506 | + $this->response = 'next'; | |
| 507 | + } else { | |
| 508 | + $this->response = ''; | |
| 509 | + $this->installerAction = ''; | |
| 510 | + } | |
| 511 | + } | |
| 512 | + | |
| 513 | + /** | |
| 514 | + * Main control to handle the flow of install | |
| 515 | + * | |
| 516 | + * @author KnowledgeTree Team | |
| 517 | + * @param none | |
| 518 | + * @access public | |
| 519 | + * @return void | |
| 520 | + */ | |
| 521 | + public function step() { | |
| 522 | + $this->loadNeeded(); | |
| 523 | + switch($this->response) { | |
| 524 | + case 'next': | |
| 525 | + $step_name = $this->_getStepName(); | |
| 526 | + $res = $this->_runStepAction($step_name); | |
| 527 | + if($res == 'next') | |
| 528 | + $this->_proceed(); // Load next window | |
| 529 | + elseif ($res == 'install') { | |
| 530 | + $this->_runStepsInstallers(); // Load landing | |
| 531 | + $this->_proceed(); // Load next window | |
| 532 | + } elseif ($res == 'confirm') { | |
| 533 | + if(!$this->stepDisplayFirst()) | |
| 534 | + $this->stepConfirmation = true; | |
| 535 | + $this->_landing(); | |
| 536 | + } elseif ($res == 'landing') { | |
| 537 | + $this->_landing(); | |
| 538 | + } else { | |
| 539 | + } | |
| 540 | + break; | |
| 541 | + case 'previous': | |
| 542 | + $this->_backward(); // Load previous page | |
| 543 | + break; | |
| 544 | + default: | |
| 545 | + // TODO : handle silent | |
| 546 | + $this->_landing(); | |
| 547 | + break; | |
| 548 | + } | |
| 549 | + $this->stepAction->paintAction(); // Display step | |
| 550 | + } | |
| 551 | + | |
| 552 | + /** | |
| 553 | + * Returns the step number | |
| 554 | + * | |
| 555 | + * @author KnowledgeTree Team | |
| 556 | + * @param none | |
| 557 | + * @access public | |
| 558 | + * @return integer $pos | |
| 559 | + */ | |
| 560 | + public function getStepPosition() { | |
| 561 | + $pos = 0; | |
| 562 | + foreach($this->simpleXmlObj->steps->step as $d_step) { | |
| 563 | + $step = (string) $d_step; | |
| 564 | + if ($step == $_GET['step_name']) { | |
| 565 | + break; | |
| 566 | + } | |
| 567 | + $pos++; | |
| 568 | + } | |
| 569 | + if(isset($_GET['step'])) { | |
| 570 | + if($_GET['step'] == "next") | |
| 571 | + $pos = $pos+1; | |
| 572 | + else | |
| 573 | + $pos = $pos-1; | |
| 574 | + } | |
| 575 | + | |
| 576 | + return $pos; | |
| 577 | + } | |
| 578 | + | |
| 579 | + /** | |
| 580 | + * Returns the step names for classes | |
| 581 | + * | |
| 582 | + * @author KnowledgeTree Team | |
| 583 | + * @param none | |
| 584 | + * @access public | |
| 585 | + * @return array | |
| 586 | + */ | |
| 587 | + public function getSteps() { | |
| 588 | + return $this->stepClassNames; | |
| 589 | + } | |
| 590 | + | |
| 591 | + /** | |
| 592 | + * Returns the steps as human readable string | |
| 593 | + * | |
| 594 | + * @author KnowledgeTree Team | |
| 595 | + * @param none | |
| 596 | + * @access public | |
| 597 | + * @return array | |
| 598 | + */ | |
| 599 | + public function getStepNames() { | |
| 600 | + return $this->stepNames; | |
| 601 | + } | |
| 602 | + | |
| 603 | + /** | |
| 604 | + * Returns whether or not a confirmation step is needed | |
| 605 | + * | |
| 606 | + * @author KnowledgeTree Team | |
| 607 | + * @param none | |
| 608 | + * @access public | |
| 609 | + * @return boolean | |
| 610 | + */ | |
| 611 | + public function getStepConfirmation() { | |
| 612 | + return $this->stepConfirmation; | |
| 613 | + } | |
| 614 | + | |
| 615 | + /** | |
| 616 | + * Return install properties | |
| 617 | + * | |
| 618 | + * @author KnowledgeTree Team | |
| 619 | + * @param string | |
| 620 | + * @access public | |
| 621 | + * @return string | |
| 622 | + */ | |
| 623 | + public function getInstallProperties() { | |
| 624 | + return $this->installProperties; | |
| 625 | + } | |
| 626 | + | |
| 627 | + /** | |
| 628 | + * Returns session | |
| 629 | + * | |
| 630 | + * @author KnowledgeTree Team | |
| 631 | + * @param none | |
| 632 | + * @access public | |
| 633 | + * @return boolean | |
| 634 | + */ | |
| 635 | + public function getSession() { | |
| 636 | + return $this->session; | |
| 637 | + } | |
| 638 | + | |
| 639 | + /** | |
| 640 | + * Dump of SESSION | |
| 641 | + * | |
| 642 | + * @author KnowledgeTree Team | |
| 643 | + * @param none | |
| 644 | + * @access public | |
| 645 | + * @return array | |
| 646 | + */ | |
| 647 | + public function showSession() { | |
| 648 | + echo '<pre>'; | |
| 649 | + print_r($_SESSION['install']); | |
| 650 | + echo '</pre>'; | |
| 651 | + } | |
| 652 | + | |
| 653 | + /** | |
| 654 | + * Display errors that are not allowing the installer to operate | |
| 655 | + * | |
| 656 | + * @author KnowledgeTree Team | |
| 657 | + * @param none | |
| 658 | + * @access public | |
| 659 | + * @return void | |
| 660 | + */ | |
| 661 | + public function resolveErrors($errors) { | |
| 662 | + echo $errors; | |
| 663 | + exit(); | |
| 664 | + } | |
| 665 | + | |
| 666 | + private function _loadToSession($type, $values) { | |
| 667 | + if($values) { | |
| 668 | + $this->session->set($type , $values); | |
| 669 | + } | |
| 670 | + } | |
| 671 | +} | |
| 672 | + | |
| 673 | +?> | ... | ... |
setup/wizard/lib/services/windowsOpenOffice.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Windows Agent Service Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | - | |
| 43 | -class windowsOpenOffice extends windowsService { | |
| 44 | - | |
| 45 | - /** | |
| 46 | - * Reference to utility object | |
| 47 | - * | |
| 48 | - * @author KnowledgeTree Team | |
| 49 | - * @access protected | |
| 50 | - * @var string | |
| 51 | - */ | |
| 52 | - public $util; | |
| 53 | - | |
| 54 | - /** | |
| 55 | - * Path to office executable | |
| 56 | - * | |
| 57 | - * @author KnowledgeTree Team | |
| 58 | - * @access protected | |
| 59 | - * @var string | |
| 60 | - */ | |
| 61 | - private $path; | |
| 62 | - | |
| 63 | - /** | |
| 64 | - * Web server | |
| 65 | - * | |
| 66 | - * @author KnowledgeTree Team | |
| 67 | - * @access protected | |
| 68 | - * @var string | |
| 69 | - */ | |
| 70 | - private $host; | |
| 71 | - | |
| 72 | - /** | |
| 73 | - * Path to temp pid file | |
| 74 | - * | |
| 75 | - * @author KnowledgeTree Team | |
| 76 | - * @access protected | |
| 77 | - * @var string | |
| 78 | - */ | |
| 79 | - private $pidFile; | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * Web server Port | |
| 83 | - * | |
| 84 | - * @author KnowledgeTree Team | |
| 85 | - * @access protected | |
| 86 | - * @var string | |
| 87 | - */ | |
| 88 | - private $port; | |
| 89 | - | |
| 90 | - /** | |
| 91 | - * Web server | |
| 92 | - * | |
| 93 | - * @author KnowledgeTree Team | |
| 94 | - * @access protected | |
| 95 | - * @var string | |
| 96 | - */ | |
| 97 | - private $bin; | |
| 98 | - | |
| 99 | - /** | |
| 100 | - * Office executable name | |
| 101 | - * | |
| 102 | - * @author KnowledgeTree Team | |
| 103 | - * @access protected | |
| 104 | - * @var string | |
| 105 | - */ | |
| 106 | - private $soffice; | |
| 107 | - | |
| 108 | - /** | |
| 109 | - * Log file | |
| 110 | - * | |
| 111 | - * @author KnowledgeTree Team | |
| 112 | - * @access protected | |
| 113 | - * @var string | |
| 114 | - */ | |
| 115 | - private $log; | |
| 116 | - | |
| 117 | - /** | |
| 118 | - * Open office options | |
| 119 | - * | |
| 120 | - * @author KnowledgeTree Team | |
| 121 | - * @access protected | |
| 122 | - * @var string | |
| 123 | - */ | |
| 124 | - private $options; | |
| 125 | - | |
| 126 | - /** | |
| 127 | - * Path to win service | |
| 128 | - * | |
| 129 | - * @author KnowledgeTree Team | |
| 130 | - * @access protected | |
| 131 | - * @var string | |
| 132 | - */ | |
| 133 | - private $winservice; | |
| 134 | - | |
| 135 | - /** | |
| 136 | - * Service name | |
| 137 | - * | |
| 138 | - * @author KnowledgeTree Team | |
| 139 | - * @access public | |
| 140 | - * @param none | |
| 141 | - * @return string | |
| 142 | - */ | |
| 143 | - public $name = "KTOpenOfficeTest"; | |
| 144 | - | |
| 145 | - public function load() { | |
| 146 | - // hack for testing | |
| 147 | - $this->setPort("8100"); | |
| 148 | - $this->setHost("127.0.0.1"); | |
| 149 | - $this->setLog("openoffice.log"); | |
| 150 | - $this->setWinservice("winserv.exe"); | |
| 151 | - $this->setOption(); | |
| 152 | - } | |
| 153 | - | |
| 154 | - private function setPort($port = "8100") { | |
| 155 | - $this->port = $port; | |
| 156 | - } | |
| 157 | - | |
| 158 | - public function getPort() { | |
| 159 | - return $this->port; | |
| 160 | - } | |
| 161 | - | |
| 162 | - private function setHost($host = "127.0.0.1") { | |
| 163 | - $this->host = $host; | |
| 164 | - } | |
| 165 | - | |
| 166 | - public function getHost() { | |
| 167 | - return $this->host; | |
| 168 | - } | |
| 169 | - | |
| 170 | - private function setLog($log = "openoffice.log") { | |
| 171 | - $this->log = $log; | |
| 172 | - } | |
| 173 | - | |
| 174 | - public function getLog() { | |
| 175 | - return $this->log; | |
| 176 | - } | |
| 177 | - | |
| 178 | - private function setBin($bin) { | |
| 179 | - $this->bin = "\"".$bin."\""; | |
| 180 | - } | |
| 181 | - | |
| 182 | - public function getBin() { | |
| 183 | - return $this->bin; | |
| 184 | - } | |
| 185 | - | |
| 186 | - private function setWinservice($winservice = "winserv.exe") { | |
| 187 | - $this->winservice = SYS_BIN_DIR . $winservice; | |
| 188 | - } | |
| 189 | - | |
| 190 | - public function getWinservice() { | |
| 191 | - return $this->winservice; | |
| 192 | - } | |
| 193 | - | |
| 194 | - private function setOption() { | |
| 195 | - $this->options = "-displayname {$this->name} -start auto {$this->getBin()} -headless -invisible -nofirststartwizard" | |
| 196 | - . "-accept=\"socket,host={$this->host},port={$this->port};urp;StarOffice.ServiceManager\""; | |
| 197 | - } | |
| 198 | - | |
| 199 | - public function getOption() { | |
| 200 | - return $this->options; | |
| 201 | - } | |
| 202 | - | |
| 203 | - public function install() { | |
| 204 | - $status = $this->status(); | |
| 205 | - if($status == '') { | |
| 206 | - $services = $this->util->getDataFromSession('services'); | |
| 207 | - $this->setBin("{$services['openOfficeExe']}"); | |
| 208 | - $this->setOption(); | |
| 209 | - $cmd = "\"{$this->winservice}\" install $this->name {$this->getOption()}"; | |
| 210 | - if(DEBUG) { | |
| 211 | - echo "$cmd<br/>"; | |
| 212 | - return ; | |
| 213 | - } | |
| 214 | - $response = $this->util->pexec($cmd); | |
| 215 | - return $response; | |
| 216 | - } | |
| 217 | - else { | |
| 218 | - return $status; | |
| 219 | - } | |
| 220 | - } | |
| 221 | - | |
| 222 | - /** | |
| 223 | - * Retrieve Status Service | |
| 224 | - * | |
| 225 | - * @author KnowledgeTree Team | |
| 226 | - * @access public | |
| 227 | - * @param none | |
| 228 | - * @return string | |
| 229 | - */ | |
| 230 | - public function status() { | |
| 231 | - $cmd = "sc query {$this->name}"; | |
| 232 | - $response = $this->util->pexec($cmd); | |
| 233 | - if($response['out']) { | |
| 234 | - $state = preg_replace('/^STATE *\: *\d */', '', trim($response['out'][3])); // Status store in third key | |
| 235 | - return $state; | |
| 236 | - } | |
| 237 | - | |
| 238 | - return ''; | |
| 239 | - } | |
| 240 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Windows Agent Service Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | + | |
| 43 | +class windowsOpenOffice extends windowsService { | |
| 44 | + | |
| 45 | + /** | |
| 46 | + * Reference to utility object | |
| 47 | + * | |
| 48 | + * @author KnowledgeTree Team | |
| 49 | + * @access protected | |
| 50 | + * @var string | |
| 51 | + */ | |
| 52 | + public $util; | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * Path to office executable | |
| 56 | + * | |
| 57 | + * @author KnowledgeTree Team | |
| 58 | + * @access protected | |
| 59 | + * @var string | |
| 60 | + */ | |
| 61 | + private $path; | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Web server | |
| 65 | + * | |
| 66 | + * @author KnowledgeTree Team | |
| 67 | + * @access protected | |
| 68 | + * @var string | |
| 69 | + */ | |
| 70 | + private $host; | |
| 71 | + | |
| 72 | + /** | |
| 73 | + * Path to temp pid file | |
| 74 | + * | |
| 75 | + * @author KnowledgeTree Team | |
| 76 | + * @access protected | |
| 77 | + * @var string | |
| 78 | + */ | |
| 79 | + private $pidFile; | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * Web server Port | |
| 83 | + * | |
| 84 | + * @author KnowledgeTree Team | |
| 85 | + * @access protected | |
| 86 | + * @var string | |
| 87 | + */ | |
| 88 | + private $port; | |
| 89 | + | |
| 90 | + /** | |
| 91 | + * Web server | |
| 92 | + * | |
| 93 | + * @author KnowledgeTree Team | |
| 94 | + * @access protected | |
| 95 | + * @var string | |
| 96 | + */ | |
| 97 | + private $bin; | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * Office executable name | |
| 101 | + * | |
| 102 | + * @author KnowledgeTree Team | |
| 103 | + * @access protected | |
| 104 | + * @var string | |
| 105 | + */ | |
| 106 | + private $soffice; | |
| 107 | + | |
| 108 | + /** | |
| 109 | + * Log file | |
| 110 | + * | |
| 111 | + * @author KnowledgeTree Team | |
| 112 | + * @access protected | |
| 113 | + * @var string | |
| 114 | + */ | |
| 115 | + private $log; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * Open office options | |
| 119 | + * | |
| 120 | + * @author KnowledgeTree Team | |
| 121 | + * @access protected | |
| 122 | + * @var string | |
| 123 | + */ | |
| 124 | + private $options; | |
| 125 | + | |
| 126 | + /** | |
| 127 | + * Path to win service | |
| 128 | + * | |
| 129 | + * @author KnowledgeTree Team | |
| 130 | + * @access protected | |
| 131 | + * @var string | |
| 132 | + */ | |
| 133 | + private $winservice; | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * Service name | |
| 137 | + * | |
| 138 | + * @author KnowledgeTree Team | |
| 139 | + * @access public | |
| 140 | + * @param none | |
| 141 | + * @return string | |
| 142 | + */ | |
| 143 | + public $name = "KTOpenOfficeTest"; | |
| 144 | + | |
| 145 | + public function load() { | |
| 146 | + // hack for testing | |
| 147 | + $this->setPort("8100"); | |
| 148 | + $this->setHost("127.0.0.1"); | |
| 149 | + $this->setLog("openoffice.log"); | |
| 150 | + $this->setWinservice("winserv.exe"); | |
| 151 | + $this->setOption(); | |
| 152 | + } | |
| 153 | + | |
| 154 | + private function setPort($port = "8100") { | |
| 155 | + $this->port = $port; | |
| 156 | + } | |
| 157 | + | |
| 158 | + public function getPort() { | |
| 159 | + return $this->port; | |
| 160 | + } | |
| 161 | + | |
| 162 | + private function setHost($host = "127.0.0.1") { | |
| 163 | + $this->host = $host; | |
| 164 | + } | |
| 165 | + | |
| 166 | + public function getHost() { | |
| 167 | + return $this->host; | |
| 168 | + } | |
| 169 | + | |
| 170 | + private function setLog($log = "openoffice.log") { | |
| 171 | + $this->log = $log; | |
| 172 | + } | |
| 173 | + | |
| 174 | + public function getLog() { | |
| 175 | + return $this->log; | |
| 176 | + } | |
| 177 | + | |
| 178 | + private function setBin($bin) { | |
| 179 | + $this->bin = "\"".$bin."\""; | |
| 180 | + } | |
| 181 | + | |
| 182 | + public function getBin() { | |
| 183 | + return $this->bin; | |
| 184 | + } | |
| 185 | + | |
| 186 | + private function setWinservice($winservice = "winserv.exe") { | |
| 187 | + if(file_exists(SYS_BIN_DIR . $winservice)) | |
| 188 | + $this->winservice = SYS_BIN_DIR . $winservice; | |
| 189 | + else if(file_exists(SYS_BIN_DIR . "win32" . DS. $winservice)) | |
| 190 | + $this->winservice = SYS_BIN_DIR . "win32" . DS. $winservice; | |
| 191 | + } | |
| 192 | + | |
| 193 | + public function getWinservice() { | |
| 194 | + return $this->winservice; | |
| 195 | + } | |
| 196 | + | |
| 197 | + private function setOption() { | |
| 198 | + $this->options = "-displayname {$this->name} -start auto {$this->getBin()} -headless -invisible -nofirststartwizard" | |
| 199 | + . "-accept=\"socket,host={$this->host},port={$this->port};urp;StarOffice.ServiceManager\""; | |
| 200 | + } | |
| 201 | + | |
| 202 | + public function getOption() { | |
| 203 | + return $this->options; | |
| 204 | + } | |
| 205 | + | |
| 206 | + public function install() { | |
| 207 | + $status = $this->status(); | |
| 208 | + if($status == '') { | |
| 209 | + $services = $this->util->getDataFromSession('services'); | |
| 210 | + $this->setBin("{$services['openOfficeExe']}"); | |
| 211 | + $this->setOption(); | |
| 212 | + $cmd = "\"{$this->winservice}\" install $this->name {$this->getOption()}"; | |
| 213 | + if(DEBUG) { | |
| 214 | + echo "$cmd<br/>"; | |
| 215 | + return ; | |
| 216 | + } | |
| 217 | + $response = $this->util->pexec($cmd); | |
| 218 | + return $response; | |
| 219 | + } | |
| 220 | + else { | |
| 221 | + return $status; | |
| 222 | + } | |
| 223 | + } | |
| 224 | + | |
| 225 | + /** | |
| 226 | + * Retrieve Status Service | |
| 227 | + * | |
| 228 | + * @author KnowledgeTree Team | |
| 229 | + * @access public | |
| 230 | + * @param none | |
| 231 | + * @return string | |
| 232 | + */ | |
| 233 | + public function status() { | |
| 234 | + $cmd = "sc query {$this->name}"; | |
| 235 | + $response = $this->util->pexec($cmd); | |
| 236 | + if($response['out']) { | |
| 237 | + $state = preg_replace('/^STATE *\: *\d */', '', trim($response['out'][3])); // Status store in third key | |
| 238 | + return $state; | |
| 239 | + } | |
| 240 | + | |
| 241 | + return ''; | |
| 242 | + } | |
| 243 | +} | |
| 241 | 244 | ?> |
| 242 | 245 | \ No newline at end of file | ... | ... |
setup/wizard/lib/services/windowsScheduler.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Windows Scheduler Service Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | -class windowsScheduler extends windowsService { | |
| 43 | - /** | |
| 44 | - * Batch Script to execute | |
| 45 | - * | |
| 46 | - * @author KnowledgeTree Team | |
| 47 | - * @access private | |
| 48 | - * @var string | |
| 49 | - */ | |
| 50 | - private $schedulerScriptPath; | |
| 51 | - | |
| 52 | - /** | |
| 53 | - * Php Script to execute | |
| 54 | - * | |
| 55 | - * @author KnowledgeTree Team | |
| 56 | - * @access private | |
| 57 | - * @var string | |
| 58 | - */ | |
| 59 | - private $schedulerSource; | |
| 60 | - | |
| 61 | - /** | |
| 62 | - * Scheduler Directory | |
| 63 | - * | |
| 64 | - * @author KnowledgeTree Team | |
| 65 | - * @access private | |
| 66 | - * @var string | |
| 67 | - */ | |
| 68 | - private $schedulerDir; | |
| 69 | - | |
| 70 | - /** | |
| 71 | - * Service name | |
| 72 | - * | |
| 73 | - * @author KnowledgeTree Team | |
| 74 | - * @access public | |
| 75 | - * @param none | |
| 76 | - * @return string | |
| 77 | - */ | |
| 78 | - public $name = "KTSchedulerTest"; | |
| 79 | - | |
| 80 | - /** | |
| 81 | - * Load defaults needed by service | |
| 82 | - * | |
| 83 | - * @author KnowledgeTree Team | |
| 84 | - * @access public | |
| 85 | - * @param string | |
| 86 | - * @return void | |
| 87 | - */ | |
| 88 | - function load() { | |
| 89 | - $this->setSchedulerDIR(SYSTEM_DIR."bin".DS."win32"); | |
| 90 | - $this->setSchedulerScriptPath("taskrunner.bat"); | |
| 91 | - $this->setSchedulerSource("schedulerService.php"); | |
| 92 | - | |
| 93 | - } | |
| 94 | - | |
| 95 | - /** | |
| 96 | - * Set Scheduler Directory path | |
| 97 | - * | |
| 98 | - * @author KnowledgeTree Team | |
| 99 | - * @access private | |
| 100 | - * @param none | |
| 101 | - * @return string | |
| 102 | - */ | |
| 103 | - private function setSchedulerDIR($schedulerDIR) { | |
| 104 | - $this->schedulerDir = $schedulerDIR; | |
| 105 | - } | |
| 106 | - | |
| 107 | - /** | |
| 108 | - * Retrieve Scheduler Directory path | |
| 109 | - * | |
| 110 | - * @author KnowledgeTree Team | |
| 111 | - * @access public | |
| 112 | - * @param none | |
| 113 | - * @return string | |
| 114 | - */ | |
| 115 | - public function getSchedulerDir() { | |
| 116 | - if(file_exists($this->schedulerDir)) | |
| 117 | - return $this->schedulerDir; | |
| 118 | - return false; | |
| 119 | - } | |
| 120 | - | |
| 121 | - /** | |
| 122 | - * Set Batch Script path | |
| 123 | - * | |
| 124 | - * @author KnowledgeTree Team | |
| 125 | - * @access private | |
| 126 | - * @param string | |
| 127 | - * @return void | |
| 128 | - */ | |
| 129 | - private function setSchedulerScriptPath($schedulerScriptPath) { | |
| 130 | - $this->schedulerScriptPath = "{$this->getSchedulerDir()}".DS."$schedulerScriptPath"; | |
| 131 | - } | |
| 132 | - | |
| 133 | - /** | |
| 134 | - * Retrieve Batch Script path | |
| 135 | - * | |
| 136 | - * @author KnowledgeTree Team | |
| 137 | - * @access public | |
| 138 | - * @param none | |
| 139 | - * @return string | |
| 140 | - */ | |
| 141 | - public function getSchedulerScriptPath() { | |
| 142 | - if(file_exists($this->schedulerScriptPath)) | |
| 143 | - return $this->schedulerScriptPath; | |
| 144 | - return false; | |
| 145 | - } | |
| 146 | - | |
| 147 | - /** | |
| 148 | - * Set Php Script path | |
| 149 | - * | |
| 150 | - * @author KnowledgeTree Team | |
| 151 | - * @access private | |
| 152 | - * @param none | |
| 153 | - * @return string | |
| 154 | - */ | |
| 155 | - private function setSchedulerSource($schedulerSource) { | |
| 156 | - $this->schedulerSource = $this->getSchedulerDir().DS.$schedulerSource; | |
| 157 | - } | |
| 158 | - | |
| 159 | - /** | |
| 160 | - * Retrieve Php Script path | |
| 161 | - * | |
| 162 | - * @author KnowledgeTree Team | |
| 163 | - * @access public | |
| 164 | - * @param none | |
| 165 | - * @return string | |
| 166 | - */ | |
| 167 | - public function getSchedulerSource() { | |
| 168 | - if(file_exists($this->schedulerSource)) | |
| 169 | - return $this->schedulerSource; | |
| 170 | - return false; | |
| 171 | - } | |
| 172 | - | |
| 173 | - /** | |
| 174 | - * Retrieve Status Service | |
| 175 | - * | |
| 176 | - * @author KnowledgeTree Team | |
| 177 | - * @access public | |
| 178 | - * @param none | |
| 179 | - * @return string | |
| 180 | - */ | |
| 181 | - public function status() { | |
| 182 | - $cmd = "sc query {$this->name}"; | |
| 183 | - $response = $this->util->pexec($cmd); | |
| 184 | - if($response['out']) { | |
| 185 | - $state = preg_replace('/^STATE *\: *\d */', '', trim($response['out'][3])); // Status store in third key | |
| 186 | - return $state; | |
| 187 | - } | |
| 188 | - | |
| 189 | - return ''; | |
| 190 | - } | |
| 191 | - | |
| 192 | - /** | |
| 193 | - * Install Scheduler Service | |
| 194 | - * | |
| 195 | - * @author KnowledgeTree Team | |
| 196 | - * @access public | |
| 197 | - * @param none | |
| 198 | - * @return array | |
| 199 | - */ | |
| 200 | - public function install() { | |
| 201 | - $state = $this->status(); | |
| 202 | - if($state == '') { | |
| 203 | - $this->writeSchedulerTask(); | |
| 204 | - $this->writeTaskRunner(); | |
| 205 | - // TODO what if it does not exist? check how the dmsctl.bat does this | |
| 206 | - if (function_exists('win32_create_service')) { | |
| 207 | - $response = win32_create_service(array( | |
| 208 | - 'service' => $this->name, | |
| 209 | - 'display' => $this->name, | |
| 210 | - 'path' => $this->getSchedulerScriptPath() | |
| 211 | - )); | |
| 212 | - return $response; | |
| 213 | - } else { // Attempt to use the winserv | |
| 214 | - // TODO: Add service using winserv | |
| 215 | - $this->setWinservice(); | |
| 216 | - $this->setOptions(); | |
| 217 | - $cmd = "\"{$this->winservice}\" install $this->name $this->options"; | |
| 218 | - if(DEBUG) { | |
| 219 | - echo "$cmd<br/>"; | |
| 220 | - return ; | |
| 221 | - } | |
| 222 | - $response = $this->util->pexec($cmd); | |
| 223 | - return $response; | |
| 224 | - } | |
| 225 | - } | |
| 226 | - return $state; | |
| 227 | - } | |
| 228 | - | |
| 229 | - private function setWinservice($winservice = "winserv.exe") { | |
| 230 | - $this->winservice = SYS_BIN_DIR . $winservice; | |
| 231 | - } | |
| 232 | - | |
| 233 | - private function setOptions() { | |
| 234 | - $this->options = "-displayname {$this->name} -start auto -binary \"{$this->getSchedulerScriptPath()}\" -headless -invisible " | |
| 235 | - . ""; | |
| 236 | - } | |
| 237 | - | |
| 238 | - private function writeTaskRunner() { | |
| 239 | - // Check if bin is readable and writable | |
| 240 | - if(is_readable(SYS_BIN_DIR."win32") && is_writable(SYS_BIN_DIR."win32")) { | |
| 241 | - $fp = fopen($this->getSchedulerDir().""."\\taskrunner.bat", "w+"); | |
| 242 | - $content = "@echo off \n"; | |
| 243 | - $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\""; | |
| 244 | - fwrite($fp, $content); | |
| 245 | - fclose($fp); | |
| 246 | - } else { | |
| 247 | - // TODO: Should not reach this point | |
| 248 | - } | |
| 249 | - } | |
| 250 | - | |
| 251 | - private function writeSchedulerTask() { | |
| 252 | - // Check if bin is readable and writable | |
| 253 | - if(is_readable(SYS_BIN_DIR) && is_writable(SYS_BIN_DIR)) { | |
| 254 | - if(!$this->getSchedulerScriptPath()) { | |
| 255 | - $fp = fopen($this->getSchedulerScriptPath(), "w+"); | |
| 256 | - $content = "@echo off\n"; | |
| 257 | - $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\""; | |
| 258 | - fwrite($fp, $content); | |
| 259 | - fclose($fp); | |
| 260 | - } | |
| 261 | - } else { | |
| 262 | - // TODO: Should not reach this point | |
| 263 | - } | |
| 264 | - } | |
| 265 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Windows Scheduler Service Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | +class windowsScheduler extends windowsService { | |
| 43 | + /** | |
| 44 | + * Batch Script to execute | |
| 45 | + * | |
| 46 | + * @author KnowledgeTree Team | |
| 47 | + * @access private | |
| 48 | + * @var string | |
| 49 | + */ | |
| 50 | + private $schedulerScriptPath; | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * Php Script to execute | |
| 54 | + * | |
| 55 | + * @author KnowledgeTree Team | |
| 56 | + * @access private | |
| 57 | + * @var string | |
| 58 | + */ | |
| 59 | + private $schedulerSource; | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * Scheduler Directory | |
| 63 | + * | |
| 64 | + * @author KnowledgeTree Team | |
| 65 | + * @access private | |
| 66 | + * @var string | |
| 67 | + */ | |
| 68 | + private $schedulerDir; | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * Service name | |
| 72 | + * | |
| 73 | + * @author KnowledgeTree Team | |
| 74 | + * @access public | |
| 75 | + * @param none | |
| 76 | + * @return string | |
| 77 | + */ | |
| 78 | + public $name = "KTSchedulerTest"; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * Load defaults needed by service | |
| 82 | + * | |
| 83 | + * @author KnowledgeTree Team | |
| 84 | + * @access public | |
| 85 | + * @param string | |
| 86 | + * @return void | |
| 87 | + */ | |
| 88 | + function load() { | |
| 89 | + $this->setSchedulerDIR(SYSTEM_DIR."bin".DS."win32"); | |
| 90 | + $this->setSchedulerScriptPath("taskrunner.bat"); | |
| 91 | + $this->setSchedulerSource("schedulerService.php"); | |
| 92 | + | |
| 93 | + } | |
| 94 | + | |
| 95 | + /** | |
| 96 | + * Set Scheduler Directory path | |
| 97 | + * | |
| 98 | + * @author KnowledgeTree Team | |
| 99 | + * @access private | |
| 100 | + * @param none | |
| 101 | + * @return string | |
| 102 | + */ | |
| 103 | + private function setSchedulerDIR($schedulerDIR) { | |
| 104 | + $this->schedulerDir = $schedulerDIR; | |
| 105 | + } | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * Retrieve Scheduler Directory path | |
| 109 | + * | |
| 110 | + * @author KnowledgeTree Team | |
| 111 | + * @access public | |
| 112 | + * @param none | |
| 113 | + * @return string | |
| 114 | + */ | |
| 115 | + public function getSchedulerDir() { | |
| 116 | + if(file_exists($this->schedulerDir)) | |
| 117 | + return $this->schedulerDir; | |
| 118 | + return false; | |
| 119 | + } | |
| 120 | + | |
| 121 | + /** | |
| 122 | + * Set Batch Script path | |
| 123 | + * | |
| 124 | + * @author KnowledgeTree Team | |
| 125 | + * @access private | |
| 126 | + * @param string | |
| 127 | + * @return void | |
| 128 | + */ | |
| 129 | + private function setSchedulerScriptPath($schedulerScriptPath) { | |
| 130 | + $this->schedulerScriptPath = "{$this->getSchedulerDir()}".DS."$schedulerScriptPath"; | |
| 131 | + } | |
| 132 | + | |
| 133 | + /** | |
| 134 | + * Retrieve Batch Script path | |
| 135 | + * | |
| 136 | + * @author KnowledgeTree Team | |
| 137 | + * @access public | |
| 138 | + * @param none | |
| 139 | + * @return string | |
| 140 | + */ | |
| 141 | + public function getSchedulerScriptPath() { | |
| 142 | + if(file_exists($this->schedulerScriptPath)) | |
| 143 | + return $this->schedulerScriptPath; | |
| 144 | + return false; | |
| 145 | + } | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * Set Php Script path | |
| 149 | + * | |
| 150 | + * @author KnowledgeTree Team | |
| 151 | + * @access private | |
| 152 | + * @param none | |
| 153 | + * @return string | |
| 154 | + */ | |
| 155 | + private function setSchedulerSource($schedulerSource) { | |
| 156 | + $this->schedulerSource = $this->getSchedulerDir().DS.$schedulerSource; | |
| 157 | + } | |
| 158 | + | |
| 159 | + /** | |
| 160 | + * Retrieve Php Script path | |
| 161 | + * | |
| 162 | + * @author KnowledgeTree Team | |
| 163 | + * @access public | |
| 164 | + * @param none | |
| 165 | + * @return string | |
| 166 | + */ | |
| 167 | + public function getSchedulerSource() { | |
| 168 | + if(file_exists($this->schedulerSource)) | |
| 169 | + return $this->schedulerSource; | |
| 170 | + return false; | |
| 171 | + } | |
| 172 | + | |
| 173 | + /** | |
| 174 | + * Retrieve Status Service | |
| 175 | + * | |
| 176 | + * @author KnowledgeTree Team | |
| 177 | + * @access public | |
| 178 | + * @param none | |
| 179 | + * @return string | |
| 180 | + */ | |
| 181 | + public function status() { | |
| 182 | + $cmd = "sc query {$this->name}"; | |
| 183 | + $response = $this->util->pexec($cmd); | |
| 184 | + if($response['out']) { | |
| 185 | + $state = preg_replace('/^STATE *\: *\d */', '', trim($response['out'][3])); // Status store in third key | |
| 186 | + return $state; | |
| 187 | + } | |
| 188 | + | |
| 189 | + return ''; | |
| 190 | + } | |
| 191 | + | |
| 192 | + /** | |
| 193 | + * Install Scheduler Service | |
| 194 | + * | |
| 195 | + * @author KnowledgeTree Team | |
| 196 | + * @access public | |
| 197 | + * @param none | |
| 198 | + * @return array | |
| 199 | + */ | |
| 200 | + public function install() { | |
| 201 | + $state = $this->status(); | |
| 202 | + if($state == '') { | |
| 203 | + $this->writeSchedulerTask(); | |
| 204 | + $this->writeTaskRunner(); | |
| 205 | + // TODO what if it does not exist? check how the dmsctl.bat does this | |
| 206 | + if (function_exists('win32_create_service')) { | |
| 207 | + $response = win32_create_service(array( | |
| 208 | + 'service' => $this->name, | |
| 209 | + 'display' => $this->name, | |
| 210 | + 'path' => $this->getSchedulerScriptPath() | |
| 211 | + )); | |
| 212 | + return $response; | |
| 213 | + } else { // Attempt to use the winserv | |
| 214 | + // TODO: Add service using winserv | |
| 215 | + $this->setWinservice(); | |
| 216 | + $this->setOptions(); | |
| 217 | + $cmd = "\"{$this->winservice}\" install $this->name $this->options"; | |
| 218 | + if(DEBUG) { | |
| 219 | + echo "$cmd<br/>"; | |
| 220 | + return ; | |
| 221 | + } | |
| 222 | + $response = $this->util->pexec($cmd); | |
| 223 | + return $response; | |
| 224 | + } | |
| 225 | + } | |
| 226 | + return $state; | |
| 227 | + } | |
| 228 | + | |
| 229 | + private function setWinservice($winservice = "winserv.exe") { | |
| 230 | + $this->winservice = SYS_BIN_DIR . $winservice; | |
| 231 | + } | |
| 232 | + | |
| 233 | + private function setOptions() { | |
| 234 | + $this->options = "-displayname {$this->name} -start auto -binary \"{$this->getSchedulerScriptPath()}\" -headless -invisible " | |
| 235 | + . ""; | |
| 236 | + } | |
| 237 | + | |
| 238 | + private function writeTaskRunner() { | |
| 239 | + // Check if bin is readable and writable | |
| 240 | + if(is_readable(SYS_BIN_DIR."win32") && is_writable(SYS_BIN_DIR."win32")) { | |
| 241 | + $fp = fopen($this->getSchedulerDir().""."\\taskrunner.bat", "w+"); | |
| 242 | + $content = "@echo off \n"; | |
| 243 | + $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\""; | |
| 244 | + fwrite($fp, $content); | |
| 245 | + fclose($fp); | |
| 246 | + } else { | |
| 247 | + // TODO: Should not reach this point | |
| 248 | + } | |
| 249 | + } | |
| 250 | + | |
| 251 | + private function writeSchedulerTask() { | |
| 252 | + // Check if bin is readable and writable | |
| 253 | + if(is_readable(SYS_BIN_DIR) && is_writable(SYS_BIN_DIR)) { | |
| 254 | + if(!$this->getSchedulerScriptPath()) { | |
| 255 | + $fp = fopen($this->getSchedulerScriptPath(), "w+"); | |
| 256 | + $content = "@echo off\n"; | |
| 257 | + $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\""; | |
| 258 | + fwrite($fp, $content); | |
| 259 | + fclose($fp); | |
| 260 | + } | |
| 261 | + } else { | |
| 262 | + // TODO: Should not reach this point | |
| 263 | + } | |
| 264 | + } | |
| 265 | +} | |
| 266 | 266 | ?> |
| 267 | 267 | \ No newline at end of file | ... | ... |
setup/wizard/path.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Installer Paths. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | - // Define installer environment | |
| 43 | - define('DEBUG', 1); | |
| 44 | - define('AJAX', 0); | |
| 45 | - if (substr(php_uname(), 0, 7) == "Windows"){ | |
| 46 | - define('WINDOWS_OS', true); | |
| 47 | - define('UNIX_OS', false); | |
| 48 | - define('OS', 'windows'); | |
| 49 | - } else { | |
| 50 | - define('WINDOWS_OS', false); | |
| 51 | - define('UNIX_OS', true); | |
| 52 | - define('OS', 'unix'); | |
| 53 | - } | |
| 54 | - if(WINDOWS_OS) { | |
| 55 | - define('DS', '\\'); | |
| 56 | - } else { | |
| 57 | - define('DS', '/'); | |
| 58 | - } | |
| 59 | - // Define environment root | |
| 60 | - $wizard = realpath(dirname(__FILE__)); | |
| 61 | - $xdir = explode(DS, $wizard); | |
| 62 | - array_pop($xdir); | |
| 63 | - array_pop($xdir); | |
| 64 | - $sys = ''; | |
| 65 | - foreach ($xdir as $k=>$v) { | |
| 66 | - $sys .= $v.DS; | |
| 67 | - } | |
| 68 | - // Define paths to wizard | |
| 69 | - define('WIZARD_DIR', $wizard.DS); | |
| 70 | - define('WIZARD_LIB', WIZARD_DIR."lib".DS); | |
| 71 | - define('SERVICE_LIB', WIZARD_LIB."services".DS); | |
| 72 | - define('SQL_DIR', WIZARD_DIR."sql".DS); | |
| 73 | - define('SQL_UPGRADE_DIR', SQL_DIR."upgrades".DS); | |
| 74 | - define('CONF_DIR', WIZARD_DIR."config".DS); | |
| 75 | - define('RES_DIR', WIZARD_DIR."resources".DS); | |
| 76 | - define('STEP_DIR', WIZARD_DIR."steps".DS); | |
| 77 | - define('TEMP_DIR', WIZARD_DIR."templates".DS); | |
| 78 | - define('SHELL_DIR', WIZARD_DIR."shells".DS); | |
| 79 | - define('OUTPUT_DIR', WIZARD_DIR."output".DS); | |
| 80 | - // Define paths to system webroot | |
| 81 | - define('SYSTEM_DIR', $sys); | |
| 82 | - define('SYS_BIN_DIR', SYSTEM_DIR."bin".DS); | |
| 83 | - define('SYS_LOG_DIR', SYSTEM_DIR."var".DS."log".DS); | |
| 84 | - // Define paths to system | |
| 85 | - array_pop($xdir); | |
| 86 | - $asys = ''; | |
| 87 | - foreach ($xdir as $k=>$v) { | |
| 88 | - $asys .= $v.DS; | |
| 89 | - } | |
| 90 | - define('SYSTEM_ROOT', $asys); | |
| 91 | - // Install Type | |
| 92 | - preg_match('/Zend/', $sys, $matches); // TODO: Dirty | |
| 93 | - if($matches) { | |
| 94 | - $sysdir = explode(DS, $sys); | |
| 95 | - array_pop($sysdir); | |
| 96 | - array_pop($sysdir); | |
| 97 | - array_pop($sysdir); | |
| 98 | - array_pop($sysdir); | |
| 99 | - $zendsys = ''; | |
| 100 | - foreach ($sysdir as $k=>$v) { | |
| 101 | - $zendsys .= $v.DS; | |
| 102 | - } | |
| 103 | - define('INSTALL_TYPE', 'Zend'); | |
| 104 | - define('PHP_DIR', $zendsys."ZendServer".DS."bin".DS); | |
| 105 | - } else { | |
| 106 | - $modules = get_loaded_extensions(); | |
| 107 | - // TODO: Dirty | |
| 108 | - if(in_array('Zend Download Server', $modules) || in_array('Zend Monitor', $modules) || in_array('Zend Utils', $modules) || in_array('Zend Page Cache', $modules)) { | |
| 109 | - define('INSTALL_TYPE', 'Zend'); | |
| 110 | - define('PHP_DIR', ''); | |
| 111 | - } else { | |
| 112 | - define('INSTALL_TYPE', ''); | |
| 113 | - define('PHP_DIR', ''); | |
| 114 | - } | |
| 115 | - } | |
| 116 | - // Other | |
| 117 | - date_default_timezone_set('Africa/Johannesburg'); | |
| 118 | - if(WINDOWS_OS) { // Mysql bin [Windows] | |
| 119 | - $serverPaths = explode(';',$_SERVER['PATH']); | |
| 120 | - foreach ($serverPaths as $apath) { | |
| 121 | - preg_match('/mysql/i', $apath, $matches); | |
| 122 | - if($matches) { | |
| 123 | - define('MYSQL_BIN', $apath.DS); | |
| 124 | - break; | |
| 125 | - } | |
| 126 | - } | |
| 127 | - } else { | |
| 128 | - define('MYSQL_BIN', ''); // Assume its linux and can be executed from command line | |
| 129 | - } | |
| 130 | - | |
| 131 | -?> | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Installer Paths. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | + // Define installer environment | |
| 43 | + define('DEBUG', 0); | |
| 44 | + define('AJAX', 0); | |
| 45 | + if (substr(php_uname(), 0, 7) == "Windows"){ | |
| 46 | + define('WINDOWS_OS', true); | |
| 47 | + define('UNIX_OS', false); | |
| 48 | + define('OS', 'windows'); | |
| 49 | + } else { | |
| 50 | + define('WINDOWS_OS', false); | |
| 51 | + define('UNIX_OS', true); | |
| 52 | + define('OS', 'unix'); | |
| 53 | + } | |
| 54 | + if(WINDOWS_OS) { | |
| 55 | + define('DS', '\\'); | |
| 56 | + } else { | |
| 57 | + define('DS', '/'); | |
| 58 | + } | |
| 59 | + // Define environment root | |
| 60 | + $wizard = realpath(dirname(__FILE__)); | |
| 61 | + $xdir = explode(DS, $wizard); | |
| 62 | + array_pop($xdir); | |
| 63 | + array_pop($xdir); | |
| 64 | + $sys = ''; | |
| 65 | + foreach ($xdir as $k=>$v) { | |
| 66 | + $sys .= $v.DS; | |
| 67 | + } | |
| 68 | + // Define paths to wizard | |
| 69 | + define('WIZARD_DIR', $wizard.DS); | |
| 70 | + define('WIZARD_LIB', WIZARD_DIR."lib".DS); | |
| 71 | + define('SERVICE_LIB', WIZARD_LIB."services".DS); | |
| 72 | + define('SQL_DIR', WIZARD_DIR."sql".DS); | |
| 73 | + define('SQL_UPGRADE_DIR', SQL_DIR."upgrades".DS); | |
| 74 | + define('CONF_DIR', WIZARD_DIR."config".DS); | |
| 75 | + define('RES_DIR', WIZARD_DIR."resources".DS); | |
| 76 | + define('STEP_DIR', WIZARD_DIR."steps".DS); | |
| 77 | + define('TEMP_DIR', WIZARD_DIR."templates".DS); | |
| 78 | + define('SHELL_DIR', WIZARD_DIR."shells".DS); | |
| 79 | + define('OUTPUT_DIR', WIZARD_DIR."output".DS); | |
| 80 | + // Define paths to system webroot | |
| 81 | + define('SYSTEM_DIR', $sys); | |
| 82 | + define('SYS_BIN_DIR', SYSTEM_DIR."bin".DS); | |
| 83 | + define('SYS_LOG_DIR', SYSTEM_DIR."var".DS."log".DS); | |
| 84 | + // Define paths to system | |
| 85 | + array_pop($xdir); | |
| 86 | + $asys = ''; | |
| 87 | + foreach ($xdir as $k=>$v) { | |
| 88 | + $asys .= $v.DS; | |
| 89 | + } | |
| 90 | + define('SYSTEM_ROOT', $asys); | |
| 91 | + // Install Type | |
| 92 | + preg_match('/Zend/', $sys, $matches); // TODO: Dirty | |
| 93 | + if($matches) { | |
| 94 | + $sysdir = explode(DS, $sys); | |
| 95 | + array_pop($sysdir); | |
| 96 | + array_pop($sysdir); | |
| 97 | + array_pop($sysdir); | |
| 98 | + array_pop($sysdir); | |
| 99 | + $zendsys = ''; | |
| 100 | + foreach ($sysdir as $k=>$v) { | |
| 101 | + $zendsys .= $v.DS; | |
| 102 | + } | |
| 103 | + define('INSTALL_TYPE', 'Zend'); | |
| 104 | + define('PHP_DIR', $zendsys."ZendServer".DS."bin".DS); | |
| 105 | + } else { | |
| 106 | + $modules = get_loaded_extensions(); | |
| 107 | + // TODO: Dirty | |
| 108 | + if(in_array('Zend Download Server', $modules) || in_array('Zend Monitor', $modules) || in_array('Zend Utils', $modules) || in_array('Zend Page Cache', $modules)) { | |
| 109 | + define('INSTALL_TYPE', 'Zend'); | |
| 110 | + define('PHP_DIR', ''); | |
| 111 | + } else { | |
| 112 | + define('INSTALL_TYPE', ''); | |
| 113 | + define('PHP_DIR', ''); | |
| 114 | + } | |
| 115 | + } | |
| 116 | + // Other | |
| 117 | + date_default_timezone_set('Africa/Johannesburg'); | |
| 118 | + if(WINDOWS_OS) { // Mysql bin [Windows] | |
| 119 | + $serverPaths = explode(';',$_SERVER['PATH']); | |
| 120 | + foreach ($serverPaths as $apath) { | |
| 121 | + preg_match('/mysql/i', $apath, $matches); | |
| 122 | + if($matches) { | |
| 123 | + define('MYSQL_BIN', $apath.DS); | |
| 124 | + break; | |
| 125 | + } | |
| 126 | + } | |
| 127 | + } else { | |
| 128 | + define('MYSQL_BIN', ''); // Assume its linux and can be executed from command line | |
| 129 | + } | |
| 130 | + | |
| 131 | +?> | ... | ... |
setup/wizard/resources/form.js
setup/wizard/resources/wizard.js
| 1 | -// Class Wizard | |
| 2 | -function wizard() { | |
| 3 | -} | |
| 4 | - | |
| 5 | -// Toggle Advance Database options | |
| 6 | -wizard.prototype.toggleClass = function(ele, option) { //adv_options|php_details|php_ext_details|php_con_details | |
| 7 | - if($('.'+ele).attr('style') == 'display: none;') { | |
| 8 | - $('.'+ele).attr('style', 'display: block;'); | |
| 9 | - if($('#'+option).attr('innerHTML') != ' Advanced Options') | |
| 10 | - $('#'+option).attr('innerHTML', 'Hide Details'); | |
| 11 | - } else { | |
| 12 | - $('.'+ele).attr('style', 'display: none;'); | |
| 13 | - if($('#'+option).attr('innerHTML') != ' Advanced Options') | |
| 14 | - $('#'+option).attr('innerHTML', 'Show Details'); | |
| 15 | - } | |
| 16 | -} | |
| 17 | - | |
| 18 | -// Focus on element | |
| 19 | -wizard.prototype.focusElement = function(el) { | |
| 20 | - el.focus(); | |
| 21 | -} | |
| 22 | - | |
| 23 | -// Force previous click | |
| 24 | -wizard.prototype.pClick = function() { | |
| 25 | - var state = $('#state'); | |
| 26 | - if(state != undefined) { | |
| 27 | - state.attr('name', 'previous'); | |
| 28 | - } | |
| 29 | -} | |
| 30 | - | |
| 31 | -// Force next click | |
| 32 | -wizard.prototype.nClick = function() { | |
| 33 | - var state = $('#state');; | |
| 34 | - if(state != undefined) { | |
| 35 | - state.attr('name', 'next'); | |
| 36 | - } | |
| 37 | -} | |
| 38 | - | |
| 39 | -// Validate Registration Page | |
| 40 | -wizard.prototype.validateRegistration = function() { | |
| 41 | - // See if next or previous is clicked. | |
| 42 | - var state = $('#state').attr('name'); | |
| 43 | - if(state == 'next') { | |
| 44 | - if(w.valRegHelper()) { | |
| 45 | - $('#sendAll').attr('name', 'Next'); // Force the next step | |
| 46 | - $('#sendAll').attr('value', 'next'); | |
| 47 | - return true; | |
| 48 | - } | |
| 49 | - } else if(state == 'previous') { | |
| 50 | - $('#sendAll').attr('name', 'Previous'); // Force the previous step | |
| 51 | - $('#sendAll').attr('value', 'previous'); | |
| 52 | - return true; | |
| 53 | - } | |
| 54 | - | |
| 55 | - return false; | |
| 56 | -} | |
| 57 | - | |
| 58 | -wizard.prototype.valRegHelper = function() { | |
| 59 | - var first = document.getElementById('first'); | |
| 60 | - var last = document.getElementById('last'); | |
| 61 | - var email = document.getElementById('email'); | |
| 62 | - if(first.value.length < 1) { | |
| 63 | - document.getElementById("reg_error").innerHTML = "Please enter a First Name"; | |
| 64 | - w.focusElement(first); | |
| 65 | - return false; | |
| 66 | - } | |
| 67 | - if(!w.nameCheck(first.value)) { | |
| 68 | - document.getElementById("reg_error").innerHTML = "Please enter a valid First Name"; | |
| 69 | - w.focusElement(first); | |
| 70 | - return false; | |
| 71 | - } | |
| 72 | - if(last.value.length < 1) { | |
| 73 | - document.getElementById("reg_error").innerHTML = "Please enter a Last Name"; | |
| 74 | - w.focusElement(last); | |
| 75 | - return false; | |
| 76 | - } | |
| 77 | - if(!w.nameCheck(last.value)) { | |
| 78 | - document.getElementById("reg_error").innerHTML = "Please enter a valid Last Name"; | |
| 79 | - w.focusElement(last); | |
| 80 | - return false; | |
| 81 | - } | |
| 82 | - if(!w.emailCheck(email.value)) { | |
| 83 | - document.getElementById("reg_error").innerHTML = "Please enter a valid email address"; | |
| 84 | - w.focusElement(email); | |
| 85 | - return false; | |
| 86 | - } | |
| 87 | - | |
| 88 | - return true; | |
| 89 | -} | |
| 90 | - | |
| 91 | -wizard.prototype.nameCheck = function(str) { | |
| 92 | - var nameRegxp = /^([a-zA-Z]+)$/; | |
| 93 | - if(str.match(nameRegxp)) { | |
| 94 | - return true; | |
| 95 | - } else { | |
| 96 | - return false; | |
| 97 | - } | |
| 98 | -} | |
| 99 | - | |
| 100 | -// Validate Registration Page Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/) | |
| 101 | -wizard.prototype.emailCheck = function(str) { | |
| 102 | - str = w.trim(str); | |
| 103 | - var at="@"; | |
| 104 | - var dot="."; | |
| 105 | - var lat=str.indexOf(at); | |
| 106 | - var lstr=str.length; | |
| 107 | - var ldot=str.indexOf(dot); | |
| 108 | - if (str.indexOf(at)==-1) { | |
| 109 | - return false; | |
| 110 | - } | |
| 111 | - if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) { | |
| 112 | - return false; | |
| 113 | - } | |
| 114 | - if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) { | |
| 115 | - return false; | |
| 116 | - } | |
| 117 | - if (str.indexOf(at,(lat+1))!=-1) { | |
| 118 | - return false; | |
| 119 | - } | |
| 120 | - if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ | |
| 121 | - return false; | |
| 122 | - } | |
| 123 | - if (str.indexOf(dot,(lat+2))==-1){ | |
| 124 | - return false; | |
| 125 | - } | |
| 126 | - if (str.indexOf(" ")!=-1){ | |
| 127 | - return false; | |
| 128 | - } | |
| 129 | - return true; | |
| 130 | -} | |
| 131 | - | |
| 132 | -wizard.prototype.trim = function (str, chars) { | |
| 133 | - return w.ltrim(w.rtrim(str, chars), chars); | |
| 134 | -} | |
| 135 | - | |
| 136 | -wizard.prototype.ltrim = function (str, chars) { | |
| 137 | - chars = chars || "\\s"; | |
| 138 | - return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); | |
| 139 | -} | |
| 140 | - | |
| 141 | -wizard.prototype.rtrim = function (str, chars) { | |
| 142 | - chars = chars || "\\s"; | |
| 143 | - return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); | |
| 144 | -} | |
| 145 | - | |
| 146 | -wizard.prototype.adjustMenu = function (form_id, previous) { | |
| 147 | - form_name = form_id.split('_'); | |
| 148 | - if(form_name.length == 2) { | |
| 149 | - current_step = form_name[0]; | |
| 150 | - next_step = form_name[1]; | |
| 151 | - $('#'+current_step).attr('class', 'current'); | |
| 152 | - $('#'+next_step).attr('class', 'inactive'); | |
| 153 | - } else if(form_name.length == 3) { | |
| 154 | - previous_step = form_name[0]; | |
| 155 | - current_step = form_name[1]; | |
| 156 | - next_step = form_name[2]; | |
| 157 | - $('#'+previous_step).attr('class', 'active'); | |
| 158 | - $('#'+current_step).attr('class', 'current'); | |
| 159 | - $('#'+next_step).attr('class', 'inactive'); | |
| 160 | - } | |
| 161 | -} | |
| 162 | - | |
| 163 | -wizard.prototype.dummy = function () { | |
| 164 | - | |
| 165 | -} | |
| 166 | - | |
| 167 | -// pre-submit callback | |
| 168 | -wizard.prototype.showRequest = function (formData, jqForm, options) { | |
| 169 | - $.blockUI({message:''}); | |
| 170 | - $('#loading').attr('style', 'display:block;'); | |
| 171 | -} | |
| 172 | - | |
| 173 | -// post-submit callback | |
| 174 | -wizard.prototype.showResponse = function (responseText, statusText) { | |
| 175 | - $.unblockUI(); | |
| 176 | - $('#loading').attr('style', 'display:none;'); | |
| 177 | -} | |
| 178 | - | |
| 179 | -wizard.prototype.refresh = function (page) { | |
| 180 | - var address = "index.php?step_name="+page; | |
| 181 | - var div = 'content_container'; | |
| 182 | - $.ajax({ | |
| 183 | - url: address, | |
| 184 | - dataType: "html", | |
| 185 | - type: "GET", | |
| 186 | - cache: false, | |
| 187 | - beforeSubmit: w.showRequest, | |
| 188 | - success: function(data){ | |
| 189 | - $("#"+div).empty(); | |
| 190 | - $("#"+div).append(data); | |
| 191 | - w.showResponse; | |
| 192 | - return; | |
| 193 | - } | |
| 194 | - }); | |
| 195 | -} | |
| 196 | - | |
| 197 | -wizard.prototype.getUrl = function (address, div) { | |
| 198 | - $("#"+div).empty(); | |
| 199 | - $.ajax({ | |
| 200 | - url: address, | |
| 201 | - dataType: "html", | |
| 202 | - type: "GET", | |
| 203 | - cache: false, | |
| 204 | - success: function(data){ | |
| 205 | - $("#"+div).empty(); | |
| 206 | - $("#"+div).append(data); | |
| 207 | - return; | |
| 208 | - } | |
| 209 | - }); | |
| 210 | -} | |
| 211 | - | |
| 212 | -wizard.prototype.sendJavaLocation = function () { | |
| 213 | - $('form').submit(); | |
| 214 | -} | |
| 215 | - | |
| 216 | -wizard.prototype.sendRegistration = function () { | |
| 217 | - $('form').submit(); | |
| 1 | +// Class Wizard | |
| 2 | +function wizard() { | |
| 3 | +} | |
| 4 | + | |
| 5 | +// Toggle Advance Database options | |
| 6 | +wizard.prototype.toggleClass = function(ele, option) { //adv_options|php_details|php_ext_details|php_con_details | |
| 7 | + if($('.'+ele).attr('style') == 'display: none;') { | |
| 8 | + $('.'+ele).attr('style', 'display: block;'); | |
| 9 | + if($('#'+option).attr('innerHTML') != ' Advanced Options') | |
| 10 | + $('#'+option).attr('innerHTML', 'Hide Details'); | |
| 11 | + } else { | |
| 12 | + $('.'+ele).attr('style', 'display: none;'); | |
| 13 | + if($('#'+option).attr('innerHTML') != ' Advanced Options') | |
| 14 | + $('#'+option).attr('innerHTML', 'Show Details'); | |
| 15 | + } | |
| 16 | +} | |
| 17 | + | |
| 18 | +// Focus on element | |
| 19 | +wizard.prototype.focusElement = function(el) { | |
| 20 | + el.focus(); | |
| 21 | +} | |
| 22 | + | |
| 23 | +// Force previous click | |
| 24 | +wizard.prototype.pClick = function() { | |
| 25 | + var state = $('#state'); | |
| 26 | + if(state != undefined) { | |
| 27 | + state.attr('name', 'previous'); | |
| 28 | + } | |
| 29 | +} | |
| 30 | + | |
| 31 | +// Force next click | |
| 32 | +wizard.prototype.nClick = function() { | |
| 33 | + var state = $('#state');; | |
| 34 | + if(state != undefined) { | |
| 35 | + state.attr('name', 'next'); | |
| 36 | + } | |
| 37 | +} | |
| 38 | + | |
| 39 | +// Validate Registration Page | |
| 40 | +wizard.prototype.validateRegistration = function() { | |
| 41 | + // See if next or previous is clicked. | |
| 42 | + var state = $('#state').attr('name'); | |
| 43 | + if(state == 'next') { | |
| 44 | + if(w.valRegHelper()) { | |
| 45 | + $('#sendAll').attr('name', 'Next'); // Force the next step | |
| 46 | + $('#sendAll').attr('value', 'next'); | |
| 47 | + return true; | |
| 48 | + } | |
| 49 | + } else if(state == 'previous') { | |
| 50 | + $('#sendAll').attr('name', 'Previous'); // Force the previous step | |
| 51 | + $('#sendAll').attr('value', 'previous'); | |
| 52 | + return true; | |
| 53 | + } | |
| 54 | + | |
| 55 | + return false; | |
| 56 | +} | |
| 57 | + | |
| 58 | +wizard.prototype.valRegHelper = function() { | |
| 59 | + var first = document.getElementById('first'); | |
| 60 | + var last = document.getElementById('last'); | |
| 61 | + var email = document.getElementById('email'); | |
| 62 | + if(first.value.length < 1) { | |
| 63 | + document.getElementById("reg_error").innerHTML = "Please enter a First Name"; | |
| 64 | + w.focusElement(first); | |
| 65 | + return false; | |
| 66 | + } | |
| 67 | + if(!w.nameCheck(first.value)) { | |
| 68 | + document.getElementById("reg_error").innerHTML = "Please enter a valid First Name"; | |
| 69 | + w.focusElement(first); | |
| 70 | + return false; | |
| 71 | + } | |
| 72 | + if(last.value.length < 1) { | |
| 73 | + document.getElementById("reg_error").innerHTML = "Please enter a Last Name"; | |
| 74 | + w.focusElement(last); | |
| 75 | + return false; | |
| 76 | + } | |
| 77 | + if(!w.nameCheck(last.value)) { | |
| 78 | + document.getElementById("reg_error").innerHTML = "Please enter a valid Last Name"; | |
| 79 | + w.focusElement(last); | |
| 80 | + return false; | |
| 81 | + } | |
| 82 | + if(!w.emailCheck(email.value)) { | |
| 83 | + document.getElementById("reg_error").innerHTML = "Please enter a valid email address"; | |
| 84 | + w.focusElement(email); | |
| 85 | + return false; | |
| 86 | + } | |
| 87 | + | |
| 88 | + return true; | |
| 89 | +} | |
| 90 | + | |
| 91 | +wizard.prototype.nameCheck = function(str) { | |
| 92 | + var nameRegxp = /^([a-zA-Z]+)$/; | |
| 93 | + if(str.match(nameRegxp)) { | |
| 94 | + return true; | |
| 95 | + } else { | |
| 96 | + return false; | |
| 97 | + } | |
| 98 | +} | |
| 99 | + | |
| 100 | +// Validate Registration Page Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/) | |
| 101 | +wizard.prototype.emailCheck = function(str) { | |
| 102 | + str = w.trim(str); | |
| 103 | + var at="@"; | |
| 104 | + var dot="."; | |
| 105 | + var lat=str.indexOf(at); | |
| 106 | + var lstr=str.length; | |
| 107 | + var ldot=str.indexOf(dot); | |
| 108 | + if (str.indexOf(at)==-1) { | |
| 109 | + return false; | |
| 110 | + } | |
| 111 | + if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) { | |
| 112 | + return false; | |
| 113 | + } | |
| 114 | + if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) { | |
| 115 | + return false; | |
| 116 | + } | |
| 117 | + if (str.indexOf(at,(lat+1))!=-1) { | |
| 118 | + return false; | |
| 119 | + } | |
| 120 | + if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ | |
| 121 | + return false; | |
| 122 | + } | |
| 123 | + if (str.indexOf(dot,(lat+2))==-1){ | |
| 124 | + return false; | |
| 125 | + } | |
| 126 | + if (str.indexOf(" ")!=-1){ | |
| 127 | + return false; | |
| 128 | + } | |
| 129 | + return true; | |
| 130 | +} | |
| 131 | + | |
| 132 | +wizard.prototype.trim = function (str, chars) { | |
| 133 | + return w.ltrim(w.rtrim(str, chars), chars); | |
| 134 | +} | |
| 135 | + | |
| 136 | +wizard.prototype.ltrim = function (str, chars) { | |
| 137 | + chars = chars || "\\s"; | |
| 138 | + return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); | |
| 139 | +} | |
| 140 | + | |
| 141 | +wizard.prototype.rtrim = function (str, chars) { | |
| 142 | + chars = chars || "\\s"; | |
| 143 | + return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); | |
| 144 | +} | |
| 145 | + | |
| 146 | +wizard.prototype.adjustMenu = function (form_id, previous) { | |
| 147 | + form_name = form_id.split('_'); | |
| 148 | + if(form_name.length == 2) { | |
| 149 | + current_step = form_name[0]; | |
| 150 | + next_step = form_name[1]; | |
| 151 | + $('#'+current_step).attr('class', 'current'); | |
| 152 | + $('#'+next_step).attr('class', 'inactive'); | |
| 153 | + } else if(form_name.length == 3) { | |
| 154 | + previous_step = form_name[0]; | |
| 155 | + current_step = form_name[1]; | |
| 156 | + next_step = form_name[2]; | |
| 157 | + $('#'+previous_step).attr('class', 'active'); | |
| 158 | + $('#'+current_step).attr('class', 'current'); | |
| 159 | + $('#'+next_step).attr('class', 'inactive'); | |
| 160 | + } | |
| 161 | +} | |
| 162 | + | |
| 163 | +wizard.prototype.dummy = function () { | |
| 164 | + | |
| 165 | +} | |
| 166 | + | |
| 167 | +// pre-submit callback | |
| 168 | +wizard.prototype.showRequest = function (formData, jqForm, options) { | |
| 169 | + $.blockUI({message:''}); | |
| 170 | + $('#loading').attr('style', 'display:block;'); | |
| 171 | +} | |
| 172 | + | |
| 173 | +// post-submit callback | |
| 174 | +wizard.prototype.showResponse = function (responseText, statusText) { | |
| 175 | + $.unblockUI(); | |
| 176 | + $('#loading').attr('style', 'display:none;'); | |
| 177 | +} | |
| 178 | + | |
| 179 | +wizard.prototype.refresh = function (page) { | |
| 180 | + var address = "index.php?step_name="+page; | |
| 181 | + var div = 'content_container'; | |
| 182 | + $.ajax({ | |
| 183 | + url: address, | |
| 184 | + dataType: "html", | |
| 185 | + type: "GET", | |
| 186 | + cache: false, | |
| 187 | + beforeSubmit: w.showRequest, | |
| 188 | + success: function(data){ | |
| 189 | + $("#"+div).empty(); | |
| 190 | + $("#"+div).append(data); | |
| 191 | + w.showResponse; | |
| 192 | + return; | |
| 193 | + } | |
| 194 | + }); | |
| 195 | +} | |
| 196 | + | |
| 197 | +wizard.prototype.getUrl = function (address, div) { | |
| 198 | + $("#"+div).empty(); | |
| 199 | + $.ajax({ | |
| 200 | + url: address, | |
| 201 | + dataType: "html", | |
| 202 | + type: "GET", | |
| 203 | + cache: false, | |
| 204 | + success: function(data){ | |
| 205 | + $("#"+div).empty(); | |
| 206 | + $("#"+div).append(data); | |
| 207 | + return; | |
| 208 | + } | |
| 209 | + }); | |
| 210 | +} | |
| 211 | + | |
| 212 | +wizard.prototype.sendJavaLocation = function () { | |
| 213 | + $('form').submit(); | |
| 214 | +} | |
| 215 | + | |
| 216 | +wizard.prototype.sendRegistration = function () { | |
| 217 | + $('form').submit(); | |
| 218 | +} | |
| 219 | + | |
| 220 | +wizard.prototype.clearSessions = function () { | |
| 221 | + var address = 'session.php?action=destroyInstall'; | |
| 222 | + $.ajax({ | |
| 223 | + url: address, | |
| 224 | + dataType: "html", | |
| 225 | + type: "POST", | |
| 226 | + cache: false, | |
| 227 | + }); | |
| 218 | 228 | } |
| 219 | 229 | \ No newline at end of file | ... | ... |
setup/wizard/session.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Session Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | -class Session | |
| 43 | -{ | |
| 44 | - /** | |
| 45 | - * Constructs session object | |
| 46 | - * | |
| 47 | - * @author KnowledgeTree Team | |
| 48 | - * @access public | |
| 49 | - * @param none | |
| 50 | - */ | |
| 51 | - public function __construct() { | |
| 52 | - $this->startSession(); | |
| 53 | - } | |
| 54 | - | |
| 55 | - /** | |
| 56 | - * Starts a session if one does not exist | |
| 57 | - * | |
| 58 | - * @author KnowledgeTree Team | |
| 59 | - * @param none | |
| 60 | - * @access public | |
| 61 | - * @return void | |
| 62 | - */ | |
| 63 | - public function startSession() { | |
| 64 | - if(!isset($_SESSION['ready'])) { | |
| 65 | - session_start(); | |
| 66 | - $_SESSION ['ready'] = TRUE; | |
| 67 | - } | |
| 68 | - } | |
| 69 | - | |
| 70 | - /** | |
| 71 | - * Sets a value key pair in session | |
| 72 | - * | |
| 73 | - * @author KnowledgeTree Team | |
| 74 | - * @param string $fld | |
| 75 | - * @param string $val | |
| 76 | - * @access public | |
| 77 | - * @return void | |
| 78 | - */ | |
| 79 | - public function set($fld, $val) { | |
| 80 | - $this->startSession(); | |
| 81 | - $_SESSION [$fld] = $val; | |
| 82 | - } | |
| 83 | - | |
| 84 | - /** | |
| 85 | - * Sets a value key pair in a class in session | |
| 86 | - * | |
| 87 | - * @author KnowledgeTree Team | |
| 88 | - * @param string $class | |
| 89 | - * @param string $fld | |
| 90 | - * @param string $val | |
| 91 | - * @access public | |
| 92 | - * @return void | |
| 93 | - */ | |
| 94 | - public function setClass($class , $k, $v) { | |
| 95 | - $this->startSession(); | |
| 96 | - $classArray = $this->get($class); | |
| 97 | - if(isset($classArray[$k])) { | |
| 98 | - $classArray[$k] = $v; | |
| 99 | - } else { | |
| 100 | - $classArray[$k] = $v; | |
| 101 | - } | |
| 102 | - $_SESSION [ $class] = $classArray; | |
| 103 | - } | |
| 104 | - | |
| 105 | - /** | |
| 106 | - * Sets a error value key pair in a class in session | |
| 107 | - * | |
| 108 | - * @author KnowledgeTree Team | |
| 109 | - * @param string $class | |
| 110 | - * @param string $fld | |
| 111 | - * @param string $val | |
| 112 | - * @access public | |
| 113 | - * @return void | |
| 114 | - */ | |
| 115 | - public function setClassError($class, $k, $v) { | |
| 116 | - $this->startSession(); | |
| 117 | - $classArray = $this->get($class); | |
| 118 | - if(isset($classArray[$k])) { | |
| 119 | - $classArray[$k] = $v; | |
| 120 | - } else { | |
| 121 | - $classArray[$k] = $v; | |
| 122 | - } | |
| 123 | - $_SESSION [ $class] = $classArray; | |
| 124 | - } | |
| 125 | - | |
| 126 | - /** | |
| 127 | - * Clear error values in a class session | |
| 128 | - * | |
| 129 | - * @author KnowledgeTree Team | |
| 130 | - * @param string $class | |
| 131 | - * @param string $fld | |
| 132 | - * @param string $val | |
| 133 | - * @access public | |
| 134 | - * @return void | |
| 135 | - */ | |
| 136 | - public function clearErrors($class) { | |
| 137 | - $classArray = $this->get($class); | |
| 138 | - unset($classArray['errors']); | |
| 139 | - $_SESSION [ $class] = $classArray; | |
| 140 | - } | |
| 141 | - | |
| 142 | - /** | |
| 143 | - * Unset a value in session | |
| 144 | - * | |
| 145 | - * @author KnowledgeTree Team | |
| 146 | - * @param string $fld | |
| 147 | - * @access public | |
| 148 | - * @return void | |
| 149 | - */ | |
| 150 | - public function un_set($fld) { | |
| 151 | - $this->startSession(); | |
| 152 | - unset($_SESSION [$fld]); | |
| 153 | - } | |
| 154 | - | |
| 155 | - /** | |
| 156 | - * Unset a class value in session | |
| 157 | - * | |
| 158 | - * @author KnowledgeTree Team | |
| 159 | - * @param string $class | |
| 160 | - * @access public | |
| 161 | - * @return void | |
| 162 | - */ | |
| 163 | - public function un_setClass($class) { | |
| 164 | - $this->startSession(); | |
| 165 | - if(isset($_SESSION [$class])) | |
| 166 | - unset($_SESSION [$class]); | |
| 167 | - } | |
| 168 | - | |
| 169 | - /** | |
| 170 | - * Destroy the session | |
| 171 | - * | |
| 172 | - * @author KnowledgeTree Team | |
| 173 | - * @param none | |
| 174 | - * @access public | |
| 175 | - * @return void | |
| 176 | - */ | |
| 177 | - public function destroy() { | |
| 178 | - $this->startSession(); | |
| 179 | - unset($_SESSION); | |
| 180 | - session_destroy(); | |
| 181 | - } | |
| 182 | - | |
| 183 | - /** | |
| 184 | - * Get a session value | |
| 185 | - * | |
| 186 | - * @author KnowledgeTree Team | |
| 187 | - * @param string $fld | |
| 188 | - * @access public | |
| 189 | - * @return string | |
| 190 | - */ | |
| 191 | - public function get($fld) { | |
| 192 | - $this->startSession(); | |
| 193 | - if(isset($_SESSION [$fld])) | |
| 194 | - return $_SESSION [$fld]; | |
| 195 | - return false; | |
| 196 | - } | |
| 197 | - | |
| 198 | - /** | |
| 199 | - * Check if a field exists in session | |
| 200 | - * | |
| 201 | - * @author KnowledgeTree Team | |
| 202 | - * @param string $fld | |
| 203 | - * @access public | |
| 204 | - * @return string | |
| 205 | - */ | |
| 206 | - public function is_set($fld) { | |
| 207 | - $this->startSession(); | |
| 208 | - return isset($_SESSION [$fld]); | |
| 209 | - } | |
| 210 | - | |
| 211 | - /** | |
| 212 | - * Return a class from session | |
| 213 | - * | |
| 214 | - * @author KnowledgeTree Team | |
| 215 | - * @param string $fld | |
| 216 | - * @access public | |
| 217 | - * @return string | |
| 218 | - */ | |
| 219 | - public function getClass($class) { | |
| 220 | - return $_SESSION[$class]; | |
| 221 | - } | |
| 222 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Session Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Migrater | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | +class Session | |
| 43 | +{ | |
| 44 | + private $salt = 'install'; | |
| 45 | + /** | |
| 46 | + * Constructs session object | |
| 47 | + * | |
| 48 | + * @author KnowledgeTree Team | |
| 49 | + * @access public | |
| 50 | + * @param none | |
| 51 | + */ | |
| 52 | + public function __construct() { | |
| 53 | + $this->startSession(); | |
| 54 | + } | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * Starts a session if one does not exist | |
| 58 | + * | |
| 59 | + * @author KnowledgeTree Team | |
| 60 | + * @param none | |
| 61 | + * @access public | |
| 62 | + * @return void | |
| 63 | + */ | |
| 64 | + public function startSession() { | |
| 65 | + if(!isset($_SESSION[$this->salt]['ready'])) { | |
| 66 | + session_start(); | |
| 67 | + $_SESSION[$this->salt] ['ready'] = TRUE; | |
| 68 | + } | |
| 69 | + } | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * Sets a value key pair in session | |
| 73 | + * | |
| 74 | + * @author KnowledgeTree Team | |
| 75 | + * @param string $fld | |
| 76 | + * @param string $val | |
| 77 | + * @access public | |
| 78 | + * @return void | |
| 79 | + */ | |
| 80 | + public function set($fld, $val) { | |
| 81 | + $this->startSession(); | |
| 82 | + $_SESSION[$this->salt] [$fld] = $val; | |
| 83 | + } | |
| 84 | + | |
| 85 | + /** | |
| 86 | + * Sets a value key pair in a class in session | |
| 87 | + * | |
| 88 | + * @author KnowledgeTree Team | |
| 89 | + * @param string $class | |
| 90 | + * @param string $fld | |
| 91 | + * @param string $val | |
| 92 | + * @access public | |
| 93 | + * @return void | |
| 94 | + */ | |
| 95 | + public function setClass($class , $k, $v) { | |
| 96 | + $this->startSession(); | |
| 97 | + $classArray = $this->get($class); | |
| 98 | + if(isset($classArray[$k])) { | |
| 99 | + $classArray[$k] = $v; | |
| 100 | + } else { | |
| 101 | + $classArray[$k] = $v; | |
| 102 | + } | |
| 103 | + $_SESSION[$this->salt] [ $class] = $classArray; | |
| 104 | + } | |
| 105 | + | |
| 106 | + /** | |
| 107 | + * Sets a error value key pair in a class in session | |
| 108 | + * | |
| 109 | + * @author KnowledgeTree Team | |
| 110 | + * @param string $class | |
| 111 | + * @param string $fld | |
| 112 | + * @param string $val | |
| 113 | + * @access public | |
| 114 | + * @return void | |
| 115 | + */ | |
| 116 | + public function setClassError($class, $k, $v) { | |
| 117 | + $this->startSession(); | |
| 118 | + $classArray = $this->get($class); | |
| 119 | + if(isset($classArray[$k])) { | |
| 120 | + $classArray[$k] = $v; | |
| 121 | + } else { | |
| 122 | + $classArray[$k] = $v; | |
| 123 | + } | |
| 124 | + $_SESSION[$this->salt] [ $class] = $classArray; | |
| 125 | + } | |
| 126 | + | |
| 127 | + /** | |
| 128 | + * Clear error values in a class session | |
| 129 | + * | |
| 130 | + * @author KnowledgeTree Team | |
| 131 | + * @param string $class | |
| 132 | + * @param string $fld | |
| 133 | + * @param string $val | |
| 134 | + * @access public | |
| 135 | + * @return void | |
| 136 | + */ | |
| 137 | + public function clearErrors($class) { | |
| 138 | + $classArray = $this->get($class); | |
| 139 | + unset($classArray['errors']); | |
| 140 | + $_SESSION[$this->salt] [ $class] = $classArray; | |
| 141 | + } | |
| 142 | + | |
| 143 | + /** | |
| 144 | + * Unset a value in session | |
| 145 | + * | |
| 146 | + * @author KnowledgeTree Team | |
| 147 | + * @param string $fld | |
| 148 | + * @access public | |
| 149 | + * @return void | |
| 150 | + */ | |
| 151 | + public function un_set($fld) { | |
| 152 | + $this->startSession(); | |
| 153 | + unset($_SESSION[$this->salt] [$fld]); | |
| 154 | + } | |
| 155 | + | |
| 156 | + /** | |
| 157 | + * Unset a class value in session | |
| 158 | + * | |
| 159 | + * @author KnowledgeTree Team | |
| 160 | + * @param string $class | |
| 161 | + * @access public | |
| 162 | + * @return void | |
| 163 | + */ | |
| 164 | + public function un_setClass($class) { | |
| 165 | + $this->startSession(); | |
| 166 | + if(isset($_SESSION[$this->salt] [$class])) | |
| 167 | + unset($_SESSION[$this->salt] [$class]); | |
| 168 | + } | |
| 169 | + | |
| 170 | + /** | |
| 171 | + * Destroy the session | |
| 172 | + * | |
| 173 | + * @author KnowledgeTree Team | |
| 174 | + * @param none | |
| 175 | + * @access public | |
| 176 | + * @return void | |
| 177 | + */ | |
| 178 | + public function destroy() { | |
| 179 | + $this->startSession(); | |
| 180 | + unset($_SESSION[$this->salt]); | |
| 181 | + session_destroy(); | |
| 182 | + } | |
| 183 | + | |
| 184 | + /** | |
| 185 | + * Get a session value | |
| 186 | + * | |
| 187 | + * @author KnowledgeTree Team | |
| 188 | + * @param string $fld | |
| 189 | + * @access public | |
| 190 | + * @return string | |
| 191 | + */ | |
| 192 | + public function get($fld) { | |
| 193 | + $this->startSession(); | |
| 194 | + if(isset($_SESSION[$this->salt] [$fld])) | |
| 195 | + return $_SESSION[$this->salt] [$fld]; | |
| 196 | + return false; | |
| 197 | + } | |
| 198 | + | |
| 199 | + /** | |
| 200 | + * Check if a field exists in session | |
| 201 | + * | |
| 202 | + * @author KnowledgeTree Team | |
| 203 | + * @param string $fld | |
| 204 | + * @access public | |
| 205 | + * @return string | |
| 206 | + */ | |
| 207 | + public function is_set($fld) { | |
| 208 | + $this->startSession(); | |
| 209 | + return isset($_SESSION[$this->salt] [$fld]); | |
| 210 | + } | |
| 211 | + | |
| 212 | + /** | |
| 213 | + * Return a class from session | |
| 214 | + * | |
| 215 | + * @author KnowledgeTree Team | |
| 216 | + * @param string $fld | |
| 217 | + * @access public | |
| 218 | + * @return string | |
| 219 | + */ | |
| 220 | + public function getClass($class) { | |
| 221 | + return $_SESSION[$this->salt][$class]; | |
| 222 | + } | |
| 223 | + | |
| 224 | + public function destroyInstall() { | |
| 225 | + $_SESSION[$this->salt] = ''; | |
| 226 | + $this->destroy(); | |
| 227 | + } | |
| 228 | +} | |
| 229 | + | |
| 230 | +if(isset($_GET['action'])) { | |
| 231 | + $func = $_GET['action']; | |
| 232 | + if($func != '') { | |
| 233 | + $ses = new Session(); | |
| 234 | + $method = "$func"; | |
| 235 | + $ses->$method(); | |
| 236 | + } | |
| 237 | +} | |
| 223 | 238 | ?> |
| 224 | 239 | \ No newline at end of file | ... | ... |
setup/wizard/step.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Step . | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | -class Step | |
| 43 | -{ | |
| 44 | - /** | |
| 45 | - * List of variables to be loaded to template | |
| 46 | - * | |
| 47 | - * @author KnowledgeTree Team | |
| 48 | - * @access protected | |
| 49 | - * @var array | |
| 50 | - */ | |
| 51 | - protected $temp_variables = array(); | |
| 52 | - | |
| 53 | - /** | |
| 54 | - * List of errors encountered by step | |
| 55 | - * | |
| 56 | - * @author KnowledgeTree Team | |
| 57 | - * @access protected | |
| 58 | - * @var array | |
| 59 | - */ | |
| 60 | - protected $error = array(); | |
| 61 | - | |
| 62 | - /** | |
| 63 | - * List of warnings encountered by step | |
| 64 | - * | |
| 65 | - * @author KnowledgeTree Team | |
| 66 | - * @access protected | |
| 67 | - * @var array | |
| 68 | - */ | |
| 69 | - protected $warnings = array(); | |
| 70 | - | |
| 71 | - /** | |
| 72 | - * Flag to store class information in session | |
| 73 | - * | |
| 74 | - * @author KnowledgeTree Team | |
| 75 | - * @access public | |
| 76 | - * @var array | |
| 77 | - */ | |
| 78 | - protected $storeInSession = false; | |
| 79 | - | |
| 80 | - /** | |
| 81 | - * Flag if step needs to be installed | |
| 82 | - * | |
| 83 | - * @author KnowledgeTree Team | |
| 84 | - * @access public | |
| 85 | - * @var array | |
| 86 | - */ | |
| 87 | - protected $runInstall = false; | |
| 88 | - | |
| 89 | - /** | |
| 90 | - * Step order | |
| 91 | - * | |
| 92 | - * @author KnowledgeTree Team | |
| 93 | - * @access public | |
| 94 | - * @var string | |
| 95 | - */ | |
| 96 | - protected $order = false; | |
| 97 | - | |
| 98 | - /** | |
| 99 | - * Flag if step needs to run silently | |
| 100 | - * | |
| 101 | - * @author KnowledgeTree Team | |
| 102 | - * @access public | |
| 103 | - * @var boolean | |
| 104 | - */ | |
| 105 | - protected $silent = false; | |
| 106 | - | |
| 107 | - public $displayFirst = false; | |
| 108 | - /** | |
| 109 | - * Returns step state | |
| 110 | - * | |
| 111 | - * @author KnowledgeTree Team | |
| 112 | - * @param none | |
| 113 | - * @access public | |
| 114 | - * @return string | |
| 115 | - */ | |
| 116 | - public function doStep() | |
| 117 | - { | |
| 118 | - return ''; | |
| 119 | - } | |
| 120 | - | |
| 121 | - public function displayFirst() { | |
| 122 | - return $this->displayFirst; | |
| 123 | - } | |
| 124 | - | |
| 125 | - /** | |
| 126 | - * Returns step variables | |
| 127 | - * | |
| 128 | - * @author KnowledgeTree Team | |
| 129 | - * @param none | |
| 130 | - * @access public | |
| 131 | - * @return array | |
| 132 | - */ | |
| 133 | - public function getStepVars() | |
| 134 | - { | |
| 135 | - return $this->temp_variables; | |
| 136 | - } | |
| 137 | - | |
| 138 | - /** | |
| 139 | - * Returns step errors | |
| 140 | - * | |
| 141 | - * @author KnowledgeTree Team | |
| 142 | - * @param none | |
| 143 | - * @access public | |
| 144 | - * @return array | |
| 145 | - */ | |
| 146 | - public function getErrors() { | |
| 147 | - return $this->error; | |
| 148 | - } | |
| 149 | - | |
| 150 | - /** | |
| 151 | - * Returns step errors | |
| 152 | - * | |
| 153 | - * @author KnowledgeTree Team | |
| 154 | - * @param none | |
| 155 | - * @access public | |
| 156 | - * @return array | |
| 157 | - */ | |
| 158 | - public function getWarnings() { | |
| 159 | - return $this->warnings; | |
| 160 | - } | |
| 161 | - | |
| 162 | - /** | |
| 163 | - * Load default step values | |
| 164 | - * | |
| 165 | - * @author KnowledgeTree Team | |
| 166 | - * @param none | |
| 167 | - * @access public | |
| 168 | - * @return void | |
| 169 | - */ | |
| 170 | - public function loadDefaults() { | |
| 171 | - | |
| 172 | - } | |
| 173 | - | |
| 174 | - /** | |
| 175 | - * Return default step values | |
| 176 | - * | |
| 177 | - * @author KnowledgeTree Team | |
| 178 | - * @param none | |
| 179 | - * @access public | |
| 180 | - * @return array | |
| 181 | - */ | |
| 182 | - public function getDefaults() { | |
| 183 | - return array(); | |
| 184 | - } | |
| 185 | - | |
| 186 | - /** | |
| 187 | - * Checks if edit button has been clicked | |
| 188 | - * | |
| 189 | - * @author KnowledgeTree Team | |
| 190 | - * @param none | |
| 191 | - * @access public | |
| 192 | - * @return boolean | |
| 193 | - */ | |
| 194 | - public function edit() { | |
| 195 | - if(isset($_POST['Edit'])) { | |
| 196 | - return true; | |
| 197 | - } | |
| 198 | - | |
| 199 | - return false; | |
| 200 | - } | |
| 201 | - | |
| 202 | - /** | |
| 203 | - * Checks if next button has been clicked | |
| 204 | - * | |
| 205 | - * @author KnowledgeTree Team | |
| 206 | - * @param none | |
| 207 | - * @access public | |
| 208 | - * @return boolean | |
| 209 | - */ | |
| 210 | - public function next() { | |
| 211 | - if(isset($_POST['Next'])) { | |
| 212 | - return true; | |
| 213 | - } | |
| 214 | - | |
| 215 | - return false; | |
| 216 | - } | |
| 217 | - | |
| 218 | - /** | |
| 219 | - * Checks if previous button has been clicked | |
| 220 | - * | |
| 221 | - * @author KnowledgeTree Team | |
| 222 | - * @param none | |
| 223 | - * @access public | |
| 224 | - * @return boolean | |
| 225 | - */ | |
| 226 | - public function previous() { | |
| 227 | - if(isset($_POST['Previous'])) { | |
| 228 | - return true; | |
| 229 | - } | |
| 230 | - | |
| 231 | - return false; | |
| 232 | - } | |
| 233 | - | |
| 234 | - /** | |
| 235 | - * Checks if Confirm button has been clicked | |
| 236 | - * | |
| 237 | - * @author KnowledgeTree Team | |
| 238 | - * @param none | |
| 239 | - * @access public | |
| 240 | - * @return boolean | |
| 241 | - */ | |
| 242 | - function confirm() { | |
| 243 | - if(isset($_POST['Confirm'])) { | |
| 244 | - return true; | |
| 245 | - } | |
| 246 | - | |
| 247 | - return false; | |
| 248 | - } | |
| 249 | - | |
| 250 | - /** | |
| 251 | - * Checks if Confirm button has been clicked | |
| 252 | - * | |
| 253 | - * @author KnowledgeTree Team | |
| 254 | - * @param none | |
| 255 | - * @access public | |
| 256 | - * @return boolean | |
| 257 | - */ | |
| 258 | - function install() { | |
| 259 | - if(isset($_POST['Install'])) { | |
| 260 | - return true; | |
| 261 | - } | |
| 262 | - | |
| 263 | - return false; | |
| 264 | - } | |
| 265 | - | |
| 266 | - /** | |
| 267 | - * Checks if we are currently in this class step | |
| 268 | - * | |
| 269 | - * @author KnowledgeTree Team | |
| 270 | - * @param string | |
| 271 | - * @access public | |
| 272 | - * @return boolean | |
| 273 | - */ | |
| 274 | - public function inStep($name) { | |
| 275 | - if($_GET['step_name'] == $name) | |
| 276 | - return true; | |
| 277 | - return false; | |
| 278 | - } | |
| 279 | - | |
| 280 | - /** | |
| 281 | - * Load session data to post | |
| 282 | - * | |
| 283 | - * @author KnowledgeTree Team | |
| 284 | - * @params none | |
| 285 | - * @access private | |
| 286 | - * @return boolean | |
| 287 | - */ | |
| 288 | - public function setDataFromSession($class) { | |
| 289 | - if(empty($_SESSION[$class])) { | |
| 290 | - return false; | |
| 291 | - } | |
| 292 | - $_POST = $_SESSION[$class]; | |
| 293 | - | |
| 294 | - return true; | |
| 295 | - } | |
| 296 | - | |
| 297 | - /** | |
| 298 | - * Get session data from post | |
| 299 | - * | |
| 300 | - * @author KnowledgeTree Team | |
| 301 | - * @params none | |
| 302 | - * @access private | |
| 303 | - * @return boolean | |
| 304 | - */ | |
| 305 | - public function getDataFromSession($class) { | |
| 306 | - if(empty($_SESSION[$class])) { | |
| 307 | - return false; | |
| 308 | - } | |
| 309 | - | |
| 310 | - return $_SESSION[$class]; | |
| 311 | - } | |
| 312 | - | |
| 313 | - /** | |
| 314 | - * Safer way to return post data | |
| 315 | - * | |
| 316 | - * @author KnowledgeTree Team | |
| 317 | - * @params SimpleXmlObject $simplexml | |
| 318 | - * @access public | |
| 319 | - * @return void | |
| 320 | - */ | |
| 321 | - public function getPostSafe($key) { | |
| 322 | - return isset($_POST[$key]) ? $_POST[$key] : ""; | |
| 323 | - } | |
| 324 | - | |
| 325 | - /** | |
| 326 | - * Safer way to return post data | |
| 327 | - * | |
| 328 | - * @author KnowledgeTree Team | |
| 329 | - * @params SimpleXmlObject $simplexml | |
| 330 | - * @access public | |
| 331 | - * @return void | |
| 332 | - */ | |
| 333 | - public function getPostBoolean($key) { | |
| 334 | - return isset($_POST[$key]) ? $_POST[$key] : false; | |
| 335 | - } | |
| 336 | - | |
| 337 | - /** | |
| 338 | - * Runs step install if required | |
| 339 | - * | |
| 340 | - * @author KnowledgeTree Team | |
| 341 | - * @param none | |
| 342 | - * @access public | |
| 343 | - * @return void | |
| 344 | - */ | |
| 345 | - public function installStep() { | |
| 346 | - return ''; | |
| 347 | - } | |
| 348 | - | |
| 349 | - /** | |
| 350 | - * Return whether or not to store a step information in session | |
| 351 | - * | |
| 352 | - * @author KnowledgeTree Team | |
| 353 | - * @param none | |
| 354 | - * @access public | |
| 355 | - * @return boolean | |
| 356 | - */ | |
| 357 | - public function storeInSession() { | |
| 358 | - return $this->storeInSession; | |
| 359 | - } | |
| 360 | - | |
| 361 | - /** | |
| 362 | - * Return whether or not to a step has to be installed | |
| 363 | - * | |
| 364 | - * @author KnowledgeTree Team | |
| 365 | - * @param none | |
| 366 | - * @access public | |
| 367 | - * @return boolean | |
| 368 | - */ | |
| 369 | - public function runInstall() { | |
| 370 | - return $this->runInstall; | |
| 371 | - } | |
| 372 | - | |
| 373 | - public function setPostConfig() { | |
| 374 | - return ''; | |
| 375 | - } | |
| 376 | - | |
| 377 | - /** | |
| 378 | - * Return whether or not to a step has to be in silent mode | |
| 379 | - * | |
| 380 | - * @author KnowledgeTree Team | |
| 381 | - * @param none | |
| 382 | - * @access public | |
| 383 | - * @return boolean | |
| 384 | - */ | |
| 385 | - public function silentMode() { | |
| 386 | - return $this->silent; | |
| 387 | - } | |
| 388 | - | |
| 389 | - /** | |
| 390 | - * Set step errors | |
| 391 | - * | |
| 392 | - * @author KnowledgeTree Team | |
| 393 | - * @param none | |
| 394 | - * @access public | |
| 395 | - * @return array | |
| 396 | - */ | |
| 397 | - public function setErrors($error) { | |
| 398 | - $this->error = $error; | |
| 399 | - } | |
| 400 | -} | |
| 401 | - | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Step . | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | +class Step | |
| 43 | +{ | |
| 44 | + /** | |
| 45 | + * List of variables to be loaded to template | |
| 46 | + * | |
| 47 | + * @author KnowledgeTree Team | |
| 48 | + * @access protected | |
| 49 | + * @var array | |
| 50 | + */ | |
| 51 | + protected $temp_variables = array(); | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * List of errors encountered by step | |
| 55 | + * | |
| 56 | + * @author KnowledgeTree Team | |
| 57 | + * @access protected | |
| 58 | + * @var array | |
| 59 | + */ | |
| 60 | + protected $error = array(); | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * List of warnings encountered by step | |
| 64 | + * | |
| 65 | + * @author KnowledgeTree Team | |
| 66 | + * @access protected | |
| 67 | + * @var array | |
| 68 | + */ | |
| 69 | + protected $warnings = array(); | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * Flag to store class information in session | |
| 73 | + * | |
| 74 | + * @author KnowledgeTree Team | |
| 75 | + * @access public | |
| 76 | + * @var array | |
| 77 | + */ | |
| 78 | + protected $storeInSession = false; | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * Flag if step needs to be installed | |
| 82 | + * | |
| 83 | + * @author KnowledgeTree Team | |
| 84 | + * @access public | |
| 85 | + * @var array | |
| 86 | + */ | |
| 87 | + protected $runInstall = false; | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * Step order | |
| 91 | + * | |
| 92 | + * @author KnowledgeTree Team | |
| 93 | + * @access public | |
| 94 | + * @var string | |
| 95 | + */ | |
| 96 | + protected $order = false; | |
| 97 | + | |
| 98 | + /** | |
| 99 | + * Flag if step needs to run silently | |
| 100 | + * | |
| 101 | + * @author KnowledgeTree Team | |
| 102 | + * @access public | |
| 103 | + * @var boolean | |
| 104 | + */ | |
| 105 | + protected $silent = false; | |
| 106 | + | |
| 107 | + public $displayFirst = false; | |
| 108 | + | |
| 109 | + private $salt = 'install'; | |
| 110 | + /** | |
| 111 | + * Returns step state | |
| 112 | + * | |
| 113 | + * @author KnowledgeTree Team | |
| 114 | + * @param none | |
| 115 | + * @access public | |
| 116 | + * @return string | |
| 117 | + */ | |
| 118 | + public function doStep() | |
| 119 | + { | |
| 120 | + return ''; | |
| 121 | + } | |
| 122 | + | |
| 123 | + public function displayFirst() { | |
| 124 | + return $this->displayFirst; | |
| 125 | + } | |
| 126 | + | |
| 127 | + /** | |
| 128 | + * Returns step variables | |
| 129 | + * | |
| 130 | + * @author KnowledgeTree Team | |
| 131 | + * @param none | |
| 132 | + * @access public | |
| 133 | + * @return array | |
| 134 | + */ | |
| 135 | + public function getStepVars() | |
| 136 | + { | |
| 137 | + return $this->temp_variables; | |
| 138 | + } | |
| 139 | + | |
| 140 | + /** | |
| 141 | + * Returns step errors | |
| 142 | + * | |
| 143 | + * @author KnowledgeTree Team | |
| 144 | + * @param none | |
| 145 | + * @access public | |
| 146 | + * @return array | |
| 147 | + */ | |
| 148 | + public function getErrors() { | |
| 149 | + return $this->error; | |
| 150 | + } | |
| 151 | + | |
| 152 | + /** | |
| 153 | + * Returns step errors | |
| 154 | + * | |
| 155 | + * @author KnowledgeTree Team | |
| 156 | + * @param none | |
| 157 | + * @access public | |
| 158 | + * @return array | |
| 159 | + */ | |
| 160 | + public function getWarnings() { | |
| 161 | + return $this->warnings; | |
| 162 | + } | |
| 163 | + | |
| 164 | + /** | |
| 165 | + * Load default step values | |
| 166 | + * | |
| 167 | + * @author KnowledgeTree Team | |
| 168 | + * @param none | |
| 169 | + * @access public | |
| 170 | + * @return void | |
| 171 | + */ | |
| 172 | + public function loadDefaults() { | |
| 173 | + | |
| 174 | + } | |
| 175 | + | |
| 176 | + /** | |
| 177 | + * Return default step values | |
| 178 | + * | |
| 179 | + * @author KnowledgeTree Team | |
| 180 | + * @param none | |
| 181 | + * @access public | |
| 182 | + * @return array | |
| 183 | + */ | |
| 184 | + public function getDefaults() { | |
| 185 | + return array(); | |
| 186 | + } | |
| 187 | + | |
| 188 | + /** | |
| 189 | + * Checks if edit button has been clicked | |
| 190 | + * | |
| 191 | + * @author KnowledgeTree Team | |
| 192 | + * @param none | |
| 193 | + * @access public | |
| 194 | + * @return boolean | |
| 195 | + */ | |
| 196 | + public function edit() { | |
| 197 | + if(isset($_POST['Edit'])) { | |
| 198 | + return true; | |
| 199 | + } | |
| 200 | + | |
| 201 | + return false; | |
| 202 | + } | |
| 203 | + | |
| 204 | + /** | |
| 205 | + * Checks if next button has been clicked | |
| 206 | + * | |
| 207 | + * @author KnowledgeTree Team | |
| 208 | + * @param none | |
| 209 | + * @access public | |
| 210 | + * @return boolean | |
| 211 | + */ | |
| 212 | + public function next() { | |
| 213 | + if(isset($_POST['Next'])) { | |
| 214 | + return true; | |
| 215 | + } | |
| 216 | + | |
| 217 | + return false; | |
| 218 | + } | |
| 219 | + | |
| 220 | + /** | |
| 221 | + * Checks if previous button has been clicked | |
| 222 | + * | |
| 223 | + * @author KnowledgeTree Team | |
| 224 | + * @param none | |
| 225 | + * @access public | |
| 226 | + * @return boolean | |
| 227 | + */ | |
| 228 | + public function previous() { | |
| 229 | + if(isset($_POST['Previous'])) { | |
| 230 | + return true; | |
| 231 | + } | |
| 232 | + | |
| 233 | + return false; | |
| 234 | + } | |
| 235 | + | |
| 236 | + /** | |
| 237 | + * Checks if Confirm button has been clicked | |
| 238 | + * | |
| 239 | + * @author KnowledgeTree Team | |
| 240 | + * @param none | |
| 241 | + * @access public | |
| 242 | + * @return boolean | |
| 243 | + */ | |
| 244 | + function confirm() { | |
| 245 | + if(isset($_POST['Confirm'])) { | |
| 246 | + return true; | |
| 247 | + } | |
| 248 | + | |
| 249 | + return false; | |
| 250 | + } | |
| 251 | + | |
| 252 | + /** | |
| 253 | + * Checks if Confirm button has been clicked | |
| 254 | + * | |
| 255 | + * @author KnowledgeTree Team | |
| 256 | + * @param none | |
| 257 | + * @access public | |
| 258 | + * @return boolean | |
| 259 | + */ | |
| 260 | + function install() { | |
| 261 | + if(isset($_POST['Install'])) { | |
| 262 | + return true; | |
| 263 | + } | |
| 264 | + | |
| 265 | + return false; | |
| 266 | + } | |
| 267 | + | |
| 268 | + /** | |
| 269 | + * Checks if we are currently in this class step | |
| 270 | + * | |
| 271 | + * @author KnowledgeTree Team | |
| 272 | + * @param string | |
| 273 | + * @access public | |
| 274 | + * @return boolean | |
| 275 | + */ | |
| 276 | + public function inStep($name) { | |
| 277 | + if($_GET['step_name'] == $name) | |
| 278 | + return true; | |
| 279 | + return false; | |
| 280 | + } | |
| 281 | + | |
| 282 | + /** | |
| 283 | + * Load session data to post | |
| 284 | + * | |
| 285 | + * @author KnowledgeTree Team | |
| 286 | + * @params none | |
| 287 | + * @access private | |
| 288 | + * @return boolean | |
| 289 | + */ | |
| 290 | + public function setDataFromSession($class) { | |
| 291 | + if(empty($_SESSION[$this->salt][$class])) { | |
| 292 | + return false; | |
| 293 | + } | |
| 294 | + $_POST = $_SESSION[$this->salt][$class]; | |
| 295 | + | |
| 296 | + return true; | |
| 297 | + } | |
| 298 | + | |
| 299 | + /** | |
| 300 | + * Get session data from post | |
| 301 | + * | |
| 302 | + * @author KnowledgeTree Team | |
| 303 | + * @params none | |
| 304 | + * @access private | |
| 305 | + * @return boolean | |
| 306 | + */ | |
| 307 | + public function getDataFromSession($class) { | |
| 308 | + if(empty($_SESSION[$this->salt][$class])) { | |
| 309 | + return false; | |
| 310 | + } | |
| 311 | + | |
| 312 | + return $_SESSION[$this->salt][$class]; | |
| 313 | + } | |
| 314 | + | |
| 315 | + /** | |
| 316 | + * Safer way to return post data | |
| 317 | + * | |
| 318 | + * @author KnowledgeTree Team | |
| 319 | + * @params SimpleXmlObject $simplexml | |
| 320 | + * @access public | |
| 321 | + * @return void | |
| 322 | + */ | |
| 323 | + public function getPostSafe($key) { | |
| 324 | + return isset($_POST[$key]) ? $_POST[$key] : ""; | |
| 325 | + } | |
| 326 | + | |
| 327 | + /** | |
| 328 | + * Safer way to return post data | |
| 329 | + * | |
| 330 | + * @author KnowledgeTree Team | |
| 331 | + * @params SimpleXmlObject $simplexml | |
| 332 | + * @access public | |
| 333 | + * @return void | |
| 334 | + */ | |
| 335 | + public function getPostBoolean($key) { | |
| 336 | + return isset($_POST[$key]) ? $_POST[$key] : false; | |
| 337 | + } | |
| 338 | + | |
| 339 | + /** | |
| 340 | + * Runs step install if required | |
| 341 | + * | |
| 342 | + * @author KnowledgeTree Team | |
| 343 | + * @param none | |
| 344 | + * @access public | |
| 345 | + * @return void | |
| 346 | + */ | |
| 347 | + public function installStep() { | |
| 348 | + return ''; | |
| 349 | + } | |
| 350 | + | |
| 351 | + /** | |
| 352 | + * Return whether or not to store a step information in session | |
| 353 | + * | |
| 354 | + * @author KnowledgeTree Team | |
| 355 | + * @param none | |
| 356 | + * @access public | |
| 357 | + * @return boolean | |
| 358 | + */ | |
| 359 | + public function storeInSession() { | |
| 360 | + return $this->storeInSession; | |
| 361 | + } | |
| 362 | + | |
| 363 | + /** | |
| 364 | + * Return whether or not to a step has to be installed | |
| 365 | + * | |
| 366 | + * @author KnowledgeTree Team | |
| 367 | + * @param none | |
| 368 | + * @access public | |
| 369 | + * @return boolean | |
| 370 | + */ | |
| 371 | + public function runInstall() { | |
| 372 | + return $this->runInstall; | |
| 373 | + } | |
| 374 | + | |
| 375 | + public function setPostConfig() { | |
| 376 | + return ''; | |
| 377 | + } | |
| 378 | + | |
| 379 | + /** | |
| 380 | + * Return whether or not to a step has to be in silent mode | |
| 381 | + * | |
| 382 | + * @author KnowledgeTree Team | |
| 383 | + * @param none | |
| 384 | + * @access public | |
| 385 | + * @return boolean | |
| 386 | + */ | |
| 387 | + public function silentMode() { | |
| 388 | + return $this->silent; | |
| 389 | + } | |
| 390 | + | |
| 391 | + /** | |
| 392 | + * Set step errors | |
| 393 | + * | |
| 394 | + * @author KnowledgeTree Team | |
| 395 | + * @param none | |
| 396 | + * @access public | |
| 397 | + * @return array | |
| 398 | + */ | |
| 399 | + public function setErrors($error) { | |
| 400 | + $this->error = $error; | |
| 401 | + } | |
| 402 | +} | |
| 403 | + | |
| 402 | 404 | ?> |
| 403 | 405 | \ No newline at end of file | ... | ... |
setup/wizard/steps/database.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Database Step Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | - | |
| 43 | -class database extends Step | |
| 44 | -{ | |
| 45 | - /** | |
| 46 | - * Reference to Database object | |
| 47 | - * | |
| 48 | - * @author KnowledgeTree Team | |
| 49 | - * @access public | |
| 50 | - * @var object | |
| 51 | - */ | |
| 52 | - public $_dbhandler = null; | |
| 53 | - | |
| 54 | - /** | |
| 55 | - * Reference to Database object | |
| 56 | - * | |
| 57 | - * @author KnowledgeTree Team | |
| 58 | - * @access public | |
| 59 | - * @var object | |
| 60 | - */ | |
| 61 | - public $_util = null; | |
| 62 | - | |
| 63 | - /** | |
| 64 | - * Database type | |
| 65 | - * | |
| 66 | - * @author KnowledgeTree Team | |
| 67 | - * @access private | |
| 68 | - * @var array | |
| 69 | - */ | |
| 70 | - private $dtype = ''; | |
| 71 | - | |
| 72 | - /** | |
| 73 | - * Database types | |
| 74 | - * | |
| 75 | - * @author KnowledgeTree Team | |
| 76 | - * @access private | |
| 77 | - * @var array | |
| 78 | - */ | |
| 79 | - private $dtypes = array(); | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * Database host | |
| 83 | - * | |
| 84 | - * @author KnowledgeTree Team | |
| 85 | - * @access private | |
| 86 | - * @var string | |
| 87 | - */ | |
| 88 | - private $dhost = ''; | |
| 89 | - | |
| 90 | - /** | |
| 91 | - * Database port | |
| 92 | - * | |
| 93 | - * @author KnowledgeTree Team | |
| 94 | - * @access private | |
| 95 | - * @var string | |
| 96 | - */ | |
| 97 | - private $dport = ''; | |
| 98 | - | |
| 99 | - /** | |
| 100 | - * Database name | |
| 101 | - * | |
| 102 | - * @author KnowledgeTree Team | |
| 103 | - * @access private | |
| 104 | - * @var string | |
| 105 | - */ | |
| 106 | - private $dname = ''; | |
| 107 | - | |
| 108 | - /** | |
| 109 | - * Database root username | |
| 110 | - * | |
| 111 | - * @author KnowledgeTree Team | |
| 112 | - * @access private | |
| 113 | - * @var string | |
| 114 | - */ | |
| 115 | - private $duname = ''; | |
| 116 | - | |
| 117 | - /** | |
| 118 | - * Database root password | |
| 119 | - * | |
| 120 | - * @author KnowledgeTree Team | |
| 121 | - * @access private | |
| 122 | - * @var string | |
| 123 | - */ | |
| 124 | - private $dpassword = ''; | |
| 125 | - | |
| 126 | - /** | |
| 127 | - * Database dms username | |
| 128 | - * | |
| 129 | - * @author KnowledgeTree Team | |
| 130 | - * @access private | |
| 131 | - * @var string | |
| 132 | - */ | |
| 133 | - private $dmsname = ''; | |
| 134 | - | |
| 135 | - /** | |
| 136 | - * Database dms password | |
| 137 | - * | |
| 138 | - * @author KnowledgeTree Team | |
| 139 | - * @access private | |
| 140 | - * @var string | |
| 141 | - */ | |
| 142 | - private $dmspassword = ''; | |
| 143 | - | |
| 144 | - /** | |
| 145 | - * Default dms user username | |
| 146 | - * | |
| 147 | - * @author KnowledgeTree Team | |
| 148 | - * @access private | |
| 149 | - * @var boolean | |
| 150 | - */ | |
| 151 | - private $dmsusername = ''; | |
| 152 | - | |
| 153 | - /** | |
| 154 | - * Default dms user password | |
| 155 | - * | |
| 156 | - * @author KnowledgeTree Team | |
| 157 | - * @access private | |
| 158 | - * @var boolean | |
| 159 | - */ | |
| 160 | - private $dmsuserpassword = ''; | |
| 161 | - | |
| 162 | - /** | |
| 163 | - * Location of database binaries. | |
| 164 | - * | |
| 165 | - * @author KnowledgeTree Team | |
| 166 | - * @access private | |
| 167 | - * @var string | |
| 168 | - */ | |
| 169 | - private $mysqlDir; // TODO:multiple databases | |
| 170 | - | |
| 171 | - /** | |
| 172 | - * Name of database binary. | |
| 173 | - * | |
| 174 | - * @author KnowledgeTree Team | |
| 175 | - * @access private | |
| 176 | - * @var string | |
| 177 | - */ | |
| 178 | - private $dbbinary = ''; // TODO:multiple databases | |
| 179 | - | |
| 180 | - /** | |
| 181 | - * Database table prefix | |
| 182 | - * | |
| 183 | - * @author KnowledgeTree Team | |
| 184 | - * @access private | |
| 185 | - * @var string | |
| 186 | - */ | |
| 187 | - private $tprefix = ''; | |
| 188 | - | |
| 189 | - /** | |
| 190 | - * Flag to drop database | |
| 191 | - * | |
| 192 | - * @author KnowledgeTree Team | |
| 193 | - * @access private | |
| 194 | - * @var boolean | |
| 195 | - */ | |
| 196 | - private $ddrop = false; | |
| 197 | - | |
| 198 | - /** | |
| 199 | - * List of errors encountered | |
| 200 | - * | |
| 201 | - * @author KnowledgeTree Team | |
| 202 | - * @access public | |
| 203 | - * @var array | |
| 204 | - */ | |
| 205 | - public $error = array(); | |
| 206 | - | |
| 207 | - /** | |
| 208 | - * List of errors used in template | |
| 209 | - * | |
| 210 | - * @author KnowledgeTree Team | |
| 211 | - * @access public | |
| 212 | - * @var array | |
| 213 | - */ | |
| 214 | - public $templateErrors = array('dmspassword', 'dmsuserpassword', 'con', 'dname', 'dtype', 'duname', 'dpassword'); | |
| 215 | - | |
| 216 | - /** | |
| 217 | - * Flag to store class information in session | |
| 218 | - * | |
| 219 | - * @author KnowledgeTree Team | |
| 220 | - * @access public | |
| 221 | - * @var array | |
| 222 | - */ | |
| 223 | - public $storeInSession = true; | |
| 224 | - | |
| 225 | - /** | |
| 226 | - * Flag if step needs to be installed | |
| 227 | - * | |
| 228 | - * @author KnowledgeTree Team | |
| 229 | - * @access public | |
| 230 | - * @var array | |
| 231 | - */ | |
| 232 | - protected $runInstall = true; | |
| 233 | - | |
| 234 | - /** | |
| 235 | - * Flag if step needs to run silently | |
| 236 | - * | |
| 237 | - * @author KnowledgeTree Team | |
| 238 | - * @access public | |
| 239 | - * @var array | |
| 240 | - */ | |
| 241 | - protected $silent = true; | |
| 242 | - | |
| 243 | - /** | |
| 244 | - * Constructs database object | |
| 245 | - * | |
| 246 | - * @author KnowledgeTree Team | |
| 247 | - * @access public | |
| 248 | - * @param none | |
| 249 | - */ | |
| 250 | - public function __construct() { | |
| 251 | - $this->temp_variables = array("step_name"=>"database", "silent"=>$this->silent); | |
| 252 | - $this->_dbhandler = new dbUtil(); | |
| 253 | - $this->_util = new InstallUtil(); | |
| 254 | - if(WINDOWS_OS) | |
| 255 | - $this->mysqlDir = MYSQL_BIN; | |
| 256 | - } | |
| 257 | - | |
| 258 | - /** | |
| 259 | - * Main control of database setup | |
| 260 | - * | |
| 261 | - * @author KnowledgeTree Team | |
| 262 | - * @param none | |
| 263 | - * @access public | |
| 264 | - * @return string | |
| 265 | - */ | |
| 266 | - public function doStep() { | |
| 267 | - $this->setErrorsFromSession(); | |
| 268 | - $this->initErrors(); // Load template errors | |
| 269 | - if($this->inStep("database")) { | |
| 270 | - $res = $this->doProcess(); | |
| 271 | - if($res) { // If theres a response, return it | |
| 272 | - return $res; | |
| 273 | - } | |
| 274 | - } | |
| 275 | - if($this->setDataFromSession("database")) { // Attempt to set values from session | |
| 276 | - $this->setDetails(); // Set any posted variables | |
| 277 | - } else { | |
| 278 | - $this->temp_variables['state'] = ''; | |
| 279 | - $this->loadDefaults($this->readXml()); // Load default variables from file | |
| 280 | - } | |
| 281 | - | |
| 282 | - return 'landing'; | |
| 283 | - } | |
| 284 | - | |
| 285 | - /** | |
| 286 | - * Controls setup helper | |
| 287 | - * | |
| 288 | - * @author KnowledgeTree Team | |
| 289 | - * @param none | |
| 290 | - * @access public | |
| 291 | - * @return string | |
| 292 | - */ | |
| 293 | - public function doProcess() { | |
| 294 | - if($this->next()) { | |
| 295 | - $this->setPostConfig(); // Set any posted variables | |
| 296 | - $this->setDetails(); | |
| 297 | - if($this->doTest()) { // Test | |
| 298 | - return 'confirm'; | |
| 299 | - } else { | |
| 300 | - return 'error'; | |
| 301 | - } | |
| 302 | - } else if($this->previous()) { | |
| 303 | - return 'previous'; | |
| 304 | - } else if($this->confirm()) { | |
| 305 | - $this->setDataFromSession("database"); // Set Session Information | |
| 306 | - $this->setPostConfig(); // Set any posted variables | |
| 307 | - return 'next'; | |
| 308 | - } else if($this->edit()) { | |
| 309 | - $this->setDataFromSession("database"); // Set Session Information, since its an edit | |
| 310 | - $this->temp_variables['state'] = 'edit'; | |
| 311 | - | |
| 312 | - return 'landing'; | |
| 313 | - } | |
| 314 | - } | |
| 315 | - | |
| 316 | - /** | |
| 317 | - * Test database connectivity | |
| 318 | - * | |
| 319 | - * @author KnowledgeTree Team | |
| 320 | - * @param none | |
| 321 | - * @access public | |
| 322 | - * @return boolean | |
| 323 | - */ | |
| 324 | - public function doTest() { | |
| 325 | - if($this->match($this->dmspassword, $this->getPassword1()) != 0) { | |
| 326 | - $this->error['dmspassword'] = "Passwords do not match: " . $this->dmspassword." ". $this->getPassword1(); | |
| 327 | - return false; | |
| 328 | - } | |
| 329 | - if($this->match($this->dmsuserpassword, $this->getPassword2()) != 0) { | |
| 330 | - $this->error['dmsuserpassword'] = "Passwords do not match: " . $this->dmsuserpassword." ". $this->getPassword2(); | |
| 331 | - return false; | |
| 332 | - } | |
| 333 | - if($this->dport == '') { | |
| 334 | - $con = $this->_dbhandler->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 335 | - } else { | |
| 336 | - $con = $this->_dbhandler->load($this->dhost.":".$this->dport, $this->duname, $this->dpassword, $this->dname); | |
| 337 | - } | |
| 338 | - if (!$con) { | |
| 339 | - $this->error['con'] = "Could not connect to the database, please check username and password"; | |
| 340 | - return false; | |
| 341 | - } else { | |
| 342 | - if ($this->dbExists()) { // Check if database Exists | |
| 343 | - $this->error['dname'] = 'Database Already Exists, please specify a different name'; // Reset usage errors | |
| 344 | - return false; | |
| 345 | - } else { | |
| 346 | - $this->error = array(); // Reset usage errors | |
| 347 | - return true; | |
| 348 | - } | |
| 349 | - } | |
| 350 | - } | |
| 351 | - | |
| 352 | - public function dbExists() { | |
| 353 | - return $this->_dbhandler->useDb(); | |
| 354 | - } | |
| 355 | - | |
| 356 | - public function match($str1, $str2) { | |
| 357 | - return strcmp($str1, $str2); | |
| 358 | - } | |
| 359 | - | |
| 360 | - public function getPassword1() { | |
| 361 | - return $_POST['dmspassword2']; | |
| 362 | - } | |
| 363 | - | |
| 364 | - public function getPassword2() { | |
| 365 | - return $_POST['dmsuserpassword2']; | |
| 366 | - } | |
| 367 | - /** | |
| 368 | - * Check if theres a database type | |
| 369 | - * | |
| 370 | - * @author KnowledgeTree Team | |
| 371 | - * @params none | |
| 372 | - * @access private | |
| 373 | - * @return boolean database type or false | |
| 374 | - */ | |
| 375 | - private function getType() { | |
| 376 | - if(isset($_POST['dtype'])) { | |
| 377 | - return $_POST['dtype']; | |
| 378 | - } | |
| 379 | - | |
| 380 | - return false; | |
| 381 | - } | |
| 382 | - | |
| 383 | - /** | |
| 384 | - * Set Errors if any were encountered | |
| 385 | - * | |
| 386 | - * @author KnowledgeTree Team | |
| 387 | - * @params none | |
| 388 | - * @access private | |
| 389 | - * @return boolean | |
| 390 | - */ | |
| 391 | - private function setErrorsFromSession() { | |
| 392 | - if(isset($_SESSION['database']['errors'])) { | |
| 393 | - $this->error[] = $_SESSION['database']['errors']; | |
| 394 | - | |
| 395 | - return true; | |
| 396 | - } | |
| 397 | - | |
| 398 | - return false; | |
| 399 | - } | |
| 400 | - | |
| 401 | - /** | |
| 402 | - * Set POST information | |
| 403 | - * | |
| 404 | - * @author KnowledgeTree Team | |
| 405 | - * @params none | |
| 406 | - * @access public | |
| 407 | - * @return void | |
| 408 | - */ | |
| 409 | - public function setPostConfig() { | |
| 410 | - $this->dtype = $this->getPostSafe("dtype"); | |
| 411 | - $this->dtypes = array("0"=>"mysql"); // TODO:multiple databases | |
| 412 | - $this->dhost = $this->getPostSafe("dhost"); | |
| 413 | - $this->dport = $this->getPostSafe("dport"); | |
| 414 | - $this->dname = $this->getPostSafe("dname"); | |
| 415 | - $this->duname = $this->getPostSafe("duname"); | |
| 416 | - $this->dpassword = $this->getPostSafe("dpassword"); | |
| 417 | - $this->dmsname = $this->getPostSafe("dmsname"); | |
| 418 | - $this->dmsusername = $this->getPostSafe("dmsusername"); | |
| 419 | - $this->dmspassword = $this->getPostSafe("dmspassword"); | |
| 420 | - $this->dmsuserpassword = $this->getPostSafe("dmsuserpassword"); | |
| 421 | - $this->dbbinary = $this->getPostSafe("dbbinary"); | |
| 422 | - $this->tprefix = $this->getPostSafe("tprefix"); | |
| 423 | - $this->ddrop = $this->getPostBoolean("ddrop"); | |
| 424 | - } | |
| 425 | - | |
| 426 | - /** | |
| 427 | - * Load default options on template from xml file | |
| 428 | - * | |
| 429 | - * @author KnowledgeTree Team | |
| 430 | - * @params object SimpleXmlObject | |
| 431 | - * @access public | |
| 432 | - * @return void | |
| 433 | - */ | |
| 434 | - public function loadDefaults($simplexml) { | |
| 435 | - if($simplexml) { | |
| 436 | - $this->temp_variables['dtype'] = ""; | |
| 437 | - $this->temp_variables['dtypes'] = array("0"=>"mysql"); // TODO:multiple databases | |
| 438 | - $this->temp_variables['dname'] = (string) $simplexml->dname; | |
| 439 | - $this->temp_variables['duname'] = (string) $simplexml->duname; | |
| 440 | - $this->temp_variables['dhost'] = (string) $simplexml->dhost; | |
| 441 | - $this->temp_variables['dport'] = (string) $simplexml->dport; | |
| 442 | - $this->temp_variables['dpassword'] = ''; | |
| 443 | - $this->temp_variables['dmsname'] = (string) $simplexml->dmsadminuser; | |
| 444 | - $this->temp_variables['dmsusername'] = (string) $simplexml->dmsuser; | |
| 445 | - $this->temp_variables['dmspassword'] = (string) $simplexml->dmsaupass; | |
| 446 | - $this->temp_variables['dmsuserpassword'] = (string) $simplexml->dmsupass; | |
| 447 | - if(WINDOWS_OS) { | |
| 448 | - $this->temp_variables['dbbinary'] = 'mysql.exe'; | |
| 449 | - } else { | |
| 450 | - $this->temp_variables['dbbinary'] = 'mysql'; | |
| 451 | - } | |
| 452 | - $this->temp_variables['tprefix'] = ''; | |
| 453 | - $this->temp_variables['ddrop'] = false; | |
| 454 | - } | |
| 455 | - } | |
| 456 | - | |
| 457 | - /** | |
| 458 | - * Store options | |
| 459 | - * | |
| 460 | - * @author KnowledgeTree Team | |
| 461 | - * @params object SimpleXmlObject | |
| 462 | - * @access private | |
| 463 | - * @return void | |
| 464 | - */ | |
| 465 | - private function setDetails() { | |
| 466 | - if($this->edit()) { | |
| 467 | - $this->temp_variables['state'] = 'edit'; | |
| 468 | - } else { | |
| 469 | - $this->temp_variables['state'] = ''; | |
| 470 | - } | |
| 471 | - $this->temp_variables['dtype'] = $this->getPostSafe('dtype'); | |
| 472 | - $this->temp_variables['dtypes'] = array("0"=>"mysql"); // TODO:multiple databases; | |
| 473 | - $this->temp_variables['dhost'] = $this->getPostSafe('dhost'); | |
| 474 | - $this->temp_variables['dport'] = $this->getPostSafe('dport'); | |
| 475 | - $this->temp_variables['dname'] = $this->getPostSafe('dname'); | |
| 476 | - $this->temp_variables['duname'] = $this->getPostSafe('duname'); | |
| 477 | - $this->temp_variables['dpassword'] = $this->getPostSafe('dpassword'); | |
| 478 | - $this->temp_variables['dmsname'] = $this->getPostSafe('dmsname'); | |
| 479 | - $this->temp_variables['dmsusername'] = $this->getPostSafe('dmsusername'); | |
| 480 | - $this->temp_variables['dmspassword'] = $this->getPostSafe('dmspassword'); | |
| 481 | - $this->temp_variables['dmsuserpassword'] = $this->getPostSafe('dmsuserpassword');; | |
| 482 | - $this->temp_variables['dbbinary'] = $this->getPostSafe('dbbinary'); | |
| 483 | - $this->temp_variables['tprefix'] = $this->getPostSafe('tprefix'); | |
| 484 | - $this->temp_variables['ddrop'] = $this->getPostBoolean('ddrop'); | |
| 485 | - } | |
| 486 | - | |
| 487 | - /** | |
| 488 | - * Extract database types | |
| 489 | - * | |
| 490 | - * @author KnowledgeTree Team | |
| 491 | - * @access private | |
| 492 | - * @params object SimpleXmlObject | |
| 493 | - * @return array | |
| 494 | - */ | |
| 495 | - private function getTypes($xmlTypes) { | |
| 496 | - $t = array(); | |
| 497 | - foreach ($xmlTypes->dtype as $key=>$val) { | |
| 498 | - $t[] = (string) $val; | |
| 499 | - } | |
| 500 | - return $t; | |
| 501 | - } | |
| 502 | - | |
| 503 | - /** | |
| 504 | - * Read xml config file | |
| 505 | - * | |
| 506 | - * @author KnowledgeTree Team | |
| 507 | - * @access private | |
| 508 | - * @params none | |
| 509 | - * @return object SimpleXmlObject | |
| 510 | - */ | |
| 511 | - private function readXml() { | |
| 512 | - $simplexml = simplexml_load_file(CONF_DIR."databases.xml"); | |
| 513 | - | |
| 514 | - return $simplexml; | |
| 515 | - } | |
| 516 | - | |
| 517 | - /** | |
| 518 | - * Stores varibles used by template | |
| 519 | - * | |
| 520 | - * @author KnowledgeTree Team | |
| 521 | - * @params none | |
| 522 | - * @access public | |
| 523 | - * @return array | |
| 524 | - */ | |
| 525 | - public function getStepVars() { | |
| 526 | - return $this->temp_variables; | |
| 527 | - } | |
| 528 | - | |
| 529 | - /** | |
| 530 | - * Runs step install if required | |
| 531 | - * | |
| 532 | - * @author KnowledgeTree Team | |
| 533 | - * @param none | |
| 534 | - * @access public | |
| 535 | - * @return void | |
| 536 | - */ | |
| 537 | - public function installStep() { | |
| 538 | - return $this->installDatabase(); | |
| 539 | - } | |
| 540 | - | |
| 541 | - /** | |
| 542 | - * Helper | |
| 543 | - * | |
| 544 | - * @author KnowledgeTree Team | |
| 545 | - * @params none | |
| 546 | - * @access private | |
| 547 | - * @return void | |
| 548 | - */ | |
| 549 | - private function installDatabase() { | |
| 550 | - if($this->dtype == '') { | |
| 551 | - $this->error['dtype'] = 'No database type selected'; | |
| 552 | - return 'error'; | |
| 553 | - } | |
| 554 | - if(!$this->{$this->dtype}()) { | |
| 555 | - return 'error'; | |
| 556 | - } | |
| 557 | - } | |
| 558 | - | |
| 559 | - /** | |
| 560 | - * Helper | |
| 561 | - * | |
| 562 | - * @author KnowledgeTree Team | |
| 563 | - * @params none | |
| 564 | - * @access private | |
| 565 | - * @return void | |
| 566 | - */ | |
| 567 | - private function mysql() { | |
| 568 | - $con = $this->connectMysql(); | |
| 569 | - if($con) { | |
| 570 | - if(!$this->createDB($con)) { | |
| 571 | - $this->error['con'] = "Could not Create Database: "; | |
| 572 | - return false; | |
| 573 | - } | |
| 574 | - $this->closeMysql($con); | |
| 575 | - } | |
| 576 | - } | |
| 577 | - | |
| 578 | - /** | |
| 579 | - * Connect to mysql | |
| 580 | - * | |
| 581 | - * @author KnowledgeTree Team | |
| 582 | - * @params none | |
| 583 | - * @access private | |
| 584 | - * @return object mysql connection | |
| 585 | - */ | |
| 586 | - private function connectMysql() { | |
| 587 | - $con = $this->_dbhandler->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 588 | - if (!$con) { | |
| 589 | - $this->error['con'] = "Could not connect: "; | |
| 590 | - | |
| 591 | - return false; | |
| 592 | - } | |
| 593 | - | |
| 594 | - return $con; | |
| 595 | - } | |
| 596 | - | |
| 597 | - /** | |
| 598 | - * Helper | |
| 599 | - * | |
| 600 | - * @author KnowledgeTree Team | |
| 601 | - * @params object mysql connection object $con | |
| 602 | - * @access private | |
| 603 | - * @return object mysql connection | |
| 604 | - */ | |
| 605 | - private function createDB($con) { | |
| 606 | - if($this->usedb($con)) { // attempt to use the db | |
| 607 | - if($this->dropdb($con)) { // attempt to drop the db | |
| 608 | - if(!$this->create($con)) { // attempt to create the db | |
| 609 | - $this->error['con'] = "Could not create database: "; | |
| 610 | - return false;// cannot overwrite database | |
| 611 | - } | |
| 612 | - } else { | |
| 613 | - $this->error['con'] = "Could not drop database: "; | |
| 614 | - return false;// cannot overwrite database | |
| 615 | - } | |
| 616 | - } else { | |
| 617 | - if(!$this->create($con)) { // attempt to create the db | |
| 618 | - $this->error['con'] = "Could not create database: "; | |
| 619 | - return false;// cannot overwrite database | |
| 620 | - } | |
| 621 | - } | |
| 622 | - if(!$this->createDmsUser($con)) { | |
| 623 | - | |
| 624 | - } | |
| 625 | - if(!$this->createSchema($con)) { | |
| 626 | - $this->error['con'] = "Could not create schema "; | |
| 627 | - } | |
| 628 | - if(!$this->populateSchema($con)) { | |
| 629 | - $this->error['con'] = "Could not populate schema "; | |
| 630 | - } | |
| 631 | - if(!$this->applyUpgrades($con)) { | |
| 632 | - $this->error['con'] = "Could not apply updates "; | |
| 633 | - } | |
| 634 | - | |
| 635 | - return true; | |
| 636 | - } | |
| 637 | - | |
| 638 | - /** | |
| 639 | - * Create database | |
| 640 | - * | |
| 641 | - * @author KnowledgeTree Team | |
| 642 | - * @params object mysql connection object $con | |
| 643 | - * @access private | |
| 644 | - * @return boolean | |
| 645 | - */ | |
| 646 | - private function create($con) { | |
| 647 | - $sql = "CREATE DATABASE {$this->dname}"; | |
| 648 | - if ($this->_dbhandler->query($sql, $con)) { | |
| 649 | - | |
| 650 | - return true; | |
| 651 | - } | |
| 652 | - | |
| 653 | - return false; | |
| 654 | - } | |
| 655 | - | |
| 656 | - /** | |
| 657 | - * Attempts to use a db | |
| 658 | - * | |
| 659 | - * @author KnowledgeTree Team | |
| 660 | - * @params mysql connection object $con | |
| 661 | - * @access private | |
| 662 | - * @return boolean | |
| 663 | - */ | |
| 664 | - private function usedb($con) { | |
| 665 | - if($this->_dbhandler->useDb($this->dname)) { | |
| 666 | - return true; | |
| 667 | - } else { | |
| 668 | - $this->error['con'] = "Error using database: {$this->dname}"; | |
| 669 | - return false; | |
| 670 | - } | |
| 671 | - } | |
| 672 | - | |
| 673 | - /** | |
| 674 | - * Attempts to drop table | |
| 675 | - * | |
| 676 | - * @author KnowledgeTree Team | |
| 677 | - * @access private | |
| 678 | - * @params mysql connection object $con | |
| 679 | - * @return boolean | |
| 680 | - */ | |
| 681 | - private function dropdb($con) { | |
| 682 | - if($this->ddrop) { | |
| 683 | - $sql = "DROP DATABASE {$this->dname};"; | |
| 684 | - if(!$this->_dbhandler->query($sql)) { | |
| 685 | - $this->error['con'] = "Cannot drop database: {$this->dname}"; | |
| 686 | - return false; | |
| 687 | - } | |
| 688 | - } else { | |
| 689 | - $this->error['con'] = "Cannot drop database: {$this->dname}"; | |
| 690 | - return false; | |
| 691 | - } | |
| 692 | - return true; | |
| 693 | - } | |
| 694 | - | |
| 695 | - /** | |
| 696 | - * Create dms user | |
| 697 | - * | |
| 698 | - * @author KnowledgeTree Team | |
| 699 | - * @access private | |
| 700 | - * @params none | |
| 701 | - * @return boolean | |
| 702 | - */ | |
| 703 | - private function createDmsUser($con) { | |
| 704 | - if($this->dmsname == '' || $this->dmspassword == '') { | |
| 705 | - if($this->dpassword == '') { | |
| 706 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."user.sql\""; | |
| 707 | - } else { | |
| 708 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."user.sql\""; | |
| 709 | - } | |
| 710 | - $response = $this->_util->pexec($command); | |
| 711 | - return $response; | |
| 712 | - } else { | |
| 713 | - $user1 = "GRANT SELECT, INSERT, UPDATE, DELETE ON {$this->dname}.* TO {$this->dmsusername}@{$this->dhost} IDENTIFIED BY \"{$this->dmsuserpassword}\";"; | |
| 714 | - $user2 = "GRANT ALL PRIVILEGES ON {$this->dname}.* TO {$this->dmsname}@{$this->dhost} IDENTIFIED BY \"{$this->dmspassword}\";"; | |
| 715 | - if ($this->_dbhandler->execute($user1) && $this->_dbhandler->execute($user2)) { | |
| 716 | - return true; | |
| 717 | - } else { | |
| 718 | - $this->error['con'] = "Could not create users for database: {$this->dname}"; | |
| 719 | - return false; | |
| 720 | - } | |
| 721 | - } | |
| 722 | - | |
| 723 | - } | |
| 724 | - | |
| 725 | - /** | |
| 726 | - * Create schema | |
| 727 | - * | |
| 728 | - * @author KnowledgeTree Team | |
| 729 | - * @access private | |
| 730 | - * @params none | |
| 731 | - * @return boolean | |
| 732 | - */ | |
| 733 | - private function createSchema($con) { | |
| 734 | - if($this->dpassword == '') { | |
| 735 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."structure.sql\""; | |
| 736 | - } else { | |
| 737 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."structure.sql\""; | |
| 738 | - } | |
| 739 | - $response = $this->_util->pexec($command); | |
| 740 | - return $response; | |
| 741 | - } | |
| 742 | - | |
| 743 | - /** | |
| 744 | - * Populate database | |
| 745 | - * | |
| 746 | - * @author KnowledgeTree Team | |
| 747 | - * @access private | |
| 748 | - * @params none | |
| 749 | - * @return boolean | |
| 750 | - */ | |
| 751 | - private function populateSchema($con) { | |
| 752 | - if($this->dpassword == '') { | |
| 753 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."data.sql\""; | |
| 754 | - } else { | |
| 755 | - $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."data.sql\""; | |
| 756 | - } | |
| 757 | - $response = $this->_util->pexec($command); | |
| 758 | - return $response; | |
| 759 | - } | |
| 760 | - | |
| 761 | - /** | |
| 762 | - * Ammend any known database upgrades | |
| 763 | - * | |
| 764 | - * @author KnowledgeTree Team | |
| 765 | - * @access private | |
| 766 | - * @params none | |
| 767 | - * @return boolean | |
| 768 | - */ | |
| 769 | - private function applyUpgrades($con) { | |
| 770 | - // Database upgrade to version 3.6.1: Search ranking | |
| 771 | - return true; | |
| 772 | - } | |
| 773 | - | |
| 774 | - /** | |
| 775 | - * Close connection if it exists | |
| 776 | - * | |
| 777 | - * @author KnowledgeTree Team | |
| 778 | - * @access private | |
| 779 | - * @params mysql connection object $con | |
| 780 | - * @return void | |
| 781 | - */ | |
| 782 | - private function closeMysql($con) { | |
| 783 | - try { | |
| 784 | - $this->_dbhandler->close(); | |
| 785 | - } catch (Exeption $e) { | |
| 786 | - $this->error['con'] = "Could not close: " . $e; | |
| 787 | - } | |
| 788 | - } | |
| 789 | - | |
| 790 | - /** | |
| 791 | - * Returns database errors | |
| 792 | - * | |
| 793 | - * @author KnowledgeTree Team | |
| 794 | - * @access public | |
| 795 | - * @params none | |
| 796 | - * @return array | |
| 797 | - */ | |
| 798 | - public function getErrors() { | |
| 799 | - | |
| 800 | - return $this->error; | |
| 801 | - } | |
| 802 | - | |
| 803 | - /** | |
| 804 | - * Test database connectivity | |
| 805 | - * | |
| 806 | - * @author KnowledgeTree Team | |
| 807 | - * @param none | |
| 808 | - * @access public | |
| 809 | - * @return boolean | |
| 810 | - */ | |
| 811 | - public function doAjaxTest($host, $uname, $dname) { | |
| 812 | - | |
| 813 | - } | |
| 814 | - | |
| 815 | - /** | |
| 816 | - * Initialize errors to false | |
| 817 | - * | |
| 818 | - * @author KnowledgeTree Team | |
| 819 | - * @param none | |
| 820 | - * @access private | |
| 821 | - * @return boolean | |
| 822 | - */ | |
| 823 | - private function initErrors() { | |
| 824 | - foreach ($this->templateErrors as $e) { | |
| 825 | - $this->error[$e] = false; | |
| 826 | - } | |
| 827 | - } | |
| 828 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Database Step Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | + | |
| 43 | +class database extends Step | |
| 44 | +{ | |
| 45 | + /** | |
| 46 | + * Reference to Database object | |
| 47 | + * | |
| 48 | + * @author KnowledgeTree Team | |
| 49 | + * @access public | |
| 50 | + * @var object | |
| 51 | + */ | |
| 52 | + public $_dbhandler = null; | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * Reference to Database object | |
| 56 | + * | |
| 57 | + * @author KnowledgeTree Team | |
| 58 | + * @access public | |
| 59 | + * @var object | |
| 60 | + */ | |
| 61 | + public $_util = null; | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Database type | |
| 65 | + * | |
| 66 | + * @author KnowledgeTree Team | |
| 67 | + * @access private | |
| 68 | + * @var array | |
| 69 | + */ | |
| 70 | + private $dtype = ''; | |
| 71 | + | |
| 72 | + /** | |
| 73 | + * Database types | |
| 74 | + * | |
| 75 | + * @author KnowledgeTree Team | |
| 76 | + * @access private | |
| 77 | + * @var array | |
| 78 | + */ | |
| 79 | + private $dtypes = array(); | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * Database host | |
| 83 | + * | |
| 84 | + * @author KnowledgeTree Team | |
| 85 | + * @access private | |
| 86 | + * @var string | |
| 87 | + */ | |
| 88 | + private $dhost = ''; | |
| 89 | + | |
| 90 | + /** | |
| 91 | + * Database port | |
| 92 | + * | |
| 93 | + * @author KnowledgeTree Team | |
| 94 | + * @access private | |
| 95 | + * @var string | |
| 96 | + */ | |
| 97 | + private $dport = ''; | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * Database name | |
| 101 | + * | |
| 102 | + * @author KnowledgeTree Team | |
| 103 | + * @access private | |
| 104 | + * @var string | |
| 105 | + */ | |
| 106 | + private $dname = ''; | |
| 107 | + | |
| 108 | + /** | |
| 109 | + * Database root username | |
| 110 | + * | |
| 111 | + * @author KnowledgeTree Team | |
| 112 | + * @access private | |
| 113 | + * @var string | |
| 114 | + */ | |
| 115 | + private $duname = ''; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * Database root password | |
| 119 | + * | |
| 120 | + * @author KnowledgeTree Team | |
| 121 | + * @access private | |
| 122 | + * @var string | |
| 123 | + */ | |
| 124 | + private $dpassword = ''; | |
| 125 | + | |
| 126 | + /** | |
| 127 | + * Database dms username | |
| 128 | + * | |
| 129 | + * @author KnowledgeTree Team | |
| 130 | + * @access private | |
| 131 | + * @var string | |
| 132 | + */ | |
| 133 | + private $dmsname = ''; | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * Database dms password | |
| 137 | + * | |
| 138 | + * @author KnowledgeTree Team | |
| 139 | + * @access private | |
| 140 | + * @var string | |
| 141 | + */ | |
| 142 | + private $dmspassword = ''; | |
| 143 | + | |
| 144 | + /** | |
| 145 | + * Default dms user username | |
| 146 | + * | |
| 147 | + * @author KnowledgeTree Team | |
| 148 | + * @access private | |
| 149 | + * @var boolean | |
| 150 | + */ | |
| 151 | + private $dmsusername = ''; | |
| 152 | + | |
| 153 | + /** | |
| 154 | + * Default dms user password | |
| 155 | + * | |
| 156 | + * @author KnowledgeTree Team | |
| 157 | + * @access private | |
| 158 | + * @var boolean | |
| 159 | + */ | |
| 160 | + private $dmsuserpassword = ''; | |
| 161 | + | |
| 162 | + /** | |
| 163 | + * Location of database binaries. | |
| 164 | + * | |
| 165 | + * @author KnowledgeTree Team | |
| 166 | + * @access private | |
| 167 | + * @var string | |
| 168 | + */ | |
| 169 | + private $mysqlDir; // TODO:multiple databases | |
| 170 | + | |
| 171 | + /** | |
| 172 | + * Name of database binary. | |
| 173 | + * | |
| 174 | + * @author KnowledgeTree Team | |
| 175 | + * @access private | |
| 176 | + * @var string | |
| 177 | + */ | |
| 178 | + private $dbbinary = ''; // TODO:multiple databases | |
| 179 | + | |
| 180 | + /** | |
| 181 | + * Database table prefix | |
| 182 | + * | |
| 183 | + * @author KnowledgeTree Team | |
| 184 | + * @access private | |
| 185 | + * @var string | |
| 186 | + */ | |
| 187 | + private $tprefix = ''; | |
| 188 | + | |
| 189 | + /** | |
| 190 | + * Flag to drop database | |
| 191 | + * | |
| 192 | + * @author KnowledgeTree Team | |
| 193 | + * @access private | |
| 194 | + * @var boolean | |
| 195 | + */ | |
| 196 | + private $ddrop = false; | |
| 197 | + | |
| 198 | + /** | |
| 199 | + * List of errors encountered | |
| 200 | + * | |
| 201 | + * @author KnowledgeTree Team | |
| 202 | + * @access public | |
| 203 | + * @var array | |
| 204 | + */ | |
| 205 | + public $error = array(); | |
| 206 | + | |
| 207 | + /** | |
| 208 | + * List of errors used in template | |
| 209 | + * | |
| 210 | + * @author KnowledgeTree Team | |
| 211 | + * @access public | |
| 212 | + * @var array | |
| 213 | + */ | |
| 214 | + public $templateErrors = array('dmspassword', 'dmsuserpassword', 'con', 'dname', 'dtype', 'duname', 'dpassword'); | |
| 215 | + | |
| 216 | + /** | |
| 217 | + * Flag to store class information in session | |
| 218 | + * | |
| 219 | + * @author KnowledgeTree Team | |
| 220 | + * @access public | |
| 221 | + * @var array | |
| 222 | + */ | |
| 223 | + public $storeInSession = true; | |
| 224 | + | |
| 225 | + /** | |
| 226 | + * Flag if step needs to be installed | |
| 227 | + * | |
| 228 | + * @author KnowledgeTree Team | |
| 229 | + * @access public | |
| 230 | + * @var array | |
| 231 | + */ | |
| 232 | + protected $runInstall = true; | |
| 233 | + | |
| 234 | + /** | |
| 235 | + * Flag if step needs to run silently | |
| 236 | + * | |
| 237 | + * @author KnowledgeTree Team | |
| 238 | + * @access public | |
| 239 | + * @var array | |
| 240 | + */ | |
| 241 | + protected $silent = true; | |
| 242 | + | |
| 243 | + private $salt = 'install'; | |
| 244 | + | |
| 245 | + /** | |
| 246 | + * Constructs database object | |
| 247 | + * | |
| 248 | + * @author KnowledgeTree Team | |
| 249 | + * @access public | |
| 250 | + * @param none | |
| 251 | + */ | |
| 252 | + public function __construct() { | |
| 253 | + $this->temp_variables = array("step_name"=>"database", "silent"=>$this->silent); | |
| 254 | + $this->_dbhandler = new dbUtil(); | |
| 255 | + $this->_util = new InstallUtil(); | |
| 256 | + if(WINDOWS_OS) | |
| 257 | + $this->mysqlDir = MYSQL_BIN; | |
| 258 | + } | |
| 259 | + | |
| 260 | + /** | |
| 261 | + * Main control of database setup | |
| 262 | + * | |
| 263 | + * @author KnowledgeTree Team | |
| 264 | + * @param none | |
| 265 | + * @access public | |
| 266 | + * @return string | |
| 267 | + */ | |
| 268 | + public function doStep() { | |
| 269 | + $this->setErrorsFromSession(); | |
| 270 | + $this->initErrors(); // Load template errors | |
| 271 | + if($this->inStep("database")) { | |
| 272 | + $res = $this->doProcess(); | |
| 273 | + if($res) { // If theres a response, return it | |
| 274 | + return $res; | |
| 275 | + } | |
| 276 | + } | |
| 277 | + if($this->setDataFromSession("database")) { // Attempt to set values from session | |
| 278 | + $this->setDetails(); // Set any posted variables | |
| 279 | + } else { | |
| 280 | + $this->temp_variables['state'] = ''; | |
| 281 | + $this->loadDefaults($this->readXml()); // Load default variables from file | |
| 282 | + } | |
| 283 | + | |
| 284 | + return 'landing'; | |
| 285 | + } | |
| 286 | + | |
| 287 | + /** | |
| 288 | + * Controls setup helper | |
| 289 | + * | |
| 290 | + * @author KnowledgeTree Team | |
| 291 | + * @param none | |
| 292 | + * @access public | |
| 293 | + * @return string | |
| 294 | + */ | |
| 295 | + public function doProcess() { | |
| 296 | + if($this->next()) { | |
| 297 | + $this->setPostConfig(); // Set any posted variables | |
| 298 | + $this->setDetails(); | |
| 299 | + if($this->doTest()) { // Test | |
| 300 | + return 'confirm'; | |
| 301 | + } else { | |
| 302 | + return 'error'; | |
| 303 | + } | |
| 304 | + } else if($this->previous()) { | |
| 305 | + return 'previous'; | |
| 306 | + } else if($this->confirm()) { | |
| 307 | + $this->setDataFromSession("database"); // Set Session Information | |
| 308 | + $this->setPostConfig(); // Set any posted variables | |
| 309 | + return 'next'; | |
| 310 | + } else if($this->edit()) { | |
| 311 | + $this->setDataFromSession("database"); // Set Session Information, since its an edit | |
| 312 | + $this->temp_variables['state'] = 'edit'; | |
| 313 | + | |
| 314 | + return 'landing'; | |
| 315 | + } | |
| 316 | + } | |
| 317 | + | |
| 318 | + /** | |
| 319 | + * Test database connectivity | |
| 320 | + * | |
| 321 | + * @author KnowledgeTree Team | |
| 322 | + * @param none | |
| 323 | + * @access public | |
| 324 | + * @return boolean | |
| 325 | + */ | |
| 326 | + public function doTest() { | |
| 327 | + if($this->match($this->dmspassword, $this->getPassword1()) != 0) { | |
| 328 | + $this->error['dmspassword'] = "Passwords do not match: " . $this->dmspassword." ". $this->getPassword1(); | |
| 329 | + return false; | |
| 330 | + } | |
| 331 | + if($this->match($this->dmsuserpassword, $this->getPassword2()) != 0) { | |
| 332 | + $this->error['dmsuserpassword'] = "Passwords do not match: " . $this->dmsuserpassword." ". $this->getPassword2(); | |
| 333 | + return false; | |
| 334 | + } | |
| 335 | + if($this->dport == '') { | |
| 336 | + $con = $this->_dbhandler->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 337 | + } else { | |
| 338 | + $con = $this->_dbhandler->load($this->dhost.":".$this->dport, $this->duname, $this->dpassword, $this->dname); | |
| 339 | + } | |
| 340 | + if (!$con) { | |
| 341 | + $this->error['con'] = "Could not connect to the database, please check username and password"; | |
| 342 | + return false; | |
| 343 | + } else { | |
| 344 | + if ($this->dbExists()) { // Check if database Exists | |
| 345 | + $this->error['dname'] = 'Database Already Exists, please specify a different name'; // Reset usage errors | |
| 346 | + return false; | |
| 347 | + } else { | |
| 348 | + $this->error = array(); // Reset usage errors | |
| 349 | + return true; | |
| 350 | + } | |
| 351 | + } | |
| 352 | + } | |
| 353 | + | |
| 354 | + public function dbExists() { | |
| 355 | + return $this->_dbhandler->useDb(); | |
| 356 | + } | |
| 357 | + | |
| 358 | + public function match($str1, $str2) { | |
| 359 | + return strcmp($str1, $str2); | |
| 360 | + } | |
| 361 | + | |
| 362 | + public function getPassword1() { | |
| 363 | + return $_POST['dmspassword2']; | |
| 364 | + } | |
| 365 | + | |
| 366 | + public function getPassword2() { | |
| 367 | + return $_POST['dmsuserpassword2']; | |
| 368 | + } | |
| 369 | + /** | |
| 370 | + * Check if theres a database type | |
| 371 | + * | |
| 372 | + * @author KnowledgeTree Team | |
| 373 | + * @params none | |
| 374 | + * @access private | |
| 375 | + * @return boolean database type or false | |
| 376 | + */ | |
| 377 | + private function getType() { | |
| 378 | + if(isset($_POST['dtype'])) { | |
| 379 | + return $_POST['dtype']; | |
| 380 | + } | |
| 381 | + | |
| 382 | + return false; | |
| 383 | + } | |
| 384 | + | |
| 385 | + /** | |
| 386 | + * Set Errors if any were encountered | |
| 387 | + * | |
| 388 | + * @author KnowledgeTree Team | |
| 389 | + * @params none | |
| 390 | + * @access private | |
| 391 | + * @return boolean | |
| 392 | + */ | |
| 393 | + private function setErrorsFromSession() { | |
| 394 | + if(isset($_SESSION[$this->salt]['database']['errors'])) { | |
| 395 | + $this->error[] = $_SESSION[$this->salt]['database']['errors']; | |
| 396 | + | |
| 397 | + return true; | |
| 398 | + } | |
| 399 | + | |
| 400 | + return false; | |
| 401 | + } | |
| 402 | + | |
| 403 | + /** | |
| 404 | + * Set POST information | |
| 405 | + * | |
| 406 | + * @author KnowledgeTree Team | |
| 407 | + * @params none | |
| 408 | + * @access public | |
| 409 | + * @return void | |
| 410 | + */ | |
| 411 | + public function setPostConfig() { | |
| 412 | + $this->dtype = $this->getPostSafe("dtype"); | |
| 413 | + $this->dtypes = array("0"=>"mysql"); // TODO:multiple databases | |
| 414 | + $this->dhost = $this->getPostSafe("dhost"); | |
| 415 | + $this->dport = $this->getPostSafe("dport"); | |
| 416 | + $this->dname = $this->getPostSafe("dname"); | |
| 417 | + $this->duname = $this->getPostSafe("duname"); | |
| 418 | + $this->dpassword = $this->getPostSafe("dpassword"); | |
| 419 | + $this->dmsname = $this->getPostSafe("dmsname"); | |
| 420 | + $this->dmsusername = $this->getPostSafe("dmsusername"); | |
| 421 | + $this->dmspassword = $this->getPostSafe("dmspassword"); | |
| 422 | + $this->dmsuserpassword = $this->getPostSafe("dmsuserpassword"); | |
| 423 | + $this->dbbinary = $this->getPostSafe("dbbinary"); | |
| 424 | + $this->tprefix = $this->getPostSafe("tprefix"); | |
| 425 | + $this->ddrop = $this->getPostBoolean("ddrop"); | |
| 426 | + } | |
| 427 | + | |
| 428 | + /** | |
| 429 | + * Load default options on template from xml file | |
| 430 | + * | |
| 431 | + * @author KnowledgeTree Team | |
| 432 | + * @params object SimpleXmlObject | |
| 433 | + * @access public | |
| 434 | + * @return void | |
| 435 | + */ | |
| 436 | + public function loadDefaults($simplexml) { | |
| 437 | + if($simplexml) { | |
| 438 | + $this->temp_variables['dtype'] = ""; | |
| 439 | + $this->temp_variables['dtypes'] = array("0"=>"mysql"); // TODO:multiple databases | |
| 440 | + $this->temp_variables['dname'] = (string) $simplexml->dname; | |
| 441 | + $this->temp_variables['duname'] = (string) $simplexml->duname; | |
| 442 | + $this->temp_variables['dhost'] = (string) $simplexml->dhost; | |
| 443 | + $this->temp_variables['dport'] = (string) $simplexml->dport; | |
| 444 | + $this->temp_variables['dpassword'] = ''; | |
| 445 | + $this->temp_variables['dmsname'] = (string) $simplexml->dmsadminuser; | |
| 446 | + $this->temp_variables['dmsusername'] = (string) $simplexml->dmsuser; | |
| 447 | + $this->temp_variables['dmspassword'] = (string) $simplexml->dmsaupass; | |
| 448 | + $this->temp_variables['dmsuserpassword'] = (string) $simplexml->dmsupass; | |
| 449 | + if(WINDOWS_OS) { | |
| 450 | + $this->temp_variables['dbbinary'] = 'mysql.exe'; | |
| 451 | + } else { | |
| 452 | + $this->temp_variables['dbbinary'] = 'mysql'; | |
| 453 | + } | |
| 454 | + $this->temp_variables['tprefix'] = ''; | |
| 455 | + $this->temp_variables['ddrop'] = false; | |
| 456 | + } | |
| 457 | + } | |
| 458 | + | |
| 459 | + /** | |
| 460 | + * Store options | |
| 461 | + * | |
| 462 | + * @author KnowledgeTree Team | |
| 463 | + * @params object SimpleXmlObject | |
| 464 | + * @access private | |
| 465 | + * @return void | |
| 466 | + */ | |
| 467 | + private function setDetails() { | |
| 468 | + if($this->edit()) { | |
| 469 | + $this->temp_variables['state'] = 'edit'; | |
| 470 | + } else { | |
| 471 | + $this->temp_variables['state'] = ''; | |
| 472 | + } | |
| 473 | + $this->temp_variables['dtype'] = $this->getPostSafe('dtype'); | |
| 474 | + $this->temp_variables['dtypes'] = array("0"=>"mysql"); // TODO:multiple databases; | |
| 475 | + $this->temp_variables['dhost'] = $this->getPostSafe('dhost'); | |
| 476 | + $this->temp_variables['dport'] = $this->getPostSafe('dport'); | |
| 477 | + $this->temp_variables['dname'] = $this->getPostSafe('dname'); | |
| 478 | + $this->temp_variables['duname'] = $this->getPostSafe('duname'); | |
| 479 | + $this->temp_variables['dpassword'] = $this->getPostSafe('dpassword'); | |
| 480 | + $this->temp_variables['dmsname'] = $this->getPostSafe('dmsname'); | |
| 481 | + $this->temp_variables['dmsusername'] = $this->getPostSafe('dmsusername'); | |
| 482 | + $this->temp_variables['dmspassword'] = $this->getPostSafe('dmspassword'); | |
| 483 | + $this->temp_variables['dmsuserpassword'] = $this->getPostSafe('dmsuserpassword');; | |
| 484 | + $this->temp_variables['dbbinary'] = $this->getPostSafe('dbbinary'); | |
| 485 | + $this->temp_variables['tprefix'] = $this->getPostSafe('tprefix'); | |
| 486 | + $this->temp_variables['ddrop'] = $this->getPostBoolean('ddrop'); | |
| 487 | + } | |
| 488 | + | |
| 489 | + /** | |
| 490 | + * Extract database types | |
| 491 | + * | |
| 492 | + * @author KnowledgeTree Team | |
| 493 | + * @access private | |
| 494 | + * @params object SimpleXmlObject | |
| 495 | + * @return array | |
| 496 | + */ | |
| 497 | + private function getTypes($xmlTypes) { | |
| 498 | + $t = array(); | |
| 499 | + foreach ($xmlTypes->dtype as $key=>$val) { | |
| 500 | + $t[] = (string) $val; | |
| 501 | + } | |
| 502 | + return $t; | |
| 503 | + } | |
| 504 | + | |
| 505 | + /** | |
| 506 | + * Read xml config file | |
| 507 | + * | |
| 508 | + * @author KnowledgeTree Team | |
| 509 | + * @access private | |
| 510 | + * @params none | |
| 511 | + * @return object SimpleXmlObject | |
| 512 | + */ | |
| 513 | + private function readXml() { | |
| 514 | + $simplexml = simplexml_load_file(CONF_DIR."databases.xml"); | |
| 515 | + | |
| 516 | + return $simplexml; | |
| 517 | + } | |
| 518 | + | |
| 519 | + /** | |
| 520 | + * Stores varibles used by template | |
| 521 | + * | |
| 522 | + * @author KnowledgeTree Team | |
| 523 | + * @params none | |
| 524 | + * @access public | |
| 525 | + * @return array | |
| 526 | + */ | |
| 527 | + public function getStepVars() { | |
| 528 | + return $this->temp_variables; | |
| 529 | + } | |
| 530 | + | |
| 531 | + /** | |
| 532 | + * Runs step install if required | |
| 533 | + * | |
| 534 | + * @author KnowledgeTree Team | |
| 535 | + * @param none | |
| 536 | + * @access public | |
| 537 | + * @return void | |
| 538 | + */ | |
| 539 | + public function installStep() { | |
| 540 | + return $this->installDatabase(); | |
| 541 | + } | |
| 542 | + | |
| 543 | + /** | |
| 544 | + * Helper | |
| 545 | + * | |
| 546 | + * @author KnowledgeTree Team | |
| 547 | + * @params none | |
| 548 | + * @access private | |
| 549 | + * @return void | |
| 550 | + */ | |
| 551 | + private function installDatabase() { | |
| 552 | + if($this->dtype == '') { | |
| 553 | + $this->error['dtype'] = 'No database type selected'; | |
| 554 | + return 'error'; | |
| 555 | + } | |
| 556 | + if(!$this->{$this->dtype}()) { | |
| 557 | + return 'error'; | |
| 558 | + } | |
| 559 | + } | |
| 560 | + | |
| 561 | + /** | |
| 562 | + * Helper | |
| 563 | + * | |
| 564 | + * @author KnowledgeTree Team | |
| 565 | + * @params none | |
| 566 | + * @access private | |
| 567 | + * @return void | |
| 568 | + */ | |
| 569 | + private function mysql() { | |
| 570 | + $con = $this->connectMysql(); | |
| 571 | + if($con) { | |
| 572 | + if(!$this->createDB($con)) { | |
| 573 | + $this->error['con'] = "Could not Create Database: "; | |
| 574 | + return false; | |
| 575 | + } | |
| 576 | + $this->closeMysql($con); | |
| 577 | + } | |
| 578 | + } | |
| 579 | + | |
| 580 | + /** | |
| 581 | + * Connect to mysql | |
| 582 | + * | |
| 583 | + * @author KnowledgeTree Team | |
| 584 | + * @params none | |
| 585 | + * @access private | |
| 586 | + * @return object mysql connection | |
| 587 | + */ | |
| 588 | + private function connectMysql() { | |
| 589 | + $con = $this->_dbhandler->load($this->dhost, $this->duname, $this->dpassword, $this->dname); | |
| 590 | + if (!$con) { | |
| 591 | + $this->error['con'] = "Could not connect: "; | |
| 592 | + | |
| 593 | + return false; | |
| 594 | + } | |
| 595 | + | |
| 596 | + return $con; | |
| 597 | + } | |
| 598 | + | |
| 599 | + /** | |
| 600 | + * Helper | |
| 601 | + * | |
| 602 | + * @author KnowledgeTree Team | |
| 603 | + * @params object mysql connection object $con | |
| 604 | + * @access private | |
| 605 | + * @return object mysql connection | |
| 606 | + */ | |
| 607 | + private function createDB($con) { | |
| 608 | + if($this->usedb($con)) { // attempt to use the db | |
| 609 | + if($this->dropdb($con)) { // attempt to drop the db | |
| 610 | + if(!$this->create($con)) { // attempt to create the db | |
| 611 | + $this->error['con'] = "Could not create database: "; | |
| 612 | + return false;// cannot overwrite database | |
| 613 | + } | |
| 614 | + } else { | |
| 615 | + $this->error['con'] = "Could not drop database: "; | |
| 616 | + return false;// cannot overwrite database | |
| 617 | + } | |
| 618 | + } else { | |
| 619 | + if(!$this->create($con)) { // attempt to create the db | |
| 620 | + $this->error['con'] = "Could not create database: "; | |
| 621 | + return false;// cannot overwrite database | |
| 622 | + } | |
| 623 | + } | |
| 624 | + if(!$this->createDmsUser($con)) { | |
| 625 | + | |
| 626 | + } | |
| 627 | + if(!$this->createSchema($con)) { | |
| 628 | + $this->error['con'] = "Could not create schema "; | |
| 629 | + } | |
| 630 | + if(!$this->populateSchema($con)) { | |
| 631 | + $this->error['con'] = "Could not populate schema "; | |
| 632 | + } | |
| 633 | + if(!$this->applyUpgrades($con)) { | |
| 634 | + $this->error['con'] = "Could not apply updates "; | |
| 635 | + } | |
| 636 | + | |
| 637 | + return true; | |
| 638 | + } | |
| 639 | + | |
| 640 | + /** | |
| 641 | + * Create database | |
| 642 | + * | |
| 643 | + * @author KnowledgeTree Team | |
| 644 | + * @params object mysql connection object $con | |
| 645 | + * @access private | |
| 646 | + * @return boolean | |
| 647 | + */ | |
| 648 | + private function create($con) { | |
| 649 | + $sql = "CREATE DATABASE {$this->dname}"; | |
| 650 | + if ($this->_dbhandler->query($sql, $con)) { | |
| 651 | + | |
| 652 | + return true; | |
| 653 | + } | |
| 654 | + | |
| 655 | + return false; | |
| 656 | + } | |
| 657 | + | |
| 658 | + /** | |
| 659 | + * Attempts to use a db | |
| 660 | + * | |
| 661 | + * @author KnowledgeTree Team | |
| 662 | + * @params mysql connection object $con | |
| 663 | + * @access private | |
| 664 | + * @return boolean | |
| 665 | + */ | |
| 666 | + private function usedb($con) { | |
| 667 | + if($this->_dbhandler->useDb($this->dname)) { | |
| 668 | + return true; | |
| 669 | + } else { | |
| 670 | + $this->error['con'] = "Error using database: {$this->dname}"; | |
| 671 | + return false; | |
| 672 | + } | |
| 673 | + } | |
| 674 | + | |
| 675 | + /** | |
| 676 | + * Attempts to drop table | |
| 677 | + * | |
| 678 | + * @author KnowledgeTree Team | |
| 679 | + * @access private | |
| 680 | + * @params mysql connection object $con | |
| 681 | + * @return boolean | |
| 682 | + */ | |
| 683 | + private function dropdb($con) { | |
| 684 | + if($this->ddrop) { | |
| 685 | + $sql = "DROP DATABASE {$this->dname};"; | |
| 686 | + if(!$this->_dbhandler->query($sql)) { | |
| 687 | + $this->error['con'] = "Cannot drop database: {$this->dname}"; | |
| 688 | + return false; | |
| 689 | + } | |
| 690 | + } else { | |
| 691 | + $this->error['con'] = "Cannot drop database: {$this->dname}"; | |
| 692 | + return false; | |
| 693 | + } | |
| 694 | + return true; | |
| 695 | + } | |
| 696 | + | |
| 697 | + /** | |
| 698 | + * Create dms user | |
| 699 | + * | |
| 700 | + * @author KnowledgeTree Team | |
| 701 | + * @access private | |
| 702 | + * @params none | |
| 703 | + * @return boolean | |
| 704 | + */ | |
| 705 | + private function createDmsUser($con) { | |
| 706 | + if($this->dmsname == '' || $this->dmspassword == '') { | |
| 707 | + if($this->dpassword == '') { | |
| 708 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."user.sql\""; | |
| 709 | + } else { | |
| 710 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."user.sql\""; | |
| 711 | + } | |
| 712 | + $response = $this->_util->pexec($command); | |
| 713 | + return $response; | |
| 714 | + } else { | |
| 715 | + $user1 = "GRANT SELECT, INSERT, UPDATE, DELETE ON {$this->dname}.* TO {$this->dmsusername}@{$this->dhost} IDENTIFIED BY \"{$this->dmsuserpassword}\";"; | |
| 716 | + $user2 = "GRANT ALL PRIVILEGES ON {$this->dname}.* TO {$this->dmsname}@{$this->dhost} IDENTIFIED BY \"{$this->dmspassword}\";"; | |
| 717 | + if ($this->_dbhandler->execute($user1) && $this->_dbhandler->execute($user2)) { | |
| 718 | + return true; | |
| 719 | + } else { | |
| 720 | + $this->error['con'] = "Could not create users for database: {$this->dname}"; | |
| 721 | + return false; | |
| 722 | + } | |
| 723 | + } | |
| 724 | + | |
| 725 | + } | |
| 726 | + | |
| 727 | + /** | |
| 728 | + * Create schema | |
| 729 | + * | |
| 730 | + * @author KnowledgeTree Team | |
| 731 | + * @access private | |
| 732 | + * @params none | |
| 733 | + * @return boolean | |
| 734 | + */ | |
| 735 | + private function createSchema($con) { | |
| 736 | + if($this->dpassword == '') { | |
| 737 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."structure.sql\""; | |
| 738 | + } else { | |
| 739 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."structure.sql\""; | |
| 740 | + } | |
| 741 | + $response = $this->_util->pexec($command); | |
| 742 | + return $response; | |
| 743 | + } | |
| 744 | + | |
| 745 | + /** | |
| 746 | + * Populate database | |
| 747 | + * | |
| 748 | + * @author KnowledgeTree Team | |
| 749 | + * @access private | |
| 750 | + * @params none | |
| 751 | + * @return boolean | |
| 752 | + */ | |
| 753 | + private function populateSchema($con) { | |
| 754 | + if($this->dpassword == '') { | |
| 755 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} {$this->dname} < \"".SQL_DIR."data.sql\""; | |
| 756 | + } else { | |
| 757 | + $command = "\"".$this->mysqlDir."{$this->dbbinary}\" -u{$this->duname} -p{$this->dpassword} {$this->dname} < \"".SQL_DIR."data.sql\""; | |
| 758 | + } | |
| 759 | + $response = $this->_util->pexec($command); | |
| 760 | + return $response; | |
| 761 | + } | |
| 762 | + | |
| 763 | + /** | |
| 764 | + * Ammend any known database upgrades | |
| 765 | + * | |
| 766 | + * @author KnowledgeTree Team | |
| 767 | + * @access private | |
| 768 | + * @params none | |
| 769 | + * @return boolean | |
| 770 | + */ | |
| 771 | + private function applyUpgrades($con) { | |
| 772 | + // Database upgrade to version 3.6.1: Search ranking | |
| 773 | + return true; | |
| 774 | + } | |
| 775 | + | |
| 776 | + /** | |
| 777 | + * Close connection if it exists | |
| 778 | + * | |
| 779 | + * @author KnowledgeTree Team | |
| 780 | + * @access private | |
| 781 | + * @params mysql connection object $con | |
| 782 | + * @return void | |
| 783 | + */ | |
| 784 | + private function closeMysql($con) { | |
| 785 | + try { | |
| 786 | + $this->_dbhandler->close(); | |
| 787 | + } catch (Exeption $e) { | |
| 788 | + $this->error['con'] = "Could not close: " . $e; | |
| 789 | + } | |
| 790 | + } | |
| 791 | + | |
| 792 | + /** | |
| 793 | + * Returns database errors | |
| 794 | + * | |
| 795 | + * @author KnowledgeTree Team | |
| 796 | + * @access public | |
| 797 | + * @params none | |
| 798 | + * @return array | |
| 799 | + */ | |
| 800 | + public function getErrors() { | |
| 801 | + | |
| 802 | + return $this->error; | |
| 803 | + } | |
| 804 | + | |
| 805 | + /** | |
| 806 | + * Test database connectivity | |
| 807 | + * | |
| 808 | + * @author KnowledgeTree Team | |
| 809 | + * @param none | |
| 810 | + * @access public | |
| 811 | + * @return boolean | |
| 812 | + */ | |
| 813 | + public function doAjaxTest($host, $uname, $dname) { | |
| 814 | + | |
| 815 | + } | |
| 816 | + | |
| 817 | + /** | |
| 818 | + * Initialize errors to false | |
| 819 | + * | |
| 820 | + * @author KnowledgeTree Team | |
| 821 | + * @param none | |
| 822 | + * @access private | |
| 823 | + * @return boolean | |
| 824 | + */ | |
| 825 | + private function initErrors() { | |
| 826 | + foreach ($this->templateErrors as $e) { | |
| 827 | + $this->error[$e] = false; | |
| 828 | + } | |
| 829 | + } | |
| 830 | +} | |
| 829 | 831 | ?> |
| 830 | 832 | \ No newline at end of file | ... | ... |
setup/wizard/steps/services.php
| 1 | -<?php | |
| 2 | -/** | |
| 3 | -* Services Step Controller. | |
| 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 | -* | |
| 36 | -* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | -* @license GNU General Public License version 3 | |
| 38 | -* @author KnowledgeTree Team | |
| 39 | -* @package Installer | |
| 40 | -* @version Version 0.1 | |
| 41 | -*/ | |
| 42 | - | |
| 43 | -if(isset($_GET['action'])) { | |
| 44 | - $func = $_GET['action']; | |
| 45 | - if($func != '') { | |
| 46 | - require_once("../step.php"); | |
| 47 | - require_once("../installUtil.php"); | |
| 48 | - require_once("../path.php"); | |
| 49 | - } | |
| 50 | -} | |
| 51 | - | |
| 52 | -class services extends Step | |
| 53 | -{ | |
| 54 | - /** | |
| 55 | - * List of errors encountered | |
| 56 | - * | |
| 57 | - * @author KnowledgeTree Team | |
| 58 | - * @access protected | |
| 59 | - * @var array | |
| 60 | - */ | |
| 61 | - protected $error = array(); | |
| 62 | - | |
| 63 | - /** | |
| 64 | - * Flag if step needs to be installed | |
| 65 | - * | |
| 66 | - * @author KnowledgeTree Team | |
| 67 | - * @access protected | |
| 68 | - * @var array | |
| 69 | - */ | |
| 70 | - protected $runInstall = true; | |
| 71 | - | |
| 72 | - /** | |
| 73 | - * List of services to be installed | |
| 74 | - * | |
| 75 | - * @author KnowledgeTree Team | |
| 76 | - * @access private | |
| 77 | - * @var array | |
| 78 | - */ | |
| 79 | - private $services = array('Lucene', 'Scheduler', 'OpenOffice'); | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * Path to php executable | |
| 83 | - * | |
| 84 | - * @author KnowledgeTree Team | |
| 85 | - * @access protected | |
| 86 | - * @var string | |
| 87 | - */ | |
| 88 | - protected $php; | |
| 89 | - | |
| 90 | - /** | |
| 91 | - * Flag if php already provided | |
| 92 | - * | |
| 93 | - * @author KnowledgeTree Team | |
| 94 | - * @access private | |
| 95 | - * @var mixed | |
| 96 | - */ | |
| 97 | - public $providedPhp = false; | |
| 98 | - | |
| 99 | - /** | |
| 100 | - * PHP Installed | |
| 101 | - * | |
| 102 | - * @author KnowledgeTree Team | |
| 103 | - * @access private | |
| 104 | - * @var mixed | |
| 105 | - */ | |
| 106 | - private $phpCheck = 'cross_orange'; | |
| 107 | - | |
| 108 | - /** | |
| 109 | - * Flag, if php is specified and an error has been encountered | |
| 110 | - * | |
| 111 | - * @author KnowledgeTree Team | |
| 112 | - * @access public | |
| 113 | - * @var boolean | |
| 114 | - */ | |
| 115 | - private $phpExeError = false; | |
| 116 | - | |
| 117 | - /** | |
| 118 | - * Holds path error, if php is specified | |
| 119 | - * | |
| 120 | - * @author KnowledgeTree Team | |
| 121 | - * @access public | |
| 122 | - * @var string | |
| 123 | - */ | |
| 124 | - private $phpExeMessage = ''; | |
| 125 | - | |
| 126 | - /** | |
| 127 | - * Path to open office executable | |
| 128 | - * | |
| 129 | - * @author KnowledgeTree Team | |
| 130 | - * @access protected | |
| 131 | - * @var string | |
| 132 | - */ | |
| 133 | - protected $soffice; | |
| 134 | - | |
| 135 | - /** | |
| 136 | - * Flag if open office already provided | |
| 137 | - * | |
| 138 | - * @author KnowledgeTree Team | |
| 139 | - * @access private | |
| 140 | - * @var mixed | |
| 141 | - */ | |
| 142 | - public $providedOpenOffice = false; | |
| 143 | - | |
| 144 | - /** | |
| 145 | - * Flag, if open office is specified and an error has been encountered | |
| 146 | - * | |
| 147 | - * @author KnowledgeTree Team | |
| 148 | - * @access public | |
| 149 | - * @var boolean | |
| 150 | - */ | |
| 151 | - private $openOfficeExeError = false; | |
| 152 | - | |
| 153 | - /** | |
| 154 | - * Holds path error, if open office is specified | |
| 155 | - * | |
| 156 | - * @author KnowledgeTree Team | |
| 157 | - * @access public | |
| 158 | - * @var string | |
| 159 | - */ | |
| 160 | - private $openOfficeExeMessage = ''; | |
| 161 | - | |
| 162 | - /** | |
| 163 | - * Path to java executable | |
| 164 | - * | |
| 165 | - * @author KnowledgeTree Team | |
| 166 | - * @access protected | |
| 167 | - * @var string | |
| 168 | - */ | |
| 169 | - protected $java = ""; | |
| 170 | - | |
| 171 | - /** | |
| 172 | - * Minumum Java Version | |
| 173 | - * | |
| 174 | - * @author KnowledgeTree Team | |
| 175 | - * @access protected | |
| 176 | - * @var string | |
| 177 | - */ | |
| 178 | - private $javaVersion = '1.5'; | |
| 179 | - | |
| 180 | - /** | |
| 181 | - * Java Installed | |
| 182 | - * | |
| 183 | - * @author KnowledgeTree Team | |
| 184 | - * @access private | |
| 185 | - * @var mixed | |
| 186 | - */ | |
| 187 | - private $javaCheck = 'cross'; | |
| 188 | - | |
| 189 | - /** | |
| 190 | - * Open Office Installed | |
| 191 | - * | |
| 192 | - * @author KnowledgeTree Team | |
| 193 | - * @access private | |
| 194 | - * @var mixed | |
| 195 | - */ | |
| 196 | - private $openOfficeCheck = 'cross'; | |
| 197 | - | |
| 198 | - /** | |
| 199 | - * Flag if java already provided | |
| 200 | - * | |
| 201 | - * @author KnowledgeTree Team | |
| 202 | - * @access private | |
| 203 | - * @var mixed | |
| 204 | - */ | |
| 205 | - public $providedJava = false; | |
| 206 | - | |
| 207 | - /** | |
| 208 | - * Java Bridge Installed | |
| 209 | - * | |
| 210 | - * @author KnowledgeTree Team | |
| 211 | - * @access private | |
| 212 | - * @var mixed | |
| 213 | - */ | |
| 214 | - private $javaExtCheck = 'cross_orange'; | |
| 215 | - | |
| 216 | - /** | |
| 217 | - * Flag if bridge extension needs to be disabled | |
| 218 | - * | |
| 219 | - * @author KnowledgeTree Team | |
| 220 | - * @access public | |
| 221 | - * @var boolean | |
| 222 | - */ | |
| 223 | - private $disableExtension = false; | |
| 224 | - | |
| 225 | - /** | |
| 226 | - * Flag, if java is specified and an error has been encountered | |
| 227 | - * | |
| 228 | - * @author KnowledgeTree Team | |
| 229 | - * @access public | |
| 230 | - * @var booelean | |
| 231 | - */ | |
| 232 | - private $javaExeError = false; | |
| 233 | - | |
| 234 | - /** | |
| 235 | - * Holds path error, if java is specified | |
| 236 | - * | |
| 237 | - * @author KnowledgeTree Team | |
| 238 | - * @access public | |
| 239 | - * @var string | |
| 240 | - */ | |
| 241 | - private $javaExeMessage = ''; | |
| 242 | - | |
| 243 | - /** | |
| 244 | - * Flag if services are already Installed | |
| 245 | - * | |
| 246 | - * @author KnowledgeTree Team | |
| 247 | - * @access private | |
| 248 | - * @var mixed | |
| 249 | - */ | |
| 250 | - private $alreadyInstalled = false; | |
| 251 | - | |
| 252 | - /** | |
| 253 | - * Flag if services are already Installed | |
| 254 | - * | |
| 255 | - * @author KnowledgeTree Team | |
| 256 | - * @access private | |
| 257 | - * @var mixed | |
| 258 | - */ | |
| 259 | - private $luceneInstalled = false; | |
| 260 | - | |
| 261 | - /** | |
| 262 | - * Flag if services are already Installed | |
| 263 | - * | |
| 264 | - * @author KnowledgeTree Team | |
| 265 | - * @access private | |
| 266 | - * @var mixed | |
| 267 | - */ | |
| 268 | - private $schedulerInstalled = false; | |
| 269 | - | |
| 270 | - /** | |
| 271 | - * Path to php executable | |
| 272 | - * | |
| 273 | - * @author KnowledgeTree Team | |
| 274 | - * @access protected | |
| 275 | - * @var string | |
| 276 | - */ | |
| 277 | - private $openOfficeInstalled; | |
| 278 | - | |
| 279 | - /** | |
| 280 | - * Service Installed | |
| 281 | - * | |
| 282 | - * @author KnowledgeTree Team | |
| 283 | - * @access private | |
| 284 | - * @var array | |
| 285 | - */ | |
| 286 | - private $serviceCheck = 'tick'; | |
| 287 | - | |
| 288 | - /** | |
| 289 | - * Flag to store class information in session | |
| 290 | - * | |
| 291 | - * @author KnowledgeTree Team | |
| 292 | - * @access public | |
| 293 | - * @var boolean | |
| 294 | - */ | |
| 295 | - protected $storeInSession = true; | |
| 296 | - | |
| 297 | - /** | |
| 298 | - * List of variables to be loaded to template | |
| 299 | - * | |
| 300 | - * @author KnowledgeTree Team | |
| 301 | - * @access public | |
| 302 | - * @var array | |
| 303 | - */ | |
| 304 | - protected $temp_variables; | |
| 305 | - | |
| 306 | - /** | |
| 307 | - * Flag if step needs to run silently | |
| 308 | - * | |
| 309 | - * @author KnowledgeTree Team | |
| 310 | - * @access public | |
| 311 | - * @var array | |
| 312 | - */ | |
| 313 | - protected $silent = true; | |
| 314 | - | |
| 315 | - /** | |
| 316 | - * Reference to utility object | |
| 317 | - * | |
| 318 | - * @author KnowledgeTree Team | |
| 319 | - * @access protected | |
| 320 | - * @var string | |
| 321 | - */ | |
| 322 | - protected $util; | |
| 323 | - | |
| 324 | - /** | |
| 325 | - * Constructs services object | |
| 326 | - * | |
| 327 | - * @author KnowledgeTree Team | |
| 328 | - * @access public | |
| 329 | - * @param none | |
| 330 | - */ | |
| 331 | - public function __construct() { | |
| 332 | - $this->temp_variables = array("step_name"=>"services", "silent"=>$this->silent); | |
| 333 | - $this->util = new InstallUtil(); | |
| 334 | - } | |
| 335 | - | |
| 336 | - /** | |
| 337 | - * Main control of services setup | |
| 338 | - * | |
| 339 | - * @author KnowledgeTree Team | |
| 340 | - * @param none | |
| 341 | - * @access public | |
| 342 | - * @return string | |
| 343 | - */ | |
| 344 | - public function doStep() | |
| 345 | - { | |
| 346 | - if(!$this->inStep("services")) { | |
| 347 | - $this->doRun(); | |
| 348 | - return 'landing'; | |
| 349 | - } | |
| 350 | - if($this->next()) { | |
| 351 | - // Check dependencies | |
| 352 | - $passed = $this->doRun(); | |
| 353 | - $serv = $this->getDataFromSession("services"); | |
| 354 | - if($passed || $serv['providedJava']) | |
| 355 | - return 'next'; | |
| 356 | - else | |
| 357 | - return 'error'; | |
| 358 | - } else if($this->previous()) { | |
| 359 | - return 'previous'; | |
| 360 | - } | |
| 361 | - $passed = $this->doRun(); | |
| 362 | - return 'landing'; | |
| 363 | - } | |
| 364 | - | |
| 365 | - /** | |
| 366 | - * Get service names | |
| 367 | - * | |
| 368 | - * @author KnowledgeTree Team | |
| 369 | - * @param none | |
| 370 | - * @access public | |
| 371 | - * @return array | |
| 372 | - */ | |
| 373 | - public function getServices() { | |
| 374 | - return $this->services; | |
| 375 | - } | |
| 376 | - | |
| 377 | - /** | |
| 378 | - * Check if java executable was found | |
| 379 | - * | |
| 380 | - * @author KnowledgeTree Team | |
| 381 | - * @param none | |
| 382 | - * @access private | |
| 383 | - * @return array | |
| 384 | - */ | |
| 385 | - private function setJava() { | |
| 386 | - if($this->java != '') { // Java JRE Found | |
| 387 | - $this->javaCheck = 'tick'; | |
| 388 | - $this->javaInstalled(); | |
| 389 | - $this->temp_variables['java']['location'] = $this->java; | |
| 390 | - } | |
| 391 | - } | |
| 392 | - | |
| 393 | - /** | |
| 394 | - * Run step | |
| 395 | - * | |
| 396 | - * @author KnowledgeTree Team | |
| 397 | - * @param none | |
| 398 | - * @access private | |
| 399 | - * @return boolean | |
| 400 | - */ | |
| 401 | - private function doRun() { | |
| 402 | - if($this->alreadyInstalled()) { | |
| 403 | - $this->alreadyInstalled = true; | |
| 404 | - $this->serviceCheck = 'tick'; | |
| 405 | - } else { | |
| 406 | - $this->presetJava(); | |
| 407 | - $this->presetOpenOffice(); | |
| 408 | - if(!$this->schedulerInstalled) { | |
| 409 | - $this->php = $this->util->getPhp(); // Get java, if it exists | |
| 410 | - $passedPhp = $this->phpChecks(); // Run Java Pre Checks | |
| 411 | - if ($passedPhp) { // Install Scheduler | |
| 412 | - $this->installService('Scheduler'); | |
| 413 | - } | |
| 414 | - } else { | |
| 415 | - $this->schedulerInstalled(); | |
| 416 | - } | |
| 417 | - if(!$this->luceneInstalled) { | |
| 418 | - $this->java = $this->util->getJava(); // Get java, if it exists | |
| 419 | - $passedJava = $this->javaChecks(); // Run Java Pre Checks | |
| 420 | - if ($passedJava) { // Install Lucene | |
| 421 | - $this->installService('Lucene'); | |
| 422 | - } | |
| 423 | - } else { | |
| 424 | - $this->luceneInstalled(); | |
| 425 | - } | |
| 426 | - if(!$this->openOfficeInstalled) { | |
| 427 | - $this->soffice = $this->util->getOpenOffice(); // Get java, if it exists | |
| 428 | - $passedOpenOffice = $this->openOfficeChecks(); // Run Java Pre Checks | |
| 429 | - if ($passedOpenOffice) { //Install OpenOffice | |
| 430 | -// $this->temp_variables['openOfficeExe'] = $this->soffice; | |
| 431 | - // TODO : Why, O, why? | |
| 432 | - $this->openOfficeExeError = false; | |
| 433 | - $_SESSION['services']['openOfficeExe'] = $this->soffice; | |
| 434 | - $this->installService('OpenOffice'); | |
| 435 | - } | |
| 436 | - } else { | |
| 437 | - $this->openOfficeInstalled(); | |
| 438 | - } | |
| 439 | - } | |
| 440 | - $this->checkServiceStatus(); | |
| 441 | - $this->storeSilent(); // Store info needed for silent mode | |
| 442 | - if(!empty($errors)) | |
| 443 | - return false; | |
| 444 | - return true; | |
| 445 | - } | |
| 446 | - | |
| 447 | - private function openOfficeInstalled() { | |
| 448 | - | |
| 449 | - } | |
| 450 | - | |
| 451 | - private function schedulerInstalled() { | |
| 452 | - | |
| 453 | - } | |
| 454 | - | |
| 455 | - private function luceneInstalled() { | |
| 456 | - $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 457 | - $this->javaVersionCorrect(); | |
| 458 | - $this->javaInstalled(); | |
| 459 | - $this->javaCheck = 'tick'; | |
| 460 | - } | |
| 461 | - | |
| 462 | - /** | |
| 463 | - * A final check to see if services are still running, | |
| 464 | - * incase they switched on and turned off. | |
| 465 | - * | |
| 466 | - * @author KnowledgeTree Team | |
| 467 | - * @param none | |
| 468 | - * @access private | |
| 469 | - * @return void | |
| 470 | - */ | |
| 471 | - private function checkServiceStatus() { | |
| 472 | - $serverDetails = $this->getServices(); | |
| 473 | - foreach ($serverDetails as $serviceName) { | |
| 474 | - $className = OS.$serviceName; | |
| 475 | - $service = new $className(); | |
| 476 | - $service->load(); | |
| 477 | - $status = $this->serviceInstalled($service); | |
| 478 | - if($status != 'STARTED') { | |
| 479 | - $msg = $service->getName()." Could not be added as a Service"; | |
| 480 | - $this->temp_variables['services'][] = array('class'=>'cross_orange', 'msg'=>$msg); | |
| 481 | - $this->serviceCheck = 'cross_orange'; | |
| 482 | - $this->warnings[] = $msg; | |
| 483 | - } else { | |
| 484 | - if(WINDOWS_OS) { | |
| 485 | - $this->temp_variables['services'][] = array('class'=>'tick', 'msg'=>$service->getName()." has been added as a Service"); } | |
| 486 | - else { | |
| 487 | - $this->temp_variables['services'][] = array('class'=>'tick', 'msg'=>$service->getName()." has been added and Started as a Service"); | |
| 488 | - } | |
| 489 | - } | |
| 490 | - } | |
| 491 | - } | |
| 492 | - | |
| 493 | - /** | |
| 494 | - * Checks if all services have been started already, | |
| 495 | - * incase the user lands on service page multiple times | |
| 496 | - * | |
| 497 | - * @author KnowledgeTree Team | |
| 498 | - * @param none | |
| 499 | - * @access public | |
| 500 | - * @return boolean | |
| 501 | - */ | |
| 502 | - public function alreadyInstalled() { | |
| 503 | - $allInstalled = true; | |
| 504 | - $serverDetails = $this->getServices(); | |
| 505 | - foreach ($serverDetails as $serviceName) { | |
| 506 | - $className = OS.$serviceName; | |
| 507 | - $service = new $className(); | |
| 508 | - $status = $this->serviceInstalled($service); | |
| 509 | - $flag = strtolower(substr($serviceName,0,1)).substr($serviceName,1)."Installed"; | |
| 510 | - if(!$status) { | |
| 511 | - $allInstalled = false; | |
| 512 | - $this->$flag = false; | |
| 513 | - } else { | |
| 514 | - $this->$flag = true; | |
| 515 | - } | |
| 516 | - } | |
| 517 | - | |
| 518 | - return $allInstalled; | |
| 519 | - } | |
| 520 | - | |
| 521 | - private function presetJava() { | |
| 522 | - $this->zendBridgeNotInstalled(); // Set bridge not installed | |
| 523 | - $this->javaVersionInCorrect(); // Set version to incorrect | |
| 524 | - $this->javaNotInstalled(); // Set java to not installed | |
| 525 | - $this->setJava(); // Check if java has been auto detected | |
| 526 | - } | |
| 527 | - | |
| 528 | - private function presetOpenOffice() { | |
| 529 | - $this->specifyOpenOffice(); | |
| 530 | - } | |
| 531 | - | |
| 532 | - private function setOpenOffice() { | |
| 533 | - | |
| 534 | - } | |
| 535 | - /** | |
| 536 | - * Do some basic checks to help the user overcome java problems | |
| 537 | - * | |
| 538 | - * @author KnowledgeTree Team | |
| 539 | - * @param none | |
| 540 | - * @access private | |
| 541 | - * @return boolean | |
| 542 | - */ | |
| 543 | - private function javaChecks() { | |
| 544 | - if($this->util->javaSpecified()) { | |
| 545 | - $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 546 | - if($this->detSettings(true)) { // AutoDetect java settings | |
| 547 | - return true; | |
| 548 | - } else { | |
| 549 | - $this->specifyJava(); // Ask for settings | |
| 550 | - } | |
| 551 | - } else { | |
| 552 | - $auto = $this->useBridge(); // Use Bridge to get java settings | |
| 553 | - if($auto) { | |
| 554 | - return $auto; | |
| 555 | - } else { | |
| 556 | - $auto = $this->useDetected(); // Check if auto detected java works | |
| 557 | - if($auto) { | |
| 558 | - $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 559 | - return $auto; | |
| 560 | - } else { | |
| 561 | - $this->specifyJava(); // Ask for settings | |
| 562 | - } | |
| 563 | - } | |
| 564 | - return $auto; | |
| 565 | - } | |
| 566 | - } | |
| 567 | - | |
| 568 | - private function openOfficeChecks() { | |
| 569 | - if($this->util->openOfficeSpecified()) { | |
| 570 | - $this->soffice = $this->util->openOfficeSpecified(); | |
| 571 | - | |
| 572 | - return true; | |
| 573 | - } else { | |
| 574 | - return false; | |
| 575 | - } | |
| 576 | - } | |
| 577 | - | |
| 578 | - /** | |
| 579 | - * Attempt detection without logging errors | |
| 580 | - * | |
| 581 | - * @author KnowledgeTree Team | |
| 582 | - * @param none | |
| 583 | - * @access private | |
| 584 | - * @return boolean | |
| 585 | - */ | |
| 586 | - private function useDetected() { | |
| 587 | - return $this->detSettings(); | |
| 588 | - } | |
| 589 | - | |
| 590 | - /** | |
| 591 | - * Set template view to specify java | |
| 592 | - * | |
| 593 | - * @author KnowledgeTree Team | |
| 594 | - * @param none | |
| 595 | - * @access private | |
| 596 | - * @return boolean | |
| 597 | - */ | |
| 598 | - private function specifyJava() { | |
| 599 | - $this->javaExeError = true; | |
| 600 | - } | |
| 601 | - | |
| 602 | - /** | |
| 603 | - * Set template view to specify php | |
| 604 | - * | |
| 605 | - * @author KnowledgeTree Team | |
| 606 | - * @param none | |
| 607 | - * @access private | |
| 608 | - * @return boolean | |
| 609 | - */ | |
| 610 | - private function specifyPhp() { | |
| 611 | - $this->phpExeError = true; | |
| 612 | - } | |
| 613 | - | |
| 614 | - /** | |
| 615 | - * Set template view to specify open office | |
| 616 | - * | |
| 617 | - * @author KnowledgeTree Team | |
| 618 | - * @param none | |
| 619 | - * @access private | |
| 620 | - * @return boolean | |
| 621 | - */ | |
| 622 | - private function specifyOpenOffice() { | |
| 623 | - $this->openOfficeExeError = true; | |
| 624 | - } | |
| 625 | - | |
| 626 | - private function phpChecks() { | |
| 627 | - // TODO: Better detection | |
| 628 | - return true; | |
| 629 | - $this->setPhp(); | |
| 630 | - if($this->util->phpSpecified()) { | |
| 631 | - return $this->detPhpSettings(); | |
| 632 | - } else { | |
| 633 | - $this->specifyPhp();// Ask for settings | |
| 634 | - return false; | |
| 635 | - } | |
| 636 | - } | |
| 637 | - | |
| 638 | - | |
| 639 | - | |
| 640 | - /** | |
| 641 | - * Attempts to use user input and configure java settings | |
| 642 | - * | |
| 643 | - * @author KnowledgeTree Team | |
| 644 | - * @param none | |
| 645 | - * @access private | |
| 646 | - * @return boolean | |
| 647 | - */ | |
| 648 | - private function detSettings($attempt = false) { | |
| 649 | - $javaExecutable = $this->util->javaSpecified();// Retrieve java bin | |
| 650 | - if($javaExecutable == '') { | |
| 651 | - if($this->java == '') { | |
| 652 | - return false; | |
| 653 | - } | |
| 654 | - $javaExecutable = $this->java; | |
| 655 | - } | |
| 656 | - $cmd = "\"$javaExecutable\" -version > output/outJV 2>&1 echo $!"; | |
| 657 | - $response = $this->util->pexec($cmd); | |
| 658 | - if(file_exists(OUTPUT_DIR.'outJV')) { | |
| 659 | - $tmp = file_get_contents(OUTPUT_DIR.'outJV'); | |
| 660 | - preg_match('/"(.*)"/',$tmp, $matches); | |
| 661 | - if($matches) { | |
| 662 | - if($matches[1] < $this->javaVersion) { // Check Version of java | |
| 663 | - $this->javaVersionInCorrect(); | |
| 664 | - $this->javaCheck = 'cross'; | |
| 665 | - $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 666 | - | |
| 667 | - return false; | |
| 668 | - } else { | |
| 669 | - $this->javaVersionCorrect(); | |
| 670 | - $this->javaInstalled(); | |
| 671 | - $this->javaCheck = 'tick'; | |
| 672 | - $this->providedJava = true; | |
| 673 | - | |
| 674 | - return true; | |
| 675 | - } | |
| 676 | - } else { | |
| 677 | - $this->javaVersionWarning(); | |
| 678 | - $this->javaCheck = 'cross_orange'; | |
| 679 | - if($attempt) { | |
| 680 | - $this->javaExeMessage = "Incorrect java path specified"; | |
| 681 | - $this->javaExeError = true; | |
| 682 | - $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 683 | - } | |
| 684 | - | |
| 685 | - | |
| 686 | - return false; | |
| 687 | - } | |
| 688 | - } | |
| 689 | - | |
| 690 | - $this->javaVersionInCorrect(); | |
| 691 | - $this->javaCheck = 'cross'; | |
| 692 | - $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 693 | - return false; | |
| 694 | - } | |
| 695 | - | |
| 696 | - function detPhpSettings() { | |
| 697 | - // TODO: Better php handling | |
| 698 | - return true; | |
| 699 | - $phpExecutable = $this->util->phpSpecified();// Retrieve java bin | |
| 700 | - $cmd = "$phpExecutable -version > output/outPHP 2>&1 echo $!"; | |
| 701 | - $response = $this->util->pexec($cmd); | |
| 702 | - if(file_exists(OUTPUT_DIR.'outPHP')) { | |
| 703 | - $tmp = file_get_contents(OUTPUT_DIR.'outPHP'); | |
| 704 | - preg_match('/PHP/',$tmp, $matches); | |
| 705 | - if($matches) { | |
| 706 | - $this->phpCheck = 'tick'; | |
| 707 | - | |
| 708 | - return true; | |
| 709 | - } else { | |
| 710 | - $this->phpCheck = 'cross_orange'; | |
| 711 | - $this->phpExeError = "PHP : Incorrect path specified"; | |
| 712 | - $this->error[] = "PHP executable required"; | |
| 713 | - | |
| 714 | - return false; | |
| 715 | - } | |
| 716 | - } | |
| 717 | - } | |
| 718 | - /** | |
| 719 | - * Attempts to use bridge and configure java settings | |
| 720 | - * | |
| 721 | - * @author KnowledgeTree Team | |
| 722 | - * @param none | |
| 723 | - * @access private | |
| 724 | - * @return boolean | |
| 725 | - */ | |
| 726 | - private function useBridge() { | |
| 727 | - $zendBridge = $this->util->zendBridge(); // Find Zend Bridge | |
| 728 | - if($zendBridge) { // Bridge installed implies java exists | |
| 729 | - $this->zendBridgeInstalled(); | |
| 730 | - if($this->checkZendBridge()) { // Make sure the Zend Bridge is functional | |
| 731 | - $this->javaExtCheck = 'tick'; // Set bridge to functional | |
| 732 | - $this->javaInstalled(); // Set java to installed | |
| 733 | - $javaSystem = new Java('java.lang.System'); | |
| 734 | - $version = $javaSystem->getProperty('java.version'); | |
| 735 | - $ver = substr($version, 0, 3); | |
| 736 | - if($ver < $this->javaVersion) { | |
| 737 | - $this->javaVersionInCorrect(); | |
| 738 | - $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 739 | - return false; | |
| 740 | - } else { | |
| 741 | - $this->javaVersionCorrect(); // Set version to correct | |
| 742 | - $this->javaCheck = 'tick'; | |
| 743 | - return true; | |
| 744 | - } | |
| 745 | - } else { | |
| 746 | - $this->javaCheck = 'cross_orange'; | |
| 747 | - $this->javaVersionWarning(); | |
| 748 | - $this->zendBridgeWarning(); | |
| 749 | - $this->warnings[] = "Zend Java Bridge Not Functional"; | |
| 750 | - $this->javaExtCheck = 'cross_orange'; | |
| 751 | - return false; | |
| 752 | - } | |
| 753 | - } else { | |
| 754 | - $this->warnings[] = "Zend Java Bridge Not Found"; | |
| 755 | - return false; | |
| 756 | - } | |
| 757 | - } | |
| 758 | - | |
| 759 | - /** | |
| 760 | - * Check if Zend Bridge is functional | |
| 761 | - * | |
| 762 | - * @author KnowledgeTree Team | |
| 763 | - * @param none | |
| 764 | - * @access public | |
| 765 | - * @return boolean | |
| 766 | - */ | |
| 767 | - public function checkZendBridge() { | |
| 768 | - if($this->util->javaBridge()) { // Check if java bridge is functional | |
| 769 | - return true; | |
| 770 | - } else { | |
| 771 | - return false; | |
| 772 | - } | |
| 773 | - } | |
| 774 | - | |
| 775 | - | |
| 776 | - /** | |
| 777 | - * Installs services | |
| 778 | - * | |
| 779 | - * @author KnowledgeTree Team | |
| 780 | - * @param none | |
| 781 | - * @access private | |
| 782 | - * @return boolean | |
| 783 | - */ | |
| 784 | - private function installServices() { | |
| 785 | - foreach ($this->getServices() as $serviceName) { | |
| 786 | - $this->installService($serviceName); | |
| 787 | - } | |
| 788 | - | |
| 789 | - return true; | |
| 790 | - } | |
| 791 | - | |
| 792 | - /** | |
| 793 | - * Installs services helper | |
| 794 | - * | |
| 795 | - * @author KnowledgeTree Team | |
| 796 | - * @param none | |
| 797 | - * @access private | |
| 798 | - * @return boolean | |
| 799 | - */ | |
| 800 | - private function installService($serviceName) { | |
| 801 | - $className = OS.$serviceName; | |
| 802 | - $service = new $className(); | |
| 803 | - $status = $this->serviceHelper($service); | |
| 804 | - if (!$status) { | |
| 805 | - $this->serviceCheck = 'cross_orange'; | |
| 806 | - } | |
| 807 | - } | |
| 808 | - | |
| 809 | - /** | |
| 810 | - * Installs services | |
| 811 | - * | |
| 812 | - * @author KnowledgeTree Team | |
| 813 | - * @param object | |
| 814 | - * @access private | |
| 815 | - * @return string | |
| 816 | - */ | |
| 817 | - private function serviceHelper($service) { | |
| 818 | - $service->load(); // Load Defaults | |
| 819 | - $response = $service->install(); // Install service | |
| 820 | - $statusCheck = OS."ServiceInstalled"; | |
| 821 | - return $this->$statusCheck($service); | |
| 822 | - } | |
| 823 | - | |
| 824 | - /** | |
| 825 | - * Helper to check if service is installed | |
| 826 | - * | |
| 827 | - * @author KnowledgeTree Team | |
| 828 | - * @param object | |
| 829 | - * @access public | |
| 830 | - * @return string | |
| 831 | - */ | |
| 832 | - public function serviceInstalled($service) { | |
| 833 | - $statusCheck = OS."ServiceInstalled"; | |
| 834 | - return $this->$statusCheck($service); | |
| 835 | - } | |
| 836 | - | |
| 837 | - /** | |
| 838 | - * Helper to check if service is started | |
| 839 | - * | |
| 840 | - * @author KnowledgeTree Team | |
| 841 | - * @param object | |
| 842 | - * @access public | |
| 843 | - * @return string | |
| 844 | - */ | |
| 845 | - public function serviceStarted($service) { | |
| 846 | - $statusCheck = OS."ServiceStarted"; | |
| 847 | - return $this->$statusCheck($service); | |
| 848 | - } | |
| 849 | - | |
| 850 | - /** | |
| 851 | - * Check if windows service installed | |
| 852 | - * | |
| 853 | - * @author KnowledgeTree Team | |
| 854 | - * @param object | |
| 855 | - * @access public | |
| 856 | - * @return boolean | |
| 857 | - */ | |
| 858 | - public function windowsServiceStarted($service) { | |
| 859 | - $status = $service->status(); // Check if service has been installed | |
| 860 | - if($status != 'RUNNING') { // Check service status | |
| 861 | - return false; | |
| 862 | - } | |
| 863 | - return true; | |
| 864 | - } | |
| 865 | - | |
| 866 | - /** | |
| 867 | - * Check if unix service installed | |
| 868 | - * | |
| 869 | - * @author KnowledgeTree Team | |
| 870 | - * @param object | |
| 871 | - * @access public | |
| 872 | - * @return boolean | |
| 873 | - */ | |
| 874 | - public function unixServiceStarted($service) { | |
| 875 | - $status = $service->status(); // Check if service has been installed | |
| 876 | - if($status != 'STARTED') { // Check service status | |
| 877 | - return false; | |
| 878 | - } | |
| 879 | - return true; | |
| 880 | - } | |
| 881 | - | |
| 882 | - /** | |
| 883 | - * Check if windows service installed | |
| 884 | - * | |
| 885 | - * @author KnowledgeTree Team | |
| 886 | - * @param object | |
| 887 | - * @access public | |
| 888 | - * @return boolean | |
| 889 | - */ | |
| 890 | - public function windowsServiceInstalled($service) { | |
| 891 | - $status = $service->status(); // Check if service has been installed | |
| 892 | - if($status == '') { // Check service status | |
| 893 | - return false; | |
| 894 | - } | |
| 895 | - return true; | |
| 896 | - } | |
| 897 | - | |
| 898 | - /** | |
| 899 | - * Check if unix service installed | |
| 900 | - * | |
| 901 | - * @author KnowledgeTree Team | |
| 902 | - * @param object | |
| 903 | - * @access public | |
| 904 | - * @return boolean | |
| 905 | - */ | |
| 906 | - public function unixServiceInstalled($service) { | |
| 907 | - $status = $service->status(); // Check if service has been installed | |
| 908 | - if($status != 'STARTED') { // Check service status | |
| 909 | - return false; | |
| 910 | - } | |
| 911 | - return true; | |
| 912 | - } | |
| 913 | - | |
| 914 | - /** | |
| 915 | - * Starts all services | |
| 916 | - * | |
| 917 | - * @author KnowledgeTree Team | |
| 918 | - * @param object | |
| 919 | - * @access public | |
| 920 | - * @return mixed | |
| 921 | - */ | |
| 922 | - public function installStep() { | |
| 923 | - foreach ($this->getServices() as $serviceName) { | |
| 924 | - $className = OS.$serviceName; | |
| 925 | - $service = new $className(); | |
| 926 | - $status = $this->serviceStart($service); | |
| 927 | - } | |
| 928 | - return true; | |
| 929 | - } | |
| 930 | - | |
| 931 | - /** | |
| 932 | - * Starts service | |
| 933 | - * | |
| 934 | - * @author KnowledgeTree Team | |
| 935 | - * @param object | |
| 936 | - * @access private | |
| 937 | - * @return string | |
| 938 | - */ | |
| 939 | - private function serviceStart($service) { | |
| 940 | - if(OS == 'windows') { | |
| 941 | - $service->load(); // Load Defaults | |
| 942 | - $service->start(); // Start Service | |
| 943 | - return $service->status(); // Get service status | |
| 944 | - } | |
| 945 | - } | |
| 946 | - | |
| 947 | - /** | |
| 948 | - * Returns services errors | |
| 949 | - * | |
| 950 | - * @author KnowledgeTree Team | |
| 951 | - * @access public | |
| 952 | - * @params none | |
| 953 | - * @return array | |
| 954 | - */ | |
| 955 | - public function getErrors() { | |
| 956 | - return $this->error; | |
| 957 | - } | |
| 958 | - | |
| 959 | - /** | |
| 960 | - * Returns services warnings | |
| 961 | - * | |
| 962 | - * @author KnowledgeTree Team | |
| 963 | - * @access public | |
| 964 | - * @params none | |
| 965 | - * @return array | |
| 966 | - */ | |
| 967 | - public function getWarnings() { | |
| 968 | - return $this->warnings; | |
| 969 | - } | |
| 970 | - | |
| 971 | - /** | |
| 972 | - * Get the variables to be passed to the template | |
| 973 | - * | |
| 974 | - * @author KnowledgeTree Team | |
| 975 | - * @access public | |
| 976 | - * @return array | |
| 977 | - */ | |
| 978 | - public function getStepVars() | |
| 979 | - { | |
| 980 | - return $this->temp_variables; | |
| 981 | - } | |
| 982 | - | |
| 983 | - /** | |
| 984 | - * Store Java state as installed | |
| 985 | - * | |
| 986 | - * @author KnowledgeTree Team | |
| 987 | - * @param none | |
| 988 | - * @access private | |
| 989 | - * @return void | |
| 990 | - */ | |
| 991 | - private function javaInstalled() { | |
| 992 | - $this->temp_variables['java']['class'] = 'tick'; | |
| 993 | - $this->temp_variables['java']['found'] = "Java Runtime Installed"; | |
| 994 | - } | |
| 995 | - | |
| 996 | - /** | |
| 997 | - * Store Java state as not installed | |
| 998 | - * | |
| 999 | - * @author KnowledgeTree Team | |
| 1000 | - * @param none | |
| 1001 | - * @access private | |
| 1002 | - * @return void | |
| 1003 | - */ | |
| 1004 | - private function javaNotInstalled() { | |
| 1005 | - $this->temp_variables['java']['class'] = 'cross'; | |
| 1006 | - $this->temp_variables['java']['found'] = "Java runtime environment required"; | |
| 1007 | - } | |
| 1008 | - | |
| 1009 | - /** | |
| 1010 | - * Store Java version state as correct | |
| 1011 | - * | |
| 1012 | - * @author KnowledgeTree Team | |
| 1013 | - * @param none | |
| 1014 | - * @access private | |
| 1015 | - * @return void | |
| 1016 | - */ | |
| 1017 | - private function javaVersionCorrect() { | |
| 1018 | - $this->temp_variables['version']['class'] = 'tick'; | |
| 1019 | - $this->temp_variables['version']['found'] = "Java Version 1.5+ Installed"; | |
| 1020 | - } | |
| 1021 | - | |
| 1022 | - /** | |
| 1023 | - * Store Java version state as warning | |
| 1024 | - * @author KnowledgeTree Team | |
| 1025 | - * @param none | |
| 1026 | - * @access private | |
| 1027 | - * @return void | |
| 1028 | - */ | |
| 1029 | - private function javaVersionWarning() { | |
| 1030 | - $this->temp_variables['version']['class'] = 'cross_orange'; | |
| 1031 | - $this->temp_variables['version']['found'] = "Java Runtime Version Cannot be detected"; | |
| 1032 | - } | |
| 1033 | - | |
| 1034 | - /** | |
| 1035 | - * Store Java version as state incorrect | |
| 1036 | - * | |
| 1037 | - * @author KnowledgeTree Team | |
| 1038 | - * @param none | |
| 1039 | - * @access private | |
| 1040 | - * @return void | |
| 1041 | - */ | |
| 1042 | - private function javaVersionInCorrect() { | |
| 1043 | - $this->temp_variables['version']['class'] = 'cross'; | |
| 1044 | - $this->temp_variables['version']['found'] = "Requires Java 1.5+ to be installed"; | |
| 1045 | - } | |
| 1046 | - | |
| 1047 | - /** | |
| 1048 | - * Store Zend Bridge state as installed | |
| 1049 | - * | |
| 1050 | - * @author KnowledgeTree Team | |
| 1051 | - * @param none | |
| 1052 | - * @access private | |
| 1053 | - * @return void | |
| 1054 | - */ | |
| 1055 | - private function zendBridgeInstalled() { | |
| 1056 | - $this->temp_variables['extensions']['class'] = 'tick'; | |
| 1057 | - $this->temp_variables['extensions']['found'] = "Java Bridge Installed"; | |
| 1058 | - } | |
| 1059 | - | |
| 1060 | - /** | |
| 1061 | - * Store Zend Bridge state as not installed | |
| 1062 | - * | |
| 1063 | - * @author KnowledgeTree Team | |
| 1064 | - * @param none | |
| 1065 | - * @access private | |
| 1066 | - * @return void | |
| 1067 | - */ | |
| 1068 | - private function zendBridgeNotInstalled() { | |
| 1069 | - $this->temp_variables['extensions']['class'] = 'cross_orange'; | |
| 1070 | - $this->temp_variables['extensions']['found'] = "Zend Java Bridge Not Installed"; | |
| 1071 | - } | |
| 1072 | - | |
| 1073 | - /** | |
| 1074 | - * Store Zend Bridge state as warning | |
| 1075 | - * | |
| 1076 | - * @author KnowledgeTree Team | |
| 1077 | - * @param none | |
| 1078 | - * @access private | |
| 1079 | - * @return void | |
| 1080 | - */ | |
| 1081 | - private function zendBridgeWarning() { | |
| 1082 | - $this->temp_variables['extensions']['class'] = 'cross_orange'; | |
| 1083 | - $this->temp_variables['extensions']['found'] = "Zend Java Bridge Not Functional"; | |
| 1084 | - } | |
| 1085 | - | |
| 1086 | - /** | |
| 1087 | - * Set all silent mode varibles | |
| 1088 | - * | |
| 1089 | - * @author KnowledgeTree Team | |
| 1090 | - * @param none | |
| 1091 | - * @access private | |
| 1092 | - * @return void | |
| 1093 | - */ | |
| 1094 | - private function storeSilent() { | |
| 1095 | - // Servics | |
| 1096 | - $this->temp_variables['alreadyInstalled'] = $this->alreadyInstalled; | |
| 1097 | - $this->temp_variables['luceneInstalled'] = $this->luceneInstalled; | |
| 1098 | - $this->temp_variables['schedulerInstalled'] = $this->schedulerInstalled; | |
| 1099 | - $this->temp_variables['openOfficeInstalled'] = $this->openOfficeInstalled; | |
| 1100 | - // Java | |
| 1101 | - $this->temp_variables['javaExeError'] = $this->javaExeError; | |
| 1102 | - $this->temp_variables['javaExeMessage'] = $this->javaExeMessage; | |
| 1103 | - $this->temp_variables['javaCheck'] = $this->javaCheck; | |
| 1104 | - $this->temp_variables['javaExtCheck'] = $this->javaExtCheck; | |
| 1105 | - // Open Office | |
| 1106 | - $this->temp_variables['openOfficeExeError'] = $this->openOfficeExeError; | |
| 1107 | - $this->temp_variables['openOfficeExeMessage'] = $this->openOfficeExeMessage; | |
| 1108 | - // TODO : PHP detection | |
| 1109 | - $this->temp_variables['phpCheck'] = 'tick';//$this->phpCheck; | |
| 1110 | - $this->temp_variables['phpExeError'] = '';//$this->phpExeError; | |
| 1111 | - $this->temp_variables['serviceCheck'] = $this->serviceCheck; | |
| 1112 | - $this->temp_variables['disableExtension'] = $this->disableExtension; | |
| 1113 | - // TODO: Java checks are gettign intense | |
| 1114 | - $this->temp_variables['providedJava'] = $this->providedJava; | |
| 1115 | - } | |
| 1116 | - | |
| 1117 | - private function setPhp() { | |
| 1118 | - if($this->php != '') { // PHP Found | |
| 1119 | - $this->phpCheck = 'tick'; | |
| 1120 | - } elseif (PHP_DIR != '') { // Use System Defined Settings | |
| 1121 | - $this->php = PHP_DIR; | |
| 1122 | - } else { | |
| 1123 | - | |
| 1124 | - } | |
| 1125 | - $this->temp_variables['php']['location'] = $this->php; | |
| 1126 | - } | |
| 1127 | - | |
| 1128 | - public function getPhpDir() { | |
| 1129 | - return $this->php; | |
| 1130 | - } | |
| 1131 | - | |
| 1132 | - public function doDeleteAll() { | |
| 1133 | - $serverDetails = $this->getServices(); | |
| 1134 | - foreach ($serverDetails as $serviceName) { | |
| 1135 | - $className = OS.$serviceName; | |
| 1136 | - require_once("../lib/services/service.php"); | |
| 1137 | - require_once("../lib/services/".OS."Service.php"); | |
| 1138 | - require_once("../lib/services/$className.php"); | |
| 1139 | - $service = new $className(); | |
| 1140 | - $service->uninstall(); | |
| 1141 | - echo "Delete Service {$service->getName()}<br/>"; | |
| 1142 | - echo "Status of service ".$service->status()."<br/>"; | |
| 1143 | - } | |
| 1144 | - } | |
| 1145 | - | |
| 1146 | - public function doInstallAll() { | |
| 1147 | - $serverDetails = $this->getServices(); | |
| 1148 | - foreach ($serverDetails as $serviceName) { | |
| 1149 | - $className = OS.$serviceName; | |
| 1150 | - require_once("../lib/services/service.php"); | |
| 1151 | - require_once("../lib/services/".OS."Service.php"); | |
| 1152 | - require_once("../lib/services/$className.php"); | |
| 1153 | - $service = new $className(); | |
| 1154 | - $service->load(); | |
| 1155 | - $service->install(); | |
| 1156 | - echo "Install Service {$service->getName()}<br/>"; | |
| 1157 | - echo "Status of service ".$service->status()."<br/>"; | |
| 1158 | - } | |
| 1159 | - } | |
| 1160 | - | |
| 1161 | - public function doStatusAll() { | |
| 1162 | - $serverDetails = $this->getServices(); | |
| 1163 | - foreach ($serverDetails as $serviceName) { | |
| 1164 | - $className = OS.$serviceName; | |
| 1165 | - require_once("../lib/services/service.php"); | |
| 1166 | - require_once("../lib/services/".OS."Service.php"); | |
| 1167 | - require_once("../lib/services/$className.php"); | |
| 1168 | - $service = new $className(); | |
| 1169 | - $service->load(); | |
| 1170 | - echo "{$service->getName()} : Status of service = ".$service->status()."<br/>"; | |
| 1171 | - } | |
| 1172 | - } | |
| 1173 | -} | |
| 1174 | - | |
| 1175 | -if(isset($_GET['action'])) { | |
| 1176 | - $func = $_GET['action']; | |
| 1177 | - if($func != '') { | |
| 1178 | - $serv = new services(); | |
| 1179 | - $func_call = strtoupper(substr($func,0,1)).substr($func,1); | |
| 1180 | - $method = "do$func"; | |
| 1181 | - $serv->$method(); | |
| 1182 | - } | |
| 1183 | -} | |
| 1 | +<?php | |
| 2 | +/** | |
| 3 | +* Services Step Controller. | |
| 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 | +* | |
| 36 | +* @copyright 2008-2009, KnowledgeTree Inc. | |
| 37 | +* @license GNU General Public License version 3 | |
| 38 | +* @author KnowledgeTree Team | |
| 39 | +* @package Installer | |
| 40 | +* @version Version 0.1 | |
| 41 | +*/ | |
| 42 | + | |
| 43 | +if(isset($_GET['action'])) { | |
| 44 | + $func = $_GET['action']; | |
| 45 | + if($func != '') { | |
| 46 | + require_once("../step.php"); | |
| 47 | + require_once("../installUtil.php"); | |
| 48 | + require_once("../path.php"); | |
| 49 | + } | |
| 50 | +} | |
| 51 | + | |
| 52 | +class services extends Step | |
| 53 | +{ | |
| 54 | + /** | |
| 55 | + * List of errors encountered | |
| 56 | + * | |
| 57 | + * @author KnowledgeTree Team | |
| 58 | + * @access protected | |
| 59 | + * @var array | |
| 60 | + */ | |
| 61 | + protected $error = array(); | |
| 62 | + | |
| 63 | + /** | |
| 64 | + * Flag if step needs to be installed | |
| 65 | + * | |
| 66 | + * @author KnowledgeTree Team | |
| 67 | + * @access protected | |
| 68 | + * @var array | |
| 69 | + */ | |
| 70 | + protected $runInstall = true; | |
| 71 | + | |
| 72 | + /** | |
| 73 | + * List of services to be installed | |
| 74 | + * | |
| 75 | + * @author KnowledgeTree Team | |
| 76 | + * @access private | |
| 77 | + * @var array | |
| 78 | + */ | |
| 79 | + private $services = array('Lucene', 'Scheduler', 'OpenOffice'); | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * Path to php executable | |
| 83 | + * | |
| 84 | + * @author KnowledgeTree Team | |
| 85 | + * @access protected | |
| 86 | + * @var string | |
| 87 | + */ | |
| 88 | + protected $php; | |
| 89 | + | |
| 90 | + /** | |
| 91 | + * Flag if php already provided | |
| 92 | + * | |
| 93 | + * @author KnowledgeTree Team | |
| 94 | + * @access private | |
| 95 | + * @var mixed | |
| 96 | + */ | |
| 97 | + public $providedPhp = false; | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * PHP Installed | |
| 101 | + * | |
| 102 | + * @author KnowledgeTree Team | |
| 103 | + * @access private | |
| 104 | + * @var mixed | |
| 105 | + */ | |
| 106 | + private $phpCheck = 'cross_orange'; | |
| 107 | + | |
| 108 | + /** | |
| 109 | + * Flag, if php is specified and an error has been encountered | |
| 110 | + * | |
| 111 | + * @author KnowledgeTree Team | |
| 112 | + * @access public | |
| 113 | + * @var boolean | |
| 114 | + */ | |
| 115 | + private $phpExeError = false; | |
| 116 | + | |
| 117 | + /** | |
| 118 | + * Holds path error, if php is specified | |
| 119 | + * | |
| 120 | + * @author KnowledgeTree Team | |
| 121 | + * @access public | |
| 122 | + * @var string | |
| 123 | + */ | |
| 124 | + private $phpExeMessage = ''; | |
| 125 | + | |
| 126 | + /** | |
| 127 | + * Path to open office executable | |
| 128 | + * | |
| 129 | + * @author KnowledgeTree Team | |
| 130 | + * @access protected | |
| 131 | + * @var string | |
| 132 | + */ | |
| 133 | + protected $soffice; | |
| 134 | + | |
| 135 | + /** | |
| 136 | + * Flag if open office already provided | |
| 137 | + * | |
| 138 | + * @author KnowledgeTree Team | |
| 139 | + * @access private | |
| 140 | + * @var mixed | |
| 141 | + */ | |
| 142 | + public $providedOpenOffice = false; | |
| 143 | + | |
| 144 | + /** | |
| 145 | + * Flag, if open office is specified and an error has been encountered | |
| 146 | + * | |
| 147 | + * @author KnowledgeTree Team | |
| 148 | + * @access public | |
| 149 | + * @var boolean | |
| 150 | + */ | |
| 151 | + private $openOfficeExeError = false; | |
| 152 | + | |
| 153 | + /** | |
| 154 | + * Holds path error, if open office is specified | |
| 155 | + * | |
| 156 | + * @author KnowledgeTree Team | |
| 157 | + * @access public | |
| 158 | + * @var string | |
| 159 | + */ | |
| 160 | + private $openOfficeExeMessage = ''; | |
| 161 | + | |
| 162 | + /** | |
| 163 | + * Path to java executable | |
| 164 | + * | |
| 165 | + * @author KnowledgeTree Team | |
| 166 | + * @access protected | |
| 167 | + * @var string | |
| 168 | + */ | |
| 169 | + protected $java = ""; | |
| 170 | + | |
| 171 | + /** | |
| 172 | + * Minumum Java Version | |
| 173 | + * | |
| 174 | + * @author KnowledgeTree Team | |
| 175 | + * @access protected | |
| 176 | + * @var string | |
| 177 | + */ | |
| 178 | + private $javaVersion = '1.5'; | |
| 179 | + | |
| 180 | + /** | |
| 181 | + * Java Installed | |
| 182 | + * | |
| 183 | + * @author KnowledgeTree Team | |
| 184 | + * @access private | |
| 185 | + * @var mixed | |
| 186 | + */ | |
| 187 | + private $javaCheck = 'cross'; | |
| 188 | + | |
| 189 | + /** | |
| 190 | + * Open Office Installed | |
| 191 | + * | |
| 192 | + * @author KnowledgeTree Team | |
| 193 | + * @access private | |
| 194 | + * @var mixed | |
| 195 | + */ | |
| 196 | + private $openOfficeCheck = 'cross'; | |
| 197 | + | |
| 198 | + /** | |
| 199 | + * Flag if java already provided | |
| 200 | + * | |
| 201 | + * @author KnowledgeTree Team | |
| 202 | + * @access private | |
| 203 | + * @var mixed | |
| 204 | + */ | |
| 205 | + public $providedJava = false; | |
| 206 | + | |
| 207 | + /** | |
| 208 | + * Java Bridge Installed | |
| 209 | + * | |
| 210 | + * @author KnowledgeTree Team | |
| 211 | + * @access private | |
| 212 | + * @var mixed | |
| 213 | + */ | |
| 214 | + private $javaExtCheck = 'cross_orange'; | |
| 215 | + | |
| 216 | + /** | |
| 217 | + * Flag if bridge extension needs to be disabled | |
| 218 | + * | |
| 219 | + * @author KnowledgeTree Team | |
| 220 | + * @access public | |
| 221 | + * @var boolean | |
| 222 | + */ | |
| 223 | + private $disableExtension = false; | |
| 224 | + | |
| 225 | + /** | |
| 226 | + * Flag, if java is specified and an error has been encountered | |
| 227 | + * | |
| 228 | + * @author KnowledgeTree Team | |
| 229 | + * @access public | |
| 230 | + * @var booelean | |
| 231 | + */ | |
| 232 | + private $javaExeError = false; | |
| 233 | + | |
| 234 | + /** | |
| 235 | + * Holds path error, if java is specified | |
| 236 | + * | |
| 237 | + * @author KnowledgeTree Team | |
| 238 | + * @access public | |
| 239 | + * @var string | |
| 240 | + */ | |
| 241 | + private $javaExeMessage = ''; | |
| 242 | + | |
| 243 | + /** | |
| 244 | + * Flag if services are already Installed | |
| 245 | + * | |
| 246 | + * @author KnowledgeTree Team | |
| 247 | + * @access private | |
| 248 | + * @var mixed | |
| 249 | + */ | |
| 250 | + private $alreadyInstalled = false; | |
| 251 | + | |
| 252 | + /** | |
| 253 | + * Flag if services are already Installed | |
| 254 | + * | |
| 255 | + * @author KnowledgeTree Team | |
| 256 | + * @access private | |
| 257 | + * @var mixed | |
| 258 | + */ | |
| 259 | + private $luceneInstalled = false; | |
| 260 | + | |
| 261 | + /** | |
| 262 | + * Flag if services are already Installed | |
| 263 | + * | |
| 264 | + * @author KnowledgeTree Team | |
| 265 | + * @access private | |
| 266 | + * @var mixed | |
| 267 | + */ | |
| 268 | + private $schedulerInstalled = false; | |
| 269 | + | |
| 270 | + /** | |
| 271 | + * Path to php executable | |
| 272 | + * | |
| 273 | + * @author KnowledgeTree Team | |
| 274 | + * @access protected | |
| 275 | + * @var string | |
| 276 | + */ | |
| 277 | + private $openOfficeInstalled; | |
| 278 | + | |
| 279 | + /** | |
| 280 | + * Service Installed | |
| 281 | + * | |
| 282 | + * @author KnowledgeTree Team | |
| 283 | + * @access private | |
| 284 | + * @var array | |
| 285 | + */ | |
| 286 | + private $serviceCheck = 'tick'; | |
| 287 | + | |
| 288 | + /** | |
| 289 | + * Flag to store class information in session | |
| 290 | + * | |
| 291 | + * @author KnowledgeTree Team | |
| 292 | + * @access public | |
| 293 | + * @var boolean | |
| 294 | + */ | |
| 295 | + protected $storeInSession = true; | |
| 296 | + | |
| 297 | + /** | |
| 298 | + * List of variables to be loaded to template | |
| 299 | + * | |
| 300 | + * @author KnowledgeTree Team | |
| 301 | + * @access public | |
| 302 | + * @var array | |
| 303 | + */ | |
| 304 | + protected $temp_variables; | |
| 305 | + | |
| 306 | + /** | |
| 307 | + * Flag if step needs to run silently | |
| 308 | + * | |
| 309 | + * @author KnowledgeTree Team | |
| 310 | + * @access public | |
| 311 | + * @var array | |
| 312 | + */ | |
| 313 | + protected $silent = true; | |
| 314 | + | |
| 315 | + /** | |
| 316 | + * Reference to utility object | |
| 317 | + * | |
| 318 | + * @author KnowledgeTree Team | |
| 319 | + * @access protected | |
| 320 | + * @var string | |
| 321 | + */ | |
| 322 | + protected $util; | |
| 323 | + private $salt = 'install'; | |
| 324 | + | |
| 325 | + /** | |
| 326 | + * Constructs services object | |
| 327 | + * | |
| 328 | + * @author KnowledgeTree Team | |
| 329 | + * @access public | |
| 330 | + * @param none | |
| 331 | + */ | |
| 332 | + public function __construct() { | |
| 333 | + $this->temp_variables = array("step_name"=>"services", "silent"=>$this->silent); | |
| 334 | + $this->util = new InstallUtil(); | |
| 335 | + } | |
| 336 | + | |
| 337 | + /** | |
| 338 | + * Main control of services setup | |
| 339 | + * | |
| 340 | + * @author KnowledgeTree Team | |
| 341 | + * @param none | |
| 342 | + * @access public | |
| 343 | + * @return string | |
| 344 | + */ | |
| 345 | + public function doStep() | |
| 346 | + { | |
| 347 | + if(!$this->inStep("services")) { | |
| 348 | + $this->doRun(); | |
| 349 | + return 'landing'; | |
| 350 | + } | |
| 351 | + if($this->next()) { | |
| 352 | + // Check dependencies | |
| 353 | + $passed = $this->doRun(); | |
| 354 | + $serv = $this->getDataFromSession("services"); | |
| 355 | + if($passed || $serv['providedJava']) | |
| 356 | + return 'next'; | |
| 357 | + else | |
| 358 | + return 'error'; | |
| 359 | + } else if($this->previous()) { | |
| 360 | + return 'previous'; | |
| 361 | + } | |
| 362 | + $passed = $this->doRun(); | |
| 363 | + return 'landing'; | |
| 364 | + } | |
| 365 | + | |
| 366 | + /** | |
| 367 | + * Get service names | |
| 368 | + * | |
| 369 | + * @author KnowledgeTree Team | |
| 370 | + * @param none | |
| 371 | + * @access public | |
| 372 | + * @return array | |
| 373 | + */ | |
| 374 | + public function getServices() { | |
| 375 | + return $this->services; | |
| 376 | + } | |
| 377 | + | |
| 378 | + /** | |
| 379 | + * Check if java executable was found | |
| 380 | + * | |
| 381 | + * @author KnowledgeTree Team | |
| 382 | + * @param none | |
| 383 | + * @access private | |
| 384 | + * @return array | |
| 385 | + */ | |
| 386 | + private function setJava() { | |
| 387 | + if($this->java != '') { // Java JRE Found | |
| 388 | + $this->javaCheck = 'tick'; | |
| 389 | + $this->javaInstalled(); | |
| 390 | + $this->temp_variables['java']['location'] = $this->java; | |
| 391 | + return ; | |
| 392 | + } | |
| 393 | + | |
| 394 | + $this->temp_variables['java']['location'] = $this->java; | |
| 395 | + } | |
| 396 | + | |
| 397 | + /** | |
| 398 | + * Run step | |
| 399 | + * | |
| 400 | + * @author KnowledgeTree Team | |
| 401 | + * @param none | |
| 402 | + * @access private | |
| 403 | + * @return boolean | |
| 404 | + */ | |
| 405 | + private function doRun() { | |
| 406 | + if($this->alreadyInstalled()) { | |
| 407 | + $this->alreadyInstalled = true; | |
| 408 | + $this->serviceCheck = 'tick'; | |
| 409 | + } else { | |
| 410 | + $this->presetJava(); | |
| 411 | + $this->presetOpenOffice(); | |
| 412 | + if(!$this->schedulerInstalled) { | |
| 413 | + $this->php = $this->util->getPhp(); // Get java, if it exists | |
| 414 | + $passedPhp = $this->phpChecks(); // Run Java Pre Checks | |
| 415 | + if ($passedPhp) { // Install Scheduler | |
| 416 | + $this->installService('Scheduler'); | |
| 417 | + } | |
| 418 | + } else { | |
| 419 | + $this->schedulerInstalled(); | |
| 420 | + } | |
| 421 | + if(!$this->luceneInstalled) { | |
| 422 | + $this->java = $this->util->getJava(); // Get java, if it exists | |
| 423 | + $passedJava = $this->javaChecks(); // Run Java Pre Checks | |
| 424 | + if ($passedJava) { // Install Lucene | |
| 425 | + $this->installService('Lucene'); | |
| 426 | + } | |
| 427 | + } else { | |
| 428 | + $this->luceneInstalled(); | |
| 429 | + } | |
| 430 | + if(!$this->openOfficeInstalled) { | |
| 431 | + $this->soffice = $this->util->getOpenOffice(); // Get java, if it exists | |
| 432 | + $passedOpenOffice = $this->openOfficeChecks(); // Run Java Pre Checks | |
| 433 | + if ($passedOpenOffice) { //Install OpenOffice | |
| 434 | +// $this->temp_variables['openOfficeExe'] = $this->soffice; | |
| 435 | + // TODO : Why, O, why? | |
| 436 | + $this->openOfficeExeError = false; | |
| 437 | + $_SESSION[$this->salt]['services']['openOfficeExe'] = $this->soffice; | |
| 438 | + $this->installService('OpenOffice'); | |
| 439 | + } | |
| 440 | + } else { | |
| 441 | + $this->openOfficeInstalled(); | |
| 442 | + } | |
| 443 | + } | |
| 444 | + $this->checkServiceStatus(); | |
| 445 | + $this->storeSilent(); // Store info needed for silent mode | |
| 446 | + if(!empty($errors)) | |
| 447 | + return false; | |
| 448 | + return true; | |
| 449 | + } | |
| 450 | + | |
| 451 | + private function openOfficeInstalled() { | |
| 452 | + | |
| 453 | + } | |
| 454 | + | |
| 455 | + private function schedulerInstalled() { | |
| 456 | + | |
| 457 | + } | |
| 458 | + | |
| 459 | + private function luceneInstalled() { | |
| 460 | + $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 461 | + $this->javaVersionCorrect(); | |
| 462 | + $this->javaInstalled(); | |
| 463 | + $this->javaCheck = 'tick'; | |
| 464 | + } | |
| 465 | + | |
| 466 | + /** | |
| 467 | + * A final check to see if services are still running, | |
| 468 | + * incase they switched on and turned off. | |
| 469 | + * | |
| 470 | + * @author KnowledgeTree Team | |
| 471 | + * @param none | |
| 472 | + * @access private | |
| 473 | + * @return void | |
| 474 | + */ | |
| 475 | + private function checkServiceStatus() { | |
| 476 | + $serverDetails = $this->getServices(); | |
| 477 | + foreach ($serverDetails as $serviceName) { | |
| 478 | + $className = OS.$serviceName; | |
| 479 | + $service = new $className(); | |
| 480 | + $service->load(); | |
| 481 | + $status = $this->serviceInstalled($service); | |
| 482 | + if($status != 'STARTED') { | |
| 483 | + $msg = $service->getName()." Could not be added as a Service"; | |
| 484 | + $this->temp_variables['services'][] = array('class'=>'cross_orange', 'msg'=>$msg); | |
| 485 | + $this->serviceCheck = 'cross_orange'; | |
| 486 | + $this->warnings[] = $msg; | |
| 487 | + } else { | |
| 488 | + if(WINDOWS_OS) { | |
| 489 | + $this->temp_variables['services'][] = array('class'=>'tick', 'msg'=>$service->getName()." has been added as a Service"); } | |
| 490 | + else { | |
| 491 | + $this->temp_variables['services'][] = array('class'=>'tick', 'msg'=>$service->getName()." has been added and Started as a Service"); | |
| 492 | + } | |
| 493 | + } | |
| 494 | + } | |
| 495 | + } | |
| 496 | + | |
| 497 | + /** | |
| 498 | + * Checks if all services have been started already, | |
| 499 | + * incase the user lands on service page multiple times | |
| 500 | + * | |
| 501 | + * @author KnowledgeTree Team | |
| 502 | + * @param none | |
| 503 | + * @access public | |
| 504 | + * @return boolean | |
| 505 | + */ | |
| 506 | + public function alreadyInstalled() { | |
| 507 | + $allInstalled = true; | |
| 508 | + $serverDetails = $this->getServices(); | |
| 509 | + foreach ($serverDetails as $serviceName) { | |
| 510 | + $className = OS.$serviceName; | |
| 511 | + $service = new $className(); | |
| 512 | + $status = $this->serviceInstalled($service); | |
| 513 | + $flag = strtolower(substr($serviceName,0,1)).substr($serviceName,1)."Installed"; | |
| 514 | + if(!$status) { | |
| 515 | + $allInstalled = false; | |
| 516 | + $this->$flag = false; | |
| 517 | + } else { | |
| 518 | + $this->$flag = true; | |
| 519 | + } | |
| 520 | + } | |
| 521 | + | |
| 522 | + return $allInstalled; | |
| 523 | + } | |
| 524 | + | |
| 525 | + private function presetJava() { | |
| 526 | + $this->zendBridgeNotInstalled(); // Set bridge not installed | |
| 527 | + $this->javaVersionInCorrect(); // Set version to incorrect | |
| 528 | + $this->javaNotInstalled(); // Set java to not installed | |
| 529 | + $this->setJava(); // Check if java has been auto detected | |
| 530 | + } | |
| 531 | + | |
| 532 | + private function presetOpenOffice() { | |
| 533 | + $this->specifyOpenOffice(); | |
| 534 | + } | |
| 535 | + | |
| 536 | + private function setOpenOffice() { | |
| 537 | + | |
| 538 | + } | |
| 539 | + /** | |
| 540 | + * Do some basic checks to help the user overcome java problems | |
| 541 | + * | |
| 542 | + * @author KnowledgeTree Team | |
| 543 | + * @param none | |
| 544 | + * @access private | |
| 545 | + * @return boolean | |
| 546 | + */ | |
| 547 | + private function javaChecks() { | |
| 548 | + if($this->util->javaSpecified()) { | |
| 549 | + $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 550 | + if($this->detSettings(true)) { // AutoDetect java settings | |
| 551 | + return true; | |
| 552 | + } else { | |
| 553 | + $this->specifyJava(); // Ask for settings | |
| 554 | + } | |
| 555 | + } else { | |
| 556 | + $auto = $this->useBridge(); // Use Bridge to get java settings | |
| 557 | + if($auto) { | |
| 558 | + return $auto; | |
| 559 | + } else { | |
| 560 | + $auto = $this->useDetected(); // Check if auto detected java works | |
| 561 | + if($auto) { | |
| 562 | + $this->disableExtension = true; // Disable the use of the php bridge extension | |
| 563 | + return $auto; | |
| 564 | + } else { | |
| 565 | + $this->specifyJava(); // Ask for settings | |
| 566 | + } | |
| 567 | + } | |
| 568 | + return $auto; | |
| 569 | + } | |
| 570 | + } | |
| 571 | + | |
| 572 | + private function openOfficeChecks() { | |
| 573 | + if($this->util->openOfficeSpecified()) { | |
| 574 | + $this->soffice = $this->util->openOfficeSpecified(); | |
| 575 | + if(file_exists($this->soffice)) | |
| 576 | + return true; | |
| 577 | + else | |
| 578 | + return false; | |
| 579 | + } else { | |
| 580 | + return false; | |
| 581 | + } | |
| 582 | + } | |
| 583 | + | |
| 584 | + /** | |
| 585 | + * Attempt detection without logging errors | |
| 586 | + * | |
| 587 | + * @author KnowledgeTree Team | |
| 588 | + * @param none | |
| 589 | + * @access private | |
| 590 | + * @return boolean | |
| 591 | + */ | |
| 592 | + private function useDetected() { | |
| 593 | + return $this->detSettings(); | |
| 594 | + } | |
| 595 | + | |
| 596 | + /** | |
| 597 | + * Set template view to specify java | |
| 598 | + * | |
| 599 | + * @author KnowledgeTree Team | |
| 600 | + * @param none | |
| 601 | + * @access private | |
| 602 | + * @return boolean | |
| 603 | + */ | |
| 604 | + private function specifyJava() { | |
| 605 | + $this->javaExeError = true; | |
| 606 | + } | |
| 607 | + | |
| 608 | + /** | |
| 609 | + * Set template view to specify php | |
| 610 | + * | |
| 611 | + * @author KnowledgeTree Team | |
| 612 | + * @param none | |
| 613 | + * @access private | |
| 614 | + * @return boolean | |
| 615 | + */ | |
| 616 | + private function specifyPhp() { | |
| 617 | + $this->phpExeError = true; | |
| 618 | + } | |
| 619 | + | |
| 620 | + /** | |
| 621 | + * Set template view to specify open office | |
| 622 | + * | |
| 623 | + * @author KnowledgeTree Team | |
| 624 | + * @param none | |
| 625 | + * @access private | |
| 626 | + * @return boolean | |
| 627 | + */ | |
| 628 | + private function specifyOpenOffice() { | |
| 629 | + $this->openOfficeExeError = true; | |
| 630 | + } | |
| 631 | + | |
| 632 | + private function phpChecks() { | |
| 633 | + // TODO: Better detection | |
| 634 | + return true; | |
| 635 | + $this->setPhp(); | |
| 636 | + if($this->util->phpSpecified()) { | |
| 637 | + return $this->detPhpSettings(); | |
| 638 | + } else { | |
| 639 | + $this->specifyPhp();// Ask for settings | |
| 640 | + return false; | |
| 641 | + } | |
| 642 | + } | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + /** | |
| 647 | + * Attempts to use user input and configure java settings | |
| 648 | + * | |
| 649 | + * @author KnowledgeTree Team | |
| 650 | + * @param none | |
| 651 | + * @access private | |
| 652 | + * @return boolean | |
| 653 | + */ | |
| 654 | + private function detSettings($attempt = false) { | |
| 655 | + $javaExecutable = $this->util->javaSpecified();// Retrieve java bin | |
| 656 | + if($javaExecutable == '') { | |
| 657 | + if($this->java == '') { | |
| 658 | + return false; | |
| 659 | + } | |
| 660 | + $javaExecutable = $this->java; | |
| 661 | + } | |
| 662 | + $cmd = "\"$javaExecutable\" -version > output/outJV 2>&1 echo $!"; | |
| 663 | + $response = $this->util->pexec($cmd); | |
| 664 | + if(file_exists(OUTPUT_DIR.'outJV')) { | |
| 665 | + $tmp = file_get_contents(OUTPUT_DIR.'outJV'); | |
| 666 | + preg_match('/"(.*)"/',$tmp, $matches); | |
| 667 | + if($matches) { | |
| 668 | + if($matches[1] < $this->javaVersion) { // Check Version of java | |
| 669 | + $this->javaVersionInCorrect(); | |
| 670 | + $this->javaCheck = 'cross'; | |
| 671 | + $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 672 | + | |
| 673 | + return false; | |
| 674 | + } else { | |
| 675 | + $this->javaVersionCorrect(); | |
| 676 | + $this->javaInstalled(); | |
| 677 | + $this->javaCheck = 'tick'; | |
| 678 | + $this->providedJava = true; | |
| 679 | + | |
| 680 | + return true; | |
| 681 | + } | |
| 682 | + } else { | |
| 683 | + $this->javaVersionWarning(); | |
| 684 | + $this->javaCheck = 'cross_orange'; | |
| 685 | + if($attempt) { | |
| 686 | + $this->javaExeMessage = "Incorrect java path specified"; | |
| 687 | + $this->javaExeError = true; | |
| 688 | + $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 689 | + } | |
| 690 | + | |
| 691 | + | |
| 692 | + return false; | |
| 693 | + } | |
| 694 | + } | |
| 695 | + | |
| 696 | + $this->javaVersionInCorrect(); | |
| 697 | + $this->javaCheck = 'cross'; | |
| 698 | + $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 699 | + return false; | |
| 700 | + } | |
| 701 | + | |
| 702 | + function detPhpSettings() { | |
| 703 | + // TODO: Better php handling | |
| 704 | + return true; | |
| 705 | + $phpExecutable = $this->util->phpSpecified();// Retrieve java bin | |
| 706 | + $cmd = "$phpExecutable -version > output/outPHP 2>&1 echo $!"; | |
| 707 | + $response = $this->util->pexec($cmd); | |
| 708 | + if(file_exists(OUTPUT_DIR.'outPHP')) { | |
| 709 | + $tmp = file_get_contents(OUTPUT_DIR.'outPHP'); | |
| 710 | + preg_match('/PHP/',$tmp, $matches); | |
| 711 | + if($matches) { | |
| 712 | + $this->phpCheck = 'tick'; | |
| 713 | + | |
| 714 | + return true; | |
| 715 | + } else { | |
| 716 | + $this->phpCheck = 'cross_orange'; | |
| 717 | + $this->phpExeError = "PHP : Incorrect path specified"; | |
| 718 | + $this->error[] = "PHP executable required"; | |
| 719 | + | |
| 720 | + return false; | |
| 721 | + } | |
| 722 | + } | |
| 723 | + } | |
| 724 | + /** | |
| 725 | + * Attempts to use bridge and configure java settings | |
| 726 | + * | |
| 727 | + * @author KnowledgeTree Team | |
| 728 | + * @param none | |
| 729 | + * @access private | |
| 730 | + * @return boolean | |
| 731 | + */ | |
| 732 | + private function useBridge() { | |
| 733 | + $zendBridge = $this->util->zendBridge(); // Find Zend Bridge | |
| 734 | + if($zendBridge) { // Bridge installed implies java exists | |
| 735 | + $this->zendBridgeInstalled(); | |
| 736 | + if($this->checkZendBridge()) { // Make sure the Zend Bridge is functional | |
| 737 | + $this->javaExtCheck = 'tick'; // Set bridge to functional | |
| 738 | + $this->javaInstalled(); // Set java to installed | |
| 739 | + $javaSystem = new Java('java.lang.System'); | |
| 740 | + $version = $javaSystem->getProperty('java.version'); | |
| 741 | + $ver = substr($version, 0, 3); | |
| 742 | + if($ver < $this->javaVersion) { | |
| 743 | + $this->javaVersionInCorrect(); | |
| 744 | + $this->error[] = "Requires Java 1.5+ to be installed"; | |
| 745 | + return false; | |
| 746 | + } else { | |
| 747 | + $this->javaVersionCorrect(); // Set version to correct | |
| 748 | + $this->javaCheck = 'tick'; | |
| 749 | + return true; | |
| 750 | + } | |
| 751 | + } else { | |
| 752 | + $this->javaCheck = 'cross_orange'; | |
| 753 | + $this->javaVersionWarning(); | |
| 754 | + $this->zendBridgeWarning(); | |
| 755 | + $this->warnings[] = "Zend Java Bridge Not Functional"; | |
| 756 | + $this->javaExtCheck = 'cross_orange'; | |
| 757 | + return false; | |
| 758 | + } | |
| 759 | + } else { | |
| 760 | + $this->warnings[] = "Zend Java Bridge Not Found"; | |
| 761 | + return false; | |
| 762 | + } | |
| 763 | + } | |
| 764 | + | |
| 765 | + /** | |
| 766 | + * Check if Zend Bridge is functional | |
| 767 | + * | |
| 768 | + * @author KnowledgeTree Team | |
| 769 | + * @param none | |
| 770 | + * @access public | |
| 771 | + * @return boolean | |
| 772 | + */ | |
| 773 | + public function checkZendBridge() { | |
| 774 | + if($this->util->javaBridge()) { // Check if java bridge is functional | |
| 775 | + return true; | |
| 776 | + } else { | |
| 777 | + return false; | |
| 778 | + } | |
| 779 | + } | |
| 780 | + | |
| 781 | + | |
| 782 | + /** | |
| 783 | + * Installs services | |
| 784 | + * | |
| 785 | + * @author KnowledgeTree Team | |
| 786 | + * @param none | |
| 787 | + * @access private | |
| 788 | + * @return boolean | |
| 789 | + */ | |
| 790 | + private function installServices() { | |
| 791 | + foreach ($this->getServices() as $serviceName) { | |
| 792 | + $this->installService($serviceName); | |
| 793 | + } | |
| 794 | + | |
| 795 | + return true; | |
| 796 | + } | |
| 797 | + | |
| 798 | + /** | |
| 799 | + * Installs services helper | |
| 800 | + * | |
| 801 | + * @author KnowledgeTree Team | |
| 802 | + * @param none | |
| 803 | + * @access private | |
| 804 | + * @return boolean | |
| 805 | + */ | |
| 806 | + private function installService($serviceName) { | |
| 807 | + $className = OS.$serviceName; | |
| 808 | + $service = new $className(); | |
| 809 | + $status = $this->serviceHelper($service); | |
| 810 | + if (!$status) { | |
| 811 | + $this->serviceCheck = 'cross_orange'; | |
| 812 | + } | |
| 813 | + } | |
| 814 | + | |
| 815 | + /** | |
| 816 | + * Installs services | |
| 817 | + * | |
| 818 | + * @author KnowledgeTree Team | |
| 819 | + * @param object | |
| 820 | + * @access private | |
| 821 | + * @return string | |
| 822 | + */ | |
| 823 | + private function serviceHelper($service) { | |
| 824 | + $service->load(); // Load Defaults | |
| 825 | + $response = $service->install(); // Install service | |
| 826 | + $statusCheck = OS."ServiceInstalled"; | |
| 827 | + return $this->$statusCheck($service); | |
| 828 | + } | |
| 829 | + | |
| 830 | + /** | |
| 831 | + * Helper to check if service is installed | |
| 832 | + * | |
| 833 | + * @author KnowledgeTree Team | |
| 834 | + * @param object | |
| 835 | + * @access public | |
| 836 | + * @return string | |
| 837 | + */ | |
| 838 | + public function serviceInstalled($service) { | |
| 839 | + $statusCheck = OS."ServiceInstalled"; | |
| 840 | + return $this->$statusCheck($service); | |
| 841 | + } | |
| 842 | + | |
| 843 | + /** | |
| 844 | + * Helper to check if service is started | |
| 845 | + * | |
| 846 | + * @author KnowledgeTree Team | |
| 847 | + * @param object | |
| 848 | + * @access public | |
| 849 | + * @return string | |
| 850 | + */ | |
| 851 | + public function serviceStarted($service) { | |
| 852 | + $statusCheck = OS."ServiceStarted"; | |
| 853 | + return $this->$statusCheck($service); | |
| 854 | + } | |
| 855 | + | |
| 856 | + /** | |
| 857 | + * Check if windows service installed | |
| 858 | + * | |
| 859 | + * @author KnowledgeTree Team | |
| 860 | + * @param object | |
| 861 | + * @access public | |
| 862 | + * @return boolean | |
| 863 | + */ | |
| 864 | + public function windowsServiceStarted($service) { | |
| 865 | + $status = $service->status(); // Check if service has been installed | |
| 866 | + if($status != 'RUNNING') { // Check service status | |
| 867 | + return false; | |
| 868 | + } | |
| 869 | + return true; | |
| 870 | + } | |
| 871 | + | |
| 872 | + /** | |
| 873 | + * Check if unix service installed | |
| 874 | + * | |
| 875 | + * @author KnowledgeTree Team | |
| 876 | + * @param object | |
| 877 | + * @access public | |
| 878 | + * @return boolean | |
| 879 | + */ | |
| 880 | + public function unixServiceStarted($service) { | |
| 881 | + $status = $service->status(); // Check if service has been installed | |
| 882 | + if($status != 'STARTED') { // Check service status | |
| 883 | + return false; | |
| 884 | + } | |
| 885 | + return true; | |
| 886 | + } | |
| 887 | + | |
| 888 | + /** | |
| 889 | + * Check if windows service installed | |
| 890 | + * | |
| 891 | + * @author KnowledgeTree Team | |
| 892 | + * @param object | |
| 893 | + * @access public | |
| 894 | + * @return boolean | |
| 895 | + */ | |
| 896 | + public function windowsServiceInstalled($service) { | |
| 897 | + $status = $service->status(); // Check if service has been installed | |
| 898 | + if($status == '') { // Check service status | |
| 899 | + return false; | |
| 900 | + } | |
| 901 | + return true; | |
| 902 | + } | |
| 903 | + | |
| 904 | + /** | |
| 905 | + * Check if unix service installed | |
| 906 | + * | |
| 907 | + * @author KnowledgeTree Team | |
| 908 | + * @param object | |
| 909 | + * @access public | |
| 910 | + * @return boolean | |
| 911 | + */ | |
| 912 | + public function unixServiceInstalled($service) { | |
| 913 | + $status = $service->status(); // Check if service has been installed | |
| 914 | + if($status != 'STARTED') { // Check service status | |
| 915 | + return false; | |
| 916 | + } | |
| 917 | + return true; | |
| 918 | + } | |
| 919 | + | |
| 920 | + /** | |
| 921 | + * Starts all services | |
| 922 | + * | |
| 923 | + * @author KnowledgeTree Team | |
| 924 | + * @param object | |
| 925 | + * @access public | |
| 926 | + * @return mixed | |
| 927 | + */ | |
| 928 | + public function installStep() { | |
| 929 | + foreach ($this->getServices() as $serviceName) { | |
| 930 | + $className = OS.$serviceName; | |
| 931 | + $service = new $className(); | |
| 932 | + $status = $this->serviceStart($service); | |
| 933 | + } | |
| 934 | + return true; | |
| 935 | + } | |
| 936 | + | |
| 937 | + /** | |
| 938 | + * Starts service | |
| 939 | + * | |
| 940 | + * @author KnowledgeTree Team | |
| 941 | + * @param object | |
| 942 | + * @access private | |
| 943 | + * @return string | |
| 944 | + */ | |
| 945 | + private function serviceStart($service) { | |
| 946 | + if(OS == 'windows') { | |
| 947 | + $service->load(); // Load Defaults | |
| 948 | + $service->start(); // Start Service | |
| 949 | + return $service->status(); // Get service status | |
| 950 | + } | |
| 951 | + } | |
| 952 | + | |
| 953 | + /** | |
| 954 | + * Returns services errors | |
| 955 | + * | |
| 956 | + * @author KnowledgeTree Team | |
| 957 | + * @access public | |
| 958 | + * @params none | |
| 959 | + * @return array | |
| 960 | + */ | |
| 961 | + public function getErrors() { | |
| 962 | + return $this->error; | |
| 963 | + } | |
| 964 | + | |
| 965 | + /** | |
| 966 | + * Returns services warnings | |
| 967 | + * | |
| 968 | + * @author KnowledgeTree Team | |
| 969 | + * @access public | |
| 970 | + * @params none | |
| 971 | + * @return array | |
| 972 | + */ | |
| 973 | + public function getWarnings() { | |
| 974 | + return $this->warnings; | |
| 975 | + } | |
| 976 | + | |
| 977 | + /** | |
| 978 | + * Get the variables to be passed to the template | |
| 979 | + * | |
| 980 | + * @author KnowledgeTree Team | |
| 981 | + * @access public | |
| 982 | + * @return array | |
| 983 | + */ | |
| 984 | + public function getStepVars() | |
| 985 | + { | |
| 986 | + return $this->temp_variables; | |
| 987 | + } | |
| 988 | + | |
| 989 | + /** | |
| 990 | + * Store Java state as installed | |
| 991 | + * | |
| 992 | + * @author KnowledgeTree Team | |
| 993 | + * @param none | |
| 994 | + * @access private | |
| 995 | + * @return void | |
| 996 | + */ | |
| 997 | + private function javaInstalled() { | |
| 998 | + $this->temp_variables['java']['class'] = 'tick'; | |
| 999 | + $this->temp_variables['java']['found'] = "Java Runtime Installed"; | |
| 1000 | + } | |
| 1001 | + | |
| 1002 | + /** | |
| 1003 | + * Store Java state as not installed | |
| 1004 | + * | |
| 1005 | + * @author KnowledgeTree Team | |
| 1006 | + * @param none | |
| 1007 | + * @access private | |
| 1008 | + * @return void | |
| 1009 | + */ | |
| 1010 | + private function javaNotInstalled() { | |
| 1011 | + $this->temp_variables['java']['class'] = 'cross'; | |
| 1012 | + $this->temp_variables['java']['found'] = "Java runtime environment required"; | |
| 1013 | + } | |
| 1014 | + | |
| 1015 | + /** | |
| 1016 | + * Store Java version state as correct | |
| 1017 | + * | |
| 1018 | + * @author KnowledgeTree Team | |
| 1019 | + * @param none | |
| 1020 | + * @access private | |
| 1021 | + * @return void | |
| 1022 | + */ | |
| 1023 | + private function javaVersionCorrect() { | |
| 1024 | + $this->temp_variables['version']['class'] = 'tick'; | |
| 1025 | + $this->temp_variables['version']['found'] = "Java Version 1.5+ Installed"; | |
| 1026 | + } | |
| 1027 | + | |
| 1028 | + /** | |
| 1029 | + * Store Java version state as warning | |
| 1030 | + * @author KnowledgeTree Team | |
| 1031 | + * @param none | |
| 1032 | + * @access private | |
| 1033 | + * @return void | |
| 1034 | + */ | |
| 1035 | + private function javaVersionWarning() { | |
| 1036 | + $this->temp_variables['version']['class'] = 'cross_orange'; | |
| 1037 | + $this->temp_variables['version']['found'] = "Java Runtime Version Cannot be detected"; | |
| 1038 | + } | |
| 1039 | + | |
| 1040 | + /** | |
| 1041 | + * Store Java version as state incorrect | |
| 1042 | + * | |
| 1043 | + * @author KnowledgeTree Team | |
| 1044 | + * @param none | |
| 1045 | + * @access private | |
| 1046 | + * @return void | |
| 1047 | + */ | |
| 1048 | + private function javaVersionInCorrect() { | |
| 1049 | + $this->temp_variables['version']['class'] = 'cross'; | |
| 1050 | + $this->temp_variables['version']['found'] = "Requires Java 1.5+ to be installed"; | |
| 1051 | + } | |
| 1052 | + | |
| 1053 | + /** | |
| 1054 | + * Store Zend Bridge state as installed | |
| 1055 | + * | |
| 1056 | + * @author KnowledgeTree Team | |
| 1057 | + * @param none | |
| 1058 | + * @access private | |
| 1059 | + * @return void | |
| 1060 | + */ | |
| 1061 | + private function zendBridgeInstalled() { | |
| 1062 | + $this->temp_variables['extensions']['class'] = 'tick'; | |
| 1063 | + $this->temp_variables['extensions']['found'] = "Java Bridge Installed"; | |
| 1064 | + } | |
| 1065 | + | |
| 1066 | + /** | |
| 1067 | + * Store Zend Bridge state as not installed | |
| 1068 | + * | |
| 1069 | + * @author KnowledgeTree Team | |
| 1070 | + * @param none | |
| 1071 | + * @access private | |
| 1072 | + * @return void | |
| 1073 | + */ | |
| 1074 | + private function zendBridgeNotInstalled() { | |
| 1075 | + $this->temp_variables['extensions']['class'] = 'cross_orange'; | |
| 1076 | + $this->temp_variables['extensions']['found'] = "Zend Java Bridge Not Installed"; | |
| 1077 | + } | |
| 1078 | + | |
| 1079 | + /** | |
| 1080 | + * Store Zend Bridge state as warning | |
| 1081 | + * | |
| 1082 | + * @author KnowledgeTree Team | |
| 1083 | + * @param none | |
| 1084 | + * @access private | |
| 1085 | + * @return void | |
| 1086 | + */ | |
| 1087 | + private function zendBridgeWarning() { | |
| 1088 | + $this->temp_variables['extensions']['class'] = 'cross_orange'; | |
| 1089 | + $this->temp_variables['extensions']['found'] = "Zend Java Bridge Not Functional"; | |
| 1090 | + } | |
| 1091 | + | |
| 1092 | + /** | |
| 1093 | + * Set all silent mode varibles | |
| 1094 | + * | |
| 1095 | + * @author KnowledgeTree Team | |
| 1096 | + * @param none | |
| 1097 | + * @access private | |
| 1098 | + * @return void | |
| 1099 | + */ | |
| 1100 | + private function storeSilent() { | |
| 1101 | + // Servics | |
| 1102 | + $this->temp_variables['alreadyInstalled'] = $this->alreadyInstalled; | |
| 1103 | + $this->temp_variables['luceneInstalled'] = $this->luceneInstalled; | |
| 1104 | + $this->temp_variables['schedulerInstalled'] = $this->schedulerInstalled; | |
| 1105 | + $this->temp_variables['openOfficeInstalled'] = $this->openOfficeInstalled; | |
| 1106 | + // Java | |
| 1107 | + $this->temp_variables['javaExeError'] = $this->javaExeError; | |
| 1108 | + $this->temp_variables['javaExeMessage'] = $this->javaExeMessage; | |
| 1109 | + $this->temp_variables['javaCheck'] = $this->javaCheck; | |
| 1110 | + $this->temp_variables['javaExtCheck'] = $this->javaExtCheck; | |
| 1111 | + // Open Office | |
| 1112 | + $this->temp_variables['openOfficeExeError'] = $this->openOfficeExeError; | |
| 1113 | + $this->temp_variables['openOfficeExeMessage'] = $this->openOfficeExeMessage; | |
| 1114 | + // TODO : PHP detection | |
| 1115 | + $this->temp_variables['phpCheck'] = 'tick';//$this->phpCheck; | |
| 1116 | + $this->temp_variables['phpExeError'] = '';//$this->phpExeError; | |
| 1117 | + $this->temp_variables['serviceCheck'] = $this->serviceCheck; | |
| 1118 | + $this->temp_variables['disableExtension'] = $this->disableExtension; | |
| 1119 | + // TODO: Java checks are gettign intense | |
| 1120 | + $this->temp_variables['providedJava'] = $this->providedJava; | |
| 1121 | + } | |
| 1122 | + | |
| 1123 | + private function setPhp() { | |
| 1124 | + if($this->php != '') { // PHP Found | |
| 1125 | + $this->phpCheck = 'tick'; | |
| 1126 | + } elseif (PHP_DIR != '') { // Use System Defined Settings | |
| 1127 | + $this->php = PHP_DIR; | |
| 1128 | + } else { | |
| 1129 | + | |
| 1130 | + } | |
| 1131 | + $this->temp_variables['php']['location'] = $this->php; | |
| 1132 | + } | |
| 1133 | + | |
| 1134 | + public function getPhpDir() { | |
| 1135 | + return $this->php; | |
| 1136 | + } | |
| 1137 | + | |
| 1138 | + public function doDeleteAll() { | |
| 1139 | + $serverDetails = $this->getServices(); | |
| 1140 | + foreach ($serverDetails as $serviceName) { | |
| 1141 | + $className = OS.$serviceName; | |
| 1142 | + require_once("../lib/services/service.php"); | |
| 1143 | + require_once("../lib/services/".OS."Service.php"); | |
| 1144 | + require_once("../lib/services/$className.php"); | |
| 1145 | + $service = new $className(); | |
| 1146 | + $service->uninstall(); | |
| 1147 | + echo "Delete Service {$service->getName()}<br/>"; | |
| 1148 | + echo "Status of service ".$service->status()."<br/>"; | |
| 1149 | + } | |
| 1150 | + } | |
| 1151 | + | |
| 1152 | + public function doInstallAll() { | |
| 1153 | + $serverDetails = $this->getServices(); | |
| 1154 | + foreach ($serverDetails as $serviceName) { | |
| 1155 | + $className = OS.$serviceName; | |
| 1156 | + require_once("../lib/services/service.php"); | |
| 1157 | + require_once("../lib/services/".OS."Service.php"); | |
| 1158 | + require_once("../lib/services/$className.php"); | |
| 1159 | + $service = new $className(); | |
| 1160 | + $service->load(); | |
| 1161 | + $service->install(); | |
| 1162 | + echo "Install Service {$service->getName()}<br/>"; | |
| 1163 | + echo "Status of service ".$service->status()."<br/>"; | |
| 1164 | + } | |
| 1165 | + } | |
| 1166 | + | |
| 1167 | + public function doStatusAll() { | |
| 1168 | + $serverDetails = $this->getServices(); | |
| 1169 | + foreach ($serverDetails as $serviceName) { | |
| 1170 | + $className = OS.$serviceName; | |
| 1171 | + require_once("../lib/services/service.php"); | |
| 1172 | + require_once("../lib/services/".OS."Service.php"); | |
| 1173 | + require_once("../lib/services/$className.php"); | |
| 1174 | + $service = new $className(); | |
| 1175 | + $service->load(); | |
| 1176 | + echo "{$service->getName()} : Status of service = ".$service->status()."<br/>"; | |
| 1177 | + } | |
| 1178 | + } | |
| 1179 | +} | |
| 1180 | + | |
| 1181 | +if(isset($_GET['action'])) { | |
| 1182 | + $func = $_GET['action']; | |
| 1183 | + if($func != '') { | |
| 1184 | + $serv = new services(); | |
| 1185 | + $func_call = strtoupper(substr($func,0,1)).substr($func,1); | |
| 1186 | + $method = "do$func"; | |
| 1187 | + $serv->$method(); | |
| 1188 | + } | |
| 1189 | +} | |
| 1184 | 1190 | ?> |
| 1185 | 1191 | \ No newline at end of file | ... | ... |
setup/wizard/templates/complete.tpl
| 1 | -<form id="install_complete_none"> | |
| 2 | - <p class="title">Installation Completed</p> | |
| 3 | - | |
| 4 | - <p class="description">This allows you to check that your KnowledgeTree configuration is set | |
| 5 | - up correctly. You can run this at any time after configuration to check | |
| 6 | - that things are still set up correctly.</p> | |
| 7 | - | |
| 8 | - <?php | |
| 9 | - if($errors || $warnings){ | |
| 10 | - echo '<div>' | |
| 11 | - . '<a href="http://wiki.knowledgetree.com/Web_Based_Installer#Post_Install" target="_blank">' | |
| 12 | - . 'Click Here for help on overcoming post install issues</a></div><br/>'; | |
| 13 | - } | |
| 14 | - ?> | |
| 15 | - <div id="step_content_complete" class="step"> | |
| 16 | -<!-- Paths and Permissions --> | |
| 17 | - <div> | |
| 18 | - <h3><?php echo "<span class='{$paths_check}'> </span>"; ?>Paths and Permissions</h3> | |
| 19 | - <?php if($silent) { ?> | |
| 20 | - <div id="option8" class="onclick" onclick="javascript:{w.toggleClass('paths_check', 'option8');}">Show Details</div> | |
| 21 | - <div class="paths_check" style="display:none"> | |
| 22 | - <?php } ?> | |
| 23 | - <table> | |
| 24 | - <tr><?php echo $varDirectory; ?></tr> | |
| 25 | - <tr><?php echo $documentRoot; ?></tr> | |
| 26 | - <tr><?php echo $logDirectory; ?></tr> | |
| 27 | - <tr><?php echo $tmpDirectory; ?></tr> | |
| 28 | - <tr><?php echo $uploadDirectory; ?></tr> | |
| 29 | - <tr><?php echo $config; ?></tr> | |
| 30 | - <tr><?php echo $docLocation; ?></tr> | |
| 31 | - </table> | |
| 32 | - <?php if($silent) { ?> | |
| 33 | - </div> | |
| 34 | - <?php } ?> | |
| 35 | - </div> | |
| 36 | - <br/><br/> | |
| 37 | - <div> | |
| 38 | -<!-- Database connectivity --> | |
| 39 | - <h3><?php echo "<span class='{$database_check}'> </span>"; ?>Database connectivity</h3> | |
| 40 | - <?php if($silent) { ?> | |
| 41 | - <div id="option9" class="onclick" onclick="javascript:{w.toggleClass('database_check', 'option9');}">Show Details</div> | |
| 42 | - <div class="database_check" style="display:none"> | |
| 43 | - <?php } ?> | |
| 44 | - <table> | |
| 45 | - <tr><?php echo $dbConnectAdmin; ?></tr> | |
| 46 | - <tr><?php echo $dbConnectUser; ?></tr> | |
| 47 | - </table> | |
| 48 | - <?php if($silent) { ?> | |
| 49 | - </div> | |
| 50 | -<!-- Privileges --> | |
| 51 | - <br/><br/> | |
| 52 | - <?php } ?> | |
| 53 | - <h3><?php echo "<span class='{$privileges_check}'> </span>"; ?>Privileges</h3> | |
| 54 | - <?php if($silent) { ?> | |
| 55 | - <div id="option1" class="onclick" onclick="javascript:{w.toggleClass('privileges_check', 'option1');}">Show Details</div> | |
| 56 | - <div class="privileges_check" style="display:none"> | |
| 57 | - <?php } ?> | |
| 58 | - <table style="width:265px;"> | |
| 59 | - <tr><?php echo $dbPrivileges; ?></tr> | |
| 60 | - <tr><?php echo $dbTransaction; ?></tr> | |
| 61 | - </table> | |
| 62 | - <?php if($silent) { ?> | |
| 63 | - </div> | |
| 64 | - <?php } ?> | |
| 65 | - </div> | |
| 66 | -<!-- Services --> | |
| 67 | - <br/><br/> | |
| 68 | - <div> | |
| 69 | - <h3><?php echo "<span class='{$services_check}'> </span>"; ?>Services</h3> | |
| 70 | - <?php if($silent) { ?> | |
| 71 | - <div id="option2" class="onclick" onclick="javascript:{w.toggleClass('services_check', 'option2');}">Show Details</div> | |
| 72 | - <div class="services_check" style="display:none"> | |
| 73 | - <?php } ?> | |
| 74 | - <table style="width:755px;"> | |
| 75 | - <tr> | |
| 76 | - <td style="width:15px;"> <?php echo "<span class='{$LuceneStatus}'> </span>"; ?> </td> | |
| 77 | - <td style="width:640px;"> Lucene Service <?php if ($LuceneStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 78 | - <?php if ($LuceneStatus != 'tick') { ?> | |
| 79 | - <td> | |
| 80 | - <?php if (AJAX) { ?> | |
| 81 | - <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 82 | - <?php } else { ?> | |
| 83 | - <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 84 | - <?php } ?> | |
| 85 | - </td> | |
| 86 | - <?php } ?> | |
| 87 | - </tr> | |
| 88 | - <tr> | |
| 89 | - <td> <?php echo "<span class='{$SchedulerStatus}'> </span>"; ?> </td> | |
| 90 | - <td> Scheduler Service <?php if ($LuceneStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 91 | - <?php if ($SchedulerStatus != 'tick') { ?> | |
| 92 | - <td> | |
| 93 | - <?php if (AJAX) { ?> | |
| 94 | - <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 95 | - <?php } else { ?> | |
| 96 | - <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 97 | - <?php } ?> | |
| 98 | - </td> | |
| 99 | - <?php } ?> | |
| 100 | - </tr> | |
| 101 | - <tr> | |
| 102 | - <td> <?php echo "<span class='{$OpenOfficeStatus}'> </span>"; ?> </td> | |
| 103 | - <td> OpenOffice Service <?php if ($OpenOfficeStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 104 | - <?php if ($OpenOfficeStatus != 'tick') { ?> | |
| 105 | - <td> | |
| 106 | - <?php if (AJAX) { ?> | |
| 107 | - <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 108 | - <?php } else { ?> | |
| 109 | - <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 110 | - <?php } ?> | |
| 111 | - </td> | |
| 112 | - <?php } ?> | |
| 113 | - </tr> | |
| 114 | - </table> | |
| 115 | - <?php if($silent) { ?> | |
| 116 | - </div> | |
| 117 | - <?php } ?> | |
| 118 | - </div> | |
| 119 | - </div> | |
| 120 | - <a href="../../" class="buttons back" style="width:80px;">Goto Login</a> | |
| 121 | - <?php | |
| 122 | - if (INSTALL_TYPE == 'Zend') { | |
| 123 | - ?> | |
| 124 | - <a href="<?php echo "http://".$_SERVER['HTTP_HOST'].":10081/ZendServer/Index"; ?>" class="back" target="_blank">Zend Server Configuration</a> | |
| 125 | - <?php | |
| 126 | - } | |
| 127 | - ?> | |
| 128 | -</form> | |
| 1 | +<form id="install_complete_none"> | |
| 2 | + <p class="title">Installation Completed</p> | |
| 3 | + | |
| 4 | + <p class="description">This allows you to check that your KnowledgeTree configuration is set | |
| 5 | + up correctly. You can run this at any time after configuration to check | |
| 6 | + that things are still set up correctly.</p> | |
| 7 | + | |
| 8 | + <?php | |
| 9 | + if($errors || $warnings){ | |
| 10 | + echo '<div>' | |
| 11 | + . '<a href="http://wiki.knowledgetree.com/Web_Based_Installer#Post_Install" target="_blank">' | |
| 12 | + . 'Click Here for help on overcoming post install issues</a></div><br/>'; | |
| 13 | + } | |
| 14 | + ?> | |
| 15 | + <div id="step_content_complete" class="step"> | |
| 16 | + <!-- Paths and Permissions --> | |
| 17 | + <div> | |
| 18 | + <h3><?php echo "<span class='{$paths_check}'> </span>"; ?>Paths and Permissions</h3> | |
| 19 | + <?php if($silent) { ?> | |
| 20 | + <div id="option8" class="onclick" onclick="javascript:{w.toggleClass('paths_check', 'option8');}">Show Details</div> | |
| 21 | + <div class="paths_check" style="display:none"> | |
| 22 | + <?php } ?> | |
| 23 | + <table> | |
| 24 | + <tr><?php echo $varDirectory; ?></tr> | |
| 25 | + <tr><?php echo $documentRoot; ?></tr> | |
| 26 | + <tr><?php echo $logDirectory; ?></tr> | |
| 27 | + <tr><?php echo $tmpDirectory; ?></tr> | |
| 28 | + <tr><?php echo $uploadDirectory; ?></tr> | |
| 29 | + <tr><?php echo $config; ?></tr> | |
| 30 | + <tr><?php echo $docLocation; ?></tr> | |
| 31 | + </table> | |
| 32 | + <?php if($silent) { ?> | |
| 33 | + </div> | |
| 34 | + <?php } ?> | |
| 35 | + </div> | |
| 36 | + <br/><br/> | |
| 37 | + <div> | |
| 38 | + <!-- Database connectivity --> | |
| 39 | + <h3><?php echo "<span class='{$database_check}'> </span>"; ?>Database connectivity</h3> | |
| 40 | + <?php if($silent) { ?> | |
| 41 | + <div id="option9" class="onclick" onclick="javascript:{w.toggleClass('database_check', 'option9');}">Show Details</div> | |
| 42 | + <div class="database_check" style="display:none"> | |
| 43 | + <?php } ?> | |
| 44 | + <table> | |
| 45 | + <tr><?php echo $dbConnectAdmin; ?></tr> | |
| 46 | + <tr><?php echo $dbConnectUser; ?></tr> | |
| 47 | + </table> | |
| 48 | + <?php if($silent) { ?> | |
| 49 | + </div> | |
| 50 | + <!-- Privileges --> | |
| 51 | + <br/><br/> | |
| 52 | + <?php } ?> | |
| 53 | + <h3><?php echo "<span class='{$privileges_check}'> </span>"; ?>Privileges</h3> | |
| 54 | + <?php if($silent) { ?> | |
| 55 | + <div id="option1" class="onclick" onclick="javascript:{w.toggleClass('privileges_check', 'option1');}">Show Details</div> | |
| 56 | + <div class="privileges_check" style="display:none"> | |
| 57 | + <?php } ?> | |
| 58 | + <table style="width:265px;"> | |
| 59 | + <tr><?php echo $dbPrivileges; ?></tr> | |
| 60 | + <tr><?php echo $dbTransaction; ?></tr> | |
| 61 | + </table> | |
| 62 | + <?php if($silent) { ?> | |
| 63 | + </div> | |
| 64 | + <?php } ?> | |
| 65 | + </div> | |
| 66 | + <!-- Services --> | |
| 67 | + <br/><br/> | |
| 68 | + <div> | |
| 69 | + <h3><?php echo "<span class='{$services_check}'> </span>"; ?>Services</h3> | |
| 70 | + <?php if($silent) { ?> | |
| 71 | + <div id="option2" class="onclick" onclick="javascript:{w.toggleClass('services_check', 'option2');}">Show Details</div> | |
| 72 | + <div class="services_check" style="display:none"> | |
| 73 | + <?php } ?> | |
| 74 | + <table style="width:755px;"> | |
| 75 | + <tr> | |
| 76 | + <td style="width:15px;"> <?php echo "<span class='{$LuceneStatus}'> </span>"; ?> </td> | |
| 77 | + <td style="width:640px;"> Lucene Service <?php if ($LuceneStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 78 | + <?php if ($LuceneStatus != 'tick') { ?> | |
| 79 | + <td> | |
| 80 | + <?php if (AJAX) { ?> | |
| 81 | + <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 82 | + <?php } else { ?> | |
| 83 | + <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 84 | + <?php } ?> | |
| 85 | + </td> | |
| 86 | + <?php } ?> | |
| 87 | + </tr> | |
| 88 | + <tr> | |
| 89 | + <td> <?php echo "<span class='{$SchedulerStatus}'> </span>"; ?> </td> | |
| 90 | + <td> Scheduler Service <?php if ($LuceneStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 91 | + <?php if ($SchedulerStatus != 'tick') { ?> | |
| 92 | + <td> | |
| 93 | + <?php if (AJAX) { ?> | |
| 94 | + <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 95 | + <?php } else { ?> | |
| 96 | + <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 97 | + <?php } ?> | |
| 98 | + </td> | |
| 99 | + <?php } ?> | |
| 100 | + </tr> | |
| 101 | + <tr> | |
| 102 | + <td> <?php echo "<span class='{$OpenOfficeStatus}'> </span>"; ?> </td> | |
| 103 | + <td> OpenOffice Service <?php if ($OpenOfficeStatus != 'tick') { ?> Could not be started <?php } else { ?> Started <?php } ?></td> | |
| 104 | + <?php if ($OpenOfficeStatus != 'tick') { ?> | |
| 105 | + <td> | |
| 106 | + <?php if (AJAX) { ?> | |
| 107 | + <a href="#" class="refresh" onclick="w.refresh('complete')">Refresh</a> | |
| 108 | + <?php } else { ?> | |
| 109 | + <a href="javascript:this.location.reload();" class="refresh">Refresh</a> | |
| 110 | + <?php } ?> | |
| 111 | + </td> | |
| 112 | + <?php } ?> | |
| 113 | + </tr> | |
| 114 | + </table> | |
| 115 | + <?php if($silent) { ?> | |
| 116 | + </div> | |
| 117 | + <?php } ?> | |
| 118 | + </div> | |
| 119 | + </div> | |
| 120 | + <a href="../../" class="buttons back" style="width:80px;" onclick="javascript:{w.clearSessions();}">Goto Login</a> | |
| 121 | + <?php | |
| 122 | + if (INSTALL_TYPE == 'Zend') { | |
| 123 | + ?> | |
| 124 | + <a href="<?php echo "http://".$_SERVER['HTTP_HOST'].":10081/ZendServer/Index"; ?>" class="back" target="_blank" onclick="javascript:{w.clearSessions();}">Zend Server Configuration</a> | |
| 125 | + <?php | |
| 126 | + } | |
| 127 | + ?> | |
| 128 | +</form> | |
| 129 | 129 | <?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> |
| 130 | 130 | \ No newline at end of file | ... | ... |
setup/wizard/templates/configuration.tpl
| ... | ... | @@ -118,4 +118,4 @@ |
| 118 | 118 | <input type="submit" name="Previous" value="Previous" class="button_previous"/> |
| 119 | 119 | <input type="submit" name="Next" value="Next" class="button_next"/> |
| 120 | 120 | </form> |
| 121 | -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> | |
| 122 | 121 | \ No newline at end of file |
| 122 | +<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> | ... | ... |
setup/wizard/templates/configuration_confirm.tpl
| ... | ... | @@ -94,4 +94,4 @@ |
| 94 | 94 | <input type="submit" name="Edit" value="Edit" class="button_previous"/> |
| 95 | 95 | <input type="submit" name="Confirm" value="Confirm" class="button_next"/> |
| 96 | 96 | </form> |
| 97 | -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> | |
| 98 | 97 | \ No newline at end of file |
| 98 | +<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> | ... | ... |
setup/wizard/templates/registration.tpl
| ... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 | <?php } else { ?> |
| 4 | 4 | <form id="registration" action="index.php?step_name=<?php echo $step_name; ?>" method="post" onsubmit="javascript:{ if(w.validateRegistration()) { w.sendRegistration() };return false;}"> |
| 5 | 5 | <?php } ?> |
| 6 | + | |
| 6 | 7 | <p class="title">Registering KnowledgeTree</p> |
| 7 | 8 | <?php |
| 8 | 9 | //echo $sel_country; | ... | ... |