. * * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * * @copyright 2008-2009, KnowledgeTree Inc. * @license GNU General Public License version 3 * @author KnowledgeTree Team * @package Installer * @version Version 0.1 */ require_once(WIZARD_DIR.'step.php'); class configuration extends Step { private $host; private $port; private $root_url; private $file_system_root; private $ssl_enabled; private $done; public $temp_variables = array("step_name"=>"configuration"); /** * Flag to store class information in session * * @author KnowledgeTree Team * @access public * @var array */ protected $storeInSession = true; public function __construct() { $this->done = true; } private function setDetails() { $conf = $this->getDataFromSession("configuration"); if($conf) { $this->temp_variables['server'] = $conf['server']; $this->temp_variables['paths'] = $conf['paths']; } } public function doStep() { if($this->next()) { if($this->doRun()){ return 'confirm'; } return 'error'; /* if($this->doRun()) return 'next'; else return 'error'; */ } else if($this->previous()) { $this->setDetails(); return 'previous'; } else if($this->confirm()) { return 'next'; } else if($this->edit()) { $this->setDetails(); return 'landing'; } $this->doRun(); return 'landing'; } public function doRun() { $server = $this->getServerInfo(); $this->temp_variables['server'] = $server; $paths = $this->getPathInfo($server['file_system_root']); $this->temp_variables['paths'] = $paths; // Running user // Logging return $this->done; } private function getServerInfo() { $script = $_SERVER['SCRIPT_NAME']; $file_system_root = $_SERVER['DOCUMENT_ROOT']; $host = $_SERVER['SERVER_NAME']; $port = $_SERVER['SERVER_PORT']; $ssl_enabled = isset($_SERVER['HTTPS']) ? (strtolower($_SERVER['HTTPS']) === 'on' ? 'yes' : 'no') : true; $pos = strpos($script, '/wizard/'); $root_url = substr($script, 0, $pos); $server = array(); $server['root_url'] = (isset($_POST['root_url'])) ? $_POST['root_url'] : $root_url; $server['file_system_root'] = (isset($_POST['file_system_root'])) ? $_POST['file_system_root'] : $file_system_root.$root_url; $server['host'] = (isset($_POST['host'])) ? $_POST['host'] : $host; $server['port'] = (isset($_POST['port'])) ? $_POST['port'] : $port; $server['ssl_enabled'] = (isset($_POST['ssl_enabled'])) ? $_POST['ssl_enabled'] : $ssl_enabled; if(empty($server['host'])) $this->error[] = 'Please enter the server\'s host name'; if(empty($server['port'])) $this->error[] = 'Please enter the server\'s port'; if(empty($server['file_system_root'])) $this->error[] = 'Please enter the file system root'; return $server; } private function getPathInfo($fileSystemRoot) { $dirs = $this->getDirectories(); $varDirectory = $fileSystemRoot . DIRECTORY_SEPARATOR . 'var'; foreach ($dirs as $key => $dir){ $path = (isset($_POST[$dir['setting']])) ? $_POST[$dir['setting']] : $dir['path']; while(preg_match('/\$\{([^}]+)\}/', $path, $matches)){ $path = str_replace($matches[0], $$matches[1], $path); } $dirs[$key]['path'] = $path; $class = $this->checkPermission($path, $dir['create']); $dirs[$key] = array_merge($dirs[$key], $class); } return $dirs; } private function checkPermission($dir, $create=false) { $exist = 'Directory does not exist'; $write = 'Directory is not writable'; $ret = array('class' => 'cross'); if(!file_exists($dir)){ if($create === false){ $this->done = false; $ret['msg'] = $exist; return $ret; } $par_dir = dirname($dir); if(!file_exists($par_dir)){ $this->done = false; $ret['msg'] = $exist; return $ret; } if(!is_writable($par_dir)){ $this->done = false; $ret['msg'] = $exist; return $ret; } @mkdir($dir, '0755'); } if(is_writable($dir)){ $ret['class'] = 'tick'; return $ret; } $this->done = false; $ret['msg'] = $write; return $ret; } private function getDirectories() { return array( array('name' => 'Var Directory', 'setting' => 'varDirectory', 'path' => '${fileSystemRoot}/var', 'create' => false), array('name' => 'Document Directory', 'setting' => 'documentRoot', 'path' => '${varDirectory}/Documents', 'create' => true), array('name' => 'Log Directory', 'setting' => 'logDirectory', 'path' => '${varDirectory}/log', 'create' => true), array('name' => 'Temporary Directory', 'setting' => 'tmpDirectory', 'path' => '${varDirectory}/tmp', 'create' => true), array('name' => 'Uploads Directory', 'setting' => 'uploadDirectory', 'path' => '${varDirectory}/uploads', 'create' => true), ); } } ?>