123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- /**
- *
- *
- * @package chamilo.admin
- * @author Laurent Opprecht <laurent@opprecht.info>
- * @license see /license.txt
- */
- $language_file = array('admin');
- $cidReset = true;
- require_once '../inc/global.inc.php';
- require_once __DIR__ . '/admin_page.class.php';
- class SystemManagementPage extends AdminPage
- {
- const PARAM_ACTION = 'action';
- const PARAM_SECURITY_TOKEN = 'sec_token';
- const ACTION_DEFAULT = 'list';
- const ACTION_SECURITY_FAILED = 'security_failed';
- function get_action()
- {
- $result = Request::get(self::PARAM_ACTION, self::ACTION_DEFAULT);
- if ($result != self::ACTION_DEFAULT) {
- $passed = Security::check_token('get');
- Security::clear_token();
- $result = $passed ? $result : self::ACTION_SECURITY_FAILED;
- }
- return $result;
- }
- function url($params)
- {
- return Uri::here($params);
- }
- function display_default()
- {
- $message = get_lang('RemoveOldDatabaseMessage');
- $message_table = get_lang('RemoveOldTables');
-
- $message_table .= "<br />".implode(' , ', self::get_tables_to_delete());
- $token = Security::get_token();
- $url = $this->url(array(self::PARAM_ACTION => 'drop_old_databases', self::PARAM_SECURITY_TOKEN => $token));
- $url_table = $this->url(array(self::PARAM_ACTION => 'drop_old_tables', self::PARAM_SECURITY_TOKEN => $token));
-
- $go = get_lang('Go');
- $access_url_id = api_get_current_access_url_id();
- $message2 = '';
-
- if ($access_url_id === 1) {
- if (api_is_windows_os()) {
- $message2 .= get_lang('SpaceUsedOnSystemCannotBeMeasuredOnWindows');
- } else {
- $dir = api_get_path(SYS_PATH);
- $du = exec('du -sh ' . $dir, $err);
- list($size, $none) = explode("\t", $du);
- $limit = $_configuration[$url]['hosting_limit_disk_space'];
- $message2 .= sprintf(get_lang('TotalSpaceUsedByPortalXLimitIsYMB'), $size, $limit);
- }
- }
- if (!empty($message2)) {
- $message2 = '<li>' . $message2 . '</li>';
- }
- echo <<<EOT
- <ul>
- <li>
- <div>$message</div>
- <a class="btn" href=$url>$go</a>
- </li>
- <li>
- <div>$message_table</div>
- <a class="btn" href=$url_table>$go</a>
- </li>
- $message2
- </ul>
- EOT;
- }
- function display_security_failed()
- {
- Display::display_error_message(get_lang('NotAuthorized'));
- }
- function display_content()
- {
- $action = $this->get_action();
- switch ($action) {
- case self::ACTION_DEFAULT:
- $this->display_default();
- return;
- case self::ACTION_SECURITY_FAILED:
- $this->display_security_failed();
- return;
- default:
- $f = array($this, $action);
- if (is_callable($f)) {
- call_user_func($f);
- return;
- } else {
- Display::display_error_message(get_lang('UnknownAction'));
- }
- return;
- }
- }
- /**
- *
- * @return ResultSet
- */
- function get_old_databases()
- {
- $course_db = Database::get_main_table(TABLE_MAIN_COURSE);
- $sql = "SELECT id, code, db_name, directory, course_language FROM $course_db WHERE target_course_code IS NULL AND db_name IS NOT NULL ORDER BY code";
- return new ResultSet($sql);
- }
-
- function drop_old_tables()
- {
- $tables_to_remove = self::get_tables_to_delete();
-
- $number_tables_deleted = 0;
- $tables_deleted = '';
- foreach ($tables_to_remove as $table) {
- //Deleting tables
- $drop_table = "DROP TABLE $table";
- $success = Database::query($drop_table);
- $success =true;
- if ($success) {
- $tables_deleted .= $table.'<br />';
- $number_tables_deleted++;
- }
- }
-
- Display::display_confirmation_message(sprintf(get_lang('XOldTablesDeleted'),$number_tables_deleted));
- Display::display_confirmation_message($tables_deleted, false);
- }
-
- function get_tables_to_delete() {
- $tables_to_remove = array(
- Database::get_main_table(TABLE_MAIN_CLASS),
- Database::get_main_table(TABLE_MAIN_CLASS_USER),
- Database::get_main_table(TABLE_MAIN_COURSE_CLASS),
- );
- return $tables_to_remove;
- }
- function drop_old_databases()
- {
- $result = array();
- $courses = $this->get_old_databases();
- $course_db = Database::get_main_table(TABLE_MAIN_COURSE);
- foreach ($courses as $course) {
- $drop_statement = 'DROP DATABASE ' . $course['db_name'];
- $success = Database::query($drop_statement);
- if ($success) {
- /*
- * Note that Database::update do not supports null statements so
- * we do it by hand here.
- */
- $id = $course['id'];
- $update_statement = "UPDATE $course_db SET db_name = NULL WHERE id = $id";
- Database::query($update_statement);
- $result[] = $course['db_name'];
- }
- }
-
- Display::display_confirmation_message(sprintf(get_lang('XOldDatabasesDeleted'),count($result)));
-
-
- return $result;
- }
- }
- $page = new SystemManagementPage(get_lang('SystemManagement'));
- $page->display();
|