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.
		
		
		
		
		
			
		
			
				
					
					
						
							181 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
	
	
							181 lines
						
					
					
						
							5.6 KiB
						
					
					
				<?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();
 | 
						|
 |