UX improvements in Drupal 6: Installation

This is the fourth blog post in a series looking at user experience improvements in Drupal 6. One of the principles of the Drupal project is that Drupal should have low resource demands, and "have minimal, widely-available server-side software requirements. Specifically, Drupal should be fully operational on a server with Apache web server, PHP, and either MySQL or Postgresql." In order to support such a broad platform, Drupal has to balance keeping its resource requirements low, while at the same time performing lots of checks to ensure the requirements for using Drupal are being met. The more automation and work flow improvements Drupal can complete, the better the user experience of Drupal will be.

The Drupal installer tackles a wide variety of issues including support for multiple databases and database drivers. It writes configuration files in a more consistent and logical manner, while giving the user informative feedback about those files and the level of security. The installer provides several critical features including language installation support, timezone handling, and update notifications. The installer also supports installation profiles which can further simplify advanced configurations of Drupal and contributed modules to meet a particular business profile.

The 37 contributors to these 36 Drupal installation improvements include Antony Simmonds, Ralf Stamm, Angela Byron, Steven Wittens, Earl Miles, Yves Chedemois, Keith Smith, Jeff Eaton, John Albin, Rok Žlender, Brenda Wallace, Edison Wong, Nathan Haug, Dries Buytaert, Károly Négyesi, "Morbus Iff", Jiří Bernášek, "Webernet", Rob Roy Barreca, Keith Smith, "markus_petrux", Addison Berry, Chris Kennedy, "spatz4000", Hans Nilsson, Nedjo Rogers, Joakim Stai, Nathaniel Catchpoole, David Strauss, Barry Jaspan, Alexander Hass, Gurpartap Singh, Harri J. Talvitie, Heine Deelstra, Giles Kennedy, and Stefaan Lippens.

