Laurent Opprecht 13 years ago
parent
commit
006519a83d

+ 37 - 0
main/admin/admin_page.class.php

@@ -0,0 +1,37 @@
+<?php
+
+/**
+ *
+ * @license see /license.txt
+ * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
+ */
+class AdminPage extends Page
+{
+
+    /**
+     *
+     * @return AdminPage
+     */
+    static function create($title = '')
+    {
+        return new self($title);
+    }
+    
+    function __construct($title = '')
+    {
+        global $this_section;
+        $this_section = SECTION_PLATFORM_ADMIN;
+
+        api_protect_admin_script();
+
+        if (empty($title)) {
+            $title = get_lang(get_class($this));
+        }
+
+        $this->title = $title;
+
+        $this->breadcrumbs = array();
+        $this->breadcrumbs[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
+    }
+
+}

+ 1 - 0
main/admin/index.php

@@ -242,6 +242,7 @@ if (api_is_platform_admin()) {
 		$items[] = array('url'=>'archive_cleanup.php', 	'label' => get_lang('ArchiveDirCleanup'));
 	//}
     
+	$items[] = array('url'=>'system_management.php', 'label' => get_lang('SystemManagement'));
     //$items[] = array('url'=>'statistics/index.php?action=activities', 	'label' => get_lang('ImportantActivities'));
     
 	$blocks['settings']['items'] = $items;

+ 124 - 0
main/admin/system_management.php

@@ -0,0 +1,124 @@
+<?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)
+    {
+        $token = Security::get_token();
+        $params[self::PARAM_SECURITY_TOKEN] = $token;
+        return Uri::here($params);
+    }
+
+    function display_default()
+    {
+        $message = get_lang('RemoveOldDatabaseMessage');
+        $url = $this->url(array(self::PARAM_ACTION => 'drop_old_databases'));
+        $go = get_lang('go');
+
+        echo <<<EOT
+        <ul>
+        <li>
+            <div>$message</div>        
+            <a href=$url>$go</a>
+        </li>
+        </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_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 ($sucess) {
+                /*
+                 * 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(get_lang('OldDatabasesDeleted') . ' ' . count($result));
+        return $result;
+    }
+
+}
+
+$page = new SystemManagementPage();
+$page->display();

+ 11 - 1
main/inc/lib/autoload.class.php

@@ -62,6 +62,7 @@ class Autoload
         $result['AddCourseToSession'] = '/main/inc/lib/add_courses_to_session_functions.lib.php';
         $result['AddManySessionToCategoryFunctions'] = '/main/inc/lib/add_many_session_to_category_functions.lib.php';
         $result['Admin'] = '/main/auth/shibboleth/app/model/admin.class.php';
+        $result['AdminPage'] = '/main/admin/admin_page.class.php';
         $result['AdminStore'] = '/main/auth/shibboleth/app/model/admin.class.php';
         $result['Agenda'] = '/main/calendar/agenda.lib.php';
         $result['Announcement'] = '/main/coursecopy/classes/Announcement.class.php';
@@ -211,8 +212,10 @@ class Autoload
         $result['ImageWrapper'] = '/main/inc/lib/image.lib.php';
         $result['ImagickWrapper'] = '/main/inc/lib/image.lib.php';
         $result['Import'] = '/main/inc/lib/import.lib.php';
+        $result['InactiveCourseReport'] = '/main/admin/inactive_course_report.class.php';
         $result['IndexManager'] = '/main/inc/lib/userportal.lib.php';
         $result['IndexableChunk'] = '/main/inc/lib/search/IndexableChunk.class.php';
+        $result['Install'] = '/main/install/install.class.php';
         $result['Javascript'] = '/main/inc/lib/javascript.class.php';
         $result['KeyAuth'] = '/main/auth/key/key_auth.class.php';
         $result['LearnpathLink'] = '/main/gradebook/lib/be/learnpathlink.class.php';
@@ -249,6 +252,7 @@ class Autoload
         $result['PEAR'] = '/main/inc/lib/pear/PEAR.php';
         $result['PEAR5'] = '/main/inc/lib/pear/PEAR5.php';
         $result['PEAR_Error'] = '/main/inc/lib/pear/PEAR.php';
+        $result['Page'] = '/main/inc/lib/page.class.php';
         $result['Pager'] = '/main/inc/lib/pear/Pager/Pager.php';
         $result['Pager_Common'] = '/main/inc/lib/pear/Pager/Common.php';
         $result['Pager_HtmlWidgets'] = '/main/inc/lib/pear/Pager/HtmlWidgets.php';
@@ -391,6 +395,7 @@ class Autoload
         $result['ch_yesno'] = '/main/survey/survey.lib.php';
         $result['db'] = '/main/inc/lib/db.lib.php';
         $result['document_processor'] = '/main/inc/lib/search/tool_processors/document_processor.class.php';
+        $result['iDatabase'] = '/main/install/i_database.class.php';
         $result['learnpath'] = '/main/newscorm/learnpath.class.php';
         $result['learnpathItem'] = '/main/newscorm/learnpathItem.class.php';
         $result['learnpathList'] = '/main/newscorm/learnpathList.class.php';
@@ -482,8 +487,13 @@ class AutoloadClassFinder
         $this->synch(Chamilo::path('/main'));
         ksort($this->map);
     }
+    
+    public function __invoke()
+    {
+        $this->run();
+    }
 
-    public function to_string()
+    public function __toString()
     {
         $result = array();
 

+ 11 - 1
main/inc/lib/chamilo.class.php

@@ -39,7 +39,12 @@ class Chamilo
     {
         return Uri::url($path, $params, $html);
     }
-
+    
+    public static function here($params = array(), $html = true)
+    {
+        return Uri::here($params, $html);
+    }
+        
     /**
      * Application web root
      */
@@ -57,6 +62,11 @@ class Chamilo
     {
         return api_get_path(SYS_PATH);
     }
+    
+    public static function root_courses()
+    {
+        return api_get_path(SYS_COURSE_PATH);
+    }
 
     public static function path($path = '')
     {

+ 30 - 0
main/inc/lib/course.lib.php

@@ -3710,5 +3710,35 @@ class CourseManager {
         return $result;
 	}    
     
+    /**
+     * 
+     * 
+     * @return ResultSet
+     */
+    static function list_inactive_courses($ceiling, $visibility_level = COURSE_VISIBILITY_REGISTERED)
+    {        
+        $ceiling = is_numeric($ceiling) ? (int) $ceiling : strtotime($ceiling);
+        $ceiling = date('Y-m-d H:i:s', $ceiling);        
+        $visibility_level = $visibility_level ? $visibility_level : '0';
+        
+        $table_course = Database::get_main_table(TABLE_MAIN_COURSE);
+        $table_category = Database::get_main_table(TABLE_MAIN_CATEGORY);
+        $sql = "SELECT 
+                    c.*,
+                    cat.name AS category
+                FROM        
+                    $table_course AS c
+                LEFT JOIN    
+                    $table_category AS cat
+                ON
+                    c.category_code = cat.code
+                WHERE
+                    c.visibility >= $visibility_level AND                    
+                    c.last_visit<='$ceiling'
+        ";
+        
+        return ResultSet::create($sql);
+    }
+    
    
 } //end class CourseManager

+ 5 - 0
main/inc/lib/display.lib.php

@@ -86,6 +86,11 @@ class Display {
     public static function display_footer() {        
         echo self::$global_template ->show_footer_template();        
     }
+    
+    public static function page()
+    {
+        return new Page();
+    }
 
     /**
      * Displays the tool introduction of a tool.

+ 3 - 2
main/inc/lib/header.class.php

@@ -9,13 +9,14 @@
 class Header
 {
 
-    public static function content_type($mime_type)
+    public static function content_type($mime_type, $charset = '')
     {
         if (empty($mime_type))
         {
             return;
         }
-        header('Content-type: ' . $mime_type);
+        $type = $charset ?  "$mime_type;charset=$charset" : $mime_type;
+        header('Content-type: ' . $type);
     }
 
     public static function content_type_xml()

+ 168 - 0
main/inc/lib/page.class.php

@@ -0,0 +1,168 @@
+<?php
+
+/**
+ * Web page wrapper. Usage:
+ * 
+ *  Page::create()->title('my_title')->display($content);
+ *  
+ *  $page = Page::create()->title('my_title')->help('help')->content($content);
+ *  $page->display();
+ *
+ * @license see /license.txt
+ * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
+ */
+class Page
+{
+
+    protected $title = null;
+    protected $help = null;
+    protected $header = null;
+    protected $content;
+    protected $breadcrumbs = '';
+    protected $message = null;
+    protected $warning = null;
+    protected $error = null;
+
+    /**
+     *
+     * @return Page
+     */
+    static function create($title = '')
+    {
+        return new self($title);
+    }
+
+    function __construct($title = '')
+    {
+        $this->title = $title;
+    }
+
+    /**
+     *
+     * @param $header
+     * @return Page 
+     */
+    function header($header)
+    {
+        $this->header = $header;
+        return $this;
+    }
+
+    /**
+     *
+     * @param string $title
+     * @return Page 
+     */
+    function title($title)
+    {
+        $this->title = $title;
+        return $this;
+    }
+
+    /**
+     *
+     * @param array $crumbs_
+     * @return Page 
+     */
+    function breadcrumbs($crumbs)
+    {        
+        $this->breadcrumbs = $crumbs;
+        return $this;
+    }
+
+    /**
+     *
+     * @param string $help help file name
+     * @return Page 
+     */
+    function help($help)
+    {
+        $this->help = $help;
+        return $this;
+    }
+
+    /**
+     *
+     * @param string $message
+     * @return Page 
+     */
+    function message($message)
+    {
+        $this->message = $message;
+        return $this;
+    }
+
+    /**
+     *
+     * @param string $warning
+     * @return Page 
+     */
+    function warning($warning)
+    {
+        $this->warning = $warning;
+        return $this;
+    }
+
+    /**
+     *
+     * @param string $error
+     * @return Page 
+     */
+    function error($error)
+    {
+        $this->error = $error;
+        return $this;
+    }
+
+    /**
+     *
+     * @param object|string $content
+     * @return Page 
+     */
+    function content($content)
+    {
+        $this->content = $content;
+        return $this;
+    }
+
+    function __toString()
+    {
+        $this->display($this->content);
+    }
+
+    function display($content = null)
+    {
+        $this->display_header();
+        $this->display_content($content);
+        $this->display_footer();
+    }
+
+    function display_header()
+    {
+        global $interbreadcrumb;
+        $interbreadcrumb = $this->breadcrumbs;
+
+        Display::display_header($this->title, $this->help, $this->header);
+        if ($message = $this->message) {
+            Display::display_confirmation_message($message);
+        }
+        if ($warning = $this->warning) {
+            Display::display_warning_message($warning);
+        }
+        if ($error = $this->error) {
+            Display::display_error_message($error);
+        }
+    }
+
+    protected function display_content($content)
+    {
+        $content = $content ? $content : $this->content;
+        echo $content;
+    }
+
+    function display_footer()
+    {
+        Display::display_footer();
+    }
+
+}

+ 2 - 2
main/inc/lib/zombie/zombie_report.class.php

@@ -309,12 +309,12 @@ class ZombieReport implements Countable
         $result = $this->display_parameters($return);
         if ($this->perform_action()) {
             if ($return) {
-                $result = Display::return_confirmation_message(get_lang('Done'));
+                $result .= Display::return_confirmation_message(get_lang('Done'));
             } else {
                 Display::display_confirmation_message(get_lang('Done'));
             }
         }
-        $result = $this->display_data($return);
+        $result .= $this->display_data($return);
         if ($return) {
             return $result;
         }