Commit 79c38dcb6339cfe065472d40f38a1b73ff8dceff

Authored by jarrett
1 parent e3a4474f

Merge Work/Home

Commited By: Jarrett Jordaan

Reviewed By: Megan Watson
Showing 37 changed files with 570 additions and 145 deletions
setup/wizard/config/databases.xml
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <dport>3306</dport> 15 <dport>3306</dport>
16 <dname>dms</dname> 16 <dname>dms</dname>
17 <duname>root</duname> 17 <duname>root</duname>
18 - <dmsadminuser>dmsadminuser</dmsadminuser> 18 + <dmsadminuser>dmsuser</dmsadminuser>
19 <dmsaupass>js9281djw</dmsaupass> 19 <dmsaupass>js9281djw</dmsaupass>
20 <dmsuser>dmsuser</dmsuser> 20 <dmsuser>dmsuser</dmsuser>
21 <dmsupass>djw9281js</dmsupass> 21 <dmsupass>djw9281js</dmsupass>
setup/wizard/htmlHelper.php 0 → 100644
  1 +<?php
  2 + require_once("path.php");
  3 +
  4 + class htmlHelper {
  5 + var $tags = array(
  6 + 'meta' => '<meta%s/>',
  7 + 'metalink' => '<link href="%s"%s/>',
  8 + 'link' => '<a href="%s"%s>%s</a>',
  9 + 'mailto' => '<a href="mailto:%s" %s>%s</a>',
  10 + 'form' => '<form %s>',
  11 + 'formend' => '</form>',
  12 + 'input' => '<input name="%s" %s/>',
  13 + 'textarea' => '<textarea name="%s" %s>%s</textarea>',
  14 + 'hidden' => '<input type="hidden" name="%s" %s/>',
  15 + 'checkbox' => '<input type="checkbox" name="%s" %s/>',
  16 + 'checkboxmultiple' => '<input type="checkbox" name="%s[]"%s />',
  17 + 'radio' => '<input type="radio" name="%s" id="%s" %s />%s',
  18 + 'selectstart' => '<select name="%s"%s>',
  19 + 'selectmultiplestart' => '<select name="%s[]"%s>',
  20 + 'selectempty' => '<option value=""%s>&nbsp;</option>',
  21 + 'selectoption' => '<option value="%s"%s>%s</option>',
  22 + 'selectend' => '</select>',
  23 + 'optiongroup' => '<optgroup label="%s"%s>',
  24 + 'optiongroupend' => '</optgroup>',
  25 + 'checkboxmultiplestart' => '',
  26 + 'checkboxmultipleend' => '',
  27 + 'password' => '<input type="password" name="%s" %s/>',
  28 + 'file' => '<input type="file" name="%s" %s/>',
  29 + 'file_no_model' => '<input type="file" name="%s" %s/>',
  30 + 'submit' => '<input type="submit" %s/>',
  31 + 'submitimage' => '<input type="image" src="%s" %s/>',
  32 + 'button' => '<input type="%s" %s/>',
  33 + 'image' => '<img src="%s" %s/>',
  34 + 'tableheader' => '<th%s>%s</th>',
  35 + 'tableheaderrow' => '<tr%s>%s</tr>',
  36 + 'tablecell' => '<td%s>%s</td>',
  37 + 'tablerow' => '<tr%s>%s</tr>',
  38 + 'block' => '<div%s>%s</div>',
  39 + 'blockstart' => '<div%s>',
  40 + 'blockend' => '</div>',
  41 + 'tag' => '<%s%s>%s</%s>',
  42 + 'tagstart' => '<%s%s>',
  43 + 'tagend' => '</%s>',
  44 + 'para' => '<p%s>%s</p>',
  45 + 'parastart' => '<p%s>',
  46 + 'label' => '<label for="%s"%s>%s</label>',
  47 + 'fieldset' => '<fieldset%s>%s</fieldset>',
  48 + 'fieldsetstart' => '<fieldset><legend>%s</legend>',
  49 + 'fieldsetend' => '</fieldset>',
  50 + 'legend' => '<legend>%s</legend>',
  51 + 'css' => '<link rel="%s" type="text/css" href="%s" %s/>',
  52 + 'style' => '<style type="text/css"%s>%s</style>',
  53 + 'charset' => '<meta http-equiv="Content-Type" content="text/html; charset=%s" />',
  54 + 'ul' => '<ul%s>%s</ul>',
  55 + 'ol' => '<ol%s>%s</ol>',
  56 + 'li' => '<li%s>%s</li>',
  57 + 'error' => '<div%s>%s</div>'
  58 + );
  59 +
  60 + function __construct() {
  61 + }
  62 +
  63 + function js($name) {
  64 + return "<script type=\"text/javascript\" src=\"resources/js/$name\"></script>";
  65 + }
  66 +
  67 + function css($name) {
  68 + return "<link rel=\"stylesheet\" type=\"text/css\" href=\"resources/css/$name\" />";
  69 + }
  70 +
  71 + function image($name, $options = array()) {
  72 + $path = "resources/graphics/$name";
  73 + $image = sprintf($this->tags['image'], $path, $this->_parseAttributes($options, null, '', ' '));
  74 +
  75 + return $image;
  76 + //return "<img src=\"resources/graphics/$name\"/>";
  77 + }
  78 +
  79 + function _parseAttributes($options, $exclude = null, $insertBefore = ' ', $insertAfter = null) {
  80 + if (is_array($options)) {
  81 + $options = array_merge(array('escape' => true), $options);
  82 +
  83 + if (!is_array($exclude)) {
  84 + $exclude = array();
  85 + }
  86 + $keys = array_diff(array_keys($options), array_merge((array)$exclude, array('escape')));
  87 + $values = array_intersect_key(array_values($options), $keys);
  88 + $escape = $options['escape'];
  89 + $attributes = array();
  90 +
  91 + foreach ($keys as $index => $key) {
  92 + $attributes[] = $this->__formatAttribute($key, $values[$index], $escape);
  93 + }
  94 + $out = implode(' ', $attributes);
  95 + } else {
  96 + $out = $options;
  97 + }
  98 + return $out ? $insertBefore . $out . $insertAfter : '';
  99 + }
  100 +
  101 + function __formatAttribute($key, $value, $escape = true) {
  102 + $attribute = '';
  103 + $attributeFormat = '%s="%s"';
  104 + $minimizedAttributes = array('compact', 'checked', 'declare', 'readonly', 'disabled', 'selected', 'defer', 'ismap', 'nohref', 'noshade', 'nowrap', 'multiple', 'noresize');
  105 + if (is_array($value)) {
  106 + $value = '';
  107 + }
  108 +
  109 + if (in_array($key, $minimizedAttributes)) {
  110 + if ($value === 1 || $value === true || $value === 'true' || $value == $key) {
  111 + $attribute = sprintf($attributeFormat, $key, $key);
  112 + }
  113 + } else {
  114 + $attribute = sprintf($attributeFormat, $key, $this->ife($escape, $this->h($value), $value));
  115 + }
  116 + return $attribute;
  117 + }
  118 +
  119 + function ife($condition, $val1 = null, $val2 = null) {
  120 + if (!empty($condition)) {
  121 + return $val1;
  122 + }
  123 + return $val2;
  124 + }
  125 +
  126 + function h($text, $charset = 'UTF-8') {
  127 + if (is_array($text)) {
  128 + return array_map('h', $text);
  129 + }
  130 + return htmlspecialchars($text, ENT_QUOTES, $charset);
  131 + }
  132 + }
  133 +?>