The improvements to the installer show a wide range of user experience improvements including internationalization and language support, information improvements, error prevention, interaction design, user work flow design, and user centered design focused on the goal of completing a Drupal installation successfully. When the Drupal core contributors have a clear user goal in mind, they are able to take a very complex task with many permutations and create a great user experience. Designers and user experience practitioners can help core contributors by creating specific user stories which the community can focus on. If you know a designer or user experience practitioners who would like to contribute user stories like content creation, content type building, or site layout, please ask them to join the Drupal usability group and review the issues below to see how they can help core contributors improve the Drupal user experience.

  1. #102387: index.php does not redirect to install.php if PHP does not support 'mysql'.
  2. - Patch #108272 by webchick, Ralf et al: improved handling of required modules in install profiles.
  3. #117018: Use Garland theme for installer/maintenance pages, and add task list in the sidebar.
    - Refactor partial-page handling for the maintenance page. It's an exotic quirk for update.php and belongs there.
  4. - Patch #99011 by merlinofchaos: remove sites/default/settings.php and ship with sites/default/default.settings.php.
  5. - Patch #141637 by merlinofchaos, gabor, et al: provide a site config form at the end of install to collect data, plus allow profiles to modify and add more.
  6. #141637 by merlinofchaos and yched: follow up fixes to the installer patch, properly rebuilding the menu when done and returning update results
  7. - Patch #142869 by keith.smith: expanded the installer's help text a bit.
  8. - Patch #146470 by Eaton: install.php was hard-calling the user module's internal FAPI functions, and that line had been missed.
  9. - Patch #148652 by JohnAlbin: fixes 'undefined index' notices in installer.
  10. #151280 by Rok Žlender, webernet and myself: use the real cache system, once we have the database set up, to get the values set by the configuration form and the install profile to the proper cache values
  11. #99011 follow up patch my merlinofchaos: inform users if the settings.php or the settings directory in use is not write protected after installation.
  12. - Patch #156315 by merlinofchaos: usability improvement: remove the wall of text in the installer.
  13. #172262 by JirkaRybka: better globals handling in install system, so the choosen profile and language are remembered
  14. #125105 by Shiny and hwsong3i: fix installer pgsql connection parameters to work when password is not specified

  15. - Patch #180948 by quicksketch: automatically populate e-mail fields during install.
  16. - Patch #172396 by webchick: better prefix description on the installer screens.
  17. #178581 by lot of contributors: opt-in for update module on install and update to avoid any privacy concerns
  18. #190283 by JirkaRybka and myself: fix installer localization and form handling
    - use a two pass localization process so localization is ready for the configure form and profile tasks
    - fix awkward form API workarounds which were introduced before we used a full bootstrap anyway
    - allow for more usable localized profiles by letting them skip language selection
    - lots of documentation improvements to profiles and the installer functions
  19. #100909 by webernet and RobRoy: improve cron error reporting by defining time tresholds, so if cron stops running after some time, it also becomes an error, but cron not run yet is not an error on installation
  20. #193513 by keith.smith: use 'set up' instead of 'setup' in installer tasks
  21. #193580 by chx: given recent improvements, Drupal does not require CREATE TEMPORARY TABLE and LOCK TABLES permissions, so do not check on install and do not advise people giving these rights
  22. #191310 follow up by keith.smith: fix install instructions and error message about files folder
  23. #173408 by markus_petrux / add1sun: move proxy IP configuration options to settings.php, because these need to be used before Drupal has the variables loaded from the database

  24. #131493 by spatz4000, ChrisKennedy, keith.smith: consistent username field description wording in installer and runtime interface
  25. #194494 by blackdog: fix two noticed on install when password is not provided
  26. #194369 by lots of contributors: move default files directory to sites/default/files which can be created automatically on install, so no need to bug the user about it, making the install process easier
  27. #197720 by nedjo, scor, keith.smith, catch: inform installing users about PHP memory requirements of Drupal 6
  28. - Patch #147145 by David Strauss: remove mysql (no i) as an option when mysqli is available.
  29. #149567 by chx and meba: set install_task variable to 'done' on update, so installer cannot be run on Drupal 6 on an upgraded site
  30. #191310 by JirkaRybka, keith.smith: ship with a files directory by default and improve installation error messages checking for all requirements on the same screen, instead of putting the user through individual error screens
  31. #190899 by bjaspan: (regression) return the queries performed in drupal_install_schema() and drupal_uninstall_schema(), so module install hooks can report on creation of tables, or failures, as it was in Drupal 5
  32. #210219 by htalvitie, yched: initialize block caching properties properly on install (and update bugos RC2 sites as well)
  33. #149092 by Gurpartap Singh slightly modified: Usability: generalize timezone discovery to use on user registration
  34. #103528 by Heine and gpk: note why the color settings are not available if private file handling is used
  35. #110981 by saxofaan: allow contrib modules in install profiles and runtime to have requirements, just like core modules; also fix a consistency between message presentation in install and runtime requirements
  36. #202425 by keith.smith: standardize reference to block placement page as 'blocks administration page' to avoid any confusion

Comments

Posted on by Dubai_web_design (not verified).

I'm trying to update Druplet.module for Drupal 6. It's a simple module that creates new Drupal sites based on install profiles using multisite. It creates a new site directory, settings.php file, and database, and then executes the chosen install profile on the site, saving the user from having to step through the installer process.

In Drupal 5 it was fairly simple to do this:

<?php// where $db_url['newsite'] is the SQL url from settings.phpdb_set_active('newsite');// include install functionsrequire_once $_SERVER['DOCUMENT_ROOT'] . '/includes/install.inc';// Verify existence of all required modules.$profile = 'default';$modules = drupal_verify_profile($profile, NULL);// Perform actual installation defined in the profile.drupal_install_profile($profile, $modules);variable_set('install_profile', $profile);drupal_maintenance_theme();// Show profile finalization info.$function = $profile .'_profile_final';if (function_exists($function)) {// More steps required$final = $function();}// return db control to primary sitedb_set_active('default');// forward user to new sitedrupal_goto('http://newsite.example.com');?>

At the moment, I'm not able to figure out a clean way to do this in Drupal 6 without hacking apart install.php and install.inc. Has anybody had success with this?