You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3767 lines
144 KiB
3767 lines
144 KiB
![]()
16 years ago
|
<?php
|
||
|
/* For licensing terms, see /license.txt */
|
||
|
|
||
![]()
8 years ago
|
use Chamilo\CoreBundle\Entity\AccessUrl;
|
||
![]()
9 years ago
|
use Chamilo\CoreBundle\Entity\ExtraField;
|
||
![]()
8 years ago
|
use Chamilo\CoreBundle\Framework\Container;
|
||
![]()
6 years ago
|
use Chamilo\CoreBundle\ToolChain;
|
||
![]()
9 years ago
|
use Chamilo\TicketBundle\Entity\Category as TicketCategory;
|
||
|
use Chamilo\TicketBundle\Entity\Priority as TicketPriority;
|
||
![]()
8 years ago
|
use Chamilo\TicketBundle\Entity\Project as TicketProject;
|
||
![]()
6 years ago
|
use Chamilo\UserBundle\Entity\Group;
|
||
![]()
8 years ago
|
use Doctrine\ORM\EntityManager;
|
||
![]()
7 years ago
|
use Sonata\PageBundle\Entity\PageManager;
|
||
![]()
7 years ago
|
use Symfony\Component\DependencyInjection\Container as SymfonyContainer;
|
||
![]()
9 years ago
|
|
||
![]()
16 years ago
|
/**
|
||
![]()
16 years ago
|
* Chamilo LMS
|
||
|
* This file contains functions used by the install and upgrade scripts.
|
||
|
*
|
||
|
* Ideas for future additions:
|
||
|
* - a function get_old_version_settings to retrieve the config file settings
|
||
|
* of older versions before upgrading.
|
||
|
*/
|
||
|
|
||
![]()
7 years ago
|
/* CONSTANTS */
|
||
![]()
11 years ago
|
define('SYSTEM_CONFIG_FILENAME', 'configuration.dist.php');
|
||
![]()
16 years ago
|
|
||
![]()
16 years ago
|
/**
|
||
|
* This function detects whether the system has been already installed.
|
||
|
* It should be used for prevention from second running the installation
|
||
|
* script and as a result - destroying a production system.
|
||
![]()
8 years ago
|
*
|
||
|
* @return bool The detected result;
|
||
|
*
|
||
![]()
16 years ago
|
* @author Ivan Tcholakov, 2010;
|
||
|
*/
|
||
![]()
11 years ago
|
function isAlreadyInstalledSystem()
|
||
|
{
|
||
![]()
15 years ago
|
global $new_version, $_configuration;
|
||
![]()
16 years ago
|
|
||
![]()
15 years ago
|
if (empty($new_version)) {
|
||
|
return true; // Must be initialized.
|
||
|
}
|
||
![]()
16 years ago
|
|
||
![]()
15 years ago
|
$current_config_file = api_get_path(CONFIGURATION_PATH).'configuration.php';
|
||
|
if (!file_exists($current_config_file)) {
|
||
|
return false; // Configuration file does not exist, install the system.
|
||
|
}
|
||
|
require $current_config_file;
|
||
![]()
12 years ago
|
|
||
![]()
14 years ago
|
$current_version = null;
|
||
![]()
11 years ago
|
if (isset($_configuration['system_version'])) {
|
||
![]()
15 years ago
|
$current_version = trim($_configuration['system_version']);
|
||
|
}
|
||
![]()
16 years ago
|
|
||
![]()
15 years ago
|
// If the current version is old, upgrading is assumed, the installer goes ahead.
|
||
|
return empty($current_version) ? false : version_compare($current_version, $new_version, '>=');
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
![]()
16 years ago
|
* This function checks if a php extension exists or not and returns an HTML status string.
|
||
|
*
|
||
![]()
8 years ago
|
* @param string $extensionName Name of the PHP extension to be checked
|
||
|
* @param string $returnSuccess Text to show when extension is available (defaults to 'Yes')
|
||
|
* @param string $returnFailure Text to show when extension is available (defaults to 'No')
|
||
|
* @param bool $optional Whether this extension is optional (then show unavailable text in orange rather than red)
|
||
|
* @param string $enabledTerm If this string is not null, then use to check if the corresponding parameter is = 1.
|
||
|
* If not, mention it's present but not enabled. For example, for opcache, this should be 'opcache.enable'
|
||
|
*
|
||
|
* @return string HTML string reporting the status of this extension. Language-aware.
|
||
|
*
|
||
![]()
15 years ago
|
* @author Christophe Gesch??
|
||
|
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
|
||
|
* @author Yannick Warnier <yannick.warnier@dokeos.com>
|
||
![]()
16 years ago
|
*/
|
||
![]()
8 years ago
|
function checkExtension(
|
||
|
$extensionName,
|
||
|
$returnSuccess = 'Yes',
|
||
|
$returnFailure = 'No',
|
||
|
$optional = false,
|
||
|
$enabledTerm = ''
|
||
|
) {
|
||
![]()
11 years ago
|
if (extension_loaded($extensionName)) {
|
||
![]()
9 years ago
|
if (!empty($enabledTerm)) {
|
||
|
$isEnabled = ini_get($enabledTerm);
|
||
|
if ($isEnabled == '1') {
|
||
|
return Display::label($returnSuccess, 'success');
|
||
|
} else {
|
||
|
if ($optional) {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Extension installed but not enabled'), 'warning');
|
||
![]()
9 years ago
|
} else {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Extension installed but not enabled'), 'important');
|
||
![]()
9 years ago
|
}
|
||
|
}
|
||
|
} else {
|
||
|
return Display::label($returnSuccess, 'success');
|
||
|
}
|
||
![]()
15 years ago
|
} else {
|
||
|
if ($optional) {
|
||
![]()
11 years ago
|
return Display::label($returnFailure, 'warning');
|
||
![]()
15 years ago
|
} else {
|
||
![]()
11 years ago
|
return Display::label($returnFailure, 'important');
|
||
![]()
15 years ago
|
}
|
||
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function checks whether a php setting matches the recommended value.
|
||
|
*
|
||
|
* @param string $phpSetting A PHP setting to check
|
||
|
* @param string $recommendedValue A recommended value to show on screen
|
||
|
* @param mixed $returnSuccess What to show on success
|
||
|
* @param mixed $returnFailure What to show on failure
|
||
|
*
|
||
|
* @return string A label to show
|
||
|
*
|
||
![]()
16 years ago
|
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
|
||
|
*/
|
||
![]()
8 years ago
|
function checkPhpSetting(
|
||
|
$phpSetting,
|
||
|
$recommendedValue,
|
||
|
$returnSuccess = false,
|
||
|
$returnFailure = false
|
||
|
) {
|
||
![]()
11 years ago
|
$currentPhpValue = getPhpSetting($phpSetting);
|
||
|
if ($currentPhpValue == $recommendedValue) {
|
||
|
return Display::label($currentPhpValue.' '.$returnSuccess, 'success');
|
||
![]()
15 years ago
|
} else {
|
||
![]()
11 years ago
|
return Display::label($currentPhpValue.' '.$returnSuccess, 'important');
|
||
![]()
15 years ago
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
12 years ago
|
/**
|
||
![]()
11 years ago
|
* This function return the value of a php.ini setting if not "" or if exists,
|
||
![]()
8 years ago
|
* otherwise return false.
|
||
|
*
|
||
|
* @param string $phpSetting The name of a PHP setting
|
||
|
*
|
||
|
* @return mixed The value of the setting, or false if not found
|
||
![]()
12 years ago
|
*/
|
||
![]()
11 years ago
|
function checkPhpSettingExists($phpSetting)
|
||
|
{
|
||
|
if (ini_get($phpSetting) != "") {
|
||
|
return ini_get($phpSetting);
|
||
![]()
12 years ago
|
}
|
||
![]()
11 years ago
|
|
||
![]()
12 years ago
|
return false;
|
||
![]()
12 years ago
|
}
|
||
![]()
12 years ago
|
|
||
![]()
16 years ago
|
/**
|
||
|
* Returns a textual value ('ON' or 'OFF') based on a requester 2-state ini- configuration setting.
|
||
|
*
|
||
|
* @param string $val a php ini value
|
||
![]()
8 years ago
|
*
|
||
![]()
8 years ago
|
* @return bool ON or OFF
|
||
![]()
8 years ago
|
*
|
||
![]()
16 years ago
|
* @author Joomla <http://www.joomla.org>
|
||
|
*/
|
||
![]()
11 years ago
|
function getPhpSetting($val)
|
||
|
{
|
||
![]()
7 years ago
|
$value = ini_get($val);
|
||
|
switch ($val) {
|
||
|
case 'display_errors':
|
||
|
global $originalDisplayErrors;
|
||
|
$value = $originalDisplayErrors;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return $value == '1' ? 'ON' : 'OFF';
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* This function returns a string "true" or "false" according to the passed parameter.
|
||
|
*
|
||
![]()
8 years ago
|
* @param int $var The variable to present as text
|
||
|
*
|
||
|
* @return string the string "true" or "false"
|
||
|
*
|
||
![]()
15 years ago
|
* @author Christophe Gesch??
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function trueFalse($var)
|
||
|
{
|
||
![]()
15 years ago
|
return $var ? 'true' : 'false';
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
|
* Removes memory and time limits as much as possible.
|
||
|
*/
|
||
![]()
11 years ago
|
function remove_memory_and_time_limits()
|
||
|
{
|
||
![]()
15 years ago
|
if (function_exists('ini_set')) {
|
||
|
ini_set('memory_limit', -1);
|
||
|
ini_set('max_execution_time', 0);
|
||
![]()
10 years ago
|
error_log('Update-db script: memory_limit set to -1', 0);
|
||
|
error_log('Update-db script: max_execution_time 0', 0);
|
||
![]()
15 years ago
|
} else {
|
||
|
error_log('Update-db script: could not change memory and time limits', 0);
|
||
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
|
* Detects browser's language.
|
||
![]()
8 years ago
|
*
|
||
|
* @return string Returns a language identificator, i.e. 'english', 'spanish', ...
|
||
|
*
|
||
![]()
16 years ago
|
* @author Ivan Tcholakov, 2010
|
||
|
*/
|
||
![]()
11 years ago
|
function detect_browser_language()
|
||
|
{
|
||
![]()
8 years ago
|
static $language_index = [
|
||
![]()
15 years ago
|
'ar' => 'arabic',
|
||
|
'ast' => 'asturian',
|
||
|
'bg' => 'bulgarian',
|
||
|
'bs' => 'bosnian',
|
||
|
'ca' => 'catalan',
|
||
|
'zh' => 'simpl_chinese',
|
||
|
'zh-tw' => 'trad_chinese',
|
||
|
'cs' => 'czech',
|
||
|
'da' => 'danish',
|
||
|
'prs' => 'dari',
|
||
|
'de' => 'german',
|
||
|
'el' => 'greek',
|
||
|
'en' => 'english',
|
||
|
'es' => 'spanish',
|
||
|
'eo' => 'esperanto',
|
||
![]()
13 years ago
|
'eu' => 'basque',
|
||
![]()
15 years ago
|
'fa' => 'persian',
|
||
|
'fr' => 'french',
|
||
|
'fur' => 'friulian',
|
||
|
'gl' => 'galician',
|
||
|
'ka' => 'georgian',
|
||
|
'hr' => 'croatian',
|
||
|
'he' => 'hebrew',
|
||
![]()
15 years ago
|
'hi' => 'hindi',
|
||
![]()
15 years ago
|
'id' => 'indonesian',
|
||
|
'it' => 'italian',
|
||
|
'ko' => 'korean',
|
||
|
'lv' => 'latvian',
|
||
|
'lt' => 'lithuanian',
|
||
|
'mk' => 'macedonian',
|
||
|
'hu' => 'hungarian',
|
||
|
'ms' => 'malay',
|
||
|
'nl' => 'dutch',
|
||
|
'ja' => 'japanese',
|
||
|
'no' => 'norwegian',
|
||
|
'oc' => 'occitan',
|
||
|
'ps' => 'pashto',
|
||
|
'pl' => 'polish',
|
||
|
'pt' => 'portuguese',
|
||
|
'pt-br' => 'brazilian',
|
||
|
'ro' => 'romanian',
|
||
|
'qu' => 'quechua_cusco',
|
||
|
'ru' => 'russian',
|
||
|
'sk' => 'slovak',
|
||
|
'sl' => 'slovenian',
|
||
|
'sr' => 'serbian',
|
||
|
'fi' => 'finnish',
|
||
|
'sv' => 'swedish',
|
||
|
'th' => 'thai',
|
||
![]()
13 years ago
|
'tr' => 'turkish',
|
||
![]()
15 years ago
|
'uk' => 'ukrainian',
|
||
|
'vi' => 'vietnamese',
|
||
|
'sw' => 'swahili',
|
||
![]()
8 years ago
|
'yo' => 'yoruba',
|
||
![]()
8 years ago
|
];
|
||
![]()
15 years ago
|
|
||
![]()
8 years ago
|
$system_available_languages = get_language_folder_list();
|
||
![]()
15 years ago
|
$accept_languages = strtolower(str_replace('_', '-', $_SERVER['HTTP_ACCEPT_LANGUAGE']));
|
||
|
foreach ($language_index as $code => $language) {
|
||
|
if (strpos($accept_languages, $code) === 0) {
|
||
|
if (!empty($system_available_languages[$language])) {
|
||
|
return $language;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$user_agent = strtolower(str_replace('_', '-', $_SERVER['HTTP_USER_AGENT']));
|
||
|
foreach ($language_index as $code => $language) {
|
||
![]()
15 years ago
|
if (@preg_match("/[\[\( ]{$code}[;,_\-\)]/", $user_agent)) {
|
||
![]()
15 years ago
|
if (!empty($system_available_languages[$language])) {
|
||
|
return $language;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 'english';
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
15 years ago
|
/* FILESYSTEM RELATED FUNCTIONS */
|
||
![]()
16 years ago
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function checks if the given folder is writable.
|
||
|
*
|
||
|
* @param string $folder Full path to a folder
|
||
|
* @param bool $suggestion Whether to show a suggestion or not
|
||
|
*
|
||
|
* @return string
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function check_writable($folder, $suggestion = false)
|
||
|
{
|
||
![]()
12 years ago
|
if (is_writable($folder)) {
|
||
![]()
13 years ago
|
return Display::label(get_lang('Writable'), 'success');
|
||
![]()
15 years ago
|
} else {
|
||
|
if ($suggestion) {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Not writable'), 'info');
|
||
![]()
15 years ago
|
} else {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Not writable'), 'important');
|
||
![]()
15 years ago
|
}
|
||
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
11 years ago
|
/**
|
||
![]()
8 years ago
|
* This function checks if the given folder is readable.
|
||
|
*
|
||
|
* @param string $folder Full path to a folder
|
||
|
* @param bool $suggestion Whether to show a suggestion or not
|
||
![]()
11 years ago
|
*
|
||
![]()
8 years ago
|
* @return string
|
||
![]()
11 years ago
|
*/
|
||
|
function checkReadable($folder, $suggestion = false)
|
||
|
{
|
||
![]()
11 years ago
|
if (is_readable($folder)) {
|
||
![]()
11 years ago
|
return Display::label(get_lang('Readable'), 'success');
|
||
|
} else {
|
||
|
if ($suggestion) {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Not readable'), 'info');
|
||
![]()
11 years ago
|
} else {
|
||
![]()
6 years ago
|
return Display::label(get_lang('Not readable'), 'important');
|
||
![]()
11 years ago
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
|
* This function is similar to the core file() function, except that it
|
||
![]()
8 years ago
|
* works with line endings in Windows (which is not the case of file()).
|
||
![]()
11 years ago
|
*
|
||
![]()
8 years ago
|
* @param string $filename
|
||
|
*
|
||
|
* @return array The lines of the file returned as an array
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function file_to_array($filename)
|
||
|
{
|
||
|
if (!is_readable($filename) || is_dir($filename)) {
|
||
![]()
8 years ago
|
return [];
|
||
![]()
13 years ago
|
}
|
||
![]()
15 years ago
|
$fp = fopen($filename, 'rb');
|
||
|
$buffer = fread($fp, filesize($filename));
|
||
|
fclose($fp);
|
||
![]()
11 years ago
|
|
||
![]()
15 years ago
|
return explode('<br />', nl2br($buffer));
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
|
* We assume this function is called from install scripts that reside inside the install folder.
|
||
|
*/
|
||
![]()
11 years ago
|
function set_file_folder_permissions()
|
||
|
{
|
||
![]()
15 years ago
|
@chmod('.', 0755); //set permissions on install dir
|
||
|
@chmod('..', 0755); //set permissions on parent dir of install dir
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Write the main system config file.
|
||
|
*
|
||
![]()
16 years ago
|
* @param string $path Path to the config file
|
||
|
*/
|
||
![]()
11 years ago
|
function write_system_config_file($path)
|
||
|
{
|
||
![]()
15 years ago
|
global $dbHostForm;
|
||
![]()
10 years ago
|
global $dbPortForm;
|
||
![]()
15 years ago
|
global $dbUsernameForm;
|
||
|
global $dbPassForm;
|
||
|
global $dbNameForm;
|
||
|
global $urlForm;
|
||
|
global $pathForm;
|
||
|
global $urlAppendPath;
|
||
|
global $languageForm;
|
||
|
global $encryptPassForm;
|
||
|
global $session_lifetime;
|
||
|
global $new_version;
|
||
|
global $new_version_stable;
|
||
|
|
||
|
$root_sys = api_add_trailing_slash(str_replace('\\', '/', realpath($pathForm)));
|
||
![]()
9 years ago
|
$content = file_get_contents(__DIR__.'/'.SYSTEM_CONFIG_FILENAME);
|
||
![]()
15 years ago
|
|
||
![]()
11 years ago
|
$config['{DATE_GENERATED}'] = date('r');
|
||
|
$config['{DATABASE_HOST}'] = $dbHostForm;
|
||
![]()
10 years ago
|
$config['{DATABASE_PORT}'] = $dbPortForm;
|
||
![]()
11 years ago
|
$config['{DATABASE_USER}'] = $dbUsernameForm;
|
||
|
$config['{DATABASE_PASSWORD}'] = $dbPassForm;
|
||
|
$config['{DATABASE_MAIN}'] = $dbNameForm;
|
||
|
$config['{ROOT_WEB}'] = $urlForm;
|
||
|
$config['{ROOT_SYS}'] = $root_sys;
|
||
|
$config['{URL_APPEND_PATH}'] = $urlAppendPath;
|
||
|
$config['{PLATFORM_LANGUAGE}'] = $languageForm;
|
||
|
$config['{SECURITY_KEY}'] = md5(uniqid(rand().time()));
|
||
|
$config['{ENCRYPT_PASSWORD}'] = $encryptPassForm;
|
||
|
|
||
|
$config['SESSION_LIFETIME'] = $session_lifetime;
|
||
|
$config['{NEW_VERSION}'] = $new_version;
|
||
|
$config['NEW_VERSION_STABLE'] = trueFalse($new_version_stable);
|
||
![]()
15 years ago
|
|
||
|
foreach ($config as $key => $value) {
|
||
|
$content = str_replace($key, $value, $content);
|
||
|
}
|
||
![]()
8 years ago
|
$fp = @fopen($path, 'w');
|
||
![]()
15 years ago
|
|
||
|
if (!$fp) {
|
||
![]()
7 years ago
|
echo '<strong>
|
||
|
<font color="red">Your script doesn\'t have write access to the config directory</font></strong><br />
|
||
|
<em>('.str_replace('\\', '/', realpath($path)).')</em><br /><br />
|
||
|
You probably do not have write access on Chamilo root directory,
|
||
|
i.e. you should <em>CHMOD 777</em> or <em>755</em> or <em>775</em>.<br /><br />
|
||
|
Your problems can be related on two possible causes:<br />
|
||
|
<ul>
|
||
|
<li>Permission problems.<br />Try initially with <em>chmod -R 777</em> and increase restrictions gradually.</li>
|
||
![]()
7 years ago
|
<li>PHP is running in <a href="http://www.php.net/manual/en/features.safe-mode.php" target="_blank">Safe-Mode</a>.
|
||
|
If possible, try to switch it off.</li>
|
||
![]()
7 years ago
|
</ul>
|
||
|
<a href="http://forum.chamilo.org/" target="_blank">Read about this problem in Support Forum</a><br /><br />
|
||
|
Please go back to step 5.
|
||
|
<p><input type="submit" name="step5" value="< Back" /></p>
|
||
|
</td></tr></table></form></body></html>';
|
||
![]()
15 years ago
|
exit;
|
||
![]()
15 years ago
|
}
|
||
|
|
||
|
fwrite($fp, $content);
|
||
|
fclose($fp);
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
16 years ago
|
* Returns a list of language directories.
|
||
![]()
16 years ago
|
*/
|
||
![]()
8 years ago
|
function get_language_folder_list()
|
||
![]()
11 years ago
|
{
|
||
![]()
8 years ago
|
return [
|
||
|
'ar' => 'arabic',
|
||
|
'ast' => 'asturian',
|
||
|
'bg' => 'bulgarian',
|
||
|
'bs' => 'bosnian',
|
||
|
'ca' => 'catalan',
|
||
|
'zh' => 'simpl_chinese',
|
||
|
'zh-tw' => 'trad_chinese',
|
||
|
'cs' => 'czech',
|
||
|
'da' => 'danish',
|
||
|
'prs' => 'dari',
|
||
|
'de' => 'german',
|
||
|
'el' => 'greek',
|
||
|
'en' => 'english',
|
||
|
'es' => 'spanish',
|
||
|
'eo' => 'esperanto',
|
||
|
'eu' => 'basque',
|
||
|
'fa' => 'persian',
|
||
|
'fr' => 'french',
|
||
|
'fur' => 'friulian',
|
||
|
'gl' => 'galician',
|
||
|
'ka' => 'georgian',
|
||
|
'hr' => 'croatian',
|
||
|
'he' => 'hebrew',
|
||
|
'hi' => 'hindi',
|
||
|
'id' => 'indonesian',
|
||
|
'it' => 'italian',
|
||
|
'ko' => 'korean',
|
||
|
'lv' => 'latvian',
|
||
|
'lt' => 'lithuanian',
|
||
|
'mk' => 'macedonian',
|
||
|
'hu' => 'hungarian',
|
||
|
'ms' => 'malay',
|
||
|
'nl' => 'dutch',
|
||
|
'ja' => 'japanese',
|
||
|
'no' => 'norwegian',
|
||
|
'oc' => 'occitan',
|
||
|
'ps' => 'pashto',
|
||
|
'pl' => 'polish',
|
||
|
'pt' => 'portuguese',
|
||
|
'pt-br' => 'brazilian',
|
||
|
'ro' => 'romanian',
|
||
|
'qu' => 'quechua_cusco',
|
||
|
'ru' => 'russian',
|
||
|
'sk' => 'slovak',
|
||
|
'sl' => 'slovenian',
|
||
|
'sr' => 'serbian',
|
||
|
'fi' => 'finnish',
|
||
|
'sv' => 'swedish',
|
||
|
'th' => 'thai',
|
||
|
'tr' => 'turkish',
|
||
|
'uk' => 'ukrainian',
|
||
|
'vi' => 'vietnamese',
|
||
|
'sw' => 'swahili',
|
||
![]()
8 years ago
|
'yo' => 'yoruba',
|
||
![]()
8 years ago
|
];
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function returns the value of a parameter from the configuration file.
|
||
![]()
16 years ago
|
*
|
||
|
* WARNING - this function relies heavily on global variables $updateFromConfigFile
|
||
|
* and $configFile, and also changes these globals. This can be rewritten.
|
||
|
*
|
||
![]()
7 years ago
|
* @param string $param the parameter of which the value is returned
|
||
|
* @param string $updatePath If we want to give the path rather than take it from POST
|
||
![]()
8 years ago
|
*
|
||
|
* @return string the value of the parameter
|
||
|
*
|
||
![]()
16 years ago
|
* @author Olivier Brouckaert
|
||
|
* @author Reworked by Ivan Tcholakov, 2010
|
||
|
*/
|
||
![]()
11 years ago
|
function get_config_param($param, $updatePath = '')
|
||
|
{
|
||
![]()
15 years ago
|
global $configFile, $updateFromConfigFile;
|
||
|
|
||
|
// Look if we already have the queried parameter.
|
||
|
if (is_array($configFile) && isset($configFile[$param])) {
|
||
|
return $configFile[$param];
|
||
|
}
|
||
|
if (empty($updatePath) && !empty($_POST['updatePath'])) {
|
||
|
$updatePath = $_POST['updatePath'];
|
||
|
}
|
||
![]()
11 years ago
|
|
||
![]()
15 years ago
|
if (empty($updatePath)) {
|
||
|
$updatePath = api_get_path(SYS_PATH);
|
||
|
}
|
||
|
$updatePath = api_add_trailing_slash(str_replace('\\', '/', realpath($updatePath)));
|
||
|
$updateFromInstalledVersionFile = '';
|
||
|
|
||
|
if (empty($updateFromConfigFile)) {
|
||
|
// If update from previous install was requested,
|
||
![]()
11 years ago
|
// try to recover config file from Chamilo 1.9.x
|
||
![]()
15 years ago
|
if (file_exists($updatePath.'main/inc/conf/configuration.php')) {
|
||
|
$updateFromConfigFile = 'main/inc/conf/configuration.php';
|
||
![]()
8 years ago
|
} elseif (file_exists($updatePath.'app/config/configuration.php')) {
|
||
![]()
9 years ago
|
$updateFromConfigFile = 'app/config/configuration.php';
|
||
![]()
7 years ago
|
} elseif (file_exists($updatePath.'config/configuration.php')) {
|
||
|
$updateFromConfigFile = 'config/configuration.php';
|
||
![]()
15 years ago
|
} else {
|
||
|
// Give up recovering.
|
||
![]()
14 years ago
|
//error_log('Chamilo Notice: Could not find previous config file at '.$updatePath.'main/inc/conf/configuration.php nor at '.$updatePath.'claroline/inc/conf/claro_main.conf.php in get_config_param(). Will start new config (in '.__FILE__.', line '.__LINE__.')', 0);
|
||
![]()
15 years ago
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
![]()
11 years ago
|
if (file_exists($updatePath.$updateFromConfigFile) &&
|
||
|
!is_dir($updatePath.$updateFromConfigFile)
|
||
|
) {
|
||
|
require $updatePath.$updateFromConfigFile;
|
||
|
$config = new Zend\Config\Config($_configuration);
|
||
![]()
8 years ago
|
|
||
![]()
11 years ago
|
return $config->get($param);
|
||
![]()
15 years ago
|
}
|
||
|
|
||
![]()
11 years ago
|
error_log('Config array could not be found in get_config_param()', 0);
|
||
![]()
8 years ago
|
|
||
![]()
11 years ago
|
return null;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
15 years ago
|
/* DATABASE RELATED FUNCTIONS */
|
||
![]()
16 years ago
|
|
||
|
/**
|
||
|
* Gets a configuration parameter from the database. Returns returns null on failure.
|
||
![]()
8 years ago
|
*
|
||
|
* @param string $param Name of param we want
|
||
|
*
|
||
|
* @return mixed The parameter value or null if not found
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function get_config_param_from_db($param = '')
|
||
![]()
11 years ago
|
{
|
||
![]()
7 years ago
|
$param = Database::escape_string($param);
|
||
|
|
||
![]()
15 years ago
|
if (($res = Database::query("SELECT * FROM settings_current WHERE variable = '$param'")) !== false) {
|
||
|
if (Database::num_rows($res) > 0) {
|
||
|
$row = Database::fetch_array($res);
|
||
![]()
8 years ago
|
|
||
![]()
15 years ago
|
return $row['selected_value'];
|
||
|
}
|
||
|
}
|
||
![]()
8 years ago
|
|
||
![]()
15 years ago
|
return null;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Connect to the database and returns the entity manager.
|
||
|
*
|
||
|
* @param string $dbHostForm DB host
|
||
|
* @param string $dbUsernameForm DB username
|
||
|
* @param string $dbPassForm DB password
|
||
|
* @param string $dbNameForm DB name
|
||
|
* @param int $dbPortForm DB port
|
||
![]()
11 years ago
|
*
|
||
![]()
7 years ago
|
* @return \Database
|
||
![]()
16 years ago
|
*/
|
||
![]()
8 years ago
|
function connectToDatabase(
|
||
|
$dbHostForm,
|
||
|
$dbUsernameForm,
|
||
|
$dbPassForm,
|
||
|
$dbNameForm,
|
||
|
$dbPortForm = 3306
|
||
|
) {
|
||
![]()
8 years ago
|
$dbParams = [
|
||
![]()
11 years ago
|
'driver' => 'pdo_mysql',
|
||
|
'host' => $dbHostForm,
|
||
![]()
10 years ago
|
'port' => $dbPortForm,
|
||
![]()
11 years ago
|
'user' => $dbUsernameForm,
|
||
|
'password' => $dbPassForm,
|
||
![]()
8 years ago
|
'dbname' => $dbNameForm,
|
||
![]()
8 years ago
|
];
|
||
![]()
11 years ago
|
|
||
![]()
11 years ago
|
$database = new \Database();
|
||
|
$database->connect($dbParams);
|
||
|
|
||
![]()
8 years ago
|
return $database;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
15 years ago
|
/* DISPLAY FUNCTIONS */
|
||
![]()
16 years ago
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function prints class=active_step $current_step=$param.
|
||
|
*
|
||
|
* @param int $param A step in the installer process
|
||
|
*
|
||
![]()
16 years ago
|
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
|
||
|
*/
|
||
![]()
11 years ago
|
function step_active($param)
|
||
|
{
|
||
![]()
15 years ago
|
global $current_step;
|
||
|
if ($param == $current_step) {
|
||
![]()
7 years ago
|
echo 'active';
|
||
![]()
15 years ago
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function displays the Step X of Y -.
|
||
|
*
|
||
|
* @return string String that says 'Step X of Y' with the right values
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function display_step_sequence()
|
||
|
{
|
||
![]()
15 years ago
|
global $current_step;
|
||
![]()
8 years ago
|
|
||
![]()
15 years ago
|
return get_lang('Step'.$current_step).' – ';
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* Displays a drop down box for selection the preferred language.
|
||
![]()
16 years ago
|
*/
|
||
![]()
8 years ago
|
function display_language_selection_box(
|
||
|
$name = 'language_list',
|
||
|
$default_language = 'english'
|
||
|
) {
|
||
![]()
15 years ago
|
// Reading language list.
|
||
|
$language_list = get_language_folder_list();
|
||
|
|
||
|
// Sanity checks due to the possibility for customizations.
|
||
|
if (!is_array($language_list) || empty($language_list)) {
|
||
![]()
8 years ago
|
$language_list = ['en' => 'English'];
|
||
![]()
15 years ago
|
}
|
||
|
|
||
|
// Sorting again, if it is necessary.
|
||
|
//asort($language_list);
|
||
|
|
||
|
// More sanity checks.
|
||
|
if (!array_key_exists($default_language, $language_list)) {
|
||
![]()
8 years ago
|
if (array_key_exists('en', $language_list)) {
|
||
|
$default_language = 'en';
|
||
![]()
15 years ago
|
} else {
|
||
|
$language_keys = array_keys($language_list);
|
||
|
$default_language = $language_keys[0];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Displaying the box.
|
||
![]()
7 years ago
|
|
||
|
$html = Display::select(
|
||
|
'language_list',
|
||
|
$language_list,
|
||
|
$default_language,
|
||
|
['class' => 'form-control selectpicker show-tick form-control'],
|
||
|
false
|
||
|
);
|
||
![]()
8 years ago
|
|
||
![]()
10 years ago
|
return $html;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* This function displays a language dropdown box so that the installatioin
|
||
![]()
8 years ago
|
* can be done in the language of the user.
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function display_language_selection()
|
||
![]()
8 years ago
|
{
|
||
|
?>
|
||
![]()
7 years ago
|
<div class="install-icon">
|
||
|
<img width="150px;" src="chamilo-install.svg"/>
|
||
|
</div>
|
||
|
<h2 class="install-title">
|
||
|
<?php echo display_step_sequence(); ?>
|
||
![]()
6 years ago
|
<?php echo get_lang('Installation Language'); ?>
|
||
![]()
11 years ago
|
</h2>
|
||
![]()
7 years ago
|
<label for="language_list"><?php echo get_lang('Please select installation language'); ?></label>
|
||
![]()
7 years ago
|
<div class="form-group">
|
||
|
<?php echo display_language_selection_box('language_list', api_get_interface_language()); ?>
|
||
|
</div>
|
||
|
<button type="submit" name="step1" class="btn btn-success" value="<?php echo get_lang('Next'); ?>">
|
||
|
<em class="fa fa-forward"> </em>
|
||
|
<?php echo get_lang('Next'); ?>
|
||
|
</button>
|
||
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
![]()
7 years ago
|
<div class="RequirementHeading">
|
||
![]()
6 years ago
|
<?php echo get_lang('Cannot find your language in the list? Contact us at info@chamilo.org to contribute as a translator.'); ?>
|
||
![]()
7 years ago
|
</div>
|
||
![]()
16 years ago
|
<?php
|
||
|
}
|
||
|
|
||
|
/**
|
||
![]()
16 years ago
|
* This function displays the requirements for installing Chamilo.
|
||
![]()
16 years ago
|
*
|
||
|
* @param string $installType
|
||
![]()
8 years ago
|
* @param bool $badUpdatePath
|
||
|
* @param bool $badUpdatePath
|
||
|
* @param string $updatePath The updatePath given (if given)
|
||
|
* @param array $update_from_version_8 The different subversions from version 1.9
|
||
![]()
16 years ago
|
*
|
||
|
* @author unknow
|
||
|
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
|
||
|
*/
|
||
![]()
11 years ago
|
function display_requirements(
|
||
|
$installType,
|
||
|
$badUpdatePath,
|
||
|
$updatePath = '',
|
||
![]()
8 years ago
|
$update_from_version_8 = []
|
||
![]()
11 years ago
|
) {
|
||
![]()
7 years ago
|
global $_setting, $originalMemoryLimit;
|
||
![]()
6 years ago
|
|
||
|
$dir = api_get_path(SYS_ARCHIVE_PATH).'temp/';
|
||
|
$fileToCreate = 'test';
|
||
|
|
||
|
$perms_dir = [0777, 0755, 0775, 0770, 0750, 0700];
|
||
|
$perms_fil = [0666, 0644, 0664, 0660, 0640, 0600];
|
||
|
$course_test_was_created = false;
|
||
|
$dir_perm_verified = 0777;
|
||
|
|
||
|
foreach ($perms_dir as $perm) {
|
||
|
$r = @mkdir($dir, $perm);
|
||
|
if ($r === true) {
|
||
|
$dir_perm_verified = $perm;
|
||
|
$course_test_was_created = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$fil_perm_verified = 0666;
|
||
|
$file_course_test_was_created = false;
|
||
|
if (is_dir($dir)) {
|
||
|
foreach ($perms_fil as $perm) {
|
||
|
if ($file_course_test_was_created == true) {
|
||
|
break;
|
||
|
}
|
||
|
$r = @touch($dir.'/'.$fileToCreate, $perm);
|
||
|
if ($r === true) {
|
||
|
$fil_perm_verified = $perm;
|
||
|
$file_course_test_was_created = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@unlink($dir.'/'.$fileToCreate);
|
||
|
@rmdir($dir);
|
||
|
|
||
![]()
7 years ago
|
echo '<h2 class="install-title">'.display_step_sequence().get_lang('Requirements')."</h2>";
|
||
![]()
15 years ago
|
echo '<div class="RequirementText">';
|
||
![]()
6 years ago
|
echo '<strong>'.get_lang('Please read the following requirements thoroughly.').'</strong><br />';
|
||
|
echo get_lang('For more details').' <a href="../../documentation/installation_guide.html" target="_blank">'.get_lang('Read the installation guide').'</a>.<br />'."\n";
|
||
![]()
12 years ago
|
|
||
![]()
11 years ago
|
if ($installType == 'update') {
|
||
![]()
6 years ago
|
echo get_lang('If you plan to upgrade from an older version of Chamilo, you might want to <a href="../../documentation/changelog.html" target="_blank">have a look at the changelog</a> to know what\'s new and what has been changed').'<br />';
|
||
![]()
15 years ago
|
}
|
||
![]()
15 years ago
|
echo '</div>';
|
||
![]()
15 years ago
|
|
||
![]()
15 years ago
|
// SERVER REQUIREMENTS
|
||
![]()
6 years ago
|
echo '<h4 class="install-subtitle">'.get_lang('Server requirements').'</h4>';
|
||
![]()
8 years ago
|
$timezone = checkPhpSettingExists('date.timezone');
|
||
![]()
12 years ago
|
if (!$timezone) {
|
||
![]()
8 years ago
|
echo "<div class='alert alert-warning'>
|
||
|
<i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> ".
|
||
![]()
6 years ago
|
get_lang('We have detected that your PHP installation does not define the date.timezone setting. This is a requirement of Chamilo. Please make sure it is configured by checking your php.ini configuration, otherwise you will run into problems. We warned you!')."</div>";
|
||
![]()
12 years ago
|
}
|
||
![]()
12 years ago
|
|
||
![]()
6 years ago
|
echo '<div class="install-requirement">'.get_lang('Server requirementsInfo').'</div>';
|
||
![]()
7 years ago
|
echo '<div class="table-responsive">';
|
||
|
echo '<table class="table table-bordered">
|
||
![]()
15 years ago
|
<tr>
|
||
![]()
6 years ago
|
<td class="requirements-item">'.get_lang('PHP version').' >= '.REQUIRED_PHP_VERSION.'</td>
|
||
![]()
15 years ago
|
<td class="requirements-value">';
|
||
![]()
8 years ago
|
if (version_compare(phpversion(), REQUIRED_PHP_VERSION, '>=') > 1) {
|
||
![]()
6 years ago
|
echo '<strong class="text-danger">'.get_lang('PHP versionError').'</strong>';
|
||
![]()
15 years ago
|
} else {
|
||
![]()
6 years ago
|
echo '<strong class="text-success">'.get_lang('PHP versionOK').' '.phpversion().'</strong>';
|
||
![]()
15 years ago
|
}
|
||
![]()
14 years ago
|
echo '</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.session.php" target="_blank">Session</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('session', get_lang('Yes'), get_lang('Sessions extension not available')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.mysql.php" target="_blank">pdo_mysql</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('pdo_mysql', get_lang('Yes'), get_lang('MySQL extension not available')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
9 years ago
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.zip.php" target="_blank">Zip</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('zip', get_lang('Yes'), get_lang('Extension not available')).'</td>
|
||
![]()
9 years ago
|
</tr>
|
||
![]()
15 years ago
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.zlib.php" target="_blank">Zlib</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('zlib', get_lang('Yes'), get_lang('Zlib extension not available')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.pcre.php" target="_blank">Perl-compatible regular expressions</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('pcre', get_lang('Yes'), get_lang('PCRE extension not available')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.xml.php" target="_blank">XML</a> '.get_lang('Support').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkExtension('xml', get_lang('Yes'), get_lang('No')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.intl.php" target="_blank">Internationalization</a> '.get_lang('Support').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkExtension('intl', get_lang('Yes'), get_lang('No')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
11 years ago
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.json.php" target="_blank">JSON</a> '.get_lang('Support').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkExtension('json', get_lang('Yes'), get_lang('No')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
11 years ago
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.image.php" target="_blank">GD</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('gd', get_lang('Yes'), get_lang('GD Extension not available')).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
10 years ago
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.curl.php" target="_blank">cURL</a>'.get_lang('Support').'</td>
|
||
![]()
10 years ago
|
<td class="requirements-value">'.checkExtension('curl', get_lang('Yes'), get_lang('No')).'</td>
|
||
|
</tr>
|
||
![]()
15 years ago
|
<tr>
|
||
![]()
6 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.mbstring.php" target="_blank">Multibyte string</a> '.get_lang('Support').'</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('mbstring', get_lang('Yes'), get_lang('MBString extension not available'), true).'</td>
|
||
![]()
6 years ago
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.exif.php" target="_blank">Exif</a> '.get_lang('Support').'</td>
|
||
|
<td class="requirements-value">'.checkExtension('exif', get_lang('Yes'), get_lang('Exif extension not available'), true).'</td>
|
||
![]()
11 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/opcache" target="_blank">Zend OpCache</a> '.get_lang('Support').' ('.get_lang('Optional').')</td>
|
||
|
<td class="requirements-value">'.checkExtension('Zend OPcache', get_lang('Yes'), get_lang('No'), true, 'opcache.enable').'</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/apcu" target="_blank">APCu</a> '.get_lang('Support').' ('.get_lang('Optional').')</td>
|
||
|
<td class="requirements-value">'.checkExtension('apcu', get_lang('Yes'), get_lang('No'), true, 'apc.enabled').'</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.iconv.php" target="_blank">Iconv</a> '.get_lang('Support').' ('.get_lang('Optional').')</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkExtension('iconv', get_lang('Yes'), get_lang('No'), true).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://php.net/manual/en/book.ldap.php" target="_blank">LDAP</a> '.get_lang('Support').' ('.get_lang('Optional').')</td>
|
||
![]()
6 years ago
|
<td class="requirements-value">'.checkExtension('ldap', get_lang('Yes'), get_lang('LDAP Extension not available'), true).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
9 years ago
|
<td class="requirements-item"><a href="http://xapian.org/" target="_blank">Xapian</a> '.get_lang('Support').' ('.get_lang('Optional').')</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkExtension('xapian', get_lang('Yes'), get_lang('No'), true).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
10 years ago
|
</table>';
|
||
|
echo '</div>';
|
||
![]()
7 years ago
|
|
||
![]()
15 years ago
|
// RECOMMENDED SETTINGS
|
||
|
// Note: these are the settings for Joomla, does this also apply for Chamilo?
|
||
|
// Note: also add upload_max_filesize here so that large uploads are possible
|
||
![]()
6 years ago
|
echo '<h4 class="install-subtitle">'.get_lang('(recommended) settings').'</h4>';
|
||
|
echo '<div class="install-requirement">'.get_lang('(recommended) settingsInfo').'</div>';
|
||
![]()
7 years ago
|
echo '<div class="table-responsive">';
|
||
|
echo '<table class="table table-bordered">
|
||
![]()
15 years ago
|
<tr>
|
||
|
<th>'.get_lang('Setting').'</th>
|
||
![]()
6 years ago
|
<th>'.get_lang('(recommended)').'</th>
|
||
|
<th>'.get_lang('Currently').'</th>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
7 years ago
|
|
||
![]()
15 years ago
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ref.errorfunc.php#ini.display-errors">Display Errors</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('OFF', 'success').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkPhpSetting('display_errors', 'OFF').'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.file-uploads">File Uploads</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('ON', 'success').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkPhpSetting('file_uploads', 'ON').'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ref.session.php#ini.session.auto-start">Session auto start</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('OFF', 'success').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkPhpSetting('session.auto_start', 'OFF').'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.short-open-tag">Short Open Tag</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('OFF', 'success').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkPhpSetting('short_open_tag', 'OFF').'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
15 years ago
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly">Cookie HTTP Only</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('ON', 'success').'</td>
|
||
![]()
11 years ago
|
<td class="requirements-value">'.checkPhpSetting('session.cookie_httponly', 'ON').'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
![]()
15 years ago
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.upload-max-filesize">Maximum upload file size</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('>= '.REQUIRED_MIN_UPLOAD_MAX_FILESIZE.'M', 'success').'</td>
|
||
|
<td class="requirements-value">'.compare_setting_values(ini_get('upload_max_filesize'), REQUIRED_MIN_UPLOAD_MAX_FILESIZE).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://php.net/manual/ini.core.php#ini.post-max-size">Maximum post size</a></td>
|
||
![]()
13 years ago
|
<td class="requirements-recommended">'.Display::label('>= '.REQUIRED_MIN_POST_MAX_SIZE.'M', 'success').'</td>
|
||
|
<td class="requirements-value">'.compare_setting_values(ini_get('post_max_size'), REQUIRED_MIN_POST_MAX_SIZE).'</td>
|
||
![]()
12 years ago
|
</tr>
|
||
![]()
13 years ago
|
<tr>
|
||
|
<td class="requirements-item"><a href="http://www.php.net/manual/en/ini.core.php#ini.memory-limit">Memory Limit</a></td>
|
||
|
<td class="requirements-recommended">'.Display::label('>= '.REQUIRED_MIN_MEMORY_LIMIT.'M', 'success').'</td>
|
||
![]()
7 years ago
|
<td class="requirements-value">'.compare_setting_values($originalMemoryLimit, REQUIRED_MIN_MEMORY_LIMIT).'</td>
|
||
![]()
15 years ago
|
</tr>
|
||
|
</table>';
|
||
|
echo '</div>';
|
||
|
|
||
|
// DIRECTORY AND FILE PERMISSIONS
|
||
![]()
6 years ago
|
echo '<h4 class="install-subtitle">'.get_lang('Directory and files permissions').'</h4>';
|
||
|
echo '<div class="install-requirement">'.get_lang('Directory and files permissionsInfo').'</div>';
|
||
![]()
7 years ago
|
echo '<div class="table-responsive">';
|
||
![]()
12 years ago
|
|
||
![]()
13 years ago
|
$_SESSION['permissions_for_new_directories'] = $_setting['permissions_for_new_directories'] = $dir_perm_verified;
|
||
![]()
12 years ago
|
$_SESSION['permissions_for_new_files'] = $_setting['permissions_for_new_files'] = $fil_perm_verified;
|
||
![]()
12 years ago
|
|
||
![]()
13 years ago
|
$dir_perm = Display::label('0'.decoct($dir_perm_verified), 'info');
|
||
|
$file_perm = Display::label('0'.decoct($fil_perm_verified), 'info');
|
||
![]()
12 years ago
|
|
||
![]()
11 years ago
|
$oldConf = '';
|
||
|
if (file_exists(api_get_path(SYS_CODE_PATH).'inc/conf/configuration.php')) {
|
||
|
$oldConf = '<tr>
|
||
|
<td class="requirements-item">'.api_get_path(SYS_CODE_PATH).'inc/conf</td>
|
||
|
<td class="requirements-value">'.check_writable(api_get_path(SYS_CODE_PATH).'inc/conf').'</td>
|
||
|
</tr>';
|
||
|
}
|
||
|
|
||
![]()
7 years ago
|
echo '<table class="table table-bordered">
|
||
![]()
11 years ago
|
'.$oldConf.'
|
||
![]()
15 years ago
|
<tr>
|
||
![]()
11 years ago
|
<td class="requirements-item">'.api_get_path(SYS_APP_PATH).'</td>
|
||
|
<td class="requirements-value">'.check_writable(api_get_path(SYS_APP_PATH)).'</td>
|
||
![]()
11 years ago
|
</tr>
|
||
|
<tr>
|
||
![]()
7 years ago
|
<td class="requirements-item">'.api_get_path(SYS_PATH).'config</td>
|
||
|
<td class="requirements-value">'.check_writable(api_get_path(SYS_PATH).'config').'</td>
|
||
![]()
11 years ago
|
</tr>
|
||
![]()
11 years ago
|
<tr>
|
||
|
<td class="requirements-item">'.api_get_path(SYS_PATH).'vendor/</td>
|
||
|
<td class="requirements-value">'.checkReadable(api_get_path(SYS_PATH).'vendor').'</td>
|
||
|
</tr>
|
||
![]()
11 years ago
|
<tr>
|
||
|
<td class="requirements-item">'.api_get_path(SYS_PUBLIC_PATH).'</td>
|
||
|
<td class="requirements-value">'.check_writable(api_get_path(SYS_PUBLIC_PATH)).'</td>
|
||
![]()
6 years ago
|
</tr>
|
||
![]()
13 years ago
|
<tr>
|
||
![]()
6 years ago
|
<td class="requirements-item">'.get_lang('Permissions for new directories').'</td>
|
||
![]()
13 years ago
|
<td class="requirements-value">'.$dir_perm.' </td>
|
||
![]()
12 years ago
|
</tr>
|
||
![]()
13 years ago
|
<tr>
|
||
![]()
6 years ago
|
<td class="requirements-item">'.get_lang('Permissions for new files').'</td>
|
||
![]()
13 years ago
|
<td class="requirements-value">'.$file_perm.' </td>
|
||
![]()
12 years ago
|
</tr>
|
||
![]()
9 years ago
|
</table>';
|
||
![]()
7 years ago
|
|
||
![]()
15 years ago
|
echo '</div>';
|
||
|
|
||
![]()
6 years ago
|
if ($installType === 'update' && (empty($updatePath) || $badUpdatePath)) {
|
||
![]()
8 years ago
|
if ($badUpdatePath) {
|
||
|
?>
|
||
![]()
10 years ago
|
<div class="alert alert-warning">
|
||
![]()
15 years ago
|
<?php echo get_lang('Error'); ?>!<br />
|
||
![]()
6 years ago
|
Chamilo <?php echo implode('|', $update_from_version_8).' '.get_lang('has not been found in that directory'); ?>.
|
||
![]()
15 years ago
|
</div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} else {
|
||
![]()
15 years ago
|
echo '<br />';
|
||
![]()
8 years ago
|
} ?>
|
||
![]()
10 years ago
|
<div class="row">
|
||
|
<div class="col-md-12">
|
||
![]()
6 years ago
|
<p><?php echo get_lang('Old version\'s root path'); ?>:
|
||
![]()
10 years ago
|
<input type="text" name="updatePath" size="50" value="<?php echo ($badUpdatePath && !empty($updatePath)) ? htmlentities($updatePath) : ''; ?>" />
|
||
![]()
10 years ago
|
</p>
|
||
|
<p>
|
||
![]()
7 years ago
|
<div class="btn-group">
|
||
|
<button type="submit" class="btn btn-secondary" name="step1" value="<?php echo get_lang('Back'); ?>" >
|
||
|
<em class="fa fa-backward"> <?php echo get_lang('Back'); ?></em>
|
||
|
</button>
|
||
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
|
<button type="submit" class="btn btn-success" name="<?php echo isset($_POST['step2_update_6']) ? 'step2_update_6' : 'step2_update_8'; ?>" value="<?php echo get_lang('Next'); ?> >" >
|
||
|
<em class="fa fa-forward"> </em> <?php echo get_lang('Next'); ?>
|
||
|
</button>
|
||
|
</div>
|
||
![]()
10 years ago
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
![]()
15 years ago
|
<?php
|
||
|
} else {
|
||
|
$error = false;
|
||
|
// First, attempt to set writing permissions if we don't have them yet
|
||
![]()
7 years ago
|
$perm = api_get_permissions_for_new_directories();
|
||
|
$perm_file = api_get_permissions_for_new_files();
|
||
![]()
8 years ago
|
$notWritable = [];
|
||
![]()
16 years ago
|
|
||
![]()
11 years ago
|
$checked_writable = api_get_path(SYS_APP_PATH);
|
||
![]()
15 years ago
|
if (!is_writable($checked_writable)) {
|
||
![]()
11 years ago
|
$notWritable[] = $checked_writable;
|
||
![]()
15 years ago
|
@chmod($checked_writable, $perm);
|
||
|
}
|
||
![]()
16 years ago
|
|
||
![]()
11 years ago
|
$checked_writable = api_get_path(SYS_PUBLIC_PATH);
|
||
|
if (!is_writable($checked_writable)) {
|
||
|
$notWritable[] = $checked_writable;
|
||
|
@chmod($checked_writable, $perm);
|
||
|
}
|
||
![]()
11 years ago
|
|
||
![]()
12 years ago
|
if ($course_test_was_created == false) {
|
||
![]()
13 years ago
|
$error = true;
|
||
|
}
|
||
![]()
12 years ago
|
|
||
![]()
16 years ago
|
$checked_writable = api_get_path(CONFIGURATION_PATH).'configuration.php';
|
||
![]()
15 years ago
|
if (file_exists($checked_writable) && !is_writable($checked_writable)) {
|
||
![]()
11 years ago
|
$notWritable[] = $checked_writable;
|
||
![]()
15 years ago
|
@chmod($checked_writable, $perm_file);
|
||
|
}
|
||
|
|
||
|
// Second, if this fails, report an error
|
||
|
//--> The user would have to adjust the permissions manually
|
||
![]()
11 years ago
|
if (count($notWritable) > 0) {
|
||
![]()
8 years ago
|
$error = true; ?>
|
||
![]()
9 years ago
|
<div class="text-danger">
|
||
![]()
6 years ago
|
<h3 class="text-center"><?php echo get_lang('Warning !'); ?></h3>
|
||
![]()
9 years ago
|
<p>
|
||
![]()
6 years ago
|
<?php printf(get_lang('Some files or folders don\'t have writing permission. To be able to install Chamilo you should first change their permissions (using CHMOD). Please read the %s installation guide %s'), '<a href="../../documentation/installation_guide.html" target="blank">', '</a>'); ?>
|
||
![]()
9 years ago
|
</p>
|
||
|
</div>
|
||
|
<?php
|
||
![]()
15 years ago
|
echo '<ul>';
|
||
![]()
11 years ago
|
foreach ($notWritable as $value) {
|
||
![]()
9 years ago
|
echo '<li class="text-danger">'.$value.'</li>';
|
||
![]()
15 years ago
|
}
|
||
|
echo '</ul>';
|
||
![]()
11 years ago
|
} elseif (file_exists(api_get_path(CONFIGURATION_PATH).'configuration.php')) {
|
||
|
// Check wether a Chamilo configuration file already exists.
|
||
![]()
10 years ago
|
echo '<div class="alert alert-warning"><h4><center>';
|
||
![]()
6 years ago
|
echo get_lang('Warning !ExistingLMSInstallationDetected');
|
||
![]()
14 years ago
|
echo '</center></h4></div>';
|
||
![]()
15 years ago
|
}
|
||
|
|
||
![]()
9 years ago
|
$deprecated = [
|
||
![]()
8 years ago
|
api_get_path(SYS_CODE_PATH).'exercice/',
|
||
|
api_get_path(SYS_CODE_PATH).'newscorm/',
|
||
![]()
8 years ago
|
api_get_path(SYS_PLUGIN_PATH).'ticket/',
|
||
![]()
8 years ago
|
api_get_path(SYS_PLUGIN_PATH).'skype/',
|
||
![]()
9 years ago
|
];
|
||
![]()
9 years ago
|
$deprecatedToRemove = [];
|
||
![]()
9 years ago
|
foreach ($deprecated as $deprecatedDirectory) {
|
||
|
if (!is_dir($deprecatedDirectory)) {
|
||
|
continue;
|
||
|
}
|
||
![]()
9 years ago
|
$deprecatedToRemove[] = $deprecatedDirectory;
|
||
![]()
9 years ago
|
}
|
||
|
|
||
![]()
7 years ago
|
if (count($deprecatedToRemove) > 0) {
|
||
|
?>
|
||
![]()
6 years ago
|
<p class="text-danger"><?php echo get_lang('Warning !ForDeprecatedDirectoriesForUpgrade'); ?></p>
|
||
![]()
9 years ago
|
<ul>
|
||
![]()
8 years ago
|
<?php foreach ($deprecatedToRemove as $deprecatedDirectory) {
|
||
|
?>
|
||
![]()
8 years ago
|
<li class="text-danger"><?php echo $deprecatedDirectory; ?></li>
|
||
![]()
8 years ago
|
<?php
|
||
|
} ?>
|
||
![]()
9 years ago
|
</ul>
|
||
|
<?php
|
||
|
}
|
||
![]()
9 years ago
|
|
||
![]()
8 years ago
|
// And now display the choice buttons (go back or install)?>
|
||
![]()
14 years ago
|
<p align="center" style="padding-top:15px">
|
||
![]()
7 years ago
|
<button type="submit" name="step1" class="btn btn-default" onclick="javascript: window.location='index.php'; return false;" value="<?php echo get_lang('Previous'); ?>" >
|
||
|
<em class="fa fa-backward"> </em> <?php echo get_lang('Previous'); ?>
|
||
|
</button>
|
||
![]()
6 years ago
|
<button type="submit" name="step2_install" class="btn btn-success" value="<?php echo get_lang("New installation"); ?>" <?php if ($error) {
|
||
![]()
7 years ago
|
echo 'disabled="disabled"';
|
||
|
} ?> >
|
||
![]()
6 years ago
|
<em class="fa fa-forward"> </em> <?php echo get_lang('New installation'); ?>
|
||
![]()
7 years ago
|
</button>
|
||
![]()
15 years ago
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
![]()
8 years ago
|
<button type="submit" class="btn btn-default" <?php echo !$error ?: 'disabled="disabled"'; ?> name="step2_update_8" value="Upgrade from Chamilo 1.9.x">
|
||
![]()
6 years ago
|
<em class="fa fa-forward" aria-hidden="true"></em> <?php echo get_lang('Upgrade Chamilo LMS version'); ?>
|
||
![]()
9 years ago
|
</button>
|
||
|
</p>
|
||
![]()
15 years ago
|
<?php
|
||
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* Displays the license (GNU GPL) as step 2, with
|
||
|
* - an "I accept" button named step3 to proceed to step 3;
|
||
|
* - a "Back" button named step1 to go back to the first step.
|
||
|
*/
|
||
![]()
11 years ago
|
function display_license_agreement()
|
||
|
{
|
||
![]()
15 years ago
|
echo '<div class="RequirementHeading"><h2>'.display_step_sequence().get_lang('Licence').'</h2>';
|
||
![]()
6 years ago
|
echo '<p>'.get_lang('Chamilo is free software distributed under the GNU General Public licence (GPL).').'</p>';
|
||
|
echo '<p><a href="../../documentation/license.html" target="_blank">'.get_lang('Printable version').'</a></p>';
|
||
![]()
8 years ago
|
echo '</div>'; ?>
|
||
![]()
7 years ago
|
<div class="form-group">
|
||
|
<pre style="overflow: auto; height: 200px; margin-top: 5px;">
|
||
|
<?php echo api_htmlentities(@file_get_contents(api_get_path(SYS_PATH).'documentation/license.txt')); ?>
|
||
|
</pre>
|
||
|
</div>
|
||
|
<div class="form-group form-check">
|
||
|
<input type="checkbox" name="accept" id="accept_licence" value="1">
|
||
![]()
6 years ago
|
<label for="accept_licence"><?php echo get_lang('I Accept'); ?></label>
|
||
![]()
10 years ago
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col-md-12">
|
||
![]()
6 years ago
|
<p class="alert alert-info"><?php echo get_lang('The images and media galleries of Chamilo use images from Nuvola, Crystal Clear and Tango icon galleries. Other images and media like diagrams and Flash animations are borrowed from Wikimedia and Ali Pakdel\'s and Denis Hoa\'s courses with their agreement and released under BY-SA Creative Commons license. You may find the license details at <a href="http://creativecommons.org/licenses/by-sa/3.0/">the CC website</a>, where a link to the full text of the license is provided at the bottom of the page.'); ?></p>
|
||
![]()
10 years ago
|
</div>
|
||
|
</div>
|
||
![]()
14 years ago
|
|
||
|
<!-- Contact information form -->
|
||
![]()
9 years ago
|
<div class="section-parameters">
|
||
![]()
11 years ago
|
<a href="javascript://" class = "advanced_parameters" >
|
||
![]()
6 years ago
|
<span id="img_plus_and_minus"> <i class="fa fa-eye" aria-hidden="true"></i> <?php echo get_lang('Contact information'); ?></span>
|
||
![]()
11 years ago
|
</a>
|
||
![]()
12 years ago
|
</div>
|
||
![]()
12 years ago
|
|
||
![]()
14 years ago
|
<div id="id_contact_form" style="display:block">
|
||
![]()
6 years ago
|
<div class="normal-message"><?php echo get_lang('Contact informationDescription'); ?></div>
|
||
![]()
14 years ago
|
<div id="contact_registration">
|
||
![]()
8 years ago
|
<p><?php echo get_contact_registration_form(); ?></p><br />
|
||
![]()
12 years ago
|
</div>
|
||
|
</div>
|
||
![]()
9 years ago
|
<div class="text-center">
|
||
![]()
9 years ago
|
<button type="submit" class="btn btn-default" name="step1" value="< <?php echo get_lang('Previous'); ?>" >
|
||
|
<em class="fa fa-backward"> </em> <?php echo get_lang('Previous'); ?>
|
||
|
</button>
|
||
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
![]()
6 years ago
|
<button type="submit" id="license-next" class="btn btn-success" name="step3" onclick="javascript: if(!document.getElementById('accept_licence').checked) { alert('<?php echo get_lang('You must accept the licence'); ?>');return false;}" value="<?php echo get_lang('Next'); ?> >" >
|
||
![]()
9 years ago
|
<em class="fa fa-forward"> </em> <?php echo get_lang('Next'); ?>
|
||
|
</button>
|
||
![]()
9 years ago
|
</div>
|
||
![]()
15 years ago
|
<?php
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
![]()
8 years ago
|
* Get contact registration form.
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function get_contact_registration_form()
|
||
|
{
|
||
![]()
8 years ago
|
$html = '
|
||
![]()
9 years ago
|
<div class="form-horizontal">
|
||
![]()
10 years ago
|
<div class="panel panel-default">
|
||
|
<div class="panel-body">
|
||
![]()
12 years ago
|
<div id="div_sent_information"></div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('Name').'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-9"><input id="person_name" class="form-control" type="text" name="person_name" size="30" /></div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('e-mail').'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-9"><input id="person_email" class="form-control" type="text" name="person_email" size="30" /></div>
|
||
![]()
15 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('Your company\'s name').'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-9"><input id="company_name" class="form-control" type="text" name="company_name" size="30" /></div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('Your company\'s activity').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">
|
||
|
<select class="selectpicker show-tick" name="company_activity" id="company_activity" >
|
||
![]()
6 years ago
|
<option value="">--- '.get_lang('Select one').' ---</option>
|
||
![]()
9 years ago
|
<Option value="Advertising/Marketing/PR">Advertising/Marketing/PR</Option><Option value="Agriculture/Forestry">Agriculture/Forestry</Option>
|
||
|
<Option value="Architecture">Architecture</Option><Option value="Banking/Finance">Banking/Finance</Option>
|
||
|
<Option value="Biotech/Pharmaceuticals">Biotech/Pharmaceuticals</Option><Option value="Business Equipment">Business Equipment</Option>
|
||
|
<Option value="Business Services">Business Services</Option><Option value="Construction">Construction</Option>
|
||
|
<Option value="Consulting/Research">Consulting/Research</Option><Option value="Education">Education</Option>
|
||
|
<Option value="Engineering">Engineering</Option><Option value="Environmental">Environmental</Option>
|
||
|
<Option value="Government">Government</Option><Option value="Healthcare">Health Care</Option>
|
||
|
<Option value="Hospitality/Lodging/Travel">Hospitality/Lodging/Travel</Option><Option value="Insurance">Insurance</Option>
|
||
|
<Option value="Legal">Legal</Option><Option value="Manufacturing">Manufacturing</Option>
|
||
|
<Option value="Media/Entertainment">Media/Entertainment</Option><Option value="Mortgage">Mortgage</Option>
|
||
|
<Option value="Non-Profit">Non-Profit</Option><Option value="Real Estate">Real Estate</Option>
|
||
|
<Option value="Restaurant">Restaurant</Option><Option value="Retail">Retail</Option>
|
||
|
<Option value="Shipping/Transportation">Shipping/Transportation</Option>
|
||
|
<Option value="Technology">Technology</Option><Option value="Telecommunications">Telecommunications</Option>
|
||
|
<Option value="Other">Other</Option>
|
||
|
</select>
|
||
|
</div>
|
||
![]()
16 years ago
|
</div>
|
||
|
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('Your job\'s description').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">
|
||
|
<select class="selectpicker show-tick" name="person_role" id="person_role" >
|
||
![]()
6 years ago
|
<option value="">--- '.get_lang('Select one').' ---</option>
|
||
![]()
9 years ago
|
<Option value="Administration">Administration</Option><Option value="CEO/President/ Owner">CEO/President/ Owner</Option>
|
||
|
<Option value="CFO">CFO</Option><Option value="CIO/CTO">CIO/CTO</Option>
|
||
|
<Option value="Consultant">Consultant</Option><Option value="Customer Service">Customer Service</Option>
|
||
|
<Option value="Engineer/Programmer">Engineer/Programmer</Option><Option value="Facilities/Operations">Facilities/Operations</Option>
|
||
|
<Option value="Finance/ Accounting Manager">Finance/ Accounting Manager</Option><Option value="Finance/ Accounting Staff">Finance/ Accounting Staff</Option>
|
||
|
<Option value="General Manager">General Manager</Option><Option value="Human Resources">Human Resources</Option>
|
||
|
<Option value="IS/IT Management">IS/IT Management</Option><Option value="IS/ IT Staff">IS/ IT Staff</Option>
|
||
|
<Option value="Marketing Manager">Marketing Manager</Option><Option value="Marketing Staff">Marketing Staff</Option>
|
||
|
<Option value="Partner/Principal">Partner/Principal</Option><Option value="Purchasing Manager">Purchasing Manager</Option>
|
||
|
<Option value="Sales/ Business Dev. Manager">Sales/ Business Dev. Manager</Option><Option value="Sales/ Business Dev.">Sales/ Business Dev.</Option>
|
||
|
<Option value="Vice President/Senior Manager">Vice President/Senior Manager</Option><Option value="Other">Other</Option>
|
||
|
</select>
|
||
|
</div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
12 years ago
|
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3"><span class="form_required">*</span>'.get_lang('Your company\'s home country').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">'.get_countries_list_from_array(true).'</div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3">'.get_lang('Company city').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">
|
||
|
<input type="text" class="form-control" id="company_city" name="company_city" size="30" />
|
||
|
</div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3">'.get_lang('Preferred contact language').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">
|
||
|
<select class="selectpicker show-tick" id="language" name="language">
|
||
|
<option value="bulgarian">Bulgarian</option>
|
||
|
<option value="indonesian">Bahasa Indonesia</option>
|
||
|
<option value="bosnian">Bosanski</option>
|
||
|
<option value="german">Deutsch</option>
|
||
|
<option selected="selected" value="english">English</option>
|
||
|
<option value="spanish">Spanish</option>
|
||
|
<option value="french">Français</option>
|
||
|
<option value="italian">Italian</option>
|
||
|
<option value="hungarian">Magyar</option>
|
||
|
<option value="dutch">Nederlands</option>
|
||
|
<option value="brazilian">Português do Brasil</option>
|
||
|
<option value="portuguese">Português europeu</option>
|
||
|
<option value="slovenian">Slovenčina</option>
|
||
|
</select>
|
||
|
</div>
|
||
![]()
16 years ago
|
</div>
|
||
![]()
12 years ago
|
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-3">'.get_lang('Do you have the power to take financial decisions on behalf of your company?').'</label>
|
||
![]()
9 years ago
|
<div class="col-sm-9">
|
||
|
<div class="radio">
|
||
|
<label>
|
||
![]()
8 years ago
|
<input type="radio" name="financial_decision" id="financial_decision1" value="1" checked /> '.get_lang('Yes').'
|
||
![]()
9 years ago
|
</label>
|
||
|
</div>
|
||
|
<div class="radio">
|
||
|
<label>
|
||
|
<input type="radio" name="financial_decision" id="financial_decision2" value="0" /> '.get_lang('No').'
|
||
|
</label>
|
||
![]()
14 years ago
|
</div>
|
||
![]()
9 years ago
|
</div>
|
||
![]()
14 years ago
|
</div>
|
||
|
<div class="clear"></div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<div class="col-sm-3"> </div>
|
||
![]()
6 years ago
|
<div class="col-sm-9"><button type="button" class="btn btn-default" onclick="javascript:send_contact_information();" value="'.get_lang('Send information').'" ><em class="fa fa-floppy-o"></em> '.get_lang('Send information').'</button> <span id="loader-button"></span></div>
|
||
![]()
12 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<div class="col-sm-3"> </div>
|
||
![]()
6 years ago
|
<div class="col-sm-9"><span class="form_required">*</span><small>'.get_lang('Mandatory field').'</small></div>
|
||
![]()
10 years ago
|
</div></div></div>
|
||
![]()
9 years ago
|
</div>';
|
||
![]()
16 years ago
|
|
||
![]()
11 years ago
|
return $html;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
![]()
16 years ago
|
/**
|
||
|
* Displays a parameter in a table row.
|
||
|
* Used by the display_database_settings_form function.
|
||
![]()
8 years ago
|
*
|
||
![]()
15 years ago
|
* @param string Type of install
|
||
|
* @param string Name of parameter
|
||
|
* @param string Field name (in the HTML form)
|
||
|
* @param string Field value
|
||
|
* @param string Extra notice (to show on the right side)
|
||
![]()
8 years ago
|
* @param bool Whether to display in update mode
|
||
![]()
15 years ago
|
* @param string Additional attribute for the <tr> element
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function displayDatabaseParameter(
|
||
|
$installType,
|
||
|
$parameterName,
|
||
|
$formFieldName,
|
||
|
$parameterValue,
|
||
|
$extra_notice,
|
||
|
$displayWhenUpdate = true,
|
||
|
$tr_attribute = ''
|
||
|
) {
|
||
![]()
10 years ago
|
//echo "<tr ".$tr_attribute.">";
|
||
|
echo "<label class='col-sm-4'>$parameterName</label>";
|
||
![]()
12 years ago
|
|
||
![]()
11 years ago
|
if ($installType == INSTALL_TYPE_UPDATE && $displayWhenUpdate) {
|
||
![]()
10 years ago
|
echo '<input type="hidden" name="'.$formFieldName.'" id="'.$formFieldName.'" value="'.api_htmlentities($parameterValue).'" />'.$parameterValue;
|
||
![]()
15 years ago
|
} else {
|
||
![]()
11 years ago
|
$inputType = $formFieldName == 'dbPassForm' ? 'password' : 'text';
|
||
![]()
15 years ago
|
|
||
|
//Slightly limit the length of the database prefix to avoid having to cut down the databases names later on
|
||
![]()
11 years ago
|
$maxLength = $formFieldName == 'dbPrefixForm' ? '15' : MAX_FORM_FIELD_LENGTH;
|
||
|
if ($installType == INSTALL_TYPE_UPDATE) {
|
||
|
echo '<input type="hidden" name="'.$formFieldName.'" id="'.$formFieldName.'" value="'.api_htmlentities($parameterValue).'" />';
|
||
![]()
10 years ago
|
echo api_htmlentities($parameterValue);
|
||
![]()
15 years ago
|
} else {
|
||
![]()
8 years ago
|
echo '<div class="col-sm-5"><input type="'.$inputType.'" class="form-control" size="'.DATABASE_FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.$maxLength.'" name="'.$formFieldName.'" id="'.$formFieldName.'" value="'.api_htmlentities($parameterValue).'" />'."</div>";
|
||
|
echo '<div class="col-sm-3">'.$extra_notice.'</div>';
|
||
![]()
15 years ago
|
}
|
||
![]()
15 years ago
|
}
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* Displays step 3 - 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...
|
||
![]()
8 years ago
|
*
|
||
![]()
10 years ago
|
* @param string $installType
|
||
|
* @param string $dbHostForm
|
||
|
* @param string $dbUsernameForm
|
||
|
* @param string $dbPassForm
|
||
|
* @param string $dbNameForm
|
||
![]()
10 years ago
|
* @param int $dbPortForm
|
||
![]()
10 years ago
|
* @param string $installationProfile
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function display_database_settings_form(
|
||
|
$installType,
|
||
|
$dbHostForm,
|
||
|
$dbUsernameForm,
|
||
|
$dbPassForm,
|
||
![]()
10 years ago
|
$dbNameForm,
|
||
![]()
10 years ago
|
$dbPortForm = 3306,
|
||
![]()
10 years ago
|
$installationProfile = ''
|
||
![]()
11 years ago
|
) {
|
||
![]()
15 years ago
|
if ($installType == 'update') {
|
||
![]()
11 years ago
|
global $_configuration;
|
||
![]()
10 years ago
|
$dbHostForm = $_configuration['db_host'];
|
||
|
$dbUsernameForm = $_configuration['db_user'];
|
||
|
$dbPassForm = $_configuration['db_password'];
|
||
|
$dbNameForm = $_configuration['main_database'];
|
||
|
$dbPortForm = isset($_configuration['db_port']) ? $_configuration['db_port'] : '';
|
||
![]()
12 years ago
|
|
||
![]()
7 years ago
|
echo '<div class="RequirementHeading"><h2>'.display_step_sequence().get_lang('Database settings').'</h2></div>';
|
||
![]()
15 years ago
|
echo '<div class="RequirementContent">';
|
||
![]()
6 years ago
|
echo get_lang('The upgrade script will recover and update the Chamilo database(s). In order to do this, this script will use the databases and settings defined below. Because our software runs on a wide range of systems and because all of them might not have been tested, we strongly recommend you do a full backup of your databases before you proceed with the upgrade!');
|
||
![]()
15 years ago
|
echo '</div>';
|
||
![]()
14 years ago
|
} else {
|
||
![]()
7 years ago
|
echo '<div class="RequirementHeading"><h2>'.display_step_sequence().get_lang('Database settings').'</h2></div>';
|
||
![]()
15 years ago
|
echo '<div class="RequirementContent">';
|
||
![]()
6 years ago
|
echo get_lang('The install script will create (or use) the Chamilo database using the database name given here. Please make sure the user you give has the right to create the database by the name given here. If a database with this name exists, it will be overwritten. Please do not use the root user as the Chamilo database user. This can lead to serious security issues.');
|
||
![]()
12 years ago
|
echo '</div>';
|
||
![]()
8 years ago
|
} ?>
|
||
![]()
10 years ago
|
<div class="panel panel-default">
|
||
|
<div class="panel-body">
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-4"><?php echo get_lang('Database Host'); ?> </label>
|
||
![]()
8 years ago
|
<?php if ($installType == 'update') {
|
||
|
?>
|
||
![]()
10 years ago
|
<div class="col-sm-5">
|
||
|
<input type="hidden" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" /><?php echo $dbHostForm; ?>
|
||
|
</div>
|
||
|
<div class="col-sm-3"></div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} else {
|
||
|
?>
|
||
![]()
10 years ago
|
<div class="col-sm-5">
|
||
![]()
10 years ago
|
<input type="text" class="form-control" size="25" maxlength="50" name="dbHostForm" value="<?php echo htmlentities($dbHostForm); ?>" />
|
||
![]()
10 years ago
|
</div>
|
||
![]()
6 years ago
|
<div class="col-sm-3"><?php echo get_lang('ex.').' localhost'; ?></div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-4"><?php echo get_lang('Port'); ?> </label>
|
||
![]()
8 years ago
|
<?php if ($installType == 'update') {
|
||
|
?>
|
||
![]()
10 years ago
|
<div class="col-sm-5">
|
||
|
<input type="hidden" name="dbPortForm" value="<?php echo htmlentities($dbPortForm); ?>" /><?php echo $dbPortForm; ?>
|
||
|
</div>
|
||
|
<div class="col-sm-3"></div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} else {
|
||
|
?>
|
||
![]()
10 years ago
|
<div class="col-sm-5">
|
||
![]()
10 years ago
|
<input type="text" class="form-control" size="25" maxlength="50" name="dbPortForm" value="<?php echo htmlentities($dbPortForm); ?>" />
|
||
![]()
10 years ago
|
</div>
|
||
![]()
6 years ago
|
<div class="col-sm-3"><?php echo get_lang('ex.').' 3306'; ?></div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<?php
|
||
|
//database user username
|
||
![]()
6 years ago
|
$example_login = get_lang('ex.').' root';
|
||
|
displayDatabaseParameter($installType, get_lang('Database Login'), 'dbUsernameForm', $dbUsernameForm, $example_login); ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<?php
|
||
|
//database user password
|
||
![]()
6 years ago
|
$example_password = get_lang('ex.').' '.api_generate_password();
|
||
|
displayDatabaseParameter($installType, get_lang('Database Password'), 'dbPassForm', $dbPassForm, $example_password); ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
![]()
10 years ago
|
<?php
|
||
|
//Database Name fix replace weird chars
|
||
|
if ($installType != INSTALL_TYPE_UPDATE) {
|
||
![]()
8 years ago
|
$dbNameForm = str_replace(['-', '*', '$', ' ', '.'], '', $dbNameForm);
|
||
![]()
10 years ago
|
}
|
||
![]()
12 years ago
|
|
||
![]()
8 years ago
|
displayDatabaseParameter(
|
||
![]()
10 years ago
|
$installType,
|
||
![]()
6 years ago
|
get_lang('Main Chamilo database (DB)'),
|
||
![]()
10 years ago
|
'dbNameForm',
|
||
|
$dbNameForm,
|
||
|
' ',
|
||
|
null,
|
||
|
'id="optional_param1"'
|
||
![]()
8 years ago
|
); ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
8 years ago
|
<?php if ($installType != INSTALL_TYPE_UPDATE) {
|
||
|
?>
|
||
![]()
7 years ago
|
<div class="form-group row">
|
||
|
<div class="col-sm-4"></div>
|
||
|
<div class="col-sm-8">
|
||
![]()
11 years ago
|
<button type="submit" class="btn btn-primary" name="step3" value="step3">
|
||
![]()
10 years ago
|
<em class="fa fa-refresh"> </em>
|
||
![]()
6 years ago
|
<?php echo get_lang('Check database connection'); ?>
|
||
![]()
11 years ago
|
</button>
|
||
![]()
10 years ago
|
</div>
|
||
|
</div>
|
||
![]()
8 years ago
|
<?php
|
||
|
} ?>
|
||
![]()
10 years ago
|
|
||
|
</div>
|
||
|
</div>
|
||
![]()
8 years ago
|
<?php
|
||
![]()
14 years ago
|
$database_exists_text = '';
|
||
![]()
8 years ago
|
$manager = null;
|
||
|
try {
|
||
![]()
7 years ago
|
if ($installType === 'update') {
|
||
|
/** @var \Database $manager */
|
||
|
$manager = connectToDatabase(
|
||
|
$dbHostForm,
|
||
|
$dbUsernameForm,
|
||
|
$dbPassForm,
|
||
|
$dbNameForm,
|
||
|
$dbPortForm
|
||
|
);
|
||
|
|
||
|
$connection = $manager->getConnection();
|
||
|
$connection->connect();
|
||
|
$schemaManager = $connection->getSchemaManager();
|
||
|
|
||
|
// Test create/alter/drop table
|
||
|
$table = 'zXxTESTxX_'.mt_rand(0, 1000);
|
||
|
$sql = "CREATE TABLE $table (id INT AUTO_INCREMENT NOT NULL, name varchar(255), PRIMARY KEY(id))";
|
||
|
$connection->query($sql);
|
||
|
$tableCreationWorks = false;
|
||
|
$tableDropWorks = false;
|
||
|
if ($schemaManager->tablesExist($table)) {
|
||
|
$tableCreationWorks = true;
|
||
|
$sql = "ALTER TABLE $table ADD COLUMN name2 varchar(140) ";
|
||
|
$connection->query($sql);
|
||
|
$schemaManager->dropTable($table);
|
||
|
$tableDropWorks = $schemaManager->tablesExist($table) === false;
|
||
|
}
|
||
|
} else {
|
||
|
$manager = connectToDatabase(
|
||
![]()
11 years ago
|
$dbHostForm,
|
||
|
$dbUsernameForm,
|
||
|
$dbPassForm,
|
||
![]()
10 years ago
|
null,
|
||
|
$dbPortForm
|
||
![]()
11 years ago
|
);
|
||
![]()
7 years ago
|
|
||
|
$schemaManager = $manager->getConnection()->getSchemaManager();
|
||
|
$databases = $schemaManager->listDatabases();
|
||
|
if (in_array($dbNameForm, $databases)) {
|
||
![]()
6 years ago
|
$database_exists_text = '<div class="alert alert-warning">'.get_lang('A database with the same name <b>already exists</b>.').'</div>';
|
||
![]()
7 years ago
|
}
|
||
![]()
12 years ago
|
}
|
||
![]()
8 years ago
|
} catch (Exception $e) {
|
||
|
$database_exists_text = $e->getMessage();
|
||
![]()
7 years ago
|
$manager = false;
|
||
![]()
8 years ago
|
}
|
||
![]()
12 years ago
|
|
||
![]()
9 years ago
|
if ($manager && $manager->getConnection()->isConnected()): ?>
|
||
![]()
8 years ago
|
<?php echo $database_exists_text; ?>
|
||
![]()
9 years ago
|
<div id="db_status" class="alert alert-success">
|
||
|
Database host: <strong><?php echo $manager->getConnection()->getHost(); ?></strong><br/>
|
||
|
Database port: <strong><?php echo $manager->getConnection()->getPort(); ?></strong><br/>
|
||
|
Database driver: <strong><?php echo $manager->getConnection()->getDriver()->getName(); ?></strong><br/>
|
||
![]()
7 years ago
|
<?php
|
||
|
if ($installType === 'update') {
|
||
|
echo get_lang('CreateTableWorks').' <strong>Ok</strong>';
|
||
|
echo '<br/ >';
|
||
|
echo get_lang('AlterTableWorks').' <strong>Ok</strong>';
|
||
|
echo '<br/ >';
|
||
|
echo get_lang('DropColumnWorks').' <strong>Ok</strong>';
|
||
![]()
7 years ago
|
} ?>
|
||
![]()
9 years ago
|
</div>
|
||
|
<?php else: ?>
|
||
|
<div id="db_status" class="alert alert-danger">
|
||
![]()
6 years ago
|
<p><?php echo get_lang('The database connection has failed. This is generally due to the wrong user, the wrong password or the wrong database prefix being set above. Please review these settings and try again.'); ?></strong></p>
|
||
![]()
8 years ago
|
<code><?php echo $database_exists_text; ?></code>
|
||
![]()
9 years ago
|
</div>
|
||
|
<?php endif; ?>
|
||
![]()
7 years ago
|
|
||
|
<div class="btn-group" role="group">
|
||
|
<button type="submit" name="step2"
|
||
![]()
7 years ago
|
class="btn btn-secondary float-right" value="< <?php echo get_lang('Previous'); ?>" >
|
||
![]()
7 years ago
|
<em class="fa fa-backward"> </em> <?php echo get_lang('Previous'); ?>
|
||
|
</button>
|
||
![]()
10 years ago
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
![]()
8 years ago
|
<?php if ($manager) {
|
||
![]()
7 years ago
|
?>
|
||
![]()
7 years ago
|
<button type="submit" class="btn btn-success" name="step4" value="<?php echo get_lang('Next'); ?> >" >
|
||
![]()
10 years ago
|
<em class="fa fa-forward"> </em> <?php echo get_lang('Next'); ?>
|
||
![]()
10 years ago
|
</button>
|
||
![]()
8 years ago
|
<?php
|
||
![]()
7 years ago
|
} else {
|
||
|
?>
|
||
![]()
7 years ago
|
<button
|
||
|
disabled="disabled"
|
||
|
type="submit" class="btn btn-success disabled" name="step4" value="<?php echo get_lang('Next'); ?> >" >
|
||
![]()
10 years ago
|
<em class="fa fa-forward"> </em> <?php echo get_lang('Next'); ?>
|
||
![]()
10 years ago
|
</button>
|
||
![]()
8 years ago
|
<?php
|
||
![]()
7 years ago
|
} ?>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
15 years ago
|
<?php
|
||
![]()
16 years ago
|
}
|
||
![]()
9 years ago
|
|
||
![]()
8 years ago
|
function panel($content = null, $title = null, $id = null, $style = null)
|
||
|
{
|
||
![]()
10 years ago
|
$html = '';
|
||
![]()
10 years ago
|
if (empty($style)) {
|
||
![]()
10 years ago
|
$style = 'default';
|
||
|
}
|
||
![]()
10 years ago
|
if (!empty($title)) {
|
||
![]()
8 years ago
|
$panelTitle = Display::div($title, ['class' => 'panel-heading']);
|
||
|
$panelBody = Display::div($content, ['class' => 'panel-body']);
|
||
|
$panelParent = Display::div($panelTitle.$panelBody, ['id' => $id, 'class' => 'panel panel-'.$style]);
|
||
![]()
10 years ago
|
} else {
|
||
![]()
8 years ago
|
$panelBody = Display::div($html, ['class' => 'panel-body']);
|
||
|
$panelParent = Display::div($panelBody, ['id' => $id, 'class' => 'panel panel-'.$style]);
|
||
![]()
10 years ago
|
}
|
||
|
$html .= $panelParent;
|
||
![]()
8 years ago
|
|
||
![]()
10 years ago
|
return $html;
|
||
|
}
|
||
![]()
9 years ago
|
|
||
![]()
16 years ago
|
/**
|
||
|
* Displays a parameter in a table row.
|
||
|
* Used by the display_configuration_settings_form function.
|
||
![]()
8 years ago
|
*
|
||
![]()
10 years ago
|
* @param string $installType
|
||
|
* @param string $parameterName
|
||
|
* @param string $formFieldName
|
||
|
* @param string $parameterValue
|
||
|
* @param string $displayWhenUpdate
|
||
![]()
7 years ago
|
*
|
||
|
* @return string
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function display_configuration_parameter(
|
||
|
$installType,
|
||
|
$parameterName,
|
||
|
$formFieldName,
|
||
|
$parameterValue,
|
||
|
$displayWhenUpdate = 'true'
|
||
|
) {
|
||
![]()
7 years ago
|
$html = '<div class="form-group row">';
|
||
![]()
8 years ago
|
$html .= '<label class="col-sm-6 control-label">'.$parameterName.'</label>';
|
||
![]()
11 years ago
|
if ($installType == INSTALL_TYPE_UPDATE && $displayWhenUpdate) {
|
||
![]()
8 years ago
|
$html .= '<input type="hidden" name="'.$formFieldName.'" value="'.api_htmlentities($parameterValue, ENT_QUOTES).'" />'.$parameterValue;
|
||
![]()
15 years ago
|
} else {
|
||
![]()
10 years ago
|
$html .= '<div class="col-sm-6"><input class="form-control" type="text" size="'.FORM_FIELD_DISPLAY_LENGTH.'" maxlength="'.MAX_FORM_FIELD_LENGTH.'" name="'.$formFieldName.'" value="'.api_htmlentities($parameterValue, ENT_QUOTES).'" />'."</div>";
|
||
![]()
15 years ago
|
}
|
||
![]()
10 years ago
|
$html .= "</div>";
|
||
![]()
9 years ago
|
|
||
![]()
10 years ago
|
return $html;
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* Displays step 4 of the installation - configuration settings about Chamilo itself.
|
||
![]()
8 years ago
|
*
|
||
![]()
10 years ago
|
* @param string $installType
|
||
|
* @param string $urlForm
|
||
|
* @param string $languageForm
|
||
|
* @param string $emailForm
|
||
|
* @param string $adminFirstName
|
||
|
* @param string $adminLastName
|
||
|
* @param string $adminPhoneForm
|
||
|
* @param string $campusForm
|
||
|
* @param string $institutionForm
|
||
|
* @param string $institutionUrlForm
|
||
|
* @param string $encryptPassForm
|
||
![]()
8 years ago
|
* @param bool $allowSelfReg
|
||
|
* @param bool $allowSelfRegProf
|
||
![]()
10 years ago
|
* @param string $loginForm
|
||
|
* @param string $passForm
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function display_configuration_settings_form(
|
||
|
$installType,
|
||
|
$urlForm,
|
||
|
$languageForm,
|
||
|
$emailForm,
|
||
|
$adminFirstName,
|
||
|
$adminLastName,
|
||
|
$adminPhoneForm,
|
||
|
$campusForm,
|
||
|
$institutionForm,
|
||
|
$institutionUrlForm,
|
||
|
$encryptPassForm,
|
||
|
$allowSelfReg,
|
||
|
$allowSelfRegProf,
|
||
|
$loginForm,
|
||
|
$passForm
|
||
|
) {
|
||
![]()
15 years ago
|
if ($installType != 'update' && empty($languageForm)) {
|
||
|
$languageForm = $_SESSION['install_language'];
|
||
|
}
|
||
![]()
15 years ago
|
echo '<div class="RequirementHeading">';
|
||
![]()
7 years ago
|
echo "<h2>".display_step_sequence().get_lang("ConfigurationSettings")."</h2>";
|
||
![]()
15 years ago
|
echo '</div>';
|
||
![]()
11 years ago
|
|
||
![]()
11 years ago
|
// Parameter 1: administrator's login
|
||
![]()
10 years ago
|
$html = '';
|
||
![]()
7 years ago
|
$html .= display_configuration_parameter(
|
||
|
$installType,
|
||
![]()
6 years ago
|
get_lang('Administrator login'),
|
||
![]()
7 years ago
|
'loginForm',
|
||
|
$loginForm,
|
||
|
$installType == 'update'
|
||
|
);
|
||
![]()
12 years ago
|
|
||
![]()
11 years ago
|
// Parameter 2: administrator's password
|
||
![]()
14 years ago
|
if ($installType != 'update') {
|
||
![]()
6 years ago
|
$html .= display_configuration_parameter($installType, get_lang('Administrator password (<font color="red">you may want to change this</font>)'), 'passForm', $passForm, false);
|
||
![]()
12 years ago
|
}
|
||
|
|
||
![]()
11 years ago
|
// Parameters 3 and 4: administrator's names
|
||
![]()
11 years ago
|
|
||
![]()
7 years ago
|
$html .= display_configuration_parameter(
|
||
|
$installType,
|
||
![]()
6 years ago
|
get_lang('Administrator first name'),
|
||
![]()
7 years ago
|
'adminFirstName',
|
||
|
$adminFirstName
|
||
|
);
|
||
![]()
6 years ago
|
$html .= display_configuration_parameter($installType, get_lang('Administrator last name'), 'adminLastName', $adminLastName);
|
||
![]()
12 years ago
|
|
||
![]()
14 years ago
|
//Parameter 3: administrator's email
|
||
![]()
6 years ago
|
$html .= display_configuration_parameter($installType, get_lang('Admine-mail'), 'emailForm', $emailForm);
|
||
![]()
14 years ago
|
|
||
|
//Parameter 6: administrator's telephone
|
||
![]()
6 years ago
|
$html .= display_configuration_parameter($installType, get_lang('Administrator telephone'), 'adminPhoneForm', $adminPhoneForm);
|
||
![]()
10 years ago
|
echo panel($html, get_lang('Administrator'), 'administrator');
|
||
![]()
12 years ago
|
|
||
![]()
15 years ago
|
//First parameter: language
|
||
![]()
7 years ago
|
$html = '<div class="form-group row">';
|
||
![]()
6 years ago
|
$html .= '<label class="col-sm-6 control-label">'.get_lang('Main language')."</label>";
|
||
![]()
15 years ago
|
if ($installType == 'update') {
|
||
![]()
10 years ago
|
$html .= '<input type="hidden" name="languageForm" value="'.api_htmlentities($languageForm, ENT_QUOTES).'" />'.$languageForm;
|
||
![]()
15 years ago
|
} else { // new installation
|
||
![]()
10 years ago
|
$html .= '<div class="col-sm-6">';
|
||
|
$html .= display_language_selection_box('languageForm', $languageForm);
|
||
|
$html .= '</div>';
|
||
![]()
15 years ago
|
}
|
||
![]()
8 years ago
|
$html .= "</div>";
|
||
![]()
12 years ago
|
|
||
![]()
15 years ago
|
//Second parameter: Chamilo URL
|
||
![]()
7 years ago
|
$html .= '<div class="form-group row">';
|
||
![]()
6 years ago
|
$html .= '<label class="col-sm-6 control-label">'.get_lang('Chamilo URL').get_lang('Required field').'</label>';
|
||
![]()
10 years ago
|
|
||
![]()
15 years ago
|
if ($installType == 'update') {
|
||
![]()
10 years ago
|
$html .= api_htmlentities($urlForm, ENT_QUOTES)."\n";
|
||
![]()
15 years ago
|
} else {
|
||
![]()
10 years ago
|
$html .= '<div class="col-sm-6">';
|
||
|
$html .= '<input class="form-control" type="text" size="40" maxlength="100" name="urlForm" value="'.api_htmlentities($urlForm, ENT_QUOTES).'" />';
|
||
|
$html .= '</div>';
|
||
![]()
15 years ago
|
}
|
||
![]()
10 years ago
|
$html .= '</div>';
|
||
![]()
10 years ago
|
|
||
![]()
15 years ago
|
//Parameter 9: campus name
|
||
![]()
8 years ago
|
$html .= display_configuration_parameter(
|
||
|
$installType,
|
||
![]()
6 years ago
|
get_lang('Your portal name'),
|
||
![]()
8 years ago
|
'campusForm',
|
||
|
$campusForm
|
||
|
);
|
||
![]()
15 years ago
|
|
||
|
//Parameter 10: institute (short) name
|
||
![]()
8 years ago
|
$html .= display_configuration_parameter(
|
||
|
$installType,
|
||
![]()
6 years ago
|
get_lang('Your company short name'),
|
||
![]()
8 years ago
|
'institutionForm',
|
||
|
$institutionForm
|
||
|
);
|
||
![]()
15 years ago
|
|
||
|
//Parameter 11: institute (short) name
|
||
![]()
8 years ago
|
$html .= display_configuration_parameter(
|
||
|
$installType,
|
||
![]()
6 years ago
|
get_lang('URL of this company'),
|
||
![]()
8 years ago
|
'institutionUrlForm',
|
||
|
$institutionUrlForm
|
||
|
);
|
||
![]()
10 years ago
|
|
||
![]()
7 years ago
|
$html .= '<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-6 control-label">'.get_lang("Encryption method").'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-6">';
|
||
![]()
10 years ago
|
if ($installType == 'update') {
|
||
![]()
8 years ago
|
$html .= '<input type="hidden" name="encryptPassForm" value="'.$encryptPassForm.'" />'.$encryptPassForm;
|
||
![]()
10 years ago
|
} else {
|
||
|
$html .= '<div class="checkbox">
|
||
![]()
10 years ago
|
<label>
|
||
![]()
8 years ago
|
<input type="radio" name="encryptPassForm" value="bcrypt" id="encryptPass1" '.($encryptPassForm == 'bcrypt' ? 'checked="checked" ' : '').'/> bcrypt
|
||
![]()
10 years ago
|
</label>';
|
||
|
|
||
![]()
10 years ago
|
$html .= '<label>
|
||
![]()
8 years ago
|
<input type="radio" name="encryptPassForm" value="sha1" id="encryptPass1" '.($encryptPassForm == 'sha1' ? 'checked="checked" ' : '').'/> sha1
|
||
![]()
10 years ago
|
</label>';
|
||
|
|
||
![]()
10 years ago
|
$html .= '<label>
|
||
![]()
8 years ago
|
<input type="radio" name="encryptPassForm" value="md5" id="encryptPass0" '.($encryptPassForm == 'md5' ? 'checked="checked" ' : '').'/> md5
|
||
![]()
10 years ago
|
</label>';
|
||
|
|
||
![]()
10 years ago
|
$html .= '<label>
|
||
![]()
6 years ago
|
<input type="radio" name="encryptPassForm" value="none" id="encryptPass2" '.($encryptPassForm == 'none' ? 'checked="checked" ' : '').'/>'.get_lang('none').'
|
||
![]()
10 years ago
|
</label>';
|
||
![]()
10 years ago
|
$html .= '</div>';
|
||
|
}
|
||
|
$html .= '</div></div>';
|
||
![]()
10 years ago
|
|
||
![]()
7 years ago
|
$html .= '<div class="form-group row">
|
||
![]()
6 years ago
|
<label class="col-sm-6 control-label">'.get_lang('Allow self-registration').'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-6">';
|
||
![]()
10 years ago
|
if ($installType == 'update') {
|
||
![]()
10 years ago
|
if ($allowSelfReg == 'true') {
|
||
|
$label = get_lang('Yes');
|
||
|
} elseif ($allowSelfReg == 'false') {
|
||
|
$label = get_lang('No');
|
||
|
} else {
|
||
![]()
6 years ago
|
$label = get_lang('After approval');
|
||
![]()
10 years ago
|
}
|
||
![]()
8 years ago
|
$html .= '<input type="hidden" name="allowSelfReg" value="'.$allowSelfReg.'" />'.$label;
|
||
![]()
10 years ago
|
} else {
|
||
|
$html .= '<div class="control-group">';
|
||
|
$html .= '<label class="checkbox-inline">
|
||
![]()
8 years ago
|
<input type="radio" name="allowSelfReg" value="true" id="allowSelfReg1" '.($allowSelfReg == 'true' ? 'checked="checked" ' : '').' /> '.get_lang('Yes').'
|
||
![]()
10 years ago
|
</label>';
|
||
|
$html .= '<label class="checkbox-inline">
|
||
![]()
8 years ago
|
<input type="radio" name="allowSelfReg" value="false" id="allowSelfReg0" '.($allowSelfReg == 'false' ? '' : 'checked="checked" ').' /> '.get_lang('No').'
|
||
![]()
10 years ago
|
</label>';
|
||
![]()
8 years ago
|
$html .= '<label class="checkbox-inline">
|
||
![]()
6 years ago
|
<input type="radio" name="allowSelfReg" value="approval" id="allowSelfReg2" '.($allowSelfReg == 'approval' ? '' : 'checked="checked" ').' /> '.get_lang('After approval').'
|
||
![]()
10 years ago
|
</label>';
|
||
![]()
10 years ago
|
$html .= '</div>';
|
||
![]()
10 years ago
|
}
|
||
|
$html .= '</div>';
|
||
![]()
10 years ago
|
$html .= '</div>';
|
||
|
|
||
![]()
7 years ago
|
$html .= '<div class="form-group row">';
|
||
![]()
6 years ago
|
$html .= '<label class="col-sm-6 control-label">'.get_lang('Allow self-registrationProf').'</label>
|
||
![]()
10 years ago
|
<div class="col-sm-6">';
|
||
![]()
10 years ago
|
if ($installType == 'update') {
|
||
|
if ($allowSelfRegProf == 'true') {
|
||
|
$label = get_lang('Yes');
|
||
|
} else {
|
||
|
$label = get_lang('No');
|
||
|
}
|
||
![]()
8 years ago
|
$html .= '<input type="hidden" name="allowSelfRegProf" value="'.$allowSelfRegProf.'" />'.$label;
|
||
![]()
10 years ago
|
} else {
|
||
![]()
10 years ago
|
$html .= '<div class="control-group">
|
||
![]()
10 years ago
|
<label class="checkbox-inline">
|
||
![]()
8 years ago
|
<input type="radio" name="allowSelfRegProf" value="1" id="allowSelfRegProf1" '.($allowSelfRegProf ? 'checked="checked" ' : '').'/>
|
||
|
'.get_lang('Yes').'
|
||
![]()
10 years ago
|
</label>';
|
||
![]()
10 years ago
|
$html .= '<label class="checkbox-inline">
|
||
![]()
8 years ago
|
<input type="radio" name="allowSelfRegProf" value="0" id="allowSelfRegProf0" '.($allowSelfRegProf ? '' : 'checked="checked" ').' />
|
||
|
'.get_lang('No').'
|
||
![]()
10 years ago
|
</label>';
|
||
![]()
10 years ago
|
$html .= '</div>';
|
||
![]()
10 years ago
|
}
|
||
![]()
10 years ago
|
$html .= '</div>
|
||
![]()
10 years ago
|
</div>';
|
||
|
|
||
![]()
6 years ago
|
echo panel($html, get_lang('Portal'), 'platform'); ?>
|
||
![]()
7 years ago
|
<div class='btn-group'>
|
||
|
<button type="submit" class="btn btn-secondary pull-right" name="step3" value="< <?php echo get_lang('Previous'); ?>" ><em class="fa fa-backward"> </em> <?php echo get_lang('Previous'); ?></button>
|
||
|
<input type="hidden" name="is_executable" id="is_executable" value="-" />
|
||
![]()
6 years ago
|
<button class="btn btn-success" type="submit" name="step5">
|
||
|
<em class="fa fa-forward"> </em> <?php echo get_lang('Next'); ?>
|
||
|
</button>
|
||
![]()
10 years ago
|
</div>
|
||
![]()
15 years ago
|
<?php
|
||
![]()
16 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* After installation is completed (step 6), this message is displayed.
|
||
|
*/
|
||
![]()
7 years ago
|
function display_after_install_message()
|
||
![]()
11 years ago
|
{
|
||
![]()
6 years ago
|
$container = Container::$container;
|
||
|
|
||
|
$trans = $container->get('translator');
|
||
|
$html = '<div class="RequirementContent">'.
|
||
|
$trans->trans(
|
||
|
'When you enter your portal for the first time, the best way to understand it is to create a course with the \'Create course\' link in the menu and play around a little.').'</div>';
|
||
![]()
7 years ago
|
$html .= '<div class="alert alert-warning">';
|
||
![]()
6 years ago
|
$html .= '<strong>'.$trans->trans('Security advice').'</strong>';
|
||
![]()
7 years ago
|
$html .= ': ';
|
||
![]()
6 years ago
|
$html .= sprintf($trans->trans(
|
||
|
'To protect your site, make the whole %s directory read-only (chmod -R 0555 on Linux) and delete the %s directory.'), 'var/config/', 'main/install/');
|
||
![]()
7 years ago
|
$html .= '</div></form>
|
||
![]()
14 years ago
|
<br />
|
||
![]()
9 years ago
|
<a class="btn btn-success btn-block" href="../../index.php">
|
||
![]()
6 years ago
|
'.$trans->trans('Go to your newly created portal.').'
|
||
![]()
7 years ago
|
</a>';
|
||
|
|
||
|
return $html;
|
||
![]()
16 years ago
|
}
|
||
![]()
16 years ago
|
|
||
|
/**
|
||
![]()
8 years ago
|
* This function return countries list from array (hardcoded).
|
||
|
*
|
||
|
* @param bool $combo (Optional) True for returning countries list with select html
|
||
|
*
|
||
|
* @return array|string countries list
|
||
![]()
16 years ago
|
*/
|
||
![]()
11 years ago
|
function get_countries_list_from_array($combo = false)
|
||
|
{
|
||
![]()
8 years ago
|
$a_countries = [
|
||
![]()
15 years ago
|
"Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan",
|
||
|
"Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
|
||
|
"Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic", "Chad", "Chile", "China", "Colombi", "Comoros", "Congo (Brazzaville)", "Congo", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic",
|
||
|
"Denmark", "Djibouti", "Dominica", "Dominican Republic",
|
||
|
"East Timor (Timor Timur)", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia",
|
||
|
"Fiji", "Finland", "France",
|
||
|
"Gabon", "Gambia, The", "Georgia", "Germany", "Ghana", "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana",
|
||
|
"Haiti", "Honduras", "Hungary",
|
||
|
"Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy",
|
||
|
"Jamaica", "Japan", "Jordan",
|
||
|
"Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan",
|
||
|
"Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
|
||
|
"Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia", "Morocco", "Mozambique", "Myanmar",
|
||
|
"Namibia", "Nauru", "Nepa", "Netherlands", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Norway",
|
||
|
"Oman",
|
||
![]()
8 years ago
|
"Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Portugal",
|
||
![]()
15 years ago
|
"Qatar",
|
||
|
"Romania", "Russia", "Rwanda",
|
||
|
"Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia and Montenegro", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syria",
|
||
|
"Taiwan", "Tajikistan", "Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu",
|
||
|
"Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan",
|
||
|
"Vanuatu", "Vatican City", "Venezuela", "Vietnam",
|
||
|
"Yemen",
|
||
![]()
8 years ago
|
"Zambia", "Zimbabwe",
|
||
![]()
8 years ago
|
];
|
||
![]()
16 years ago
|
if ($combo) {
|
||
![]()
10 years ago
|
$country_select = '<select class="selectpicker show-tick" id="country" name="country">';
|
||
![]()
6 years ago
|
$country_select .= '<option value="">--- '.get_lang('Select one').' ---</option>';
|
||
![]()
16 years ago
|
foreach ($a_countries as $country) {
|
||
|
$country_select .= '<option value="'.$country.'">'.$country.'</option>';
|
||
|
}
|
||
|
$country_select .= '</select>';
|
||
![]()
8 years ago
|
|
||
![]()
16 years ago
|
return $country_select;
|
||
|
}
|
||
|
|
||
![]()
16 years ago
|
return $a_countries;
|
||
![]()
16 years ago
|
}
|
||
![]()
14 years ago
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Lock settings that can't be changed in other portals.
|
||
![]()
14 years ago
|
*/
|
||
![]()
11 years ago
|
function lockSettings()
|
||
![]()
11 years ago
|
{
|
||
![]()
8 years ago
|
$settings = api_get_locked_settings();
|
||
![]()
14 years ago
|
$table = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
|
||
![]()
8 years ago
|
foreach ($settings as $setting) {
|
||
![]()
14 years ago
|
$sql = "UPDATE $table SET access_url_locked = 1 WHERE variable = '$setting'";
|
||
|
Database::query($sql);
|
||
|
}
|
||
![]()
13 years ago
|
}
|
||
![]()
13 years ago
|
|
||
![]()
11 years ago
|
/**
|
||
![]()
8 years ago
|
* Update dir values.
|
||
![]()
11 years ago
|
*/
|
||
![]()
11 years ago
|
function updateDirAndFilesPermissions()
|
||
![]()
11 years ago
|
{
|
||
![]()
12 years ago
|
$table = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
|
||
![]()
13 years ago
|
$permissions_for_new_directories = isset($_SESSION['permissions_for_new_directories']) ? $_SESSION['permissions_for_new_directories'] : 0770;
|
||
|
$permissions_for_new_files = isset($_SESSION['permissions_for_new_files']) ? $_SESSION['permissions_for_new_files'] : 0660;
|
||
![]()
13 years ago
|
// use decoct() to store as string
|
||
![]()
7 years ago
|
Database::update(
|
||
|
$table,
|
||
|
['selected_value' => '0'.decoct($permissions_for_new_directories)],
|
||
|
['variable = ?' => 'permissions_for_new_directories']
|
||
|
);
|
||
![]()
12 years ago
|
|
||
![]()
7 years ago
|
Database::update(
|
||
|
$table,
|
||
|
['selected_value' => '0'.decoct($permissions_for_new_files)],
|
||
|
['variable = ?' => 'permissions_for_new_files']
|
||
|
);
|
||
![]()
12 years ago
|
|
||
![]()
11 years ago
|
if (isset($_SESSION['permissions_for_new_directories'])) {
|
||
|
unset($_SESSION['permissions_for_new_directories']);
|
||
|
}
|
||
|
|
||
|
if (isset($_SESSION['permissions_for_new_files'])) {
|
||
|
unset($_SESSION['permissions_for_new_files']);
|
||
|
}
|
||
![]()
13 years ago
|
}
|
||
|
|
||
![]()
10 years ago
|
/**
|
||
|
* @param $current_value
|
||
|
* @param $wanted_value
|
||
![]()
8 years ago
|
*
|
||
![]()
10 years ago
|
* @return string
|
||
|
*/
|
||
![]()
11 years ago
|
function compare_setting_values($current_value, $wanted_value)
|
||
|
{
|
||
![]()
13 years ago
|
$current_value_string = $current_value;
|
||
![]()
8 years ago
|
$current_value = (float) $current_value;
|
||
|
$wanted_value = (float) $wanted_value;
|
||
![]()
12 years ago
|
|
||
![]()
13 years ago
|
if ($current_value >= $wanted_value) {
|
||
|
return Display::label($current_value_string, 'success');
|
||
|
} else {
|
||
|
return Display::label($current_value_string, 'important');
|
||
![]()
12 years ago
|
}
|
||
![]()
13 years ago
|
}
|
||
![]()
13 years ago
|
|
||
![]()
11 years ago
|
/**
|
||
![]()
8 years ago
|
* Save settings values.
|
||
![]()
11 years ago
|
*
|
||
![]()
11 years ago
|
* @param string $organizationName
|
||
|
* @param string $organizationUrl
|
||
|
* @param string $siteName
|
||
|
* @param string $adminEmail
|
||
|
* @param string $adminLastName
|
||
|
* @param string $adminFirstName
|
||
|
* @param string $language
|
||
|
* @param string $allowRegistration
|
||
|
* @param string $allowTeacherSelfRegistration
|
||
![]()
8 years ago
|
* @param string $installationProfile The name of an installation profile file in main/install/profiles/
|
||
![]()
11 years ago
|
*/
|
||
![]()
11 years ago
|
function installSettings(
|
||
|
$organizationName,
|
||
|
$organizationUrl,
|
||
![]()
11 years ago
|
$siteName,
|
||
![]()
11 years ago
|
$adminEmail,
|
||
|
$adminLastName,
|
||
|
$adminFirstName,
|
||
|
$language,
|
||
|
$allowRegistration,
|
||
![]()
10 years ago
|
$allowTeacherSelfRegistration,
|
||
|
$installationProfile = ''
|
||
![]()
11 years ago
|
) {
|
||
![]()
6 years ago
|
error_log('installSettings');
|
||
![]()
11 years ago
|
$allowTeacherSelfRegistration = $allowTeacherSelfRegistration ? 'true' : 'false';
|
||
|
|
||
![]()
8 years ago
|
$settings = [
|
||
![]()
8 years ago
|
'institution' => $organizationName,
|
||
|
'institution_url' => $organizationUrl,
|
||
|
'site_name' => $siteName,
|
||
|
'administrator_email' => $adminEmail,
|
||
|
'administrator_surname' => $adminLastName,
|
||
|
'administrator_name' => $adminFirstName,
|
||
|
'platform_language' => $language,
|
||
![]()
11 years ago
|
'allow_registration' => $allowRegistration,
|
||
|
'allow_registration_as_teacher' => $allowTeacherSelfRegistration,
|
||
![]()
8 years ago
|
];
|
||
![]()
11 years ago
|
|
||
|
foreach ($settings as $variable => $value) {
|
||
|
$sql = "UPDATE settings_current
|
||
|
SET selected_value = '$value'
|
||
|
WHERE variable = '$variable'";
|
||
|
Database::query($sql);
|
||
|
}
|
||
![]()
10 years ago
|
installProfileSettings($installationProfile);
|
||
![]()
11 years ago
|
}
|
||
|
|
||
![]()
11 years ago
|
/**
|
||
![]()
11 years ago
|
* Executes DB changes based in the classes defined in
|
||
![]()
7 years ago
|
* src/CoreBundle/Migrations/Schema/*.
|
||
![]()
11 years ago
|
*
|
||
![]()
6 years ago
|
* @param string $chamiloVersion
|
||
![]()
8 years ago
|
*
|
||
![]()
11 years ago
|
* @throws \Doctrine\DBAL\DBALException
|
||
![]()
8 years ago
|
*
|
||
![]()
8 years ago
|
* @return bool
|
||
![]()
11 years ago
|
*/
|
||
![]()
10 years ago
|
function migrate($chamiloVersion, EntityManager $manager)
|
||
![]()
11 years ago
|
{
|
||
![]()
11 years ago
|
$debug = true;
|
||
![]()
10 years ago
|
$connection = $manager->getConnection();
|
||
![]()
7 years ago
|
|
||
![]()
10 years ago
|
$config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection);
|
||
![]()
11 years ago
|
|
||
![]()
11 years ago
|
// Table name that will store migrations log (will be created automatically,
|
||
|
// default name is: doctrine_migration_versions)
|
||
![]()
11 years ago
|
$config->setMigrationsTableName('version');
|
||
|
// Namespace of your migration classes, do not forget escape slashes, do not add last slash
|
||
![]()
7 years ago
|
$config->setMigrationsNamespace('Chamilo\CoreBundle\Migrations\Schema\V'.$chamiloVersion);
|
||
![]()
11 years ago
|
// Directory where your migrations are located
|
||
![]()
7 years ago
|
$versionPath = api_get_path(SYS_PATH).'src/CoreBundle/Migrations/Schema/V'.$chamiloVersion;
|
||
![]()
7 years ago
|
error_log("Reading files from dir: $versionPath");
|
||
|
$config->setMigrationsDirectory($versionPath);
|
||
![]()
11 years ago
|
// Load your migrations
|
||
|
$config->registerMigrationsFromDirectory($config->getMigrationsDirectory());
|
||
![]()
11 years ago
|
|
||
![]()
11 years ago
|
$migration = new \Doctrine\DBAL\Migrations\Migration($config);
|
||
![]()
10 years ago
|
$versions = $config->getMigrations();
|
||
![]()
11 years ago
|
|
||
![]()
10 years ago
|
/** @var Doctrine\DBAL\Migrations\Version $migrationItem */
|
||
|
foreach ($versions as $version) {
|
||
|
$version->getMigration()->setEntityManager($manager);
|
||
![]()
11 years ago
|
}
|
||
![]()
7 years ago
|
|
||
![]()
10 years ago
|
$to = null; // if $to == null then schema will be migrated to latest version
|
||
![]()
7 years ago
|
echo '<pre>';
|
||
![]()
11 years ago
|
try {
|
||
![]()
11 years ago
|
// Execute migration!
|
||
![]()
10 years ago
|
$migratedSQL = $migration->migrate($to);
|
||
|
|
||
![]()
11 years ago
|
if ($debug) {
|
||
![]()
10 years ago
|
foreach ($migratedSQL as $version => $sqlList) {
|
||
|
echo "VERSION: $version<br>";
|
||
![]()
7 years ago
|
echo '----------------------------------------------<br />';
|
||
![]()
9 years ago
|
$total = count($sqlList);
|
||
|
error_log("VERSION: $version");
|
||
![]()
7 years ago
|
error_log("# queries: $total");
|
||
![]()
9 years ago
|
$counter = 1;
|
||
![]()
10 years ago
|
foreach ($sqlList as $sql) {
|
||
|
echo "<code>$sql</code><br>";
|
||
![]()
9 years ago
|
error_log("$counter/$total : $sql");
|
||
|
$counter++;
|
||
![]()
10 years ago
|
}
|
||
|
}
|
||
![]()
7 years ago
|
|
||
![]()
10 years ago
|
echo "<br>DONE!<br>";
|
||
![]()
11 years ago
|
}
|
||
![]()
10 years ago
|
|
||
![]()
10 years ago
|
return true;
|
||
![]()
11 years ago
|
} catch (Exception $ex) {
|
||
|
if ($debug) {
|
||
![]()
10 years ago
|
echo "ERROR: {$ex->getMessage()}<br>";
|
||
![]()
8 years ago
|
|
||
![]()
10 years ago
|
return false;
|
||
![]()
11 years ago
|
}
|
||
|
}
|
||
![]()
7 years ago
|
|
||
![]()
7 years ago
|
echo '</pre>';
|
||
![]()
10 years ago
|
|
||
![]()
10 years ago
|
return false;
|
||
![]()
11 years ago
|
}
|
||
![]()
11 years ago
|
|
||
![]()
10 years ago
|
/**
|
||
![]()
8 years ago
|
* @throws \Doctrine\DBAL\DBALException
|
||
![]()
10 years ago
|
*/
|
||
![]()
10 years ago
|
function fixIds(EntityManager $em)
|
||
![]()
10 years ago
|
{
|
||
![]()
9 years ago
|
$connection = $em->getConnection();
|
||
|
$database = new Database();
|
||
|
$database->setManager($em);
|
||
![]()
10 years ago
|
$debug = true;
|
||
|
if ($debug) {
|
||
|
error_log('fixIds');
|
||
|
}
|
||
|
|
||
![]()
9 years ago
|
// Create temporary indexes to increase speed of the following operations
|
||
|
// Adding and removing indexes will usually take much less time than
|
||
|
// the execution without indexes of the queries in this function, particularly
|
||
|
// for large tables
|
||
|
$sql = "ALTER TABLE c_document ADD INDEX tmpidx_doc(c_id, id)";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_student_publication ADD INDEX tmpidx_stud (c_id, id)";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_quiz ADD INDEX tmpidx_quiz (c_id, id)";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_item_property ADD INDEX tmpidx_ip (to_group_id)";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
$sql = "SELECT * FROM c_lp_item";
|
||
|
$result = $connection->fetchAll($sql);
|
||
|
foreach ($result as $item) {
|
||
|
$courseId = $item['c_id'];
|
||
|
$iid = isset($item['iid']) ? intval($item['iid']) : 0;
|
||
|
$ref = isset($item['ref']) ? intval($item['ref']) : 0;
|
||
|
$sql = null;
|
||
|
|
||
|
$newId = '';
|
||
|
|
||
|
switch ($item['item_type']) {
|
||
|
case TOOL_LINK:
|
||
|
$sql = "SELECT * FROM c_link WHERE c_id = $courseId AND id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
case TOOL_STUDENTPUBLICATION:
|
||
|
$sql = "SELECT * FROM c_student_publication WHERE c_id = $courseId AND id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
case TOOL_QUIZ:
|
||
|
$sql = "SELECT * FROM c_quiz WHERE c_id = $courseId AND id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
case TOOL_DOCUMENT:
|
||
|
$sql = "SELECT * FROM c_document WHERE c_id = $courseId AND id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
case TOOL_FORUM:
|
||
|
$sql = "SELECT * FROM c_forum_forum WHERE c_id = $courseId AND forum_id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
case 'thread':
|
||
|
$sql = "SELECT * FROM c_forum_thread WHERE c_id = $courseId AND thread_id = $ref";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if ($data) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!empty($sql) && !empty($newId) && !empty($iid)) {
|
||
|
$sql = "UPDATE c_lp_item SET ref = $newId WHERE iid = $iid";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Set NULL if session = 0
|
||
|
$sql = "UPDATE c_item_property SET session_id = NULL WHERE session_id = 0";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Set NULL if group = 0
|
||
|
$sql = "UPDATE c_item_property SET to_group_id = NULL WHERE to_group_id = 0";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Set NULL if insert_user_id = 0
|
||
|
$sql = "UPDATE c_item_property SET insert_user_id = NULL WHERE insert_user_id = 0";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Delete session data of sessions that don't exist.
|
||
|
$sql = "DELETE FROM c_item_property
|
||
|
WHERE session_id IS NOT NULL AND session_id NOT IN (SELECT id FROM session)";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Delete group data of groups that don't exist.
|
||
|
$sql = "DELETE FROM c_item_property
|
||
![]()
7 years ago
|
WHERE to_group_id <> 0 AND to_group_id IS NOT NULL AND to_group_id NOT IN (SELECT DISTINCT iid FROM c_group_info)";
|
||
![]()
9 years ago
|
$connection->executeQuery($sql);
|
||
|
// This updates the group_id with c_group_info.iid instead of c_group_info.id
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('update iids');
|
||
|
}
|
||
|
|
||
|
$groupTableToFix = [
|
||
|
'c_group_rel_user',
|
||
|
'c_group_rel_tutor',
|
||
|
'c_permission_group',
|
||
|
'c_role_group',
|
||
|
'c_survey_invitation',
|
||
![]()
8 years ago
|
'c_attendance_calendar_rel_group',
|
||
![]()
9 years ago
|
];
|
||
|
|
||
|
foreach ($groupTableToFix as $table) {
|
||
|
$sql = "SELECT * FROM $table";
|
||
|
$result = $connection->fetchAll($sql);
|
||
|
foreach ($result as $item) {
|
||
|
$iid = $item['iid'];
|
||
|
$courseId = $item['c_id'];
|
||
|
$groupId = intval($item['group_id']);
|
||
|
|
||
|
// Fix group id
|
||
|
if (!empty($groupId)) {
|
||
|
$sql = "SELECT * FROM c_group_info
|
||
|
WHERE c_id = $courseId AND id = $groupId
|
||
|
LIMIT 1";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if (!empty($data)) {
|
||
|
$newGroupId = $data['iid'];
|
||
|
$sql = "UPDATE $table SET group_id = $newGroupId
|
||
|
WHERE iid = $iid";
|
||
|
$connection->executeQuery($sql);
|
||
|
} else {
|
||
|
// The group does not exists clean this record
|
||
|
$sql = "DELETE FROM $table WHERE iid = $iid";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Fix c_item_property
|
||
|
if ($debug) {
|
||
|
error_log('update c_item_property');
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM course";
|
||
|
$courseList = $connection->fetchAll($sql);
|
||
|
if ($debug) {
|
||
|
error_log('Getting course list');
|
||
|
}
|
||
|
|
||
|
$totalCourse = count($courseList);
|
||
|
$counter = 0;
|
||
|
|
||
|
foreach ($courseList as $courseData) {
|
||
|
$courseId = $courseData['id'];
|
||
|
if ($debug) {
|
||
|
error_log('Updating course: '.$courseData['code']);
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM c_item_property WHERE c_id = $courseId";
|
||
|
$result = $connection->fetchAll($sql);
|
||
|
foreach ($result as $item) {
|
||
|
$sessionId = intval($item['session_id']);
|
||
|
$groupId = intval($item['to_group_id']);
|
||
|
$iid = $item['iid'];
|
||
|
$ref = $item['ref'];
|
||
|
|
||
|
// Fix group id
|
||
![]()
7 years ago
|
// Commented group id is already fixed in Version20150603181728.php
|
||
|
/*if (!empty($groupId)) {
|
||
![]()
9 years ago
|
$sql = "SELECT * FROM c_group_info
|
||
|
WHERE c_id = $courseId AND id = $groupId";
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if (!empty($data)) {
|
||
|
$newGroupId = $data['iid'];
|
||
|
$sql = "UPDATE c_item_property SET to_group_id = $newGroupId
|
||
|
WHERE iid = $iid";
|
||
|
$connection->executeQuery($sql);
|
||
|
} else {
|
||
|
// The group does not exists clean this record
|
||
|
$sql = "DELETE FROM c_item_property WHERE iid = $iid";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
![]()
7 years ago
|
}*/
|
||
![]()
9 years ago
|
|
||
|
$sql = '';
|
||
|
$newId = '';
|
||
|
switch ($item['tool']) {
|
||
|
case TOOL_LINK:
|
||
|
$sql = "SELECT * FROM c_link WHERE c_id = $courseId AND id = $ref ";
|
||
|
break;
|
||
|
case TOOL_STUDENTPUBLICATION:
|
||
|
$sql = "SELECT * FROM c_student_publication WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case TOOL_QUIZ:
|
||
|
$sql = "SELECT * FROM c_quiz WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case TOOL_DOCUMENT:
|
||
|
$sql = "SELECT * FROM c_document WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case TOOL_FORUM:
|
||
|
$sql = "SELECT * FROM c_forum_forum WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case 'thread':
|
||
|
$sql = "SELECT * FROM c_forum_thread WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!empty($sql) && !empty($newId)) {
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if (isset($data['iid'])) {
|
||
|
$newId = $data['iid'];
|
||
|
}
|
||
|
$sql = "UPDATE c_item_property SET ref = $newId WHERE iid = $iid";
|
||
|
error_log($sql);
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
![]()
9 years ago
|
}
|
||
![]()
9 years ago
|
|
||
![]()
9 years ago
|
if ($debug) {
|
||
|
// Print a status in the log once in a while
|
||
|
error_log("Course process #$counter/$totalCourse");
|
||
![]()
9 years ago
|
}
|
||
![]()
9 years ago
|
$counter++;
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('update gradebook_link');
|
||
|
}
|
||
|
|
||
|
// Fix gradebook_link
|
||
|
$sql = "SELECT * FROM gradebook_link";
|
||
|
$result = $connection->fetchAll($sql);
|
||
|
foreach ($result as $item) {
|
||
|
$courseCode = $item['course_code'];
|
||
![]()
7 years ago
|
$categoryId = (int) $item['category_id'];
|
||
![]()
9 years ago
|
|
||
![]()
9 years ago
|
$sql = "SELECT * FROM course WHERE code = '$courseCode'";
|
||
|
$courseInfo = $connection->fetchAssoc($sql);
|
||
![]()
9 years ago
|
if (empty($courseInfo)) {
|
||
|
continue;
|
||
|
}
|
||
![]()
9 years ago
|
|
||
|
$courseId = $courseInfo['id'];
|
||
|
|
||
![]()
9 years ago
|
$ref = $item['ref_id'];
|
||
|
$iid = $item['id'];
|
||
|
|
||
![]()
9 years ago
|
$sql = '';
|
||
![]()
9 years ago
|
switch ($item['type']) {
|
||
|
case LINK_LEARNPATH:
|
||
|
$sql = "SELECT * FROM c_link WHERE c_id = $courseId AND id = $ref ";
|
||
|
break;
|
||
|
case LINK_STUDENTPUBLICATION:
|
||
|
$sql = "SELECT * FROM c_student_publication WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case LINK_EXERCISE:
|
||
|
$sql = "SELECT * FROM c_quiz WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case LINK_ATTENDANCE:
|
||
|
//$sql = "SELECT * FROM c_document WHERE c_id = $courseId AND id = $ref";
|
||
|
break;
|
||
|
case LINK_FORUM_THREAD:
|
||
|
$sql = "SELECT * FROM c_forum_thread WHERE c_id = $courseId AND thread_id = $ref";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!empty($sql)) {
|
||
|
$data = $connection->fetchAssoc($sql);
|
||
|
if (isset($data) && isset($data['iid'])) {
|
||
|
$newId = $data['iid'];
|
||
|
$sql = "UPDATE gradebook_link SET ref_id = $newId
|
||
![]()
7 years ago
|
WHERE id = $iid AND course_code = '$courseCode' AND category_id = $categoryId ";
|
||
![]()
9 years ago
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('update groups');
|
||
|
}
|
||
|
|
||
![]()
7 years ago
|
$sql = 'SELECT * FROM groups';
|
||
![]()
9 years ago
|
$result = $connection->executeQuery($sql);
|
||
|
$groups = $result->fetchAll();
|
||
![]()
8 years ago
|
$oldGroups = [];
|
||
![]()
9 years ago
|
if (!empty($groups)) {
|
||
|
foreach ($groups as $group) {
|
||
|
if (empty($group['name'])) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$params = [
|
||
|
'name' => $group['name'],
|
||
|
'description' => $group['description'],
|
||
|
'group_type' => 1,
|
||
|
'picture' => $group['picture_uri'],
|
||
|
'url' => $group['url'],
|
||
|
'visibility' => $group['visibility'],
|
||
|
'updated_at' => $group['updated_on'],
|
||
![]()
8 years ago
|
'created_at' => $group['created_on'],
|
||
![]()
9 years ago
|
];
|
||
|
$connection->insert('usergroup', $params);
|
||
|
$id = $connection->lastInsertId('id');
|
||
|
$oldGroups[$group['id']] = $id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!empty($oldGroups)) {
|
||
![]()
9 years ago
|
error_log('Moving group files');
|
||
![]()
9 years ago
|
foreach ($oldGroups as $oldId => $newId) {
|
||
|
$path = get_group_picture_path_by_id(
|
||
|
$oldId,
|
||
|
'system'
|
||
|
);
|
||
|
|
||
|
if (!empty($path)) {
|
||
|
$newPath = str_replace(
|
||
|
"groups/$oldId/",
|
||
|
"groups/$newId/",
|
||
|
$path['dir']
|
||
|
);
|
||
|
$command = "mv {$path['dir']} $newPath ";
|
||
![]()
9 years ago
|
error_log("Executing $command");
|
||
![]()
9 years ago
|
system($command);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM group_rel_user";
|
||
|
$result = $connection->executeQuery($sql);
|
||
|
$dataList = $result->fetchAll();
|
||
|
|
||
|
if (!empty($dataList)) {
|
||
|
foreach ($dataList as $data) {
|
||
|
if (isset($oldGroups[$data['group_id']])) {
|
||
|
$data['group_id'] = $oldGroups[$data['group_id']];
|
||
|
$userId = $data['user_id'];
|
||
|
|
||
|
$sql = "SELECT id FROM user WHERE user_id = $userId";
|
||
|
$userResult = $connection->executeQuery($sql);
|
||
|
$userInfo = $userResult->fetch();
|
||
|
if (empty($userInfo)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$sql = "INSERT INTO usergroup_rel_user (usergroup_id, user_id, relation_type)
|
||
|
VALUES ('{$data['group_id']}', '{$userId}', '{$data['relation_type']}')";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM group_rel_group";
|
||
|
$result = $connection->executeQuery($sql);
|
||
|
$dataList = $result->fetchAll();
|
||
|
|
||
|
if (!empty($dataList)) {
|
||
|
foreach ($dataList as $data) {
|
||
|
if (isset($oldGroups[$data['group_id']]) && isset($oldGroups[$data['subgroup_id']])) {
|
||
|
$data['group_id'] = $oldGroups[$data['group_id']];
|
||
|
$data['subgroup_id'] = $oldGroups[$data['subgroup_id']];
|
||
|
$sql = "INSERT INTO usergroup_rel_usergroup (group_id, subgroup_id, relation_type)
|
||
|
VALUES ('{$data['group_id']}', '{$data['subgroup_id']}', '{$data['relation_type']}')";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM announcement_rel_group";
|
||
|
$result = $connection->executeQuery($sql);
|
||
|
$dataList = $result->fetchAll();
|
||
|
|
||
|
if (!empty($dataList)) {
|
||
|
foreach ($dataList as $data) {
|
||
|
if (isset($oldGroups[$data['group_id']])) {
|
||
|
// Deleting relation
|
||
|
$sql = "DELETE FROM announcement_rel_group WHERE group_id = {$data['group_id']}";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Add new relation
|
||
|
$data['group_id'] = $oldGroups[$data['group_id']];
|
||
|
$sql = "INSERT INTO announcement_rel_group(group_id, announcement_id)
|
||
|
VALUES ('{$data['group_id']}', '{$data['announcement_id']}')";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM group_rel_tag";
|
||
|
$result = $connection->executeQuery($sql);
|
||
|
$dataList = $result->fetchAll();
|
||
|
if (!empty($dataList)) {
|
||
|
foreach ($dataList as $data) {
|
||
|
if (isset($oldGroups[$data['group_id']])) {
|
||
|
$data['group_id'] = $oldGroups[$data['group_id']];
|
||
|
$sql = "INSERT INTO usergroup_rel_tag (tag_id, usergroup_id)
|
||
|
VALUES ('{$data['tag_id']}', '{$data['group_id']}')";
|
||
|
$connection->executeQuery($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('update extra fields');
|
||
|
}
|
||
|
|
||
|
// Extra fields
|
||
|
$extraFieldTables = [
|
||
|
ExtraField::USER_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_USER_FIELD),
|
||
|
ExtraField::COURSE_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_COURSE_FIELD),
|
||
|
//ExtraField::LP_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_LP_FIELD),
|
||
|
ExtraField::SESSION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_SESSION_FIELD),
|
||
|
//ExtraField::CALENDAR_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
|
||
|
//ExtraField::QUESTION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
|
||
|
//ExtraField::USER_FIELD_TYPE => //Database::get_main_table(TABLE_MAIN_SPECIFIC_FIELD),
|
||
|
];
|
||
|
|
||
|
foreach ($extraFieldTables as $type => $table) {
|
||
|
$sql = "SELECT * FROM $table ";
|
||
|
if ($debug) {
|
||
|
error_log($sql);
|
||
|
}
|
||
|
$result = $connection->query($sql);
|
||
|
$fields = $result->fetchAll();
|
||
|
|
||
|
foreach ($fields as $field) {
|
||
|
if ($debug) {
|
||
|
error_log("Loading field: ".$field['field_variable']);
|
||
|
}
|
||
|
$originalId = $field['id'];
|
||
![]()
9 years ago
|
|
||
|
$params = [
|
||
|
'extra_field_type' => $type,
|
||
|
'variable' => $field['field_variable'],
|
||
|
'field_type' => $field['field_type'],
|
||
|
'display_text' => $field['field_display_text'],
|
||
|
'default_value' => $field['field_default_value'],
|
||
|
'field_order' => $field['field_order'],
|
||
|
'visible' => $field['field_visible'],
|
||
|
'changeable' => $field['field_changeable'],
|
||
![]()
8 years ago
|
'filter' => $field['field_filter'],
|
||
![]()
9 years ago
|
];
|
||
|
|
||
|
$connection->insert('extra_field', $params);
|
||
|
$newExtraFieldId = $connection->lastInsertId();
|
||
![]()
9 years ago
|
|
||
![]()
8 years ago
|
$values = [];
|
||
![]()
9 years ago
|
$handlerId = null;
|
||
|
switch ($type) {
|
||
|
case ExtraField::USER_FIELD_TYPE:
|
||
|
$optionTable = Database::get_main_table(
|
||
|
TABLE_MAIN_USER_FIELD_OPTIONS
|
||
|
);
|
||
|
$valueTable = Database::get_main_table(
|
||
|
TABLE_MAIN_USER_FIELD_VALUES
|
||
|
);
|
||
|
$handlerId = 'user_id';
|
||
|
break;
|
||
|
case ExtraField::COURSE_FIELD_TYPE:
|
||
|
$optionTable = Database::get_main_table(
|
||
|
TABLE_MAIN_COURSE_FIELD_OPTIONS
|
||
|
);
|
||
|
$valueTable = Database::get_main_table(
|
||
|
TABLE_MAIN_COURSE_FIELD_VALUES
|
||
|
);
|
||
|
$handlerId = 'c_id';
|
||
|
break;
|
||
|
case ExtraField::SESSION_FIELD_TYPE:
|
||
|
$optionTable = Database::get_main_table(
|
||
|
TABLE_MAIN_SESSION_FIELD_OPTIONS
|
||
|
);
|
||
|
$valueTable = Database::get_main_table(
|
||
|
TABLE_MAIN_SESSION_FIELD_VALUES
|
||
|
);
|
||
|
$handlerId = 'session_id';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!empty($optionTable)) {
|
||
|
$sql = "SELECT * FROM $optionTable WHERE field_id = $originalId ";
|
||
|
$result = $connection->query($sql);
|
||
|
$options = $result->fetchAll();
|
||
|
|
||
|
foreach ($options as $option) {
|
||
![]()
9 years ago
|
$params = [
|
||
|
'display_text' => $option['option_display_text'],
|
||
|
'field_id' => $newExtraFieldId,
|
||
|
'option_order' => $option['option_order'],
|
||
![]()
8 years ago
|
'option_value' => $option['option_value'],
|
||
![]()
9 years ago
|
];
|
||
|
$connection->insert('extra_field_options', $params);
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
$sql = "SELECT * FROM $valueTable WHERE field_id = $originalId ";
|
||
|
$result = $connection->query($sql);
|
||
|
$values = $result->fetchAll();
|
||
|
if ($debug) {
|
||
|
error_log("Fetch all values for field");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!empty($values)) {
|
||
|
if ($debug) {
|
||
|
error_log("Saving field value in new table");
|
||
|
}
|
||
|
$k = 0;
|
||
|
foreach ($values as $value) {
|
||
|
if (isset($value[$handlerId])) {
|
||
|
// Insert without the use of the entity as it reduces
|
||
|
// speed to 2 records per second (much too slow)
|
||
|
$params = [
|
||
![]()
9 years ago
|
'field_id' => $newExtraFieldId,
|
||
![]()
9 years ago
|
'value' => $value['field_value'],
|
||
![]()
8 years ago
|
'item_id' => $value[$handlerId],
|
||
![]()
9 years ago
|
];
|
||
|
$connection->insert('extra_field_values', $params);
|
||
|
if ($debug && ($k % 10000 == 0)) {
|
||
|
error_log("Saving field $k");
|
||
|
}
|
||
|
$k++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('Remove index');
|
||
|
}
|
||
|
|
||
|
// Drop temporary indexes added to increase speed of this function's queries
|
||
|
$sql = "ALTER TABLE c_document DROP INDEX tmpidx_doc";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_student_publication DROP INDEX tmpidx_stud";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_quiz DROP INDEX tmpidx_quiz";
|
||
|
$connection->executeQuery($sql);
|
||
|
$sql = "ALTER TABLE c_item_property DROP INDEX tmpidx_ip";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
![]()
10 years ago
|
if ($debug) {
|
||
|
error_log('Finish fixId function');
|
||
|
}
|
||
![]()
7 years ago
|
|
||
|
fixLpId($connection, true);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param \Doctrine\DBAL\Connection $connection
|
||
|
* @param $debug
|
||
|
*
|
||
|
* @throws \Doctrine\DBAL\DBALException
|
||
|
*/
|
||
|
function fixLpId($connection, $debug)
|
||
|
{
|
||
|
if ($debug) {
|
||
|
error_log('Fix lp.id lp.iids');
|
||
|
}
|
||
|
|
||
|
$sql = 'SELECT id, title, code FROM course';
|
||
|
$result = $connection->query($sql);
|
||
|
$courses = $result->fetchAll();
|
||
|
|
||
|
$sql = 'SELECT id FROM session';
|
||
|
$result = $connection->query($sql);
|
||
|
$sessions = $result->fetchAll();
|
||
|
|
||
|
$tblCLp = Database::get_course_table(TABLE_LP_MAIN);
|
||
|
$tblCLpItem = Database::get_course_table(TABLE_LP_ITEM);
|
||
|
$toolTable = Database::get_course_table(TABLE_TOOL_LIST);
|
||
|
|
||
|
if (!empty($sessions)) {
|
||
|
$sessions = array_column($sessions, 'id');
|
||
|
$sessions[] = 0;
|
||
|
} else {
|
||
|
$sessions = [0];
|
||
|
}
|
||
|
|
||
|
foreach ($courses as $course) {
|
||
|
$courseId = $course['id'];
|
||
|
$sql = "SELECT * FROM $tblCLp WHERE c_id = $courseId AND iid <> id ORDER by iid";
|
||
|
$result = $connection->query($sql);
|
||
|
if ($debug) {
|
||
|
error_log('-------------');
|
||
|
error_log("Entering Lps in course #$courseId");
|
||
|
error_log($sql);
|
||
|
}
|
||
|
$lpList = $result->fetchAll();
|
||
|
$myOnlyLpList = [];
|
||
|
if (!empty($lpList)) {
|
||
|
foreach ($lpList as $lpInfo) {
|
||
|
$oldId = $lpInfo['id'];
|
||
|
$sql = "SELECT * FROM $tblCLpItem WHERE c_id = $courseId AND lp_id = $oldId ORDER by iid";
|
||
|
$result = $connection->query($sql);
|
||
|
$items = $result->fetchAll();
|
||
|
$lpInfo['lp_list'] = $items;
|
||
|
$myOnlyLpList[] = $lpInfo;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!empty($myOnlyLpList)) {
|
||
|
foreach ($myOnlyLpList as $lpInfo) {
|
||
|
$lpIid = $lpInfo['iid'];
|
||
|
$oldId = $lpInfo['id'];
|
||
|
$items = $lpInfo['lp_list'];
|
||
|
|
||
|
if (empty($items)) {
|
||
|
continue;
|
||
|
}
|
||
|
$itemList = [];
|
||
|
foreach ($items as $subItem) {
|
||
|
$itemList[$subItem['id']] = $subItem['iid'];
|
||
|
}
|
||
|
$variablesToFix = [
|
||
|
'parent_item_id',
|
||
|
'next_item_id',
|
||
|
'prerequisite',
|
||
|
'previous_item_id',
|
||
|
];
|
||
|
|
||
|
foreach ($sessions as $sessionId) {
|
||
|
$correctLink = "lp/lp_controller.php?action=view&lp_id=$lpIid&id_session=$sessionId";
|
||
|
$link = "newscorm/lp_controller.php?action=view&lp_id=$oldId&id_session=$sessionId";
|
||
|
$secondLink = "lp/lp_controller.php?action=view&lp_id=$oldId&id_session=$sessionId";
|
||
|
$sql = "UPDATE $toolTable
|
||
|
SET link = '$correctLink'
|
||
|
WHERE c_id = $courseId AND (link = '$link' OR link ='$secondLink')";
|
||
|
$connection->query($sql);
|
||
|
}
|
||
|
|
||
|
foreach ($items as $item) {
|
||
|
$itemIid = $item['iid'];
|
||
|
$itemId = $item['id'];
|
||
|
foreach ($variablesToFix as $variable) {
|
||
|
if (!empty($item[$variable]) && isset($itemList[$item[$variable]])) {
|
||
|
$newId = $itemList[$item[$variable]];
|
||
|
$sql = "UPDATE $tblCLpItem SET $variable = $newId
|
||
|
WHERE iid = $itemIid AND c_id = $courseId AND lp_id = $oldId";
|
||
|
$connection->query($sql);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($item['item_type'] == 'document' && !empty($item['path'])) {
|
||
|
$oldDocumentId = $item['path'];
|
||
|
$sql = "SELECT * FROM c_document WHERE c_id = $courseId AND id = $oldDocumentId";
|
||
|
$result = $connection->query($sql);
|
||
|
$document = $result->fetch();
|
||
|
if (!empty($document)) {
|
||
|
$newDocumentId = $document['iid'];
|
||
|
if (!empty($newDocumentId)) {
|
||
|
$sql = "UPDATE $tblCLpItem SET path = $newDocumentId
|
||
|
WHERE iid = $itemIid AND c_id = $courseId";
|
||
|
$connection->query($sql);
|
||
|
if ($debug) {
|
||
|
//error_log("Fix document: ");
|
||
|
//error_log($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// c_lp_view
|
||
|
$sql = "UPDATE c_lp_view SET last_item = $itemIid
|
||
|
WHERE c_id = $courseId AND last_item = $itemId AND lp_id = $oldId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
// c_lp_item_view
|
||
|
$sql = "UPDATE c_lp_item_view SET lp_item_id = $itemIid
|
||
|
WHERE c_id = $courseId AND lp_item_id = $itemId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
// Update track_exercises
|
||
|
$sql = "UPDATE track_e_exercises SET orig_lp_item_id = $itemIid
|
||
|
WHERE c_id = $courseId AND orig_lp_id = $oldId AND orig_lp_item_id = $itemId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
// c_forum_thread
|
||
|
$sql = "UPDATE c_forum_thread SET lp_item_id = $itemIid
|
||
|
WHERE c_id = $courseId AND lp_item_id = $itemId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
// orig_lp_item_view_id
|
||
|
$sql = "SELECT * FROM c_lp_view
|
||
|
WHERE c_id = $courseId AND lp_id = $oldId";
|
||
|
$result = $connection->query($sql);
|
||
|
$itemViewList = $result->fetchAll();
|
||
|
if ($itemViewList) {
|
||
|
foreach ($itemViewList as $itemView) {
|
||
|
$userId = $itemView['user_id'];
|
||
|
$oldItemViewId = $itemView['id'];
|
||
|
$newItemView = $itemView['iid'];
|
||
|
|
||
|
if (empty($oldItemViewId)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$sql = "UPDATE track_e_exercises
|
||
|
SET orig_lp_item_view_id = $newItemView
|
||
|
WHERE
|
||
|
c_id = $courseId AND
|
||
|
orig_lp_id = $oldId AND
|
||
|
orig_lp_item_id = $itemIid AND
|
||
|
orig_lp_item_view_id = $oldItemViewId AND
|
||
|
exe_user_id = $userId
|
||
|
";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
/*$sql = "UPDATE c_lp_item_view
|
||
|
SET lp_view_id = $newItemView
|
||
|
WHERE
|
||
|
lp_view_id = $oldItemViewId AND
|
||
|
c_id = $courseId
|
||
|
";
|
||
|
$connection->query($sql);*/
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sql = "UPDATE $tblCLpItem SET lp_id = $lpIid
|
||
|
WHERE c_id = $courseId AND lp_id = $oldId AND id = $itemId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
$sql = "UPDATE $tblCLpItem SET id = iid
|
||
|
WHERE c_id = $courseId AND lp_id = $oldId AND id = $itemId";
|
||
|
$connection->query($sql);
|
||
|
}
|
||
|
|
||
|
$sql = "UPDATE c_lp_view SET lp_id = $lpIid WHERE c_id = $courseId AND lp_id = $oldId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
$sql = "UPDATE c_forum_forum SET lp_id = $lpIid WHERE c_id = $courseId AND lp_id = $oldId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
// Update track_exercises.
|
||
|
$sql = "UPDATE track_e_exercises SET orig_lp_id = $lpIid
|
||
|
WHERE c_id = $courseId AND orig_lp_id = $oldId";
|
||
|
$connection->query($sql);
|
||
|
|
||
|
$sql = "UPDATE $tblCLp SET id = iid WHERE c_id = $courseId AND id = $oldId ";
|
||
|
$connection->query($sql);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($debug) {
|
||
|
error_log('END Fix lp.id lp.iids');
|
||
|
}
|
||
![]()
10 years ago
|
}
|
||
|
|
||
![]()
8 years ago
|
/**
|
||
![]()
8 years ago
|
* @param string $distFile
|
||
![]()
8 years ago
|
* @param string $envFile
|
||
![]()
8 years ago
|
* @param array $params
|
||
![]()
8 years ago
|
*/
|
||
![]()
8 years ago
|
function updateEnvFile($distFile, $envFile, $params)
|
||
![]()
8 years ago
|
{
|
||
![]()
6 years ago
|
$requirements = [
|
||
|
'DATABASE_HOST',
|
||
|
'DATABASE_PORT',
|
||
|
'DATABASE_NAME',
|
||
|
'DATABASE_USER',
|
||
|
'DATABASE_PASSWORD',
|
||
|
'APP_INSTALLED',
|
||
|
'APP_ENCRYPT_METHOD',
|
||
|
];
|
||
|
|
||
|
foreach ($requirements as $requirement) {
|
||
![]()
6 years ago
|
if (!isset($params['{{'.$requirement.'}}'])) {
|
||
![]()
6 years ago
|
throw new \Exception("The parameter $requirement is needed in order to edit the .env.local file");
|
||
![]()
6 years ago
|
}
|
||
|
}
|
||
|
|
||
![]()
8 years ago
|
$contents = file_get_contents($distFile);
|
||
![]()
8 years ago
|
$contents = str_replace(array_keys($params), array_values($params), $contents);
|
||
|
file_put_contents($envFile, $contents);
|
||
|
}
|
||
|
|
||
![]()
11 years ago
|
/**
|
||
![]()
7 years ago
|
* @param SymfonyContainer $container
|
||
![]()
7 years ago
|
* @param EntityManager $manager
|
||
![]()
11 years ago
|
*/
|
||
![]()
7 years ago
|
function installGroups($container, $manager)
|
||
|
{
|
||
![]()
7 years ago
|
// Creating fos_group (groups and roles)
|
||
|
$groups = [
|
||
|
[
|
||
|
'code' => 'ADMIN',
|
||
|
'title' => 'Administrators',
|
||
|
'roles' => ['ROLE_ADMIN'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'STUDENT',
|
||
|
'title' => 'Students',
|
||
|
'roles' => ['ROLE_STUDENT'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'TEACHER',
|
||
|
'title' => 'Teachers',
|
||
|
'roles' => ['ROLE_TEACHER'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'RRHH',
|
||
|
'title' => 'Human resources manager',
|
||
|
'roles' => ['ROLE_RRHH'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'SESSION_MANAGER',
|
||
|
'title' => 'Session',
|
||
|
'roles' => ['ROLE_SESSION_MANAGER'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'QUESTION_MANAGER',
|
||
|
'title' => 'Question manager',
|
||
|
'roles' => ['ROLE_QUESTION_MANAGER'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'STUDENT_BOSS',
|
||
|
'title' => 'Student boss',
|
||
|
'roles' => ['ROLE_STUDENT_BOSS'],
|
||
|
],
|
||
|
[
|
||
|
'code' => 'INVITEE',
|
||
|
'title' => 'Invitee',
|
||
|
'roles' => ['ROLE_INVITEE'],
|
||
|
],
|
||
|
];
|
||
![]()
6 years ago
|
$repo = $manager->getRepository('ChamiloUserBundle:Group');
|
||
![]()
7 years ago
|
foreach ($groups as $groupData) {
|
||
![]()
7 years ago
|
$criteria = ['code' => $groupData['code']];
|
||
![]()
6 years ago
|
$groupExists = $repo->findOneBy($criteria);
|
||
![]()
7 years ago
|
if (!$groupExists) {
|
||
![]()
6 years ago
|
$group = new Group($groupData['title']);
|
||
|
$group
|
||
|
->setCode($groupData['code']);
|
||
|
|
||
![]()
7 years ago
|
foreach ($groupData['roles'] as $role) {
|
||
|
$group->addRole($role);
|
||
|
}
|
||
|
$manager->persist($group);
|
||
![]()
6 years ago
|
$manager->flush();
|
||
![]()
7 years ago
|
}
|
||
|
}
|
||
![]()
7 years ago
|
}
|
||
![]()
7 years ago
|
|
||
![]()
7 years ago
|
/**
|
||
|
* @param SymfonyContainer $container
|
||
|
*/
|
||
|
function installPages($container)
|
||
|
{
|
||
![]()
7 years ago
|
error_log('installPages');
|
||
|
|
||
![]()
7 years ago
|
$siteManager = Container::getSiteManager();
|
||
![]()
11 years ago
|
|
||
![]()
7 years ago
|
// Create site
|
||
![]()
8 years ago
|
/** @var Chamilo\PageBundle\Entity\Site $site */
|
||
|
$site = $siteManager->create();
|
||
|
$site->setHost('localhost');
|
||
|
$site->setEnabled(true);
|
||
|
$site->setName('localhost');
|
||
|
$site->setEnabledFrom(new \DateTime('now'));
|
||
|
$site->setEnabledTo(new \DateTime('+20 years'));
|
||
![]()
8 years ago
|
$site->setRelativePath('');
|
||
![]()
8 years ago
|
$site->setIsDefault(true);
|
||
![]()
7 years ago
|
$site->setLocale('en');
|
||
![]()
8 years ago
|
$siteManager->save($site);
|
||
|
|
||
![]()
7 years ago
|
// Create home page
|
||
|
/** @var PageManager $pageManager */
|
||
![]()
7 years ago
|
$pageManager = $container->get('sonata.page.manager.page');
|
||
![]()
7 years ago
|
/** @var \Sonata\PageBundle\Model\Page $page */
|
||
![]()
7 years ago
|
$page = $pageManager->create();
|
||
|
$page->setSlug('homepage');
|
||
![]()
7 years ago
|
$page->setUrl('/');
|
||
![]()
7 years ago
|
$page->setName('homepage');
|
||
|
$page->setTitle('home');
|
||
|
$page->setEnabled(true);
|
||
|
$page->setDecorate(1);
|
||
|
$page->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
|
||
|
$page->setTemplateCode('default');
|
||
|
$page->setRouteName('homepage');
|
||
|
//$page->setParent($this->getReference('page-homepage'));
|
||
|
$page->setSite($site);
|
||
|
$pageManager->save($page);
|
||
|
|
||
![]()
7 years ago
|
// Create welcome page
|
||
|
$pageWelcome = $pageManager->create();
|
||
|
$pageWelcome->setSlug('welcome');
|
||
|
$pageWelcome->setUrl('/welcome');
|
||
|
$pageWelcome->setName('welcome');
|
||
|
$pageWelcome->setTitle('welcome');
|
||
|
$pageWelcome->setEnabled(true);
|
||
|
$pageWelcome->setDecorate(1);
|
||
|
$pageWelcome->setRequestMethod('GET');
|
||
|
$pageWelcome->setTemplateCode('default');
|
||
|
$pageWelcome->setRouteName('welcome');
|
||
|
$pageWelcome->setParent($page);
|
||
|
$pageWelcome->setSite($site);
|
||
|
$pageManager->save($pageWelcome);
|
||
|
|
||
![]()
7 years ago
|
// Creating page blocks
|
||
![]()
7 years ago
|
$templateManager = $container->get('sonata.page.template_manager');
|
||
|
$template = $templateManager->get('default');
|
||
|
$templateContainers = $template->getContainers();
|
||
|
|
||
|
$containers = [];
|
||
|
foreach ($templateContainers as $id => $area) {
|
||
|
$containers[$id] = [
|
||
|
'area' => $area,
|
||
|
'block' => false,
|
||
|
];
|
||
|
}
|
||
|
|
||
|
// Create blocks for this page
|
||
|
$blockInteractor = $container->get('sonata.page.block_interactor');
|
||
|
$parentBlock = null;
|
||
|
foreach ($containers as $id => $area) {
|
||
|
if (false === $area['block'] && $templateContainers[$id]['shared'] === false) {
|
||
|
$block = $blockInteractor->createNewContainer(
|
||
|
[
|
||
|
'page' => $pageWelcome,
|
||
|
'name' => $templateContainers[$id]['name'],
|
||
|
'code' => $id,
|
||
|
]
|
||
|
);
|
||
|
|
||
|
if ($id === 'content' && $templateContainers[$id]['name'] == 'Main content') {
|
||
|
$parentBlock = $block;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Create block in main content
|
||
|
$block = $container->get('sonata.page.manager.block');
|
||
|
/** @var \Sonata\BlockBundle\Model\Block $myBlock */
|
||
|
$myBlock = $block->create();
|
||
|
$myBlock->setType('sonata.formatter.block.formatter');
|
||
|
$myBlock->setSetting('format', 'richhtml');
|
||
|
$myBlock->setSetting('content', '');
|
||
|
$myBlock->setSetting('rawContent', '');
|
||
|
$myBlock->setSetting('template', '@SonataFormatter/Block/block_formatter.html.twig');
|
||
|
$myBlock->setParent($parentBlock);
|
||
|
$pageWelcome->addBlocks($myBlock);
|
||
|
$pageManager->save($pageWelcome);
|
||
![]()
7 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* @param SymfonyContainer $container
|
||
![]()
7 years ago
|
* @param EntityManager $manager
|
||
![]()
7 years ago
|
* @param bool $upgrade
|
||
![]()
7 years ago
|
*/
|
||
![]()
7 years ago
|
function installSchemas($container, $manager, $upgrade = false)
|
||
![]()
7 years ago
|
{
|
||
![]()
7 years ago
|
error_log('installSchemas');
|
||
![]()
7 years ago
|
$settingsManager = Container::getSettingsManager();
|
||
|
|
||
![]()
6 years ago
|
// Install course tools (table "tool")
|
||
![]()
6 years ago
|
$toolChain = $container->get(ToolChain::class);
|
||
![]()
6 years ago
|
$toolChain->createTools($manager);
|
||
|
|
||
|
$urlRepo = $container->get('Chamilo\CoreBundle\Repository\AccessUrlRepository');
|
||
|
$accessUrl = $urlRepo->find(1);
|
||
![]()
7 years ago
|
if (!$accessUrl) {
|
||
![]()
6 years ago
|
$em = $urlRepo->getEntityManager();
|
||
|
|
||
![]()
7 years ago
|
// Creating AccessUrl
|
||
|
$accessUrl = new AccessUrl();
|
||
|
$accessUrl
|
||
|
->setUrl('http://localhost/')
|
||
|
->setDescription('')
|
||
|
->setActive(1)
|
||
|
;
|
||
![]()
6 years ago
|
$em->persist($accessUrl);
|
||
|
$em->flush();
|
||
![]()
7 years ago
|
}
|
||
|
|
||
![]()
7 years ago
|
if ($upgrade) {
|
||
|
$settingsManager->updateSchemas($accessUrl);
|
||
|
} else {
|
||
|
// Installing schemas (filling settings_current table)
|
||
|
$settingsManager->installSchemas($accessUrl);
|
||
|
}
|
||
![]()
7 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* @param SymfonyContainer $container
|
||
|
*/
|
||
![]()
7 years ago
|
function upgradeWithContainer($container)
|
||
![]()
7 years ago
|
{
|
||
|
Container::setContainer($container);
|
||
![]()
7 years ago
|
Container::setLegacyServices($container, false);
|
||
|
error_log('setLegacyServices');
|
||
![]()
7 years ago
|
$manager = Database::getManager();
|
||
|
installGroups($container, $manager);
|
||
![]()
7 years ago
|
error_log('installGroups');
|
||
![]()
6 years ago
|
// @todo check if adminId = 1
|
||
|
installSchemas($container, $manager, 1, true);
|
||
![]()
7 years ago
|
installPages($container);
|
||
![]()
7 years ago
|
fixMedia($container);
|
||
|
}
|
||
|
|
||
|
function fixMedia($container)
|
||
|
{
|
||
|
error_log('fix medias');
|
||
|
$pool = $container->get('sonata.media.pool');
|
||
|
$contextManager = $container->get('sonata.classification.manager.context');
|
||
|
$categoryManager = $container->get('sonata.media.manager.category');
|
||
|
|
||
|
foreach ($pool->getContexts() as $context => $contextAttrs) {
|
||
|
/** @var ContextInterface $defaultContext */
|
||
|
$defaultContext = $contextManager->findOneBy([
|
||
|
'id' => $context,
|
||
|
]);
|
||
|
|
||
|
if (!$defaultContext) {
|
||
|
$defaultContext = $contextManager->create();
|
||
|
$defaultContext->setId($context);
|
||
|
$defaultContext->setName(ucfirst($context));
|
||
|
$defaultContext->setEnabled(true);
|
||
|
|
||
|
$contextManager->save($defaultContext);
|
||
|
}
|
||
|
|
||
|
$defaultCategory = $categoryManager->getRootCategory($defaultContext);
|
||
|
|
||
|
if (!$defaultCategory) {
|
||
|
$defaultCategory = $categoryManager->create();
|
||
|
$defaultCategory->setContext($defaultContext);
|
||
|
$defaultCategory->setName(ucfirst($context));
|
||
|
$defaultCategory->setEnabled(true);
|
||
|
$defaultCategory->setPosition(0);
|
||
|
|
||
|
$categoryManager->save($defaultCategory);
|
||
|
}
|
||
|
}
|
||
![]()
7 years ago
|
}
|
||
|
|
||
|
/**
|
||
|
* After the schema was created (table creation), the function adds
|
||
|
* admin/platform information.
|
||
|
*
|
||
|
* @param \Psr\Container\ContainerInterface $container
|
||
|
* @param string $sysPath
|
||
|
* @param string $encryptPassForm
|
||
|
* @param string $passForm
|
||
|
* @param string $adminLastName
|
||
|
* @param string $adminFirstName
|
||
|
* @param string $loginForm
|
||
|
* @param string $emailForm
|
||
|
* @param string $adminPhoneForm
|
||
|
* @param string $languageForm
|
||
|
* @param string $institutionForm
|
||
|
* @param string $institutionUrlForm
|
||
|
* @param string $siteName
|
||
|
* @param string $allowSelfReg
|
||
|
* @param string $allowSelfRegProf
|
||
|
* @param string $installationProfile Installation profile, if any was provided
|
||
|
*/
|
||
|
function finishInstallationWithContainer(
|
||
|
$container,
|
||
|
$sysPath,
|
||
|
$encryptPassForm,
|
||
|
$passForm,
|
||
|
$adminLastName,
|
||
|
$adminFirstName,
|
||
|
$loginForm,
|
||
|
$emailForm,
|
||
|
$adminPhoneForm,
|
||
|
$languageForm,
|
||
|
$institutionForm,
|
||
|
$institutionUrlForm,
|
||
|
$siteName,
|
||
|
$allowSelfReg,
|
||
|
$allowSelfRegProf,
|
||
|
$installationProfile = ''
|
||
|
) {
|
||
![]()
6 years ago
|
error_log('finishInstallationWithContainer');
|
||
![]()
7 years ago
|
$sysPath = !empty($sysPath) ? $sysPath : api_get_path(SYS_PATH);
|
||
|
Container::setContainer($container);
|
||
![]()
7 years ago
|
Container::setLegacyServices($container, false);
|
||
![]()
7 years ago
|
|
||
|
$manager = Database::getManager();
|
||
|
$connection = $manager->getConnection();
|
||
|
$sql = getVersionTable();
|
||
![]()
6 years ago
|
|
||
![]()
7 years ago
|
// Add version table
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
// Add tickets defaults
|
||
|
$ticketProject = new TicketProject();
|
||
|
$ticketProject
|
||
|
->setId(1)
|
||
|
->setName('Ticket System')
|
||
|
->setInsertUserId(1);
|
||
|
|
||
|
$manager->persist($ticketProject);
|
||
|
$manager->flush();
|
||
|
|
||
![]()
6 years ago
|
$trans = $container->get('translator');
|
||
|
|
||
![]()
7 years ago
|
$categories = [
|
||
![]()
6 years ago
|
$trans->trans('Enrollment') => $trans->trans('Tickets about enrollment'),
|
||
|
$trans->trans('General information') => $trans->trans('Tickets about general information'),
|
||
|
$trans->trans('Requests and paperwork') => $trans->trans('Tickets about requests and paperwork'),
|
||
|
$trans->trans('Academic Incidents') => $trans->trans('Tickets about academic incidents, like exams, practices, tasks, etc.'),
|
||
|
$trans->trans('Virtual campus') => $trans->trans('Tickets about virtual campus'),
|
||
|
$trans->trans('Online evaluation') => $trans->trans('Tickets about online evaluation'),
|
||
![]()
7 years ago
|
];
|
||
|
|
||
|
$i = 1;
|
||
|
foreach ($categories as $category => $description) {
|
||
|
// Online evaluation requires a course
|
||
|
$ticketCategory = new TicketCategory();
|
||
|
$ticketCategory
|
||
|
->setId($i)
|
||
|
->setName($category)
|
||
|
->setDescription($description)
|
||
|
->setProject($ticketProject)
|
||
|
->setInsertUserId(1);
|
||
|
|
||
|
$isRequired = $i == 6;
|
||
|
$ticketCategory->setCourseRequired($isRequired);
|
||
|
|
||
|
$manager->persist($ticketCategory);
|
||
|
$manager->flush();
|
||
|
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
// Default Priorities
|
||
|
$defaultPriorities = [
|
||
![]()
6 years ago
|
TicketManager::PRIORITY_NORMAL => $trans->trans('Normal'),
|
||
|
TicketManager::PRIORITY_HIGH => $trans->trans('High'),
|
||
|
TicketManager::PRIORITY_LOW => $trans->trans('Low'),
|
||
![]()
7 years ago
|
];
|
||
|
|
||
|
$i = 1;
|
||
|
foreach ($defaultPriorities as $code => $priority) {
|
||
|
$ticketPriority = new TicketPriority();
|
||
|
$ticketPriority
|
||
|
->setId($i)
|
||
|
->setName($priority)
|
||
|
->setCode($code)
|
||
|
->setInsertUserId(1);
|
||
|
|
||
|
$manager->persist($ticketPriority);
|
||
|
$manager->flush();
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
$table = Database::get_main_table(TABLE_TICKET_STATUS);
|
||
|
|
||
|
// Default status
|
||
|
$defaultStatus = [
|
||
![]()
6 years ago
|
TicketManager::STATUS_NEW => $trans->trans('New'),
|
||
|
TicketManager::STATUS_PENDING => $trans->trans('Pending'),
|
||
|
TicketManager::STATUS_UNCONFIRMED => $trans->trans('Unconfirmed'),
|
||
|
TicketManager::STATUS_CLOSE => $trans->trans('Close'),
|
||
|
TicketManager::STATUS_FORWARDED => $trans->trans('Forwarded'),
|
||
![]()
7 years ago
|
];
|
||
|
|
||
|
$i = 1;
|
||
|
foreach ($defaultStatus as $code => $status) {
|
||
|
$attributes = [
|
||
|
'id' => $i,
|
||
|
'code' => $code,
|
||
|
'name' => $status,
|
||
|
];
|
||
|
Database::insert($table, $attributes);
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
installGroups($container, $manager);
|
||
![]()
6 years ago
|
installSchemas($container, $manager, false);
|
||
![]()
7 years ago
|
installPages($container);
|
||
|
|
||
|
// Inserting default data
|
||
|
$data = file_get_contents($sysPath.'main/install/data.sql');
|
||
|
$result = $manager->getConnection()->prepare($data);
|
||
|
$result->execute();
|
||
|
$result->closeCursor();
|
||
![]()
7 years ago
|
|
||
![]()
10 years ago
|
UserManager::setPasswordEncryption($encryptPassForm);
|
||
![]()
6 years ago
|
error_log('user creation - admin');
|
||
![]()
10 years ago
|
// Create admin user.
|
||
![]()
6 years ago
|
$adminId = UserManager::create_user(
|
||
![]()
10 years ago
|
$adminFirstName,
|
||
|
$adminLastName,
|
||
|
1,
|
||
|
$emailForm,
|
||
|
$loginForm,
|
||
|
$passForm,
|
||
|
'ADMIN', //$official_code = '',
|
||
|
$languageForm,
|
||
|
$adminPhoneForm,
|
||
|
'', //$picture_uri = '',
|
||
|
PLATFORM_AUTH_SOURCE,
|
||
![]()
8 years ago
|
'', //$expirationDate,
|
||
![]()
10 years ago
|
1,
|
||
|
0,
|
||
|
null,
|
||
|
'',
|
||
![]()
8 years ago
|
false, //$send_mail = false,
|
||
![]()
8 years ago
|
true, //$isAdmin = false
|
||
![]()
7 years ago
|
'',
|
||
![]()
8 years ago
|
false,
|
||
|
'',
|
||
|
1
|
||
![]()
10 years ago
|
);
|
||
![]()
11 years ago
|
|
||
![]()
6 years ago
|
error_log('user creation - anon');
|
||
![]()
10 years ago
|
// Create anonymous user.
|
||
![]()
6 years ago
|
UserManager::create_user(
|
||
![]()
10 years ago
|
'Joe',
|
||
|
'Anonymous',
|
||
|
6,
|
||
|
'anonymous@localhost',
|
||
|
'anon',
|
||
|
'anon',
|
||
|
'anonymous', //$official_code = '',
|
||
|
$languageForm,
|
||
|
'',
|
||
|
'', //$picture_uri = '',
|
||
|
PLATFORM_AUTH_SOURCE,
|
||
|
'',
|
||
|
1,
|
||
|
0,
|
||
|
null,
|
||
|
'',
|
||
![]()
8 years ago
|
false, //$send_mail = false,
|
||
![]()
8 years ago
|
false, //$isAdmin = false
|
||
|
'',
|
||
|
false,
|
||
|
'',
|
||
|
1
|
||
![]()
10 years ago
|
);
|
||
|
|
||
![]()
11 years ago
|
// Set default language
|
||
![]()
7 years ago
|
Database::update(
|
||
|
Database::get_main_table(TABLE_MAIN_LANGUAGE),
|
||
|
['available' => 1],
|
||
|
['dokeos_folder = ?' => $languageForm]
|
||
|
);
|
||
![]()
11 years ago
|
|
||
![]()
6 years ago
|
error_log('Access url');
|
||
![]()
6 years ago
|
$userManager = Container::getUserManager();
|
||
|
$urlRepo = $container->get('Chamilo\CoreBundle\Repository\AccessUrlRepository');
|
||
|
$accessUrl = $urlRepo->find(1);
|
||
|
$admin = $userManager->find($adminId);
|
||
|
$urlRepo->addResourceNode($accessUrl, $admin);
|
||
|
|
||
![]()
11 years ago
|
// Install settings
|
||
|
installSettings(
|
||
|
$institutionForm,
|
||
|
$institutionUrlForm,
|
||
|
$siteName,
|
||
|
$emailForm,
|
||
|
$adminLastName,
|
||
|
$adminFirstName,
|
||
|
$languageForm,
|
||
|
$allowSelfReg,
|
||
![]()
10 years ago
|
$allowSelfRegProf,
|
||
|
$installationProfile
|
||
![]()
11 years ago
|
);
|
||
|
|
||
|
lockSettings();
|
||
|
updateDirAndFilesPermissions();
|
||
![]()
7 years ago
|
fixMedia($container);
|
||
![]()
9 years ago
|
|
||
|
// Set the latest version
|
||
![]()
8 years ago
|
/*$path = $sysPath.'app/Migrations/Schema/V111/';
|
||
![]()
9 years ago
|
$finder = new \Symfony\Component\Finder\Finder();
|
||
|
$files = $finder->files()->in($path);
|
||
![]()
9 years ago
|
|
||
|
// Needed for chash
|
||
![]()
8 years ago
|
createVersionTable();
|
||
![]()
9 years ago
|
|
||
![]()
9 years ago
|
foreach ($files as $version) {
|
||
![]()
8 years ago
|
$version = str_replace(['Version', '.php'], '', $version->getFilename());
|
||
![]()
9 years ago
|
$sql = "INSERT INTO version (version) VALUES ('$version')";
|
||
![]()
9 years ago
|
Database::query($sql);
|
||
![]()
8 years ago
|
}*/
|
||
![]()
11 years ago
|
}
|
||
![]()
10 years ago
|
|
||
![]()
8 years ago
|
/**
|
||
![]()
8 years ago
|
* Creates 'version' table.
|
||
![]()
8 years ago
|
*/
|
||
|
function createVersionTable()
|
||
|
{
|
||
|
$sql = getVersionTable();
|
||
|
Database::query($sql);
|
||
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Get version creation table query.
|
||
|
*
|
||
![]()
8 years ago
|
* @return string
|
||
|
*/
|
||
|
function getVersionTable()
|
||
|
{
|
||
|
return 'CREATE TABLE IF NOT EXISTS version (id int unsigned NOT NULL AUTO_INCREMENT, version varchar(20), PRIMARY KEY(id), UNIQUE(version));';
|
||
|
}
|
||
|
|
||
![]()
10 years ago
|
/**
|
||
![]()
8 years ago
|
* Update settings based on installation profile defined in a JSON file.
|
||
|
*
|
||
![]()
10 years ago
|
* @param string $installationProfile The name of the JSON file in main/install/profiles/ folder
|
||
![]()
10 years ago
|
*
|
||
![]()
10 years ago
|
* @return bool false on failure (no bad consequences anyway, just ignoring profile)
|
||
|
*/
|
||
![]()
10 years ago
|
function installProfileSettings($installationProfile = '')
|
||
|
{
|
||
![]()
10 years ago
|
if (empty($installationProfile)) {
|
||
|
return false;
|
||
|
}
|
||
|
$jsonPath = api_get_path(SYS_PATH).'main/install/profiles/'.$installationProfile.'.json';
|
||
|
// Make sure the path to the profile is not hacked
|
||
|
if (!Security::check_abs_path($jsonPath, api_get_path(SYS_PATH).'main/install/profiles/')) {
|
||
|
return false;
|
||
|
}
|
||
|
if (!is_file($jsonPath)) {
|
||
|
return false;
|
||
|
}
|
||
|
if (!is_readable($jsonPath)) {
|
||
|
return false;
|
||
|
}
|
||
|
if (!function_exists('json_decode')) {
|
||
|
// The php-json extension is not available. Ignore profile.
|
||
|
return false;
|
||
|
}
|
||
|
$json = file_get_contents($jsonPath);
|
||
|
$params = json_decode($json);
|
||
|
if ($params === false or $params === null) {
|
||
|
return false;
|
||
|
}
|
||
|
$settings = $params->params;
|
||
![]()
10 years ago
|
if (!empty($params->parent)) {
|
||
![]()
10 years ago
|
installProfileSettings($params->parent);
|
||
![]()
10 years ago
|
}
|
||
![]()
7 years ago
|
|
||
|
$tblSettings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
|
||
|
|
||
![]()
10 years ago
|
foreach ($settings as $id => $param) {
|
||
![]()
7 years ago
|
$conditions = ['variable = ? ' => $param->variable];
|
||
|
|
||
![]()
10 years ago
|
if (!empty($param->subkey)) {
|
||
![]()
7 years ago
|
$conditions['AND subkey = ? '] = $param->subkey;
|
||
![]()
10 years ago
|
}
|
||
![]()
7 years ago
|
|
||
|
Database::update(
|
||
|
$tblSettings,
|
||
|
['selected_value' => $param->selected_value],
|
||
|
$conditions
|
||
|
);
|
||
![]()
10 years ago
|
}
|
||
![]()
10 years ago
|
|
||
![]()
10 years ago
|
return true;
|
||
![]()
10 years ago
|
}
|
||
![]()
9 years ago
|
|
||
![]()
9 years ago
|
/**
|
||
![]()
8 years ago
|
* Quick function to remove a directory with its subdirectories.
|
||
|
*
|
||
![]()
9 years ago
|
* @param $dir
|
||
|
*/
|
||
|
function rrmdir($dir)
|
||
|
{
|
||
|
if (is_dir($dir)) {
|
||
|
$objects = scandir($dir);
|
||
|
foreach ($objects as $object) {
|
||
|
if ($object != "." && $object != "..") {
|
||
|
if (filetype($dir."/".$object) == "dir") {
|
||
|
@rrmdir($dir."/".$object);
|
||
|
} else {
|
||
|
@unlink($dir."/".$object);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
reset($objects);
|
||
|
rmdir($dir);
|
||
|
}
|
||
|
}
|
||
![]()
9 years ago
|
|
||
![]()
7 years ago
|
/**
|
||
|
* @param $id
|
||
|
* @param string $type
|
||
|
* @param bool $preview
|
||
|
* @param bool $anonymous
|
||
|
*
|
||
|
* @throws \Doctrine\DBAL\DBALException
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
![]()
9 years ago
|
function get_group_picture_path_by_id($id, $type = 'web', $preview = false, $anonymous = false)
|
||
|
{
|
||
|
switch ($type) {
|
||
|
case 'system': // Base: absolute system path.
|
||
|
$base = api_get_path(SYS_UPLOAD_PATH);
|
||
|
break;
|
||
|
case 'web': // Base: absolute web path.
|
||
|
default:
|
||
|
$base = api_get_path(WEB_UPLOAD_PATH);
|
||
|
break;
|
||
|
}
|
||
|
|
||
![]()
8 years ago
|
$noPicturePath = ['dir' => $base.'img/', 'file' => 'unknown.jpg'];
|
||
![]()
9 years ago
|
|
||
|
if (empty($id) || empty($type)) {
|
||
![]()
8 years ago
|
return $anonymous ? $noPicturePath : ['dir' => '', 'file' => ''];
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
$id = intval($id);
|
||
|
|
||
![]()
9 years ago
|
//$group_table = Database::get_main_table(TABLE_MAIN_GROUP);
|
||
![]()
9 years ago
|
$group_table = 'groups';
|
||
|
$sql = "SELECT picture_uri FROM $group_table WHERE id=".$id;
|
||
|
$res = Database::query($sql);
|
||
|
|
||
|
if (!Database::num_rows($res)) {
|
||
![]()
8 years ago
|
return $anonymous ? $noPicturePath : ['dir' => '', 'file' => ''];
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
$user = Database::fetch_array($res);
|
||
|
$picture_filename = trim($user['picture_uri']);
|
||
|
|
||
|
if (api_get_setting('split_users_upload_directory') === 'true') {
|
||
|
if (!empty($picture_filename)) {
|
||
|
$dir = $base.'groups/'.substr($picture_filename, 0, 1).'/'.$id.'/';
|
||
|
} elseif ($preview) {
|
||
|
$dir = $base.'groups/'.substr((string) $id, 0, 1).'/'.$id.'/';
|
||
|
} else {
|
||
|
$dir = $base.'groups/'.$id.'/';
|
||
|
}
|
||
|
} else {
|
||
|
$dir = $base.'groups/'.$id.'/';
|
||
|
}
|
||
|
|
||
|
if (empty($picture_filename) && $anonymous) {
|
||
|
return $noPicturePath;
|
||
|
}
|
||
|
|
||
![]()
8 years ago
|
return ['dir' => $dir, 'file' => $picture_filename];
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Control the different steps of the migration through a big switch.
|
||
|
*
|
||
|
* @param string $fromVersion
|
||
![]()
9 years ago
|
* @param EntityManager $manager
|
||
![]()
8 years ago
|
* @param bool $processFiles
|
||
|
*
|
||
![]()
7 years ago
|
* @throws \Doctrine\DBAL\DBALException
|
||
|
*
|
||
![]()
9 years ago
|
* @return bool Always returns true except if the process is broken
|
||
![]()
9 years ago
|
*/
|
||
|
function migrateSwitch($fromVersion, $manager, $processFiles = true)
|
||
|
{
|
||
|
error_log('Starting migration process from '.$fromVersion.' ('.date('Y-m-d H:i:s').')');
|
||
|
|
||
![]()
7 years ago
|
echo '<a class="btn btn-secondary" href="javascript:void(0)" id="details_button">'.get_lang('Details').'</a><br />';
|
||
![]()
9 years ago
|
echo '<div id="details" style="display:none">';
|
||
|
|
||
|
$connection = $manager->getConnection();
|
||
|
|
||
![]()
9 years ago
|
$database = new Database();
|
||
|
$database->setManager($manager);
|
||
|
|
||
![]()
9 years ago
|
switch ($fromVersion) {
|
||
|
case '1.9.0':
|
||
|
case '1.9.2':
|
||
|
case '1.9.4':
|
||
|
case '1.9.6':
|
||
|
case '1.9.6.1':
|
||
|
case '1.9.8':
|
||
|
case '1.9.8.1':
|
||
|
case '1.9.8.2':
|
||
|
case '1.9.10':
|
||
|
case '1.9.10.2':
|
||
|
case '1.9.10.4':
|
||
![]()
8 years ago
|
case '1.9.10.6':
|
||
![]()
9 years ago
|
$database = new Database();
|
||
|
$database->setManager($manager);
|
||
|
|
||
![]()
9 years ago
|
// Fix type "enum" before running the migration with Doctrine
|
||
|
$connection->executeQuery("ALTER TABLE course_category MODIFY COLUMN auth_course_child VARCHAR(40) DEFAULT 'TRUE'");
|
||
|
$connection->executeQuery("ALTER TABLE course_category MODIFY COLUMN auth_cat_child VARCHAR(40) DEFAULT 'TRUE'");
|
||
![]()
7 years ago
|
$connection->executeQuery('ALTER TABLE c_quiz_answer MODIFY COLUMN hotspot_type varchar(40) default NULL');
|
||
![]()
9 years ago
|
$connection->executeQuery("ALTER TABLE c_tool MODIFY COLUMN target varchar(20) NOT NULL default '_self'");
|
||
|
$connection->executeQuery("ALTER TABLE c_link MODIFY COLUMN on_homepage char(10) NOT NULL default '0'");
|
||
|
$connection->executeQuery("ALTER TABLE c_blog_rating MODIFY COLUMN rating_type char(40) NOT NULL default 'post'");
|
||
|
$connection->executeQuery("ALTER TABLE c_survey MODIFY COLUMN anonymous char(10) NOT NULL default '0'");
|
||
|
$connection->executeQuery("ALTER TABLE c_document MODIFY COLUMN filetype char(10) NOT NULL default 'file'");
|
||
|
$connection->executeQuery("ALTER TABLE c_student_publication MODIFY COLUMN filetype char(10) NOT NULL default 'file'");
|
||
|
|
||
|
// Migrate using the migration files located in:
|
||
|
// src/Chamilo/CoreBundle/Migrations/Schema/V110
|
||
|
$result = migrate(
|
||
|
110,
|
||
|
$manager
|
||
|
);
|
||
|
|
||
|
if ($result) {
|
||
![]()
9 years ago
|
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
|
||
![]()
9 years ago
|
fixIds($manager);
|
||
![]()
9 years ago
|
error_log('fixIds finished ('.date('Y-m-d H:i:s').')');
|
||
![]()
9 years ago
|
|
||
|
$connection->executeQuery("UPDATE settings_current SET selected_value = '1.10.0' WHERE variable = 'chamilo_database_version'");
|
||
|
|
||
|
if ($processFiles) {
|
||
![]()
8 years ago
|
$fromVersionShort = '1.9';
|
||
![]()
9 years ago
|
include __DIR__.'/update-files-1.9.0-1.10.0.inc.php';
|
||
![]()
9 years ago
|
// Only updates the configuration.inc.php with the new version
|
||
![]()
9 years ago
|
include __DIR__.'/update-configuration.inc.php';
|
||
![]()
9 years ago
|
}
|
||
|
|
||
|
error_log('Upgrade 1.10.x process concluded! ('.date('Y-m-d H:i:s').')');
|
||
|
} else {
|
||
|
error_log('There was an error during running migrations. Check error.log');
|
||
|
break;
|
||
|
}
|
||
|
// no break
|
||
![]()
8 years ago
|
case '1.10.0':
|
||
![]()
9 years ago
|
case '1.10.2':
|
||
|
case '1.10.4':
|
||
|
case '1.10.6':
|
||
![]()
9 years ago
|
case '1.10.8':
|
||
![]()
9 years ago
|
$database = new Database();
|
||
|
$database->setManager($manager);
|
||
![]()
9 years ago
|
// Migrate using the migration files located in:
|
||
|
// src/Chamilo/CoreBundle/Migrations/Schema/V111
|
||
![]()
7 years ago
|
$result = migrate(111, $manager);
|
||
![]()
9 years ago
|
|
||
|
if ($result) {
|
||
![]()
9 years ago
|
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
|
||
![]()
9 years ago
|
|
||
![]()
8 years ago
|
fixPostGroupIds($connection);
|
||
![]()
8 years ago
|
|
||
![]()
9 years ago
|
$sql = "UPDATE settings_current SET selected_value = '1.11.0' WHERE variable = 'chamilo_database_version'";
|
||
|
$connection->executeQuery($sql);
|
||
![]()
9 years ago
|
if ($processFiles) {
|
||
![]()
8 years ago
|
error_log('Update config files');
|
||
![]()
8 years ago
|
$fromVersionShort = '1.10';
|
||
![]()
9 years ago
|
include __DIR__.'/update-files-1.10.0-1.11.0.inc.php';
|
||
![]()
8 years ago
|
// Only updates the configuration.inc.php with the new version
|
||
|
include __DIR__.'/update-configuration.inc.php';
|
||
![]()
9 years ago
|
}
|
||
|
error_log('Upgrade 1.11.x process concluded! ('.date('Y-m-d H:i:s').')');
|
||
![]()
8 years ago
|
} else {
|
||
|
error_log('There was an error during running migrations. Check error.log');
|
||
|
}
|
||
|
// no break
|
||
|
case '1.11.0':
|
||
|
case '1.11.1':
|
||
|
case '1.11.2':
|
||
|
case '1.11.4':
|
||
|
case '1.11.6':
|
||
|
case '1.11.8':
|
||
|
case '1.11.10':
|
||
|
$database = new Database();
|
||
|
$database->setManager($manager);
|
||
|
// Migrate using the migration files located in:
|
||
|
// src/Chamilo/CoreBundle/Migrations/Schema/V111
|
||
![]()
7 years ago
|
$result = migrate(200, $manager);
|
||
![]()
8 years ago
|
|
||
|
if ($result) {
|
||
|
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
|
||
|
$sql = "UPDATE settings_current SET selected_value = '2.0.0' WHERE variable = 'chamilo_database_version'";
|
||
|
$connection->executeQuery($sql);
|
||
|
if ($processFiles) {
|
||
|
error_log('Update config files');
|
||
![]()
7 years ago
|
$fromVersionShort = '1.11';
|
||
![]()
8 years ago
|
include __DIR__.'/update-files-1.11.0-2.0.0.inc.php';
|
||
|
// Only updates the configuration.inc.php with the new version
|
||
|
include __DIR__.'/update-configuration.inc.php';
|
||
|
}
|
||
|
error_log('Upgrade 2.0.0 process concluded! ('.date('Y-m-d H:i:s').')');
|
||
![]()
9 years ago
|
} else {
|
||
|
error_log('There was an error during running migrations. Check error.log');
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
echo '</div>';
|
||
|
|
||
|
return true;
|
||
![]()
9 years ago
|
}
|
||
![]()
8 years ago
|
|
||
|
/**
|
||
|
* @param \Doctrine\DBAL\Connection $connection
|
||
![]()
7 years ago
|
*
|
||
|
* @throws \Doctrine\DBAL\DBALException
|
||
![]()
8 years ago
|
*/
|
||
|
function fixPostGroupIds($connection)
|
||
|
{
|
||
|
$connection->executeQuery("ALTER TABLE course_category MODIFY COLUMN auth_course_child VARCHAR(40) DEFAULT 'TRUE'");
|
||
|
error_log('Fix c_student_publication.post_group_id');
|
||
|
|
||
|
// Fix post_group_id
|
||
![]()
8 years ago
|
$sql = "SELECT * FROM c_student_publication
|
||
|
WHERE (post_group_id <> 0 AND post_group_id is not null)";
|
||
![]()
8 years ago
|
$statement = $connection->executeQuery($sql);
|
||
|
$result = $statement->fetchAll();
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
foreach ($result as $row) {
|
||
|
$groupId = $row['post_group_id'];
|
||
|
$courseId = $row['c_id'];
|
||
|
$workIid = $row['iid'];
|
||
![]()
8 years ago
|
$sql = "SELECT iid from c_group_info
|
||
|
WHERE c_id = $courseId AND id = $groupId";
|
||
![]()
8 years ago
|
$statement = $connection->executeQuery($sql);
|
||
|
$count = $statement->rowCount();
|
||
![]()
8 years ago
|
if ($count > 0) {
|
||
|
$rowGroup = $statement->fetch();
|
||
|
$newGroupId = $rowGroup['iid'];
|
||
|
if ($newGroupId == $groupId) {
|
||
|
continue;
|
||
|
}
|
||
|
if ($newGroupId) {
|
||
|
$sql = "UPDATE c_student_publication
|
||
|
SET post_group_id = $newGroupId
|
||
|
WHERE
|
||
|
c_id = $courseId AND
|
||
|
iid = $workIid
|
||
|
";
|
||
|
$connection->executeQuery($sql);
|
||
![]()
8 years ago
|
}
|
||
|
}
|
||
|
}
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
error_log('End - Fix c_student_publication.post_group_id');
|
||
|
|
||
|
// Delete c_student_publication from any session that doesn't exist anymore
|
||
|
$sql = "DELETE FROM c_student_publication
|
||
|
WHERE session_id NOT IN (SELECT id FROM session) AND (session_id <> 0 AND session_id is not null)";
|
||
|
$connection->executeQuery($sql);
|
||
|
|
||
|
error_log('Fix work documents');
|
||
|
// Fix work documents that don't have c_item_property value
|
||
|
$sql = "SELECT * FROM c_student_publication WHERE parent_id IS NOT NULL";
|
||
|
$statement = $connection->executeQuery($sql);
|
||
|
$result = $statement->fetchAll();
|
||
|
foreach ($result as $row) {
|
||
|
$groupId = $row['post_group_id'];
|
||
|
$courseId = $row['c_id'];
|
||
|
$sessionId = $row['session_id'];
|
||
|
$workId = $row['id'];
|
||
![]()
7 years ago
|
$sessionCondition = " session_id = $sessionId";
|
||
|
if (empty($sessionId)) {
|
||
|
$sessionCondition = ' (session_id = 0 OR session_id IS NULL) ';
|
||
|
}
|
||
|
$sql = "SELECT * FROM c_item_property
|
||
|
WHERE
|
||
|
c_id = $courseId AND
|
||
|
tool = 'work' AND
|
||
|
ref = $workId AND
|
||
|
$sessionCondition ";
|
||
|
$itemInfo = $connection->fetchAssoc($sql);
|
||
![]()
8 years ago
|
if (empty($itemInfo)) {
|
||
![]()
7 years ago
|
$params = [
|
||
|
'c_id' => $courseId,
|
||
|
'to_group_id' => $groupId,
|
||
|
//'to_user_id' => null,
|
||
|
'insert_user_id' => 1,
|
||
|
'session_id' => $sessionId,
|
||
|
'tool' => 'work',
|
||
|
'insert_date' => api_get_utc_datetime(),
|
||
|
'lastedit_date' => api_get_utc_datetime(),
|
||
|
'ref' => $workId,
|
||
|
'lastedit_type' => 'visible',
|
||
|
'lastedit_user_id' => 1,
|
||
|
'visibility' => 1,
|
||
|
];
|
||
|
$connection->insert('c_item_property', $params);
|
||
|
$id = $connection->lastInsertId();
|
||
|
$sql = "UPDATE c_item_property SET id = iid WHERE iid = $id";
|
||
|
$connection->executeQuery($sql);
|
||
![]()
8 years ago
|
}
|
||
|
}
|
||
|
error_log('End - Fix work documents');
|
||
|
}
|
||
![]()
6 years ago
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
function generateRandomToken()
|
||
|
{
|
||
|
return hash('sha1', uniqid(mt_rand(), true));
|
||
|
}
|