system_modules_form

5.x system.module system_modules_form()
4.x system.module system_modules_form()

This is the form which an admin may use to manage the modules in the system.

File

modules/system/system.module, line 1847

Code

function system_modules_form() {
  $form = array();

  fp_add_css(fp_get_module_path("system") . "/css/style.css");

  $form["mark" . $m++] = array(
    "value" => t("Use this form to enable or disable modules.  This scans the /modules/ and then /custom/modules/
                  directories.") . " 
                  " . l(t("Run DB updates?"), "admin/db-updates") . "<br><br>",
  );


  // Begin by scanning the /modules/ directory.  Anything in there
  // cannot be disabled.
  $module_dirs = array();
  $module_dirs[] = array(
    "start" => "modules",
    "type" => t("Core"),
  );
  $module_dirs[] = array(
    "start" => "custom/modules",
    "type" => t("Custom"),
  );

  foreach ($module_dirs as $module_dir) {
    $start_dir = $module_dir["start"];

    if ($dh = opendir($start_dir)) {
      //$pC .= "<div class='fp-system-modules-type'>{$module_dir["type"]}</div>
      //        <table class='fp-system-modules-table' cellpadding='0' cellspacing='0'>";

      $form["mark" . $m++] = array(
        "value" => "<div class='fp-system-modules-type'>{$module_dir["type"]}</div>
                    <table class='fp-system-modules-table' cellpadding='0' cellspacing='0'>",
      );

      $pol = "even";
      $dir_files = scandir($start_dir);
      foreach ($dir_files as $file) {
        if ($file == "." || $file == "..") {
          continue;
        }

        if (is_dir($start_dir . "/" . $file)) {

          // Okay, now look inside and see if there is a .info file.
          if (file_exists("$start_dir/$file/$file.info")) {
            $module = $file;
            $info_contents = file_get_contents("$start_dir/$file/$file.info");

            //fpm($info_contents);  
            // From the info_contents variable, split up and place into an array.
            $info_details_array = array();
            $lines = explode("\n", $info_contents);
            foreach ($lines as $line) {
              if (trim($line) == "") {
                continue;
              }
              $temp = explode("=", trim($line));
              $info_details_array[trim($temp[0])] = trim(substr($line, strlen($temp[0]) + 1));
            }


            $path = "$start_dir/$file";

            $info_details_array["path"] = $path;
            $info_details_array["module"] = $module;

            //fpm($info_details_array);            
            // Expected keys:
            // name, description, version, core, requires (csv), requred (true or false)
            $checked = "";

            $form["mark" . $m++] = array(
              "value" => "<tr class='fp-system-modules-row fp-system-modules-row-$pol'>
                            <td width='35%'>",
            );

            // the Checkbox.            
            // Should it be checked?  We can check the modules table to see if it's enabled/installed or not.
            $installation_status = "";
            $default_value = array();
            $res = db_query("SELECT * FROM modules WHERE path = '?' ", $path);
            $cur = db_fetch_array($res);
            $info_details_array["enabled"] = $cur["enabled"];
            if ($cur["enabled"] == "1") {
              // Yes, it is checked!
              $default_value = array($module => $module);
            }
            else if ($cur["enabled"] == "") {
              $installation_status = t("not installed");
            }
            else if ($cur["enabled"] == "0") {
              $installation_status = fp_get_js_confirm_link(t("Are you sure you wish to uninstall @module?\\nThis may remove saved data belonging to the module.", array("@module" => $module)), ' window.location="' . fp_url("system/uninstall-module", "module=$module&path=" . urlencode($path) . "") . '"; ', t("uninstall?"));
            }


            // Does this module need to run db updates?
            if ($cur["enabled"] == "1" && $cur["schema"] != $info_details_array["schema"] && $info_details_array["schema"] != "") {
              $installation_status = "<b>" . l(t("Run db updates"), "admin/db-updates") . "</b>";

              // Let's also make sure to enable a message at the top of the screen, letting the user
              // know that there are needed updates.
              fp_add_message("<b>" . t("Note:") . "</b> " . t("There are modules which have been updated.  Please back up your database,
                                then run the DB Updates function below as soon as possible."), "error", TRUE);
            }




            $attributes = array();
            if ($info_details_array["required"]) {
              // This is a required module; it cannot be unchecked.
              $attributes["disabled"] = "disabled";
            }

            $bool_overriding = FALSE;
            // Did this module already exist in $form?  In other words,
            // is the module overriding a core module?  If so, we need to know
            // so we can display something special.
            if (isset($form["cb__$module"])) {
              $bool_overriding = TRUE;
            }

            $requires = "";

            // If this module requires a higher core version of FlightPath than what we
            // are running, disable and explain to the user.
            if (FLIGHTPATH_VERSION != '%FP_VERSION%' && $info_details_array["requires core version"]) {
              // Test to see if the current version is >= to the required core version.
              if (version_compare(FLIGHTPATH_VERSION, $info_details_array["requires core version"], "<")) {
                // No, it's LESS than the required version!  We shouldn't be able to use this module!
                $attributes["disabled"] = "disabled";
                $requires .= "<div style='color: red;'>" . t("This module requires
                                          that you run FlightPath version %fpv or higher.  
                                          You are instead running version %fpov.  Please update
                                          your core copy of FlightPath before attempting to install this
                                          module.", array(
                  '%fpv' => $info_details_array["requires core version"],
                  '%fpov' => FLIGHTPATH_VERSION,
                )) . "</div>";
              }
            }



            $form["cb__$module"] = array(
              "type" => "checkboxes",
              "options" => array($module => $info_details_array["name"]),
              "value" => $default_value,
              "suffix" => "<div class='fp-system-modules-machine-name'>$file</div>
                            <div class='fp-system-modules-installation-status'>$installation_status</div>
                            ",
              "attributes" => $attributes,
            );

            // hidden variable containing the details about this module, for later use on submit.
            $form["module_details__$module"] = array(
              "type" => "hidden",
              "value" => urlencode(serialize($info_details_array)),
            );



            // Version & descr.            
            if ($info_details_array["requires"] != "") {
              $requires .= "<div class='fp-system-modules-requires hypo'>
                            <b>" . t("Requires:") . "</b> {$info_details_array["requires"]}
                           </div>";

            }

            // if we are overriding a module, then display something special.
            if ($bool_overriding) {
              $form["mark" . $m++] = array(
                "value" => "<em>" . t("Overriding core module:") . "<br>{$info_details_array["name"]}</em>
                            <div class='fp-system-modules-machine-name'>$file</div>
                            <div class='fp-system-modules-installation-status'>
                            " . t("Use checkbox in Core section above to manage module") . "
                            </div>",
              );
            }

            $form["mark" . $m++] = array(
              "value" => "  </td>
                            <td width='5%' >{$info_details_array["version"]}</td>
                            <td >{$info_details_array["description"]}$requires</td>
                          </tr>
                          ",
            );


            $pol = ($pol == "even") ? "odd" : "even";

          } // if file_exists (xml file)        
        } // if is_dir      
      } // while file=readdir

      $form["mark" . $m++] = array(
        "value" => "</table>",
      );

    } // if opendir($startdir)
  }
  // foreach moduledirs

  $form["submit"] = array(
    "type" => "submit",
    "value" => t("Submit"),
    "prefix" => "<hr>",
  );


  return $form;
}