Example #1
0
     $admin_email = isset($_POST["admin_email"]) ? $_POST["admin_email"] : "";
     $frm->addrow("Admin User Name", $frm->text_box("admin_user", $admin_user, 30));
     $frm->addrow("Admin Email Address", $frm->text_box("admin_email", $admin_email, 30));
     $frm->addrow("Admin Password", $frm->text_box("admin_pass", "", 30, 0, true));
     $frm->addrow("(again)", $frm->text_box("admin_pass2", "", 30, 0, true));
     $frm->show();
     break;
 case "done":
     $cont_url = phorum_admin_build_url();
     $PHORUM['DB']->update_settings(array("installed" => 1));
     echo "The setup is complete.  You can now go to <a href=\"{$cont_url}\">the admin</a> and start making Phorum all your own.<br /><br /><strong>Here are some things you will want to look at:</strong><br /><br /><a href=\"{$_SERVER['PHP_SELF']}?module=settings\">The General Settings page</a><br /><br /><a href=\"{$_SERVER['PHP_SELF']}?module=mods\">Pre-installed modules</a><br /><br /><a href=\"docs/faq.txt\">The FAQ</a><br /><br /><a href=\"docs/performance.txt\">How to get peak performance from Phorum</a><br /><br /><strong>For developers:</strong><br /><br /><a href=\"docs/creating_mods.txt\">Module Creation</a><br /><br /><a href=\"docs/permissions.txt\">How Phorum permisssions work</a><br /><br /><a href=\"docs/CODING-STANDARDS\">The Phorum Team's codings standards</a>";
     break;
 case "modules":
     // Retrieve a list of available modules.
     require_once './include/api/modules.php';
     $list = phorum_api_modules_list();
     $frm = new PhorumInputForm("", "post", "Continue ->");
     $frm->addbreak("Optional modules");
     $frm->hidden("module", "install");
     $frm->hidden("sanity_checks_done", "1");
     $frm->hidden("step", "modules");
     $frm->hidden("do_modules_update", "1");
     $frm->addmessage("Phorum has a very robust module system.  The following modules are\n             included with the distribution.  You can find more modules at the\n             Phorum web site.  Some modules may have additional configuration\n             options, which are not available during install.  To configure the\n             modules, click the \"Modules\" menu item in the admin interface\n             after installation is done.");
     foreach ($list['modules'] as $name => $info) {
         // Skip the compatibility modules.
         // These are enabled automatically by Phorum when required.
         if (!empty($info['compat'])) {
             continue;
         }
         // Should not happen.
         if ($info['version_disabled']) {
Example #2
0
/**
 * Store the module information in the database.
 *
 * This function will sort out all module and hook priorities for the
 * enabled modules and write the result data ($PHORUM["mods"] and
 * $PHORUM["hooks"]) to the database.
 */
function phorum_api_modules_save()
{
    global $PHORUM;
    // Load the module info if this was not done yet.
    if (!isset($PHORUM["API"]["mods_modules"])) {
        phorum_api_modules_list();
    }
    // For easy access.
    $modules = $PHORUM["API"]["mods_modules"];
    $priorities = $PHORUM["API"]["mods_priorities"];
    // Create a list of enabled modules.
    $active_mods = array();
    foreach ($PHORUM["mods"] as $mod => $enabled) {
        // Only add modules that were found.
        // Disable modules that do not / no longer exist.
        if (isset($modules[$mod])) {
            if ($enabled) {
                $active_mods[] = $mod;
            }
        } else {
            $PHORUM["mods"][$mod] = 0;
        }
    }
    // First priority ordering pass:
    // run module before|after *
    $active_mods_copy = $active_mods;
    foreach ($active_mods as $mod) {
        if (!isset($priorities["module"][$mod])) {
            continue;
        }
        $mod_priorities = $priorities["module"][$mod];
        foreach ($mod_priorities as $priority) {
            if ($priority[2] == "*") {
                // Remove the module from the list.
                $idx = array_search($mod, $active_mods_copy);
                unset($active_mods_copy[$idx]);
                // Add it do the end of start of the list.
                if ($priority[1] == "after") {
                    array_push($active_mods_copy, $mod);
                } else {
                    array_unshift($active_mods_copy, $mod);
                }
            }
        }
    }
    $active_mods = $active_mods_copy;
    // Second priority ordering pass:
    // run module before|after <othermodule>
    $active_mods_copy = array_values($active_mods);
    foreach ($active_mods as $mod) {
        if (!isset($priorities["module"][$mod])) {
            continue;
        }
        $mod_priorities = $priorities["module"][$mod];
        foreach ($mod_priorities as $priority) {
            if ($priority[2] == '*') {
                continue;
            }
            // Find the current position of the modules.
            $idx1 = array_search($mod, $active_mods_copy);
            $idx2 = array_search($priority[2], $active_mods_copy);
            if ($idx2 === false || $idx2 === NULL) {
                continue;
            }
            //NULL = pre 4.2.0
            // Move module up in the list.
            if ($idx1 > $idx2 && $priority[1] == "before") {
                unset($active_mods_copy[$idx1]);
                array_splice($active_mods_copy, $idx2, 1, array($mod, $priority[2]));
                $active_mods_copy = array_values($active_mods_copy);
            }
            // Move module down in the list.
            if ($idx1 < $idx2 && $priority[1] == "after") {
                array_splice($active_mods_copy, $idx2, 1, array($priority[2], $mod));
                unset($active_mods_copy[$idx1]);
                $active_mods_copy = array_values($active_mods_copy);
            }
        }
    }
    $active_mods = $active_mods_copy;
    # Determine what hooks to run for the activated modules.
    $modules_by_hook = array();
    $functions_by_module = array();
    foreach ($active_mods as $mod) {
        if (!isset($modules[$mod]["hooks"])) {
            continue;
        }
        foreach ($modules[$mod]["hooks"] as $hookinfo) {
            list($hook, $func) = explode("|", $hookinfo);
            $modules_by_hook[$hook][] = $mod;
            $functions_by_module[$mod][$hook] = $func;
        }
    }
    // Third priority ordering pass:
    // run hook <hook> before|after *
    foreach ($modules_by_hook as $hook => $mods) {
        if (!isset($priorities["hook"][$hook])) {
            continue;
        }
        foreach ($active_mods as $mod) {
            if (!isset($priorities["hook"][$hook][$mod])) {
                continue;
            }
            $hook_priorities = $priorities["hook"][$hook][$mod];
            foreach ($hook_priorities as $priority) {
                if ($priority[3] == "*") {
                    // Remove the module from the list.
                    $idx = array_search($mod, $mods);
                    unset($mods[$idx]);
                    // Add it do the end of start of the list.
                    if ($priority[2] == "after") {
                        array_push($mods, $mod);
                    } else {
                        array_unshift($mods, $mod);
                    }
                }
            }
        }
        $mods = array_values($mods);
        // array_values reindexes
        $modules_by_hook[$hook] = $mods;
    }
    // Fourth priority ordering pass:
    // run hook <hook> before|after <othermodule>
    foreach ($modules_by_hook as $hook => $mods) {
        if (!isset($priorities["hook"][$hook])) {
            continue;
        }
        foreach ($active_mods as $mod) {
            if (!isset($priorities["hook"][$hook][$mod])) {
                continue;
            }
            $hook_priorities = $priorities["hook"][$hook][$mod];
            foreach ($hook_priorities as $priority) {
                if ($priority[3] == '*') {
                    continue;
                }
                // Find the current position of the modules.
                $idx1 = array_search($mod, $mods);
                $idx2 = array_search($priority[3], $mods);
                //NULL = pre 4.2.0
                if ($idx2 === false || $idx2 === NULL) {
                    continue;
                }
                // Move module up in the list.
                if ($idx1 > $idx2 && $priority[2] == "before") {
                    unset($mods[$idx1]);
                    array_splice($mods, $idx2, 1, array($mod, $priority[3]));
                    $mods = array_values($mods);
                }
                // Move module down in the list.
                if ($idx1 < $idx2 && $priority[2] == "after") {
                    array_splice($mods, $idx2, 1, array($priority[3], $mod));
                    unset($mods[$idx1]);
                    $mods = array_values($mods);
                }
            }
        }
        $mods = array_values($mods);
        // array_values reindexes
        $modules_by_hook[$hook] = array_values($mods);
    }
    // Create the hooks configuration.
    $hooks = array();
    foreach ($modules_by_hook as $hook => $mods) {
        $hooks[$hook] = array();
        foreach ($mods as $mod) {
            $hooks[$hook]["mods"][] = $mod;
            $hooks[$hook]["funcs"][] = $functions_by_module[$mod][$hook];
        }
    }
    $PHORUM["hooks"] = $hooks;
    // Store the settings in the database.
    phorum_db_update_settings(array("hooks" => $PHORUM["hooks"], "mods" => $PHORUM["mods"]));
    // Reset the module information update checking data.
    phorum_api_modules_check_updated_info(TRUE);
}