]> git.mjollnir.org Git - moodle.git/commitdiff
New library for admin-only functions
authormoodler <moodler>
Thu, 19 Aug 2004 09:37:42 +0000 (09:37 +0000)
committermoodler <moodler>
Thu, 19 Aug 2004 09:37:42 +0000 (09:37 +0000)
lib/adminlib.php [new file with mode: 0644]

diff --git a/lib/adminlib.php b/lib/adminlib.php
new file mode 100644 (file)
index 0000000..5800820
--- /dev/null
@@ -0,0 +1,198 @@
+<?php  // $Id$
+       // Contains functions that only administrators will ever need to use
+
+function upgrade_enrol_plugins($return) {
+    global $CFG;
+
+    if (!$mods = get_list_of_plugins("enrol") ) {
+        error("No modules installed!");
+    }
+
+    foreach ($mods as $mod) {
+
+        $fullmod = "$CFG->dirroot/enrol/$mod";
+
+        unset($module);
+
+        if ( is_readable("$fullmod/version.php")) {
+            include_once("$fullmod/version.php");  // defines $module with version etc
+        } else {
+            continue;                              // Nothing to do.
+        }
+
+        if ( is_readable("$fullmod/db/$CFG->dbtype.php")) {
+            include_once("$fullmod/db/$CFG->dbtype.php");  // defines upgrading function
+        } else {
+            continue;
+        }
+
+        if (!isset($module)) {
+            continue;
+        }
+
+        if (!empty($module->requires)) {
+            if ($module->requires > $CFG->version) {
+                $info->modulename = $mod;
+                $info->moduleversion  = $module->version;
+                $info->currentmoodle = $CFG->version;
+                $info->requiremoodle = $module->requires;
+                notify(get_string('modulerequirementsnotmet', 'error', $info));
+                unset($info);
+                continue;
+            }
+        }
+
+        $module->name = $mod;   // The name MUST match the directory
+
+        $moduleversion = 'enrol_'.$mod.'_version';
+
+        if (!isset($CFG->$moduleversion)) {
+            set_config($moduleversion, 0);
+        }
+        
+        if ($CFG->$moduleversion == $module->version) {
+            // do nothing
+        } else if ($CFG->$moduleversion < $module->version) {
+            if (empty($updated_modules)) {
+                $strmodulesetup  = get_string("modulesetup");
+                print_header($strmodulesetup, $strmodulesetup, $strmodulesetup, "", "", false, "&nbsp;", "&nbsp;");
+            }
+            print_heading("$module->name module needs upgrading");
+            $upgrade_function = $module->name."_upgrade";
+            if (function_exists($upgrade_function)) {
+                $db->debug=true;
+                if ($upgrade_function($currmodule->version)) {
+                    $db->debug=false;
+                    // OK so far, now update the modules record
+                    set_config($moduleversion, $module->version);
+                    notify(get_string("modulesuccess", "", $module->name), "green");
+                    echo "<hr />";
+                } else {
+                    $db->debug=false;
+                    notify("Upgrading $module->name from $currmodule->version to $module->version FAILED!");
+                }
+            }
+            $updated_modules = true;
+        } else {
+            error("Version mismatch: $module->name can't downgrade $currmodule->version -> $module->version !");
+        }
+    }
+
+    if (!empty($updated_modules)) {
+        print_continue($return);
+        die;
+    }
+}
+
+function upgrade_activity_modules($return) {
+/// Find and check all modules and load them up or upgrade them if necessary
+
+    global $CFG;
+
+    if (!$mods = get_list_of_plugins("mod") ) {
+        error("No modules installed!");
+    }
+
+    foreach ($mods as $mod) {
+
+        if ($mod == "NEWMODULE") {   // Someone has unzipped the template, ignore it
+            continue;
+        }
+
+        $fullmod = "$CFG->dirroot/mod/$mod";
+
+        unset($module);
+
+        if ( is_readable("$fullmod/version.php")) {
+            include_once("$fullmod/version.php");  # defines $module with version etc
+        } else {
+            notify("Module $mod: $fullmod/version.php was not readable");
+            continue;
+        }
+
+        if ( is_readable("$fullmod/db/$CFG->dbtype.php")) {
+            include_once("$fullmod/db/$CFG->dbtype.php");  # defines upgrading function
+        } else {
+            notify("Module $mod: $fullmod/db/$CFG->dbtype.php was not readable");
+            continue;
+        }
+
+        if (!isset($module)) {
+            continue;
+        }
+
+        if (!empty($module->requires)) {
+            if ($module->requires > $CFG->version) {
+                $info->modulename = $mod;
+                $info->moduleversion  = $module->version;
+                $info->currentmoodle = $CFG->version;
+                $info->requiremoodle = $module->requires;
+                notify(get_string('modulerequirementsnotmet', 'error', $info));
+                unset($info);
+                continue;
+            }
+        }
+
+        $module->name = $mod;   // The name MUST match the directory
+        
+        if ($currmodule = get_record("modules", "name", $module->name)) {
+            if ($currmodule->version == $module->version) {
+                // do nothing
+            } else if ($currmodule->version < $module->version) {
+                if (empty($updated_modules)) {
+                    $strmodulesetup  = get_string("modulesetup");
+                    print_header($strmodulesetup, $strmodulesetup, $strmodulesetup, "", "", false, "&nbsp;", "&nbsp;");
+                }
+                print_heading("$module->name module needs upgrading");
+                $upgrade_function = $module->name."_upgrade";
+                if (function_exists($upgrade_function)) {
+                    $db->debug=true;
+                    if ($upgrade_function($currmodule->version, $module)) {
+                        $db->debug=false;
+                        // OK so far, now update the modules record
+                        $module->id = $currmodule->id;
+                        if (! update_record("modules", $module)) {
+                            error("Could not update $module->name record in modules table!");
+                        }
+                        notify(get_string("modulesuccess", "", $module->name), "green");
+                        echo "<hr />";
+                    } else {
+                        $db->debug=false;
+                        notify("Upgrading $module->name from $currmodule->version to $module->version FAILED!");
+                    }
+                }
+                $updated_modules = true;
+            } else {
+                error("Version mismatch: $module->name can't downgrade $currmodule->version -> $module->version !");
+            }
+    
+        } else {    // module not installed yet, so install it
+            if (empty($updated_modules)) {
+                $strmodulesetup    = get_string("modulesetup");
+                print_header($strmodulesetup, $strmodulesetup, $strmodulesetup, "", "", false, "&nbsp;", "&nbsp;");
+            }
+            print_heading($module->name);
+            $updated_modules = true;
+            $db->debug = true;
+            @set_time_limit(0);  // To allow slow databases to complete the long SQL
+            if (modify_database("$fullmod/db/$CFG->dbtype.sql")) {
+                $db->debug = false;
+                if ($module->id = insert_record("modules", $module)) {
+                    notify(get_string("modulesuccess", "", $module->name), "green");
+                    echo "<hr />";
+                } else {
+                    error("$module->name module could not be added to the module list!");
+                }
+            } else { 
+                error("$module->name tables could NOT be set up successfully!");
+            }
+        }
+    }
+
+    if (!empty($updated_modules)) {
+        print_continue($return);
+        die;
+    }
+}
+
+?>