0 \ No newline at end of file 134 \ No newline at end of file
setup/wizard/install.lock
1 -Install Lock File  
2 \ No newline at end of file 0 \ No newline at end of file
setup/wizard/installUtil.php
@@ -254,9 +254,12 @@ class InstallUtil { @@ -254,9 +254,12 @@ class InstallUtil {
254 * @param boolean $create Whether to create the directory if it doesn't exist 254 * @param boolean $create Whether to create the directory if it doesn't exist
255 * @return array The message and css class to use 255 * @return array The message and css class to use
256 */ 256 */
257 - public function checkPermission($dir, $create=false) 257 + public function checkPermission($dir, $create=false, $file = false)
258 { 258 {
259 - $exist = 'Directory doesn\'t exist'; 259 + if(!$file)
  260 + $exist = 'Directory doesn\'t exist';
  261 + else
  262 + $exist = 'File doesn\'t exist';
260 $write = 'Directory not writable'; 263 $write = 'Directory not writable';
261 $ret = array('class' => 'cross'); 264 $ret = array('class' => 'cross');
262 265
setup/wizard/installWizard.php
@@ -73,7 +73,7 @@ class InstallWizard { @@ -73,7 +73,7 @@ class InstallWizard {
73 protected $bypass = null; 73 protected $bypass = null;
74 74
75 /** 75 /**
76 - * Install bypass flag 76 + * Level of debugger
77 * 77 *
78 * @author KnowledgeTree Team 78 * @author KnowledgeTree Team
79 * @access protected 79 * @access protected
@@ -228,7 +228,7 @@ class InstallWizard { @@ -228,7 +228,7 @@ class InstallWizard {
228 if(isset($_GET['debug'])) { 228 if(isset($_GET['debug'])) {
229 $this->setDebugLevel($_GET['debug']); 229 $this->setDebugLevel($_GET['debug']);
230 } else { 230 } else {
231 - $this->setDebugLevel(0); 231 + $this->setDebugLevel($this->debugLevel);
232 } 232 }
233 $this->setIUtil(new InstallUtil()); 233 $this->setIUtil(new InstallUtil());
234 } 234 }
setup/wizard/lib/helpers/config-path-mock-windows 0 → 100644
  1 +C:\ktdms\var
  2 +C:\ktdms\config\config.ini
  3 +C:\ktdms\log
  4 +C:\ktdms\tmp
  5 +C:\ktdms\var\Documents
  6 +C:\ktdms\var\indexes
  7 +C:\ktdms\var\proxies
  8 +C:\ktdms\var\uploads
0 \ No newline at end of file 9 \ No newline at end of file
setup/wizard/lib/services/unixLucene.php
@@ -42,6 +42,7 @@ @@ -42,6 +42,7 @@
42 42
43 class unixLucene extends unixService { 43 class unixLucene extends unixService {
44 public $util; 44 public $util;
  45 +
45 private $shutdownScript; 46 private $shutdownScript;
46 private $indexerDir; 47 private $indexerDir;
47 private $lucenePidFile; 48 private $lucenePidFile;
@@ -58,7 +59,6 @@ class unixLucene extends unixService { @@ -58,7 +59,6 @@ class unixLucene extends unixService {
58 } 59 }
59 60
60 public function load() { 61 public function load() {
61 - $this->setSystemOutputDir();  
62 $this->setLuceneDir(SYSTEM_DIR."bin".DS."luceneserver".DS); 62 $this->setLuceneDir(SYSTEM_DIR."bin".DS."luceneserver".DS);
63 $this->setIndexerDir(SYSTEM_DIR."search2".DS."indexing".DS."bin".DS); 63 $this->setIndexerDir(SYSTEM_DIR."search2".DS."indexing".DS."bin".DS);
64 $this->setLucenePidFile("lucene_test.pid"); 64 $this->setLucenePidFile("lucene_test.pid");
@@ -68,12 +68,6 @@ class unixLucene extends unixService { @@ -68,12 +68,6 @@ class unixLucene extends unixService {
68 $this->setShutdownScript("shutdown.php"); 68 $this->setShutdownScript("shutdown.php");
69 } 69 }
70 70
71 - function setSystemOutputDir() {  
72 - $conf = $this->util->getDataFromSession('configuration');  
73 - print_r($conf);  
74 - die;  
75 -// $conf['path'][''];  
76 - }  
77 71
78 public function setIndexerDir($indexerDir) { 72 public function setIndexerDir($indexerDir) {
79 $this->indexerDir = $indexerDir; 73 $this->indexerDir = $indexerDir;
@@ -190,7 +184,7 @@ class unixLucene extends unixService { @@ -190,7 +184,7 @@ class unixLucene extends unixService {
190 $state = $this->status(); 184 $state = $this->status();
191 if($state != 'STARTED') { 185 if($state != 'STARTED') {
192 $cmd = "cd ".$this->getLuceneDir()."; "; 186 $cmd = "cd ".$this->getLuceneDir()."; ";
193 - $cmd .= "nohup java {$this->getJavaXmx()} {$this->getJavaXmx()} -jar ".$this->getLuceneSource()." > ".SYS_LOG_DIR."lucene.log 2>&1 & echo $!"; 187 + $cmd .= "nohup java {$this->getJavaXmx()} {$this->getJavaXmx()} -jar ".$this->getLuceneSource()." > ".$this->outputDir."lucene.log 2>&1 & echo $!";
194 if(DEBUG) { 188 if(DEBUG) {
195 echo "Command : $cmd<br/>"; 189 echo "Command : $cmd<br/>";
196 return ; 190 return ;
setup/wizard/lib/services/unixOpenOffice.php
@@ -68,7 +68,7 @@ class unixOpenOffice extends unixService { @@ -68,7 +68,7 @@ class unixOpenOffice extends unixService {
68 } 68 }
69 69
70 public function load() { 70 public function load() {
71 - 71 +
72 $this->setPort("8100"); 72 $this->setPort("8100");
73 $this->setHost("localhost"); 73 $this->setHost("localhost");
74 $this->setLog("openoffice.log"); 74 $this->setLog("openoffice.log");
@@ -76,6 +76,8 @@ class unixOpenOffice extends unixService { @@ -76,6 +76,8 @@ class unixOpenOffice extends unixService {
76 $this->setOption(); 76 $this->setOption();
77 } 77 }
78 78
  79 +
  80 +
79 private function setPort($port = "8100") { 81 private function setPort($port = "8100") {
80 $this->port = $port; 82 $this->port = $port;
81 } 83 }
@@ -156,7 +158,7 @@ class unixOpenOffice extends unixService { @@ -156,7 +158,7 @@ class unixOpenOffice extends unixService {
156 public function start() { 158 public function start() {
157 $state = $this->status(); 159 $state = $this->status();
158 if($state != 'STARTED') { 160 if($state != 'STARTED') {
159 - $cmd = "nohup {$this->getBin()} ".$this->getOption()." > ".SYS_LOG_DIR."{$this->getLog()} 2>&1 & echo $!"; 161 + $cmd = "nohup {$this->getBin()} ".$this->getOption()." > ".$this->outputDir."{$this->getLog()} 2>&1 & echo $!";
160 if(DEBUG) { 162 if(DEBUG) {
161 echo "Command : $cmd<br/>"; 163 echo "Command : $cmd<br/>";
162 return ; 164 return ;
setup/wizard/lib/services/unixScheduler.php
@@ -59,6 +59,7 @@ class unixScheduler extends unixService { @@ -59,6 +59,7 @@ class unixScheduler extends unixService {
59 $this->setSchedulerDir(VAR_BIN_DIR); 59 $this->setSchedulerDir(VAR_BIN_DIR);
60 $this->setSchedulerSourceLoc('schedulerTask.sh'); 60 $this->setSchedulerSourceLoc('schedulerTask.sh');
61 } 61 }
  62 +
62 63
63 function setSystemDir($systemDir) { 64 function setSystemDir($systemDir) {
64 $this->systemDir = $systemDir; 65 $this->systemDir = $systemDir;
@@ -155,10 +156,10 @@ class unixScheduler extends unixService { @@ -155,10 +156,10 @@ class unixScheduler extends unixService {
155 $source = $this->getSchedulerSourceLoc(); 156 $source = $this->getSchedulerSourceLoc();
156 $this->writeSchedulerTask(); 157 $this->writeSchedulerTask();
157 if($source) { // Source 158 if($source) { // Source
158 - $cmd = "nohup ".$source." > ".SYS_LOG_DIR."scheduler.log 2>&1 & echo $!"; 159 + $cmd = "nohup ".$source." > ".$this->outputDir."scheduler.log 2>&1 & echo $!";
159 } else { // Could be Stack 160 } else { // Could be Stack
160 $source = SYS_BIN_DIR.$this->schedulerSource; 161 $source = SYS_BIN_DIR.$this->schedulerSource;
161 - $cmd = "nohup ".$source." > ".SYS_LOG_DIR."scheduler.log 2>&1 & echo $!"; 162 + $cmd = "nohup ".$source." > ".$this->outputDir."scheduler.log 2>&1 & echo $!";
162 } 163 }
163 if(DEBUG) { 164 if(DEBUG) {
164 echo "Command : $cmd<br/>"; 165 echo "Command : $cmd<br/>";
setup/wizard/lib/services/unixService.php
@@ -41,6 +41,30 @@ @@ -41,6 +41,30 @@
41 */ 41 */
42 42
43 class unixService extends Service { 43 class unixService extends Service {
  44 +
  45 + public $outputDir;
  46 + public $varDir;
  47 + /**
  48 + * Reference to utility object
  49 + *
  50 + * @author KnowledgeTree Team
  51 + * @access public
  52 + * @param none
  53 + * @return string
  54 + */
  55 + public $util;
  56 +
  57 + public function __construct() {
  58 + $this->util = new InstallUtil();
  59 + $this->setSystemDirs();
  60 + }
  61 +
  62 + function setSystemDirs() {
  63 + $conf = $this->util->getDataFromSession('configuration');
  64 + $this->outputDir = $conf['paths']['logDirectory']['path'].DS;
  65 + $this->varDir = $conf['paths']['varDirectory']['path'].DS;
  66 + }
  67 +
44 /** 68 /**
45 * Retrieve Service name 69 * Retrieve Service name
46 * 70 *
setup/wizard/lib/services/windowsLucene.php
@@ -121,6 +121,7 @@ class windowsLucene extends windowsService { @@ -121,6 +121,7 @@ class windowsLucene extends windowsService {
121 */ 121 */
122 private $luceneDir; 122 private $luceneDir;
123 123
  124 +
124 /** 125 /**
125 * Service name 126 * Service name
126 * 127 *
@@ -140,7 +141,7 @@ class windowsLucene extends windowsService { @@ -140,7 +141,7 @@ class windowsLucene extends windowsService {
140 * @return void 141 * @return void
141 */ 142 */
142 public function load() { 143 public function load() {
143 - $this->setSystemOutputDir(); 144 +
144 $this->setJavaBin(); 145 $this->setJavaBin();
145 $this->setLuceneDIR(SYSTEM_DIR."bin".DS."luceneserver"); 146 $this->setLuceneDIR(SYSTEM_DIR."bin".DS."luceneserver");
146 $this->setLuceneExe("KTLuceneService.exe"); 147 $this->setLuceneExe("KTLuceneService.exe");
@@ -151,12 +152,6 @@ class windowsLucene extends windowsService { @@ -151,12 +152,6 @@ class windowsLucene extends windowsService {
151 $this->setLuceneError("lucene-err.txt"); 152 $this->setLuceneError("lucene-err.txt");
152 } 153 }
153 154
154 - function setSystemOutputDir() {  
155 - $conf = $this->util->getDataFromSession('configuration');  
156 - print_r($conf);  
157 - die;  
158 -// $conf['path'][''];  
159 - }  
160 155
161 /** 156 /**
162 * Retrieve Status Service 157 * Retrieve Status Service
@@ -195,8 +190,8 @@ class windowsLucene extends windowsService { @@ -195,8 +190,8 @@ class windowsLucene extends windowsService {
195 } 190 }
196 } 191 }
197 // TODO: Will not detect, but a java pre-check is done in services, before this 192 // TODO: Will not detect, but a java pre-check is done in services, before this
198 - if(file_exists(SYS_OUT_DIR.'outJVHome')) {  
199 - $this->javaBin = file_get_contents(SYS_OUT_DIR.'outJVHome'); 193 + if(file_exists($this->varDir.'outJVHome')) {
  194 + $this->javaBin = file_get_contents($this->varDir.'outJVHome');
200 if($this->javaBin != '') return true; 195 if($this->javaBin != '') return true;
201 } 196 }
202 197
@@ -326,7 +321,7 @@ class windowsLucene extends windowsService { @@ -326,7 +321,7 @@ class windowsLucene extends windowsService {
326 * @return void 321 * @return void
327 */ 322 */
328 private function setLuceneOut($luceneOut) { 323 private function setLuceneOut($luceneOut) {
329 - $this->luceneOut = SYS_LOG_DIR.$luceneOut; 324 + $this->luceneOut = $this->outputDir.$luceneOut;
330 } 325 }
331 326
332 /** 327 /**
@@ -350,7 +345,7 @@ class windowsLucene extends windowsService { @@ -350,7 +345,7 @@ class windowsLucene extends windowsService {
350 * @return void 345 * @return void
351 */ 346 */
352 private function setLuceneError($luceneError) { 347 private function setLuceneError($luceneError) {
353 - $this->luceneError = SYS_LOG_DIR.$luceneError; 348 + $this->luceneError = $this->outputDir.$luceneError;
354 } 349 }
355 350
356 /** 351 /**
setup/wizard/lib/services/windowsScheduler.php
@@ -76,7 +76,7 @@ class windowsScheduler extends windowsService { @@ -76,7 +76,7 @@ class windowsScheduler extends windowsService {
76 * @return string 76 * @return string
77 */ 77 */
78 public $name = "KTSchedulerTest"; 78 public $name = "KTSchedulerTest";
79 - 79 +
80 /** 80 /**
81 * Load defaults needed by service 81 * Load defaults needed by service
82 * 82 *
@@ -86,12 +86,14 @@ class windowsScheduler extends windowsService { @@ -86,12 +86,14 @@ class windowsScheduler extends windowsService {
86 * @return void 86 * @return void
87 */ 87 */
88 function load() { 88 function load() {
89 - $this->setSchedulerDIR(SYS_OUT_DIR."bin"); 89 + $this->setSchedulerDIR($this->varDir."bin");
90 $this->setSchedulerScriptPath("taskrunner.bat"); 90 $this->setSchedulerScriptPath("taskrunner.bat");
91 $this->setSchedulerSource("schedulerService.php"); 91 $this->setSchedulerSource("schedulerService.php");
92 92
93 } 93 }
94 94
  95 +
  96 +
95 /** 97 /**
96 * Set Scheduler Directory path 98 * Set Scheduler Directory path
97 * 99 *
@@ -101,6 +103,9 @@ class windowsScheduler extends windowsService { @@ -101,6 +103,9 @@ class windowsScheduler extends windowsService {
101 * @return string 103 * @return string
102 */ 104 */
103 private function setSchedulerDIR($schedulerDIR) { 105 private function setSchedulerDIR($schedulerDIR) {
  106 + if(!file_exists($schedulerDIR)) {
  107 + @mkdir($schedulerDIR);
  108 + }
104 $this->schedulerDir = $schedulerDIR; 109 $this->schedulerDir = $schedulerDIR;
105 } 110 }
106 111
@@ -243,10 +248,10 @@ class windowsScheduler extends windowsService { @@ -243,10 +248,10 @@ class windowsScheduler extends windowsService {
243 248
244 private function writeTaskRunner() { 249 private function writeTaskRunner() {
245 // Check if bin is readable and writable 250 // Check if bin is readable and writable
246 - if(is_readable(SYS_OUT_DIR."bin") && is_writable(SYS_OUT_DIR."bin")) {  
247 - if(DEBUG) {  
248 - echo "Create {$this->getSchedulerDir()}\\taskrunner.bat<br>";  
249 - } 251 + if(DEBUG) {
  252 + echo "Attempt to Create {$this->getSchedulerDir()}\\taskrunner.bat<br>";
  253 + }
  254 + if(is_readable($this->varDir."bin") && is_writable($this->varDir."bin")) {
250 $fp = fopen($this->getSchedulerDir().""."\\taskrunner.bat", "w+"); 255 $fp = fopen($this->getSchedulerDir().""."\\taskrunner.bat", "w+");
251 $content = "@echo off \n"; 256 $content = "@echo off \n";
252 $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\""; 257 $content .= "\"".PHP_DIR."php.exe\" "."\"{$this->getSchedulerSource()}\"";
setup/wizard/lib/services/windowsService.php
@@ -59,11 +59,21 @@ class windowsService extends Service { @@ -59,11 +59,21 @@ class windowsService extends Service {
59 * @param none 59 * @param none
60 * @return string 60 * @return string
61 */ 61 */
62 -  
63 public $util; 62 public $util;
64 63
  64 + public $outputDir;
  65 +
  66 + public $varDir;
  67 +
65 public function __construct() { 68 public function __construct() {
66 $this->util = new InstallUtil(); 69 $this->util = new InstallUtil();
  70 + $this->setSystemDirs();
  71 + }
  72 +
  73 + function setSystemDirs() {
  74 + $conf = $this->util->getDataFromSession('configuration');
  75 + $this->outputDir = $conf['paths']['logDirectory']['path'].DS;
  76 + $this->varDir = $conf['paths']['varDirectory']['path'].DS;
67 } 77 }
68 78
69 /** 79 /**
setup/wizard/path.php
@@ -70,6 +70,9 @@ @@ -70,6 +70,9 @@
70 define('SERVICE_LIB', WIZARD_LIB."services".DS); 70 define('SERVICE_LIB', WIZARD_LIB."services".DS);
71 define('CONF_DIR', WIZARD_DIR."config".DS); 71 define('CONF_DIR', WIZARD_DIR."config".DS);
72 define('RES_DIR', WIZARD_DIR."resources".DS); 72 define('RES_DIR', WIZARD_DIR."resources".DS);
  73 + define('JS_DIR', RES_DIR."js".DS);
  74 + define('CSS_DIR', RES_DIR."css".DS);
  75 + define('IMG_DIR', RES_DIR."graphics".DS);
73 define('STEP_DIR', WIZARD_DIR."steps".DS); 76 define('STEP_DIR', WIZARD_DIR."steps".DS);
74 define('TEMP_DIR', WIZARD_DIR."templates".DS); 77 define('TEMP_DIR', WIZARD_DIR."templates".DS);
75 define('SHELL_DIR', WIZARD_DIR."shells".DS); 78 define('SHELL_DIR', WIZARD_DIR."shells".DS);
setup/wizard/resources/wizard.css renamed to setup/wizard/resources/css/wizard.css
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 body { 3 body {
4 background-attachment:scroll; 4 background-attachment:scroll;
5 background-color:transparent; 5 background-color:transparent;
6 - background-image:url("graphics/dame/loginbg.png"); 6 + background-image:url("../graphics/dame/loginbg.png");
7 background-position:0 0; 7 background-position:0 0;
8 background-repeat:repeat-x; 8 background-repeat:repeat-x;
9 font-family:sans-serif; 9 font-family:sans-serif;
@@ -71,7 +71,7 @@ select { @@ -71,7 +71,7 @@ select {
71 } 71 }
72 72
73 #header { 73 #header {
74 - background: transparent url("graphics/dame/installer_head.png") repeat scroll 0% 0%; 74 + background: transparent url("../graphics/dame/installer_head.png") repeat scroll 0% 0%;
75 text-align: right; 75 text-align: right;
76 font-size: 100%; 76 font-size: 100%;
77 color: rgb(167, 167, 167); 77 color: rgb(167, 167, 167);
@@ -82,12 +82,12 @@ select { @@ -82,12 +82,12 @@ select {
82 } 82 }
83 83
84 #wrapper { 84 #wrapper {
85 - /*background: white url("graphics/background.gif") repeat-y left;*/ 85 + /*background: white url("../graphics/background.gif") repeat-y left;*/
86 } 86 }
87 87
88 #container { 88 #container {
89 width: 100%; 89 width: 100%;
90 - background: white url("graphics/background.gif") repeat-y left; 90 + background: white url("../graphics/background.gif") repeat-y left;
91 float: right; 91 float: right;
92 } 92 }
93 93
@@ -175,7 +175,7 @@ select { @@ -175,7 +175,7 @@ select {
175 } 175 }
176 176
177 #footer { 177 #footer {
178 - background-image:url("graphics/dame/navbar.png"); 178 + background-image:url("../graphics/dame/navbar.png");
179 height:35px; 179 height:35px;
180 } 180 }
181 181
@@ -187,7 +187,7 @@ select { @@ -187,7 +187,7 @@ select {
187 /* Content Styles */ 187 /* Content Styles */
188 188
189 .logo { 189 .logo {
190 - background: url("graphics/logo.png") no-repeat; 190 + background: url("../graphics/logo.png") no-repeat;
191 background-position: top left; 191 background-position: top left;
192 height: 50px; 192 height: 50px;
193 width: 200px; 193 width: 200px;
@@ -207,7 +207,7 @@ select { @@ -207,7 +207,7 @@ select {
207 } 207 }
208 208
209 .indicator a { 209 .indicator a {
210 - background:url("graphics/dame/tick1.png") no-repeat left; 210 + background:url("../graphics/dame/tick1.png") no-repeat left;
211 padding-top:15px; 211 padding-top:15px;
212 padding-bottom:10px; 212 padding-bottom:10px;
213 padding-left:30px; 213 padding-left:30px;
@@ -215,7 +215,7 @@ select { @@ -215,7 +215,7 @@ select {
215 } 215 }
216 216
217 .active { 217 .active {
218 - background:url("graphics/dame/tick1.png") no-repeat left; 218 + background:url("../graphics/dame/tick1.png") no-repeat left;
219 padding-top:15px; 219 padding-top:15px;
220 padding-bottom:10px; 220 padding-bottom:10px;
221 padding-left:30px; 221 padding-left:30px;
@@ -223,7 +223,7 @@ select { @@ -223,7 +223,7 @@ select {
223 } 223 }
224 224
225 .inactive { 225 .inactive {
226 - background:url("graphics/dame/tick2.png") no-repeat left; 226 + background:url("../graphics/dame/tick2.png") no-repeat left;
227 padding-top:15px; 227 padding-top:15px;
228 padding-bottom:10px; 228 padding-bottom:10px;
229 padding-left:30px; 229 padding-left:30px;
@@ -231,7 +231,7 @@ select { @@ -231,7 +231,7 @@ select {
231 } 231 }
232 232
233 .current { 233 .current {
234 - background:url("graphics/dame/dot.png") no-repeat left; 234 + background:url("../graphics/dame/dot.png") no-repeat left;
235 padding-top:15px; 235 padding-top:15px;
236 padding-bottom:10px; 236 padding-bottom:10px;
237 padding-left:30px; 237 padding-left:30px;
@@ -239,20 +239,20 @@ select { @@ -239,20 +239,20 @@ select {
239 } 239 }
240 240
241 .tick { 241 .tick {
242 - background: url("graphics/tick.png") no-repeat; 242 + background: url("../graphics/tick.png") no-repeat;
243 height: 16px; 243 height: 16px;
244 width: 16px; 244 width: 16px;
245 } 245 }
246 246
247 .cross { 247 .cross {
248 - background: url("graphics/cross.png") no-repeat; 248 + background: url("../graphics/cross.png") no-repeat;
249 height: 16px; 249 height: 16px;
250 width: 16px; 250 width: 16px;
251 color:#A30000; 251 color:#A30000;
252 } 252 }
253 253
254 .cross_orange { 254 .cross_orange {
255 - background: url("graphics/cross_orange.png") no-repeat; 255 + background: url("../graphics/cross_orange.png") no-repeat;
256 height: 16px; 256 height: 16px;
257 width: 16px; 257 width: 16px;
258 color:#EC7725; 258 color:#EC7725;
@@ -289,7 +289,7 @@ select { @@ -289,7 +289,7 @@ select {
289 } 289 }
290 290
291 .back { 291 .back {
292 - background-image: url("graphics/dame/kt_gradient.jpg"); 292 + background-image: url("../graphics/dame/kt_gradient.jpg");
293 background-repeat:repeat-x; 293 background-repeat:repeat-x;
294 border:1px solid #CECECE; 294 border:1px solid #CECECE;
295 float:left; 295 float:left;
@@ -305,7 +305,7 @@ select { @@ -305,7 +305,7 @@ select {
305 } 305 }
306 306
307 .step input { 307 .step input {
308 - background-image: url("graphics/dame/kt_gradient.jpg"); 308 + background-image: url("../graphics/dame/kt_gradient.jpg");
309 background-repeat:repeat-x; 309 background-repeat:repeat-x;
310 border:1px solid #CECECE; 310 border:1px solid #CECECE;
311 float:right; 311 float:right;
@@ -340,7 +340,7 @@ select { @@ -340,7 +340,7 @@ select {
340 } 340 }
341 341
342 .powered-by { 342 .powered-by {
343 - background: url("graphics/powered-by-kt.png") no-repeat; 343 + background: url("../graphics/powered-by-kt.png") no-repeat;
344 background-position: center left; 344 background-position: center left;
345 height: 50px; 345 height: 50px;
346 width: 140px; 346 width: 140px;
@@ -478,7 +478,7 @@ td.dir_description { @@ -478,7 +478,7 @@ td.dir_description {
478 } 478 }
479 479
480 .big_ok { 480 .big_ok {
481 - background: url("graphics/big-ok.png") no-repeat; 481 + background: url("../graphics/big-ok.png") no-repeat;
482 padding:4px; 482 padding:4px;
483 /*width:16px; 483 /*width:16px;
484 height:16px; 484 height:16px;
@@ -505,7 +505,7 @@ td.dir_description { @@ -505,7 +505,7 @@ td.dir_description {
505 } 505 }
506 506
507 #tooltips { 507 #tooltips {
508 - background: url("graphics/question.gif") no-repeat; 508 + background: url("../graphics/question.gif") no-repeat;
509 width:16px; 509 width:16px;
510 height:16px; 510 height:16px;
511 cursor:pointer; 511 cursor:pointer;
setup/wizard/resources/form.js renamed to setup/wizard/resources/js/form.js
setup/wizard/resources/jquery.blockUI.js renamed to setup/wizard/resources/js/jquery.blockUI.js
setup/wizard/resources/jquery.form.js renamed to setup/wizard/resources/js/jquery.form.js
setup/wizard/resources/js/jquery.hotkeys.js 0 → 100644
  1 +/*
  2 +(c) Copyrights 2007 - 2008
  3 +
  4 +Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
  5 +
  6 +jQuery Plugin by Tzury Bar Yochay
  7 +tzury.by@gmail.com
  8 +http://evalinux.wordpress.com
  9 +http://facebook.com/profile.php?id=513676303
  10 +
  11 +Project's sites:
  12 +http://code.google.com/p/js-hotkeys/
  13 +http://github.com/tzuryby/hotkeys/tree/master
  14 +
  15 +License: same as jQuery license.
  16 +
  17 +USAGE:
  18 + // simple usage
  19 + $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
  20 +
  21 + // special options such as disableInIput
  22 + $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
  23 +
  24 +Note:
  25 + This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
  26 +
  27 +*/
  28 +
  29 +
  30 +(function (jQuery){
  31 + // keep reference to the original $.fn.bind and $.fn.unbind
  32 + jQuery.fn.__bind__ = jQuery.fn.bind;
  33 + jQuery.fn.__unbind__ = jQuery.fn.unbind;
  34 + jQuery.fn.__find__ = jQuery.fn.find;
  35 +
  36 + var hotkeys = {
  37 + version: '0.7.8',
  38 + override: /keydown|keypress|keyup/g,
  39 + triggersMap: {},
  40 +
  41 + specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll',
  42 + 20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',
  43 + 35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down',
  44 + 112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8',
  45 + 120:'f9', 121:'f10', 122:'f11', 123:'f12' },
  46 +
  47 + shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&",
  48 + "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<",
  49 + ".":">", "/":"?", "\\":"|" },
  50 +
  51 + newTrigger: function (type, combi, callback) {
  52 + // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}}
  53 + var result = {};
  54 + result[type] = {};
  55 + result[type][combi] = {cb: callback, disableInInput: false};
  56 + return result;
  57 + }
  58 + };
  59 + // add firefox num pad char codes
  60 + if (jQuery.browser.mozilla){
  61 + hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99:
  62 + '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9' });
  63 + }
  64 +
  65 + // a wrapper around of $.fn.find
  66 + // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d
  67 + jQuery.fn.find = function( selector ) {
  68 + this.query=selector;
  69 + return jQuery.fn.__find__.apply(this, arguments);
  70 + };
  71 +
  72 + jQuery.fn.unbind = function (type, combi, fn){
  73 + if (jQuery.isFunction(combi)){
  74 + fn = combi;
  75 + combi = null;
  76 + }
  77 + if (combi && typeof combi === 'string'){
  78 + var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
  79 + var hkTypes = type.split(' ');
  80 + for (var x=0; x<hkTypes.length; x++){
  81 + delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
  82 + }
  83 + }
  84 + // call jQuery original unbind
  85 + return this.__unbind__(type, fn);
  86 + };
  87 +
  88 + jQuery.fn.bind = function(type, data, fn){
  89 + // grab keyup,keydown,keypress
  90 + var handle = type.match(hotkeys.override);
  91 +
  92 + if (jQuery.isFunction(data) || !handle){
  93 + // call jQuery.bind only
  94 + return this.__bind__(type, data, fn);
  95 + }
  96 + else{
  97 + // split the job
  98 + var result = null,
  99 + // pass the rest to the original $.fn.bind
  100 + pass2jq = jQuery.trim(type.replace(hotkeys.override, ''));
  101 +
  102 + // see if there are other types, pass them to the original $.fn.bind
  103 + if (pass2jq){
  104 + // call original jQuery.bind()
  105 + result = this.__bind__(pass2jq, data, fn);
  106 + }
  107 +
  108 + if (typeof data === "string"){
  109 + data = {'combi': data};
  110 + }
  111 + if(data.combi){
  112 + for (var x=0; x < handle.length; x++){
  113 + var eventType = handle[x];
  114 + var combi = data.combi.toLowerCase(),
  115 + trigger = hotkeys.newTrigger(eventType, combi, fn),
  116 + selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
  117 +
  118 + //trigger[eventType][combi].propagate = data.propagate;
  119 + trigger[eventType][combi].disableInInput = data.disableInInput;
  120 +
  121 + // first time selector is bounded
  122 + if (!hotkeys.triggersMap[selectorId]) {
  123 + hotkeys.triggersMap[selectorId] = trigger;
  124 + }
  125 + // first time selector is bounded with this type
  126 + else if (!hotkeys.triggersMap[selectorId][eventType]) {
  127 + hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
  128 + }
  129 + // make trigger point as array so more than one handler can be bound
  130 + var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
  131 + if (!mapPoint){
  132 + hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
  133 + }
  134 + else if (mapPoint.constructor !== Array){
  135 + hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
  136 + }
  137 + else {
  138 + hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
  139 + }
  140 +
  141 + // add attribute and call $.event.add per matched element
  142 + this.each(function(){
  143 + // jQuery wrapper for the current element
  144 + var jqElem = jQuery(this);
  145 +
  146 + // element already associated with another collection
  147 + if (jqElem.attr('hkId') && jqElem.attr('hkId') !== selectorId){
  148 + selectorId = jqElem.attr('hkId') + ";" + selectorId;
  149 + }
  150 + jqElem.attr('hkId', selectorId);
  151 + });
  152 + result = this.__bind__(handle.join(' '), data, hotkeys.handler)
  153 + }
  154 + }
  155 + return result;
  156 + }
  157 + };
  158 + // work-around for opera and safari where (sometimes) the target is the element which was last
  159 + // clicked with the mouse and not the document event it would make sense to get the document
  160 + hotkeys.findElement = function (elem){
  161 + if (!jQuery(elem).attr('hkId')){
  162 + if (jQuery.browser.opera || jQuery.browser.safari){
  163 + while (!jQuery(elem).attr('hkId') && elem.parentNode){
  164 + elem = elem.parentNode;
  165 + }
  166 + }
  167 + }
  168 + return elem;
  169 + };
  170 + // the event handler
  171 + hotkeys.handler = function(event) {
  172 + var target = hotkeys.findElement(event.currentTarget),
  173 + jTarget = jQuery(target),
  174 + ids = jTarget.attr('hkId');
  175 +
  176 + if(ids){
  177 + ids = ids.split(';');
  178 + var code = event.which,
  179 + type = event.type,
  180 + special = hotkeys.specialKeys[code],
  181 + // prevent f5 overlapping with 't' (or f4 with 's', etc.)
  182 + character = !special && String.fromCharCode(code).toLowerCase(),
  183 + shift = event.shiftKey,
  184 + ctrl = event.ctrlKey,
  185 + // patch for jquery 1.2.5 && 1.2.6 see more at:
  186 + // http://groups.google.com/group/jquery-en/browse_thread/thread/83e10b3bb1f1c32b
  187 + alt = event.altKey || event.originalEvent.altKey,
  188 + mapPoint = null;
  189 +
  190 + for (var x=0; x < ids.length; x++){
  191 + if (hotkeys.triggersMap[ids[x]][type]){
  192 + mapPoint = hotkeys.triggersMap[ids[x]][type];
  193 + break;
  194 + }
  195 + }
  196 +
  197 + //find by: id.type.combi.options
  198 + if (mapPoint){
  199 + var trigger;
  200 + // event type is associated with the hkId
  201 + if(!shift && !ctrl && !alt) { // No Modifiers
  202 + trigger = mapPoint[special] || (character && mapPoint[character]);
  203 + }
  204 + else{
  205 + // check combinations (alt|ctrl|shift+anything)
  206 + var modif = '';
  207 + if(alt) modif +='alt+';
  208 + if(ctrl) modif+= 'ctrl+';
  209 + if(shift) modif += 'shift+';
  210 +
  211 + // modifiers + special keys or modifiers + character or modifiers + shift character or just shift character
  212 + trigger = mapPoint[modif+special];
  213 + if (!trigger){
  214 + if (character){
  215 + trigger = mapPoint[modif+character]
  216 + || mapPoint[modif+hotkeys.shiftNums[character]]
  217 + // '$' can be triggered as 'Shift+4' or 'Shift+$' or just '$'
  218 + || (modif === 'shift+' && mapPoint[hotkeys.shiftNums[character]]);
  219 + }
  220 + }
  221 + }
  222 + if (trigger){
  223 + var result = false;
  224 + for (var x=0; x < trigger.length; x++){
  225 + if(trigger[x].disableInInput){
  226 + // double check event.currentTarget and event.target
  227 + var elem = jQuery(event.target);
  228 + if (jTarget.is("input") || jTarget.is("textarea")
  229 + || elem.is("input") || elem.is("textarea")) {
  230 + return true;
  231 + }
  232 + }
  233 + // call the registered callback function
  234 + result = result || trigger[x].cb.apply(this, [event]);
  235 + }
  236 + return result;
  237 + }
  238 + }
  239 + }
  240 + };
  241 + // place it under window so it can be extended and overridden by others
  242 + window.hotkeys = hotkeys;
  243 + return jQuery;
  244 +})(jQuery);
setup/wizard/resources/jquery.js renamed to setup/wizard/resources/js/jquery.js
setup/wizard/resources/wizard.js renamed to setup/wizard/resources/js/wizard.js
setup/wizard/steps/configuration.php
@@ -294,8 +294,7 @@ class configuration extends Step @@ -294,8 +294,7 @@ class configuration extends Step
294 * @param array $dbconf 294 * @param array $dbconf
295 * @return array 295 * @return array
296 */ 296 */
297 - public function registerDBConfig($server, $dbconf) {  
298 - // Adjust server variables 297 + public function registerDBConfig($server, $dbconf) { // Adjust server variables
299 $server['dbName'] = array('where'=>'file', 'name'=>ucwords($dbconf['dname']), 'section'=>'db', 'value'=>$dbconf['dname'], 'setting'=>'dbName'); 298 $server['dbName'] = array('where'=>'file', 'name'=>ucwords($dbconf['dname']), 'section'=>'db', 'value'=>$dbconf['dname'], 'setting'=>'dbName');
300 $server['dbUser'] = array('where'=>'file', 'name'=>ucwords($dbconf['duname']), 'section'=>'db', 'value'=>$dbconf['duname'], 'setting'=>'dbUser'); 299 $server['dbUser'] = array('where'=>'file', 'name'=>ucwords($dbconf['duname']), 'section'=>'db', 'value'=>$dbconf['duname'], 'setting'=>'dbUser');
301 $server['dbPass'] = array('where'=>'file', 'name'=>ucwords($dbconf['dpassword']), 'section'=>'db', 'value'=>$dbconf['dpassword'], 'setting'=>'dbPass'); 300 $server['dbPass'] = array('where'=>'file', 'name'=>ucwords($dbconf['dpassword']), 'section'=>'db', 'value'=>$dbconf['dpassword'], 'setting'=>'dbPass');
@@ -306,6 +305,17 @@ class configuration extends Step @@ -306,6 +305,17 @@ class configuration extends Step
306 return $server; 305 return $server;
307 } 306 }
308 307
  308 + private function registerDirs() { // Adjust directories variables
  309 + $this->readConfigPath();
  310 + $dirs = $this->getFromConfigPath();
  311 + $directories['varDirectory'] = array('section'=>'urls', 'value'=>mysql_real_escape_string($dirs['varDirectory']['path']), 'setting'=>'varDirectory');
  312 + $directories['logDirectory'] = array('section'=>'urls', 'value'=>mysql_real_escape_string($dirs['logDirectory']['path']), 'setting'=>'logDirectory');
  313 + $directories['documentRoot'] = array('section'=>'urls', 'value'=>mysql_real_escape_string($dirs['documentRoot']['path']), 'setting'=>'documentRoot');
  314 + $directories['uiDirectory'] = array('section'=>'urls', 'value'=>'${fileSystemRoot}/presentation/lookAndFeel/knowledgeTree', 'setting'=>'uiDirectory');
  315 + $directories['tmpDirectory'] = array('section'=>'urls', 'value'=>mysql_real_escape_string($dirs['tmpDirectory']['path']), 'setting'=>'tmpDirectory');
  316 +
  317 + return $directories;
  318 + }
309 /** 319 /**
310 * Perform the installation associated with the step. 320 * Perform the installation associated with the step.
311 * Variables required by the installation are stored within the session. 321 * Variables required by the installation are stored within the session.
@@ -315,13 +325,10 @@ class configuration extends Step @@ -315,13 +325,10 @@ class configuration extends Step
315 */ 325 */
316 public function installStep() 326 public function installStep()
317 { 327 {
318 - // get data from the server  
319 - $conf = $this->getDataFromSession("configuration"); 328 + $conf = $this->getDataFromSession("configuration"); // get data from the server
320 $server = $conf['server']; 329 $server = $conf['server'];
321 $paths = $conf['paths']; 330 $paths = $conf['paths'];
322 -  
323 - // initialise writing to config.ini  
324 - $this->readConfigPath(); 331 + $this->readConfigPath(); // initialise writing to config.ini
325 $dirs = $this->getFromConfigPath(); 332 $dirs = $this->getFromConfigPath();
326 if(isset($this->confpaths['configIni'])) { // Check if theres a config path 333 if(isset($this->confpaths['configIni'])) { // Check if theres a config path
327 $configPath = realpath("../../{$this->confpaths['configIni']}"); // Relative to Config Path File 334 $configPath = realpath("../../{$this->confpaths['configIni']}"); // Relative to Config Path File
@@ -335,26 +342,50 @@ class configuration extends Step @@ -335,26 +342,50 @@ class configuration extends Step
335 if(file_exists($configPath)) { 342 if(file_exists($configPath)) {
336 $ini = new Ini($configPath); 343 $ini = new Ini($configPath);
337 } 344 }
  345 + $this->writeUrlSection($ini);
  346 + $this->writeDBSection($ini, $server);
  347 + $this->writeDBPathSection($ini, $paths);
  348 + if(!$ini === false){ // write out the config.ini file
  349 + $ini->write();
  350 + }
  351 + $this->_dbhandler->close(); // close the database connection
  352 + $this->writeConfigPath(); // Write config file
  353 + }
338 354
339 - // initialise the db connection  
340 -  
341 - // retrieve database information from session  
342 - $dbconf = $this->getDataFromSession("database");  
343 -  
344 - // make db connection  
345 - $this->_dbhandler->load($dbconf['dhost'], $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']);  
346 -  
347 - // add db config to server variables  
348 - $server = $this->registerDBConfig($server, $dbconf);  
349 - 355 + private function writeUrlSection($ini) {
  356 + $directories = $this->registerDirs();
  357 + foreach($directories as $item) { // write server settings to config_settings table and config.ini
  358 + if(!$ini === false) {
  359 + $ini->updateItem($item['section'], $item['setting'], $item['value']);
  360 + }
  361 + }
  362 + }
  363 +
  364 + private function writeDBPathSection($ini, $paths) {
  365 + $table = 'config_settings';
  366 + if(is_array($paths)) { // write the paths to the config_settings table
  367 + foreach ($paths as $item){
  368 + if(empty($item['setting'])){
  369 + continue;
  370 + }
  371 + $value = mysql_real_escape_string($item['path']);
  372 + $setting = mysql_real_escape_string($item['setting']);
  373 + $sql = "UPDATE {$table} SET value = '{$value}' WHERE item = '{$setting}'";
  374 + $this->_dbhandler->query($sql);
  375 + }
  376 + }
  377 + }
  378 +
  379 + private function writeDBSection($ini, $server) {
  380 + $dbconf = $this->getDataFromSession("database"); // retrieve database information from session
  381 + $this->_dbhandler->load($dbconf['dhost'], $dbconf['duname'], $dbconf['dpassword'], $dbconf['dname']); // initialise the db connection
  382 + $server = $this->registerDBConfig($server, $dbconf); // add db config to server variables
350 $table = 'config_settings'; 383 $table = 'config_settings';
351 - // write server settings to config_settings table and config.ini  
352 - foreach($server as $item){  
353 -  
354 - switch($item['where']){ 384 + foreach($server as $item) { // write server settings to config_settings table and config.ini
  385 + switch($item['where']) {
355 case 'file': 386 case 'file':
356 $value = $item['value']; 387 $value = $item['value'];
357 - if($value == 'yes'){ 388 + if($value == 'yes') {
358 $value = 'true'; 389 $value = 'true';
359 } 390 }
360 if($value == 'no'){ 391 if($value == 'no'){
@@ -364,7 +395,6 @@ class configuration extends Step @@ -364,7 +395,6 @@ class configuration extends Step
364 $ini->updateItem($item['section'], $item['setting'], $value); 395 $ini->updateItem($item['section'], $item['setting'], $value);
365 } 396 }
366 break; 397 break;
367 -  
368 case 'db': 398 case 'db':
369 $value = mysql_real_escape_string($item['value']); 399 $value = mysql_real_escape_string($item['value']);
370 $setting = mysql_real_escape_string($item['setting']); 400 $setting = mysql_real_escape_string($item['setting']);
@@ -374,34 +404,8 @@ class configuration extends Step @@ -374,34 +404,8 @@ class configuration extends Step
374 break; 404 break;
375 } 405 }
376 } 406 }
377 -  
378 - // write the paths to the config_settings table  
379 - if(is_array($paths)) {  
380 - foreach ($paths as $item){  
381 - if(empty($item['setting'])){  
382 - continue;  
383 - }  
384 -  
385 - $value = mysql_real_escape_string($item['path']);  
386 - $setting = mysql_real_escape_string($item['setting']);  
387 -  
388 - $sql = "UPDATE {$table} SET value = '{$value}' WHERE item = '{$setting}'";  
389 - $this->_dbhandler->query($sql);  
390 - }  
391 - }  
392 -  
393 - // write out the config.ini file  
394 - if(!$ini === false){  
395 - $ini->write();  
396 - }  
397 -  
398 - // close the database connection  
399 - $this->_dbhandler->close();  
400 -  
401 - // Write config file  
402 - $this->writeConfigPath();  
403 } 407 }
404 - 408 +
405 /** 409 /**
406 * Get the server settings information 410 * Get the server settings information
407 * 411 *
@@ -473,7 +477,10 @@ class configuration extends Step @@ -473,7 +477,10 @@ class configuration extends Step
473 if(WINDOWS_OS) 477 if(WINDOWS_OS)
474 $path = preg_replace('/\//', '\\',$path); 478 $path = preg_replace('/\//', '\\',$path);
475 $dirs[$key]['path'] = $path; 479 $dirs[$key]['path'] = $path;
476 - $class = $this->util->checkPermission($path, $dir['create']); 480 + if(isset($dir['file']))
  481 + $class = $this->util->checkPermission($path, $dir['create'], true);
  482 + else
  483 + $class = $this->util->checkPermission($path, $dir['create']);
477 if($class['class'] != 'tick') { 484 if($class['class'] != 'tick') {
478 $this->temp_variables['paths_perms'] = $class['class']; 485 $this->temp_variables['paths_perms'] = $class['class'];
479 $this->done = false; 486 $this->done = false;
@@ -525,7 +532,7 @@ class configuration extends Step @@ -525,7 +532,7 @@ class configuration extends Step
525 array('name' => 'Log Directory', 'setting' => 'logDirectory', 'path' => $_POST['logDirectory'], 'create' => true), 532 array('name' => 'Log Directory', 'setting' => 'logDirectory', 'path' => $_POST['logDirectory'], 'create' => true),
526 array('name' => 'Temporary Directory', 'setting' => 'tmpDirectory', 'path' => $_POST['tmpDirectory'], 'create' => true), 533 array('name' => 'Temporary Directory', 'setting' => 'tmpDirectory', 'path' => $_POST['tmpDirectory'], 'create' => true),
527 array('name' => 'Uploads Directory', 'setting' => 'uploadDirectory', 'path' => $_POST['uploadDirectory'], 'create' => true), 534 array('name' => 'Uploads Directory', 'setting' => 'uploadDirectory', 'path' => $_POST['uploadDirectory'], 'create' => true),
528 - array('name' => 'Configuration File', 'setting' => 'configFile', 'path' => $_POST['configFile'], 'create' => false), 535 + array('name' => 'Configuration File', 'setting' => 'configFile', 'path' => $_POST['configFile'], 'create' => false, 'file'=>true),
529 ); 536 );
530 } 537 }
531 538
@@ -540,17 +547,11 @@ class configuration extends Step @@ -540,17 +547,11 @@ class configuration extends Step
540 private function getFromConfigPath() { 547 private function getFromConfigPath() {
541 $configs = array(); 548 $configs = array();
542 if(isset($this->confpaths['configIni'])) { // Simple check to see if any paths were written 549 if(isset($this->confpaths['configIni'])) { // Simple check to see if any paths were written
543 - $configPath = realpath("../../{$this->confpaths['configIni']}"); // Relative to Config Path File  
544 - if($configPath == '') { // Absolute path probably entered  
545 - $configPath = realpath("{$this->confpaths['configIni']}"); // Get absolute path  
546 - if($configPath == '') {  
547 - $configPath = realpath('../../config/config.ini');  
548 - }  
549 - } 550 + $configPath = $this->confpaths['configIni']; // Get absolute path
550 } else { 551 } else {
551 $configPath = '${fileSystemRoot}/config/config.ini'; 552 $configPath = '${fileSystemRoot}/config/config.ini';
552 } 553 }
553 - $configs['configFile'] = array('name' => 'Configuration File', 'setting' => 'configFile', 'path' => $configPath, 'create' => false); 554 + $configs['configFile'] = array('name' => 'Configuration File', 'setting' => 'configFile', 'path' => $configPath, 'create' => false, 'file'=>true);
554 if(isset($this->confpaths['Documents'])) { 555 if(isset($this->confpaths['Documents'])) {
555 $docsPath = $this->confpaths['Documents']; 556 $docsPath = $this->confpaths['Documents'];
556 } else { 557 } else {
@@ -610,7 +611,7 @@ class configuration extends Step @@ -610,7 +611,7 @@ class configuration extends Step
610 if(!$configPath) return false; 611 if(!$configPath) return false;
611 $ini = new Ini($configPath); 612 $ini = new Ini($configPath);
612 $data = $ini->getFileByLine(); 613 $data = $ini->getFileByLine();
613 - $firstline = true; 614 + $firstline = true;
614 foreach ($data as $k=>$v) { 615 foreach ($data as $k=>$v) {
615 if($firstline) { // First line holds the var directory 616 if($firstline) { // First line holds the var directory
616 $firstline = false; 617 $firstline = false;
setup/wizard/template.php
@@ -81,7 +81,7 @@ class Template @@ -81,7 +81,7 @@ class Template
81 if($isA) { 81 if($isA) {
82 $value = $value->fetch(); 82 $value = $value->fetch();
83 } 83 }
84 - $this->template_vars[$name] = $value; 84 + $this->template_vars[$name] = $value;
85 } 85 }
86 86
87 87
@@ -99,7 +99,9 @@ class Template @@ -99,7 +99,9 @@ class Template
99 if (!file_exists($file)) { 99 if (!file_exists($file)) {
100 trigger_error('Template file '.$file.' does not exist ', E_USER_ERROR); 100 trigger_error('Template file '.$file.' does not exist ', E_USER_ERROR);
101 } 101 }
  102 + $this->template_vars['html'] = new htmlHelper();
102 extract($this->template_vars); // Extract the vars to local namespace 103 extract($this->template_vars); // Extract the vars to local namespace
  104 +
103 ob_start(); 105 ob_start();
104 include($file); 106 include($file);
105 $contents = ob_get_contents(); 107 $contents = ob_get_contents();
setup/wizard/templates/complete.tpl
@@ -126,4 +126,4 @@ @@ -126,4 +126,4 @@
126 } 126 }
127 ?> 127 ?>
128 </form> 128 </form>
129 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
130 \ No newline at end of file 129 \ No newline at end of file
  130 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
131 \ No newline at end of file 131 \ No newline at end of file
setup/wizard/templates/configuration.tpl
@@ -118,4 +118,4 @@ @@ -118,4 +118,4 @@
118 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 118 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
119 <input type="submit" name="Next" value="Next" class="button_next"/> 119 <input type="submit" name="Next" value="Next" class="button_next"/>
120 </form> 120 </form>
121 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> 121 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
setup/wizard/templates/configuration_confirm.tpl
@@ -94,4 +94,4 @@ @@ -94,4 +94,4 @@
94 <input type="submit" name="Edit" value="Edit" class="button_previous"/> 94 <input type="submit" name="Edit" value="Edit" class="button_previous"/>
95 <input type="submit" name="Confirm" value="Confirm" class="button_next"/> 95 <input type="submit" name="Confirm" value="Confirm" class="button_next"/>
96 </form> 96 </form>
97 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> 97 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
setup/wizard/templates/database.tpl
@@ -142,7 +142,7 @@ An second user is required for normal database interaction, the reading and writ @@ -142,7 +142,7 @@ An second user is required for normal database interaction, the reading and writ
142 <input type="submit" name="Next" value="next" class="button_next"/> 142 <input type="submit" name="Next" value="next" class="button_next"/>
143 </div> 143 </div>
144 </form> 144 </form>
145 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> 145 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
146 <script type="text/javascript"> 146 <script type="text/javascript">
147 $('#dname').focus(); 147 $('#dname').focus();
148 </script> 148 </script>
149 \ No newline at end of file 149 \ No newline at end of file
setup/wizard/templates/database_confirm.tpl
@@ -101,4 +101,4 @@ @@ -101,4 +101,4 @@
101 <input type="submit" name="Edit" value="Edit" class="button_previous"/> 101 <input type="submit" name="Edit" value="Edit" class="button_previous"/>
102 <input type="submit" name="Confirm" value="Confirm" class="button_next"/> 102 <input type="submit" name="Confirm" value="Confirm" class="button_next"/>
103 </form> 103 </form>
104 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
105 \ No newline at end of file 104 \ No newline at end of file
  105 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
106 \ No newline at end of file 106 \ No newline at end of file
setup/wizard/templates/dependencies.tpl
@@ -151,4 +151,4 @@ @@ -151,4 +151,4 @@
151 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 151 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
152 <input type="submit" name="Next" value="Next" class="button_next"/> 152 <input type="submit" name="Next" value="Next" class="button_next"/>
153 </form> 153 </form>
154 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
155 \ No newline at end of file 154 \ No newline at end of file
  155 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
156 \ No newline at end of file 156 \ No newline at end of file
setup/wizard/templates/error.tpl
@@ -2,9 +2,9 @@ @@ -2,9 +2,9 @@
2 <html> 2 <html>
3 <head> 3 <head>
4 <title>KnowledgeTree Installer</title> 4 <title>KnowledgeTree Installer</title>
5 - <script type="text/javascript" src="resources/jquery-tooltip/lib/jquery.js"></script>  
6 - <script type="text/javascript" src="resources/wizard.js" ></script>  
7 - <link rel="stylesheet" type="text/css" href="resources/wizard.css" /> 5 + <script type="text/javascript" src="resources/js/jquery-tooltip/lib/jquery.js"></script>
  6 + <script type="text/javascript" src="resources/js/wizard.js" ></script>
  7 + <link rel="stylesheet" type="text/css" href="resources/css/wizard.css" />
8 8
9 </head> 9 </head>
10 10
setup/wizard/templates/install.tpl
@@ -7,9 +7,9 @@ @@ -7,9 +7,9 @@
7 <p class="empty_space"> 7 <p class="empty_space">
8 The wizard will now complete the installation and run a final check on the system. 8 The wizard will now complete the installation and run a final check on the system.
9 </p> 9 </p>
10 - <div class="demo"><img src="resources/graphics/kt_browse.png" /></div> 10 + <div class="demo"><?php echo $html->image('dame/kt_browse.png'); ?></div>
11 </div> 11 </div>
12 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 12 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
13 <input type="submit" name="Install" value="Install" class="button_next"/> 13 <input type="submit" name="Install" value="Install" class="button_next"/>
14 </form> 14 </form>
15 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
16 \ No newline at end of file 15 \ No newline at end of file
  16 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
17 \ No newline at end of file 17 \ No newline at end of file
setup/wizard/templates/license.tpl
@@ -334,7 +334,7 @@ govern. @@ -334,7 +334,7 @@ govern.
334 </div> 334 </div>
335 <input id="accept" type="hidden" name="license" value=""/> 335 <input id="accept" type="hidden" name="license" value=""/>
336 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 336 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
  337 + <input type="submit" name="Next" value="I Agree" onclick="javascript:{document.getElementById('accept').value = 1;}" class="button_next"/>
337 <input type="submit" name="Next" value="I Disagree" onclick="javascript:{document.getElementById('accept').value = 0;}" class="button_next"/> 338 <input type="submit" name="Next" value="I Disagree" onclick="javascript:{document.getElementById('accept').value = 0;}" class="button_next"/>
338 - <input type="submit" name="Next" value="I Agree" onclick="javascript:{document.getElementById('accept').value = 1;}" class="button_next"/>  
339 </form> 339 </form>
340 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
341 \ No newline at end of file 340 \ No newline at end of file
  341 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
342 \ No newline at end of file 342 \ No newline at end of file
setup/wizard/templates/registration.tpl
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 <td rowspan='6' width='5%'>&nbsp;</td> 29 <td rowspan='6' width='5%'>&nbsp;</td>
30 <td><input value="<?php echo $first_name; ?>" name='submitted[first_name]' id='first' size='<?php echo $input_width; ?>' style="float:left;"/></td> 30 <td><input value="<?php echo $first_name; ?>" name='submitted[first_name]' id='first' size='<?php echo $input_width; ?>' style="float:left;"/></td>
31 <td rowspan='6' width='5%'>&nbsp;</td> 31 <td rowspan='6' width='5%'>&nbsp;</td>
32 - <td rowspan='6'> <img src='resources/graphics/dropbox.png' /> </td> 32 + <td rowspan='6'> <?php echo $html->image('dropbox.png'); ?> </td>
33 </tr> 33 </tr>
34 34
35 <tr> 35 <tr>
@@ -107,7 +107,7 @@ @@ -107,7 +107,7 @@
107 <input type="submit" name="Previous" value="Previous" onclick="w.pClick()" class="button_previous"/> 107 <input type="submit" name="Previous" value="Previous" onclick="w.pClick()" class="button_previous"/>
108 <input type="submit" name="Next" value="Register" onclick="w.nClick()" class="button_next"/> 108 <input type="submit" name="Next" value="Register" onclick="w.nClick()" class="button_next"/>
109 </form> 109 </form>
110 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?> 110 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
111 <script type="text/javascript"> 111 <script type="text/javascript">
112 $('#first').focus(); 112 $('#first').focus();
113 </script> 113 </script>
114 \ No newline at end of file 114 \ No newline at end of file
setup/wizard/templates/registration_confirm.tpl
@@ -6,9 +6,9 @@ @@ -6,9 +6,9 @@
6 <p class="empty_space"> 6 <p class="empty_space">
7 Thank you for signing up. You'll receive an email from us shortly with download instructions for the KnowledgeTree Drop Box software. 7 Thank you for signing up. You'll receive an email from us shortly with download instructions for the KnowledgeTree Drop Box software.
8 </p> 8 </p>
9 - <div class="demo"><img src="resources/graphics/kt_browse.png" /></div> 9 + <div class="demo"><?php echo $html->image('kt_browse.png'); ?></div>
10 </div> 10 </div>
11 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 11 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
12 <input type="submit" name="Confirm" value="Next" class="button_next"/> 12 <input type="submit" name="Confirm" value="Next" class="button_next"/>
13 </form> 13 </form>
14 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
15 \ No newline at end of file 14 \ No newline at end of file
  15 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
16 \ No newline at end of file 16 \ No newline at end of file
setup/wizard/templates/services.tpl
@@ -196,4 +196,4 @@ @@ -196,4 +196,4 @@
196 <input type="submit" name="Previous" value="Previous" class="button_previous"/> 196 <input type="submit" name="Previous" value="Previous" class="button_previous"/>
197 <input type="submit" name="Next" value="Next" class="button_next"/> 197 <input type="submit" name="Next" value="Next" class="button_next"/>
198 </form> 198 </form>
199 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
200 \ No newline at end of file 199 \ No newline at end of file
  200 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
201 \ No newline at end of file 201 \ No newline at end of file
setup/wizard/templates/welcome.tpl
@@ -4,9 +4,9 @@ @@ -4,9 +4,9 @@
4 <br/> 4 <br/>
5 <br/> 5 <br/>
6 <p class="empty_space"> This wizard will lead you through the steps needed to install and configure KnowledgeTree on your server. </p> 6 <p class="empty_space"> This wizard will lead you through the steps needed to install and configure KnowledgeTree on your server. </p>
7 - <div class="demo"><img src="resources/graphics/kt_browse.png" /></div> 7 + <div class="demo"><?php echo $html->image('kt_browse.png'); ?> </div>
8 </div> 8 </div>
9 <input type="submit" name="Next" value="Next" class="button_next"/> 9 <input type="submit" name="Next" value="Next" class="button_next"/>
10 <!-- <input type="submit" name="Migrate" value="Migrate" class="button_next"/>--> 10 <!-- <input type="submit" name="Migrate" value="Migrate" class="button_next"/>-->
11 </form> 11 </form>
12 -<?php if (AJAX) { ?> <script type="text/javascript" src="resources/form.js"></script> <?php } ?>  
13 \ No newline at end of file 12 \ No newline at end of file
  13 +<?php if (AJAX) { echo $html->js('form.js'); } ?>
14 \ No newline at end of file 14 \ No newline at end of file
setup/wizard/templates/wizard.tpl
@@ -2,16 +2,17 @@ @@ -2,16 +2,17 @@
2 <html> 2 <html>
3 <head> 3 <head>
4 <title>KnowledgeTree Installer</title> 4 <title>KnowledgeTree Installer</title>
5 - <script type="text/javascript" src="resources/jquery.js"></script>  
6 - <script type="text/javascript" src="resources/jquery.form.js"></script>  
7 - <script type="text/javascript" src="resources/jquery.blockUI.js"></script>  
8 - <script type="text/javascript" src="resources/wizard.js" ></script>  
9 - <link rel="stylesheet" type="text/css" href="resources/wizard.css" /> 5 + <?php echo $html->js('jquery.js'); ?>
  6 + <?php echo $html->js('jquery.form.js'); ?>
  7 + <?php echo $html->js('jquery.blockUI.js'); ?>
  8 + <?php echo $html->js('jquery.hotkeys.js'); ?>
  9 + <?php echo $html->js('wizard.js'); ?>
  10 + <?php echo $html->css('wizard.css'); ?>
10 </head> 11 </head>
11 <body onload=""> 12 <body onload="">
12 <div id="outer-wrapper"> 13 <div id="outer-wrapper">
13 <div id="header"> 14 <div id="header">
14 - <div id="logo"><img src="resources/graphics/dame/installer-header_logo.png"/></div> 15 + <div id="logo"><?php echo $html->image('dame/installer-header_logo.png'); ?> </div>
15 <div id="install_details"> 16 <div id="install_details">
16 <span style="font-size:120%;"> <?php echo $vars['install_version']; ?> </span> 17 <span style="font-size:120%;"> <?php echo $vars['install_version']; ?> </span>
17 <span style="font-size:120%;"><?php echo $vars['install_type']; ?></span> 18 <span style="font-size:120%;"><?php echo $vars['install_type']; ?></span>
@@ -27,13 +28,13 @@ @@ -27,13 +28,13 @@
27 <?php echo $content; ?> 28 <?php echo $content; ?>
28 </div> 29 </div>
29 </div> 30 </div>
30 - <div id="loading" style="display:none;"> <img src="resources/graphics/loading.gif" height="32px" width="32px"> </div> 31 + <div id="loading" style="display:none;"> <?php echo $html->image('loading.gif', array("height"=>"32px", "width"=>"32px")); ?> </div>
31 </div> 32 </div>
32 <div class="clearing">&nbsp;</div> 33 <div class="clearing">&nbsp;</div>
33 </div> 34 </div>
34 35
35 <div id="footer"> 36 <div id="footer">
36 - <img width="105" height="23" align="right" src="resources/graphics/dame/powered-by-kt.png" style="padding: 5px;"/> 37 + <?php echo $html->image('dame/powered-by-kt.png', array("height"=>"23px", "width"=>"105px", "style"=>"padding: 5px;")); ?>
37 </div> 38 </div>
38 </div> 39 </div>
39 </body> 40 </body>