[svn r12727] necessary classes for upgrade code

skala
Evie Embrechts 18 years ago
parent 46010be1d4
commit 7b4fba309a
  1. 373
      main/install/upgrade.php

@ -1,4 +1,4 @@
<?php // $Id: template.php,v 1.2 2006/03/15 14:34:45 pcool Exp $
<?php // $Id:$
/*
==============================================================================
Dokeos - elearning and course management software
@ -37,6 +37,9 @@
* Future improvements
* - ask user if she agrees to detected version (chance to cancel)
* - ability to do in-place upgrade
* - ability to let old databases remain and clone thelm for new install so
* Dokeos admins can have old and new version running side by side
*
* @package dokeos.install
==============================================================================
@ -70,7 +73,8 @@ define('DATABASE_FORM_FIELD_DISPLAY_LENGTH', 25);
define('MAX_FORM_FIELD_LENGTH', 50);
define('DEFAULT_LANGUAGE', 'english');
error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
//error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
error_reporting(E_ALL);
@set_time_limit(0);
@ -90,9 +94,136 @@ $update_from_20_version = array('community release 2.0','community release 2.0.1
==============================================================================
*/
/**
* Page in the install wizard to select the language which will be used during
* the installation process.
*/
class Page_Language extends HTML_QuickForm_Page
{
function get_title()
{
return get_lang('WelcomeToDokeosInstaller');
}
function get_info()
{
return 'Please select the language you\'d like to use while installing:';
}
function buildForm()
{
$this->_formBuilt = true;
$this->addElement('select', 'install_language', get_lang('InstallationLanguage'), get_language_folder_list());
$buttons[0] = & HTML_QuickForm :: createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$this->addGroup($buttons, 'buttons', '', '&nbsp', false);
$this->setDefaultAction('next');
}
}
/**
* Class for requirements page
* This checks and informs about some requirements for installing Dokeos:
* - necessary and optional extensions
* - folders which have to be writable
*/
class Page_Requirements extends HTML_QuickForm_Page
{
/**
* this function checks if a php extension exists or not
*
* @param string $extentionName name of the php extension to be checked
* @param boolean $echoWhenOk true => show ok when the extension exists
* @author Christophe Gesche
*/
function check_extension($extentionName)
{
if (extension_loaded($extentionName))
{
return '<li>'.$extentionName.' - ok</li>';
}
else
{
return '<li><b>'.$extentionName.'</b> <font color="red">is missing (Dokeos can work without)</font> (<a href="http://www.php.net/'.$extentionName.'" target="_blank">'.$extentionName.'</a>)</li>';
}
}
function get_not_writable_folders()
{
$writable_folders = array ('../inc/conf', '../garbage', '../upload', '../../archive', '../../courses', '../../home');
$not_writable = array ();
foreach ($writable_folders as $index => $folder)
{
if (!is_writable($folder) && !@ chmod($folder, 0777))
{
$not_writable[] = $folder;
}
}
return $not_writable;
}
function get_title()
{
return get_lang("Requirements");
}
function get_info()
{
$not_writable = $this->get_not_writable_folders();
if (count($not_writable) > 0)
{
$info[] = '<div style="margin:20px;padding:10px;width: 50%;color:#FF6600;border:2px solid #FF6600;">';
$info[] = 'Some files or folders don\'t have writing permission. To be able to install Dokeos you should first change their permissions (using CHMOD). Please read the <a href="../../installation_guide.html" target="blank">installation guide</a>.';
$info[] = '<ul>';
foreach ($not_writable as $index => $folder)
{
$info[] = '<li>'.$folder.'</li>';
}
$info[] = '</ul>';
$info[] = '</div>';
$this->disableNext = true;
}
elseif (file_exists('../inc/conf/claro_main.conf.php'))
{
$info[] = '<div style="margin:20px;padding:10px;width: 50%;color:#FF6600;border:2px solid #FF6600;text-align:center;">';
$info[] = get_lang("WarningExistingDokeosInstallationDetected");
$info[] = '</div>';
}
$info[] = '<b>'.get_lang("ReadThoroughly").'</b>';
$info[] = '<br />';
$info[] = get_lang("DokeosNeedFollowingOnServer");
$info[] = "<ul>";
$info[] = "<li>Webserver with PHP 5.x";
$info[] = '<ul>';
$info[] = $this->check_extension('standard');
$info[] = $this->check_extension('session');
$info[] = $this->check_extension('mysql');
$info[] = $this->check_extension('zlib');
$info[] = $this->check_extension('pcre');
$info[] = '</ul></li>';
$info[] = "<li>MySQL + login/password allowing to access and create at least one database</li>";
$info[] = "<li>Write access to web directory where Dokeos files have been put</li>";
$info[] = "</ul>";
$info[] = get_lang('MoreDetails').", <a href=\"../../installation_guide.html\" target=\"blank\">read the installation guide</a>.";
return implode("\n",$info);
}
function buildForm()
{
global $updateFromVersion;
$this->_formBuilt = true;
$this->addElement('radio', 'installation_type', get_lang('InstallType'), get_lang('NewInstall'), 'new');
$update_group[0] = & HTML_QuickForm :: createElement('radio', 'installation_type', null, 'Update from Dokeos '.implode('|', $updateFromVersion).'', 'update');
//$this->addGroup($update_group, 'update_group', '', '&nbsp', false);
$prevnext[] = & $this->createElement('submit', $this->getButtonName('back'), '<< '.get_lang('Previous'));
$prevnext[] = & $this->createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$not_writable = $this->get_not_writable_folders();
if (count($not_writable) > 0)
{
$el = $prevnext[1];
$el->updateAttributes('disabled="disabled"');
}
$this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
$this->setDefaultAction('next');
}
}
/**
* Class for location of old Dokeos installation
* Page in the install wizard to select the location of the old Dokeos installation.
*/
class Page_LocationOldVersion extends HTML_QuickForm_Page
{
@ -118,6 +249,199 @@ class Page_LocationOldVersion extends HTML_QuickForm_Page
}
}
/**
* Class for license page
* Displays the GNU GPL license that has to be accepted to install Dokeos.
*/
class Page_License extends HTML_QuickForm_Page
{
function get_title()
{
return get_lang('Licence');
}
function get_info()
{
return get_lang('DokeosLicenseInfo');
}
function buildForm()
{
$this->_formBuilt = true;
$this->addElement('textarea', 'license', get_lang('Licence'), array ('cols' => 80, 'rows' => 20, 'disabled' => 'disabled', 'style'=>'background-color: white;'));
$this->addElement('checkbox','license_accept','',get_lang('IAccept'));
$this->addRule('license_accept',get_lang('ThisFieldIsRequired'),'required');
$prevnext[] = & $this->createElement('submit', $this->getButtonName('back'), '<< '.get_lang('Previous'));
$prevnext[] = & $this->createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
$this->setDefaultAction('next');
}
}
/**
* Class for database settings page
* Displays a form where the user can enter the installation settings
* regarding the databases - login and password, names, prefixes, single
* or multiple databases, tracking or not...
*/
class Page_DatabaseSettings extends HTML_QuickForm_Page
{
function get_title()
{
return get_lang('DBSetting');
}
function get_info()
{
return get_lang('DBSettingIntro');
}
function buildForm()
{
$this->_formBuilt = true;
$this->addElement('text', 'database_host', get_lang("DBHost"), array ('size' => '40'));
$this->addRule('database_host', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_username', get_lang("DBLogin"), array ('size' => '40'));
$this->addElement('password', 'database_password', get_lang("DBPassword"), array ('size' => '40'));
$this->addRule(array('database_host','database_username','database_password'),get_lang('CouldNotConnectToDatabase'),new ValidateDatabaseConnection());
$this->addElement('text', 'database_prefix', get_lang("DbPrefixForm"), array ('size' => '40'));
$this->addElement('text', 'database_main_db', get_lang("MainDB"), array ('size' => '40'));
$this->addRule('database_main_db', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_tracking', get_lang("StatDB"), array ('size' => '40'));
$this->addRule('database_tracking', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_scorm', get_lang("ScormDB"), array ('size' => '40'));
$this->addRule('database_scorm', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_user', get_lang("UserDB"), array ('size' => '40'));
$this->addRule('database_user', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_repository', get_lang("RepositoryDatabase"), array ('size' => '40'));
$this->addRule('database_repository', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_weblcms', get_lang("WeblcmsDatabase"), array ('size' => '40'));
$this->addRule('database_weblcms', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_personal_calendar', get_lang("PersonalCalendarDatabase"), array ('size' => '40'));
$this->addRule('database_personal_calendar', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_personal_messenger', get_lang("PersonalMessageDatabase"), array ('size' => '40'));
$this->addRule('database_personal_messenger', 'ThisFieldIsRequired', 'required');
$this->addElement('text', 'database_profiler', get_lang("ProfilerDatabase"), array ('size' => '40'));
$this->addRule('database_profiler', 'ThisFieldIsRequired', 'required');
$enable_tracking[] = & $this->createElement('radio', 'enable_tracking', null, get_lang("Yes"), 1);
$enable_tracking[] = & $this->createElement('radio', 'enable_tracking', null, get_lang("No"), 0);
$this->addGroup($enable_tracking, 'tracking', get_lang("EnableTracking"), '&nbsp;', false);
$several_db[] = & $this->createElement('radio', 'database_single', null, get_lang("One"),1);
$several_db[] = & $this->createElement('radio', 'database_single', null, get_lang("Several"),0);
$this->addGroup($several_db, 'db', get_lang("SingleDb"), '&nbsp;', false);
$prevnext[] = & $this->createElement('submit', $this->getButtonName('back'), '<< '.get_lang('Previous'));
$prevnext[] = & $this->createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
$this->setDefaultAction('next');
}
}
class ValidateDatabaseConnection extends HTML_QuickForm_Rule
{
public function validate($parameters)
{
$db_host = $parameters[0];
$db_user = $parameters[1];
$db_password = $parameters[2];
if(mysql_connect($db_host,$db_user,$db_password))
{
return true;
}
return false;
}
}
/**
* Page in the install wizard in which some config settings are asked to the
* user.
*/
class Page_ConfigSettings extends HTML_QuickForm_Page
{
function get_title()
{
return get_lang('CfgSetting');
}
function get_info()
{
return get_lang('ConfigSettingsInfo');
}
function buildForm()
{
$this->_formBuilt = true;
$languages = array ();
$languages['dutch'] = 'dutch';
$this->addElement('select', 'platform_language', get_lang("MainLang"), get_language_folder_list());
$this->addElement('text', 'platform_url', get_lang("DokeosURL"), array ('size' => '40'));
$this->addRule('platform_url', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'admin_email', get_lang("AdminEmail"), array ('size' => '40'));
$this->addRule('admin_email', get_lang('ThisFieldIsRequired'), 'required');
$this->addRule('admin_email', get_lang('WrongEmail'), 'email');
$this->addElement('text', 'admin_lastname', get_lang("AdminLastName"), array ('size' => '40'));
$this->addRule('admin_lastname', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'admin_firstname', get_lang("AdminFirstName"), array ('size' => '40'));
$this->addRule('admin_firstname', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'admin_phone', get_lang("AdminPhone"), array ('size' => '40'));
$this->addElement('text', 'admin_username', get_lang("AdminLogin"), array ('size' => '40'));
$this->addRule('admin_username', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'admin_password', get_lang("AdminPass"), array ('size' => '40'));
$this->addRule('admin_password', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'platform_name', get_lang("CampusName"), array ('size' => '40'));
$this->addRule('platform_name', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'organization_name', get_lang("InstituteShortName"), array ('size' => '40'));
$this->addRule('organization_name', get_lang('ThisFieldIsRequired'), 'required');
$this->addElement('text', 'organization_url', get_lang("InstituteURL"), array ('size' => '40'));
$this->addRule('organization_url', get_lang('ThisFieldIsRequired'), 'required');
$encrypt[] = & $this->createElement('radio', 'encrypt_password', null, get_lang('Yes'), 1);
$encrypt[] = & $this->createElement('radio', 'encrypt_password', null, get_lang('No'), 0);
$this->addGroup($encrypt, 'tracking', get_lang("EncryptUserPass"), '&nbsp;', false);
$self_reg[] = & $this->createElement('radio', 'self_reg', null, get_lang('Yes'), 1);
$self_reg[] = & $this->createElement('radio', 'self_reg', null, get_lang('No'), 0);
$this->addGroup($self_reg, 'tracking', get_lang("AllowSelfReg"), '&nbsp;', false);
$self_reg_teacher[] = & $this->createElement('radio', 'self_reg_teacher', null, get_lang('Yes'), 1);
$self_reg_teacher[] = & $this->createElement('radio', 'self_reg_teacher', null, get_lang('No'), 0);
$this->addGroup($self_reg_teacher, 'tracking', get_lang("AllowSelfRegProf"), '&nbsp;', false);
$prevnext[] = & $this->createElement('submit', $this->getButtonName('back'), '<< '.get_lang('Previous'));
$prevnext[] = & $this->createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
$this->setDefaultAction('next');
}
}
/**
* Page in the install wizard in which a final overview of all settings is
* displayed.
*/
class Page_ConfirmSettings extends HTML_QuickForm_Page
{
function get_title()
{
return get_lang('LastCheck');
}
function get_info()
{
return 'Here are the values you entered
<br />
<strong>Print this page to remember your password and other settings</strong>';
}
function buildForm()
{
$wizard = $this->controller;
$values = $wizard->exportValues();
$this->addElement('static', 'confirm_platform_language', get_lang("MainLang"), $values['platform_language']);
$this->addElement('static', 'confirm_platform_url', get_lang("DokeosURL"), $values['platform_url']);
$this->addElement('static', 'confirm_admin_email', get_lang("AdminEmail"), $values['admin_email']);
$this->addElement('static', 'confirm_admin_lastname', get_lang("AdminLastName"), $values['admin_lastname']);
$this->addElement('static', 'confirm_admin_firstname', get_lang("AdminFirstName"), $values['admin_firstname']);
$this->addElement('static', 'confirm_admin_phone', get_lang("AdminPhone"), $values['admin_phone']);
$this->addElement('static', 'confirm_admin_username', get_lang("AdminLogin"), $values['admin_username']);
$this->addElement('static', 'confirm_admin_password', get_lang("AdminPass"), $values['admin_password']);
$this->addElement('static', 'confirm_platform_name', get_lang("CampusName"), $values['platform_name']);
$this->addElement('static', 'confirm_organization_name', get_lang("InstituteShortName"), $values['organization_name']);
$this->addElement('static', 'confirm_organization_url', get_lang("InstituteURL"), $values['organization_url']);
$prevnext[] = & $this->createElement('submit', $this->getButtonName('back'), '<< '.get_lang('Previous'));
$prevnext[] = & $this->createElement('submit', $this->getButtonName('next'), get_lang('Next').' >>');
$this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
$this->setDefaultAction('next');
}
}
/*
@ -166,7 +490,50 @@ display_upgrade_header($text_dir, $dokeos_version, $install_type, $update_from_v
// Create a new wizard
$wizard = & new HTML_QuickForm_Controller('regWizard', true);
//Add pages to wizard - path to follow for upgrade
$wizard->addPage(new Page_Language('page_language'));
$wizard->addPage(new Page_Requirements('page_requirements'));
$wizard->addPage(new Page_LocationOldVersion('page_location_old_version'));
$values = $wizard->exportValues();
if( isset($values['old_version_path']))
{
$defaults['platform_language'] = get_config_param('platformLanguage');
$defaults['platform_url'] = 'http://'.$_SERVER['HTTP_HOST'].$urlAppendPath.'/';
$defaults['license'] = implode("\n", file('../license/gpl.txt'));
$defaults['database_host'] = get_config_param('dbHost');
$defaults['database_main_db'] = get_config_param('mainDbName');
$defaults['database_tracking'] = get_config_param('statsDbName');
$defaults['database_scorm'] = get_config_param('scormDbName');
$defaults['database_user'] = 'dokeos_user';
$defaults['database_repository'] = 'dokeos_repository';
$defaults['database_weblcms'] = 'dokeos_weblcms';
$defaults['database_username'] = get_config_param('dbLogin');
$defaults['database_password'] = get_config_param('dbPass');
$defaults['database_prefix'] = get_config_param('dbNamePrefix');
$defaults['enable_tracking'] = get_config_param('is_trackingEnabled');
$defaults['database_single'] = get_config_param('singleDbEnabled');
$defaults['admin_lastname'] = 'Doe';
$defaults['admin_firstname'] = mt_rand(0,1)?'John':'Jane';
$defaults['admin_email'] = get_config_param('emailAdministrator');
$defaults['admin_username'] = 'admin';
$defaults['admin_password'] = api_generate_password();
$defaults['admin_phone'] = get_config_param('administrator["phone"]');
$defaults['platform_name'] = get_config_param('siteName');
$defaults['encrypt_password'] = 1;
$defaults['organization_name'] = get_config_param('institution["name"]');
$defaults['organization_url'] = get_config_param('institution["url"]');
$defaults['encrypt_password'] = get_config_param('userPasswordCrypted');
$defaults['self_reg'] = get_config_param('allowSelfReg');
}
else
{
//fail gracefully - unexpected problem with old version path
}
$wizard->addPage(new Page_License('page_license'));
$wizard->addPage(new Page_DatabaseSettings('page_databasesettings'));
$wizard->addPage(new Page_ConfigSettings('page_configsettings'));
$wizard->addPage(new Page_ConfirmSettings('page_confirmsettings'));
$defaults['old_version_path'] = '/var/www/html/old_version/';

Loading…
Cancel
Save