123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <?php
- /* For licensing terms, see /license.txt */
- use Symfony\Component\Filesystem\Exception\IOException;
- use Symfony\Component\Filesystem\Filesystem;
- use Symfony\Component\Finder\Finder;
- /**
- * 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 = [
- '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 = [
- '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__;
- }
|