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.
250 lines
6.7 KiB
250 lines
6.7 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Symfony\Component\Filesystem\Filesystem;
|
|
use Symfony\Component\Finder\Finder;
|
|
use Symfony\Component\Filesystem\Exception\IOException;
|
|
|
|
/**
|
|
* Chamilo LMS
|
|
*
|
|
* Updates the Chamilo files from version 1.9.0 to version 1.10.0
|
|
* This script operates only in the case of an update, and only to change the
|
|
* active version number (and other things that might need a change) in the
|
|
* current configuration file.
|
|
* @package chamilo.install
|
|
*/
|
|
error_log("Starting ".basename(__FILE__));
|
|
|
|
global $debug;
|
|
|
|
if (defined('SYSTEM_INSTALLATION')) {
|
|
// Changes for 1.10.x
|
|
// Delete directories and files that are not necessary anymore
|
|
// pChart (1) lib, etc
|
|
|
|
// Delete the "chat" file in all language directories, as variables have been moved to the trad4all file
|
|
$langPath = api_get_path(SYS_CODE_PATH).'lang/';
|
|
// Only erase files from Chamilo languages (not sublanguages defined by the users)
|
|
$officialLanguages = array(
|
|
'arabic',
|
|
'asturian',
|
|
'basque',
|
|
'bengali',
|
|
'bosnian',
|
|
'brazilian',
|
|
'bulgarian',
|
|
'catalan',
|
|
'croatian',
|
|
'czech',
|
|
'danish',
|
|
'dari',
|
|
'dutch',
|
|
'english',
|
|
'esperanto',
|
|
'faroese',
|
|
'finnish',
|
|
'french',
|
|
'friulian',
|
|
'galician',
|
|
'georgian',
|
|
'german',
|
|
'greek',
|
|
'hebrew',
|
|
'hindi',
|
|
'hungarian',
|
|
'indonesian',
|
|
'italian',
|
|
'japanese',
|
|
'korean',
|
|
'latvian',
|
|
'lithuanian',
|
|
'macedonian',
|
|
'malay',
|
|
'norwegian',
|
|
'occitan',
|
|
'pashto',
|
|
'persian',
|
|
'polish',
|
|
'portuguese',
|
|
'quechua_cusco',
|
|
'romanian',
|
|
'russian',
|
|
'serbian',
|
|
'simpl_chinese',
|
|
'slovak',
|
|
'slovenian',
|
|
'somali',
|
|
'spanish',
|
|
'spanish_latin',
|
|
'swahili',
|
|
'swedish',
|
|
'tagalog',
|
|
'thai',
|
|
'tibetan',
|
|
'trad_chinese',
|
|
'turkish',
|
|
'ukrainian',
|
|
'vietnamese',
|
|
'xhosa',
|
|
'yoruba',
|
|
);
|
|
|
|
$filesToDelete = array(
|
|
'accessibility',
|
|
'admin',
|
|
'agenda',
|
|
'announcements',
|
|
'blog',
|
|
'chat',
|
|
'coursebackup',
|
|
'course_description',
|
|
'course_home',
|
|
'course_info',
|
|
'courses',
|
|
'create_course',
|
|
'document',
|
|
'dropbox',
|
|
'exercice',
|
|
'external_module',
|
|
'forum',
|
|
'glossary',
|
|
'gradebook',
|
|
'group',
|
|
'help',
|
|
'import',
|
|
'index',
|
|
'install',
|
|
'learnpath',
|
|
'link',
|
|
'md_document',
|
|
'md_link',
|
|
'md_mix',
|
|
'md_scorm',
|
|
'messages',
|
|
'myagenda',
|
|
'notebook',
|
|
'notification',
|
|
'registration',
|
|
'reservation',
|
|
'pedaSuggest',
|
|
'resourcelinker',
|
|
'scorm',
|
|
'scormbuilder',
|
|
'scormdocument',
|
|
'slideshow',
|
|
'survey',
|
|
'tracking',
|
|
'userInfo',
|
|
'videoconf',
|
|
'wiki',
|
|
'work',
|
|
);
|
|
|
|
$list = scandir($langPath);
|
|
foreach ($list as $entry) {
|
|
if (is_dir($langPath.$entry) &&
|
|
in_array($entry, $officialLanguages)
|
|
) {
|
|
foreach ($filesToDelete as $file) {
|
|
if (is_file($langPath.$entry.'/'.$file.'.inc.php')) {
|
|
unlink($langPath.$entry.'/'.$file.'.inc.php');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($debug) {
|
|
error_log('Cleaning folders');
|
|
}
|
|
|
|
// Remove the "main/conference/" directory that wasn't used since years long
|
|
// past - see rrmdir function declared below
|
|
@rrmdir(api_get_path(SYS_CODE_PATH).'conference');
|
|
// Other files that we renamed
|
|
// events.lib.inc.php has been renamed to events.lib.php
|
|
if (is_file(api_get_path(LIBRARY_PATH).'events.lib.inc.php')) {
|
|
@unlink(api_get_path(LIBRARY_PATH).'events.lib.inc.php');
|
|
}
|
|
|
|
if (is_file(api_get_path(SYS_PATH).'courses/.htaccess')) {
|
|
unlink(api_get_path(SYS_PATH).'courses/.htaccess');
|
|
}
|
|
|
|
// Move dirs into new structures.
|
|
$movePathList = [
|
|
api_get_path(SYS_CODE_PATH).'upload/users/groups' => api_get_path(SYS_UPLOAD_PATH).'groups',
|
|
api_get_path(SYS_CODE_PATH).'upload/users' => api_get_path(SYS_UPLOAD_PATH).'users',
|
|
api_get_path(SYS_CODE_PATH).'upload/badges' => api_get_path(SYS_UPLOAD_PATH).'badges',
|
|
api_get_path(SYS_PATH).'courses' => api_get_path(SYS_APP_PATH).'courses',
|
|
api_get_path(SYS_PATH).'searchdb' => api_get_path(SYS_UPLOAD_PATH).'plugins/xapian/',
|
|
api_get_path(SYS_PATH).'home' => api_get_path(SYS_APP_PATH).'home'
|
|
];
|
|
|
|
if ($debug) {
|
|
error_log('Moving folders');
|
|
}
|
|
|
|
$fs = new Filesystem();
|
|
|
|
foreach ($movePathList as $origin => $destination) {
|
|
if (is_dir($origin)) {
|
|
$fs->mirror($origin, $destination);
|
|
|
|
if ($debug) {
|
|
error_log("Renaming: '$origin' to '$destination'");
|
|
}
|
|
|
|
try {
|
|
$fs->remove($origin);
|
|
} catch (IOException $e) {
|
|
// If removing the directory doesn't work, just log an error and continue
|
|
error_log('Could not move '.$origin.' to '.$destination.'('.$e->getMessage().'). Please move it manually.');
|
|
}
|
|
}
|
|
}
|
|
|
|
// Delete all "courses/ABC/index.php" files.
|
|
if ($debug) {
|
|
error_log('Deleting old courses/ABC/index.php files');
|
|
}
|
|
$finder = new Finder();
|
|
|
|
$courseDir = api_get_path(SYS_APP_PATH).'courses';
|
|
if (is_dir($courseDir)) {
|
|
$dirs = $finder->directories()->in($courseDir);
|
|
/** @var Symfony\Component\Finder\SplFileInfo $dir */
|
|
foreach ($dirs as $dir) {
|
|
$indexFile = $dir->getPath().'/index.php';
|
|
if ($debug) {
|
|
error_log('Deleting: '.$indexFile);
|
|
}
|
|
if ($fs->exists($indexFile)) {
|
|
$fs->remove($indexFile);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Remove old "courses" folder if empty
|
|
$originalCourseDir = api_get_path(SYS_PATH).'courses';
|
|
|
|
if (is_dir($originalCourseDir)) {
|
|
$dirs = $finder->directories()->in($originalCourseDir);
|
|
$files = $finder->directories()->in($originalCourseDir);
|
|
$dirCount = $dirs->count();
|
|
$fileCount = $dirs->count();
|
|
if ($fileCount == 0 && $dirCount == 0) {
|
|
@rrmdir(api_get_path(SYS_PATH).'courses');
|
|
}
|
|
}
|
|
|
|
if ($debug) {
|
|
error_log('Remove archive folder');
|
|
}
|
|
|
|
// Remove archive
|
|
@rrmdir(api_get_path(SYS_PATH).'archive');
|
|
|
|
} else {
|
|
echo 'You are not allowed here !'.__FILE__;
|
|
}
|
|
|