UX improvements in Drupal 6: Error prevention
This is the third blog post in a series which examines the user experience improvements in Drupal 6. There are no widely accepted measures of usability, but I like to measure four attributes when testing the usability of an application. These measurements include: time on task, number of errors in task completion, goal completion, and a users qualitative assessment of the experience. In this post, I review the user experience improvements that reduce the errors it is possible to make with Drupal. This is how usability expert Jacob Neilsen describes the heuristic for error prevention: "Even better than good error messages is a careful design which prevents a problem from occurring in the first place. Either eliminate error-prone conditions or check for them and present users with a confirmation option before they commit to the action."
One of the reasons Drupal is popular is that it allows website administrators to configure complex and powerful social publishing applications without having to program. However, replacing specific programmed functionality with generic configurable options introduces a lot of complexity. Technologists are constantly looking to abstract functionality, which makes it widely useful, but abstracting functionality frequently reduces the specificity of the user experience. For example, the taxonomy module allows for highly flexible categorization and tagging of web pages, but technically it is also a useful mechanism for aggregating forum topic discussions into a forum container. This abstraction of taxonomies is elegant and powerful, but non-obvious to web site administrators who assume that enabling forums in any context will work. Several of the error prevention improvements in Drupal 6 ensure that errors in configuring forums to work in Drupal are prevented.
There were at least 35 Drupal core contributors who contributed 48 error prevention improvements including Jeff Eaton, Angela Byron, Karthik "Zen", Rob Roy Barreca, Konstantin Käfer, Moshe Weitzman, Gerhard Killesreiter, Bèr Kessels, John Albin, Derek Wright, Chris Kennedy, Steven Wittens, Gurpartap Singh, "Webernet", Larry Garfield, "iacopopecchi", Dries Buytaert, Nathaniel Catchpole, Wesley Tanaka, Jeff Robbins, Jiří Bernášek, Peter Wolanin, Károly Négyesi, Andrew Morton, Matt Corks, Doug Green, Gábor Hojtsy, Karen Stevenson, Barry Jaspan, Joakim Stai, Benjamin Wheeler, Øivind Binde, "rötzi", Darren Oh, and Alberto Lusiani.
The Drupal core development community is very effective at specifying patterns and then applying fixes. One possible improvement for Drupal 7 would be to look at every error message that could be displayed and every known error state and ask if those error conditions could have been eliminated or if the user could be presented with a confirmation option before the error can occur.
I've reviewed the commit logs and some of the issues for over 1300 patches for Drupal 6 and identified these 48 patches as being error prevention improvements. If I've missed some patches, contributors, or have mis-categorized these patches, let me know and I will correct them. I am working with Chad Phillips to come up with an exhaustive list of contributors to these patches.
- - Patch #109125 by Eaton: Multistep forms lose context on validation errors.
- - Patch #113872 by webchick: 403 on user/password for anon users.
- - Patch #100429 by Zen, RobRoy and kkaefer: remove the content type requirement.
- - Patch #135329 by Zen: clean up password reset form.
- #136250: The upload directory might exist, but is not writable. Fix error message. Investigated with Moshe Weitzman and Gerhard Killesreiter.
- - Patch #46941 by Zen and Ber: move PHP input filter to dedicated module.
- - Patch #133789 by John Albin: Drupal-generated email can look like spam.
- - Patch #146910 by dww: only allow enabling modules with the same Drupal core compatibility version.
- - Patch #143026 by ChrisKennedy and Steven: dynamically check password strength and confirmation.
- - Patch #143532 by Gurpartap: don't redirect to 'my account' after editing profiles.
- #151951 by webernet, slightly modified: enable the garland theme, not just set it as default
- #154949 by Crell and dww: let modules and themes specify a minimum required PHP version, under which they will not be possible to be turned on
- #156392 by iacopopecchi, patch by myself: tracker module depends on comment module (uses its tables and constants without checking for the module being present), so this dependency should be codified in the .info file
- #112374 by Wesley Tanaka: drupal_add_feed() should not allow adding the same feed more then once to the page
- - Patch #158790 by kkaefer: usability improvement: automatically select proper radio button.
- #168587 by jjeff: add rel=nofollow attribute to anonymous comment home page links to counter some spamming
- #170638 by JirkaRybka and chx: move update access variable to settings.php, so we can check whether it is wide open, and we have one place for settings
- #155828 by Eaton, pwolanin and jvandyk: let actions live even if actions.module is not turned on
- #168812 by webchick and pwolanin: in case we have a database error, trace it back to the original database function call, so we can provide a more accurate error message for DB errors
- #115689 by chx: new content types should not overwrite old ones
- #173314 by drewish: mark previously uploaded files as permanent, so they will not be deleted after an upgrade
- #168261 by mvc: redirect registered users back to the front page if admin approval is required, so their user account page is not directly accessible after registration
- #177927 by chx: use path=/ in PHP comment settings cookie creation, so cookies set around the site are available in other 'directories'
- #179695 by chx: only anonymous users should have permission to visit user/login, so this menu item is automatically hidden when a user is logged in
- #172943 by drewish: fix file_save_upload() conformance to its API documentation by treating the 'dest' param as a directory. Also fixes #176876 so temporary files are properly stored in the temp directory.
- #25605 by Rob Loach et al: disallow editing user data of uid 0
- - Patch #191914 by chx: you cannot add user/register to a menu. Also removed some whitespace.
- - Patch #194304 by Gabor: upgrade should only enable PHP module if necessary.
- #193105 follow up by webernet: only run upload module update if the table is there
- #194010 by chx: Proper recursive dependency checking and ordering module installation in dependency order, so later installed modules can use previously installed module functionality
- #194310 by chx, catch, KarenS: run updates for disabled but previously installed modules, if they are compatible with the current system
- #194310 follow up by chx and myself: only load comment module when we can actually do it, and when we need it in comment.install
- #186546 by bjaspan: fix missing forum vocabulary when people turned on forum module, but never visited any pages in Drupal 5 and they upgrade to Drupal 6 which does this much better
- #201479 by chx, ximo: forum module requires taxonomy for uninstall but taxonomy might be disabled at that time, so we need to include it
- #172993 by drewish, Lynn: remove old user picture even when the newly uploaded one uses a different format
- #199400 by ChrisKennedy: use the SERVER_NAME as default site name, instead of the misleading 'Drupal' name
- - Patch #194369 by webernet: fixed the default files directory on multi-site setups.
- #199373 report by avskip, patch by myself, testing by keith.smith: forum node type was not re-added to the forum vocabulary when the module is re-enabled (after being disabled)
- #208602 by KarenS: add support for aborting all updates of one module, when a critical error happens
- #211353 follow up by JirkaRybka: ensure that on upgrades, if the file_directory_path was not set, set it to the Drupal 5 default
- #199946 by JirkaRybka: append a short query string to CSS and JS files, changing on upgrades, so on core/module/theme upgrades, browser caches will 'flush'
- #176503 by chx and bennybobw: hidden profile fields cannot be required and cannot be put on the registration form, so we needed warnings on the editing form to not let admins save forms set with these combinations.
- - Patch #112556 by webchick: term/vocab maxlength should match db.
- - Patch #109941 by morphir: allow the browser to store form fields.
- - Patch #115667 by rotzi: added versioning support to node terms.
- - Patch #133189 by Darren Oh: fixed empty date field test.
- - Patch #81891 by alusiani and dww: fixed problem with matching permissions.