Two years of development are behind us, and it's quite exciting to see what we've achieved.
This post started off with a simple patch to finish Upgrade Status for Drupal 6. After revisiting my recent list in Challenges for Drupal and reading Lullabot's take, things still felt incomplete. Thus, I took the time to go through a lot of issues on drupal.org, to take a large step back, and to recall the entire awesomeness we added to Drupal 7.
Drupal 7 is much more.
Note that this list may even be incomplete. Pointers, comments, and feedback is highly welcome.
- AHAH helper
Allows Drupal modules to lazy-load any class that has not been loaded yet. A major performance improvement in Drupal 7, and the only part of the Registry™ that was introduced earlier, but later removed from Drupal 7.
- Auto Menu Title
When creating new content, Drupal 7 automatically takes over the title of the content as menu link title, while still allowing you to alter it.
One of the improvements that will have a major impact on Drupal's evolution and success in the future: Edit links on everything. The new Contextual links module in Drupal 7 allows you to manage page elements from the page you are looking at, i.e. you have direct access to "Edit" and "Delete" pages for content, or "Configure" pages for blocks, "List links" for menu blocks, etc. This applies to all elements that are integrating with Contextual module.
- Admin Role
More or less requested since like ever, Drupal 7 finally ships with a sane implementation of an administration role. It's based on regular Drupal user roles, and you can configure any user role to be that administration role. Effectively, any new permissions (and only new) are automatically granted to the configured administration role (if any). You are therefore still able to remove permissions from the role.
- Block Node Visibility
Ever wanted to display a block on certain node types only? Drupal 7 allows you to do so. Additionally, the block visibility integration has been de-cluttered to some extent, so as to allow other modules to enhance the visibility settings more easily. (Passing the 4th "code freeze" phase was a bit too late to clean this API up properly... ;)
- 404 Blocks
404? What's that, you ask? Not the content I expected on your site? Right! Drupal did not provide any useful information or pointers for totally lost users on "404 Not found" pages previously. Drupal 7 now retains the regular block regions.
- Content Construction Kit (CCK)
CCK is in Drupal 7. But not really. The reality is that Drupal 7 introduces the paradigm of "fields". Got that? Fields can be attached to almost everything. You can add fields to nodes, users, taxonomy terms, and any other fieldable "entity" that exists. You could potentially add a taxonomy term to private messages (if privatemsg will implement a message as entity). You can attach any field to any entity. And it even allows to get weird: You can add a taxonomy term field to a taxonomy term. Insane? Insane!
- Checkbox Validate
- Comment Display
Comments on a node were rendered in a obscure fashion in previous Drupal versions: Within a node, but not really within it. Somewhere in between, but also not part of the page. So what? Drupal 7 finally renders comments in a way they are customizable for your theme.
- Site Configuration Permissions
Who is an administrator, and who's not? Who can change settings, who can manage modules, who can manage themes? Who can set the site offline, and who can access it if it's offline? Previous Drupal versions summarized all of that in the "administer site configuration" permission. Drupal 7 allows you to grant many administrative permissions more granularly.
- Content Taxonomy
In previous Drupal versions, Taxonomy terms (or simplified: categories) could be assigned to content only. In Drupal 7, you have a taxonomy field, which can be attached to any entity. Furthermore, a taxonomy term is a proper entity now, coming with solid API hooks.
Drupal 7 implements an entirely revamped support for databases. Database Layer: The Next Generation (DBTNG) allows Drupal to consistently work with any kind of database. Modules are finally able to properly alter almost any database query, and we can roll back all changes from a "transaction", in case something went wrong during the entire operation.
Element theme hook
When requesting a particular page, the callback function in charge for that page returned a HTML string in previous Drupal versions. Almost impossible to alter or customize in any way. In Drupal 7, almost any content that can be rendered, is returned as a "renderable array". If you know the array structure of Drupal forms, you may get the idea. This allows us to consider any element on a page as atomic, alterable, and themeable element. Especially the themeable part matters, if you ever wanted to change the output of something, anywhere.
- File field
Upload module has been removed from Drupal core. And replaced with a much more generic file field. Providing previews after uploading, supporting very large file sizes (on good hosting providers), and of course, having all the goodness of any other field in Drupal 7.
- Filter Default
User Default Filter
Sick of selecting the text format for your content all over again? Drupal 7 now allows you weigh text formats, so as to pre-select a certain text format for a certain user role. Text format? Yes, "input format" is a term of the past.
Drupal 7 is the first Drupal release with native image support. You get an image field. And - you guessed it - you can add an image field to any entity. On top of that, you can configure image styles - which allow you present the same image in a different size/scale/fashion in different locations. Additionally, Drupal developers can now use much more advanced functions to process images.
- Input Format Permissions
Permissions to use a text format can now be granted on the regular user permissions page, on which all other Drupal permissions are configured. Good for security.
jQuery Plugin Handler (JQP)
jQuery plugin manager
- jQuery Cookie
- jQuery UI
Drupal 7 brings you the awesomeness of jQuery User Interface. Drupal core doesn't really use it, but there's still a major issue almost ready to be committed (since like months), which at least allows contributed Drupal modules to leverage the power of jQuery UI very easily.
- JS Alter
- Login Security
What happens after 5 failed login attempts? Nothing. Meet Drupal 7: Built-in brute-force login protection.
- Menuless Node Type
Menu Settings per Content Type
Does it make sense to have Devel's menu as option for the menu link in the content form? Drupal 7 allows you to select the menus that should be available per content-type. Additionally, all administrative menu links are now contained in a separate menu, so all of those annoying links don't get in your way.
- Node Preview by Content type
Should previewing a content be required? Is it optional? Or is it entirely pointless? Drupal 7 allows you to configure the "Preview" button behavior per content-type.
- Permissions API
Previously, Drupal developers had not really a way to grant, revoke, or change the permissions for a user role. Drupal 7 now ships with a solid user roles and permissions API to do just that.
- Plugin Manager
Install and update modules and themes from within Drupal? On-site? Drupal 7 allows you to do that, in a secure way.
- Poor man's cron
Most probably the #1 problem for novice Drupal users: "cron". Drupal tells you to set it up. "WTF is a cron?" Drupal 7 allows to automatically run cron (and yes, this feature can be disabled easily). Somewhat related, Drupal 7 also provides a queue system now.
The semantic web is the search engine optimization of the future. Drupal 7 gets ahead of the entire industry by implementing full support for RDFa all over the place. This means that bots, spiders, and crawlers can easily classify and identify the content on your pages, and precisely figure out the topic and relationship of every single page on your site. Most probably, they will even know more about your content than you do.
Like it or not, Drupal 7 ships with a dedicated administration theme.
A major change for Drupal 7 is the introduction of automated tests for all functionality. Almost every change that went into Drupal 7 had to be covered by tests. In turn, this means that the first stable release of Drupal 7 will be the most stable release of Drupal in its entire history. And in turn, this means that you can expect a very stable Drupal core and much less bugs. Additionally, contributed modules are slowly catching up on adding and writing tests.
Mainly here to extract downloaded modules and themes via Plugin Manager, but also usable by all modules: Drupal 7 allows to extract tar archives.
- Taxonomy Delegate
You have multiple vocabularies? And certain users should be able to alter/administer certain ones? Drupal 7 allows you grant user permissions to do just that.
Drupal 7 supports simple string replacements via tokens. The heavily changed and advanced version of tokens in Drupal 7 support recursive, lazy-loading replacements. For example, [node:title] is replaced with the title of a content, and [node:author:name] is replaced with the user name of the author of a content.
- URL alter
In Drupal 6 and below, modules like Domain Access and others were incompatible with any other of those modules, or required you to add custom code to settings.php. Drupal 7 allows multiple modules to alter both the incoming and all generated URLs without any hacks.
- User Cancellation
Privacy of data matters. Professional sites allow you to cancel your account. At any time. But does Drupal? Yes: Drupal 7 enables you to allow your users to cancel their own accounts. In different and even extensible ways. Whether you need to retain all user data due to legal reasons, or whether you need to delete all user data due to legal reasons, or whether you need to do something in between: Drupal 7 supports you.
- Vertical Tabs
Forms in Drupal can get very long. Especially when containing fieldsets. But how often do you really change something in those fieldsets? Drupal 7 introduces the new pattern of vertical tabs. Exclusively for entirely optional form elements, i.e. stuff you can happily ignore when submitting a form in Drupal. A major usability improvement that benefits all Drupal users.
- View unpublished
It's weird that you cannot view your own content after submitting it. At least in some use-cases, that's desirable. Drupal 7 allows you to configure whether users should be able to view their own unpublished content after submission.
What. A. List. Apart.
UPDATE (2010-04-17 19:36)
- Canonical URL
If you know some basics about search engine optimization, then you have probably heard of duplicate content. Due to the way URL aliases work in Drupal, many sites are exposing the same content under different URLs - on the system path and on the URL alias(es). Drupal 7 helps you to avoid duplicate content penalties by letting search engines know about the canonical URL of a content.
- Date Timezone
In Drupal 6 and below, Drupal implemented a custom timezone handling. Starting with Drupal 7, Drupal relies on PHP5's built-in timezone handling, which provides you many more timezones, and most importantly, support for daylight saving time (DST).
Almost the entire API and hook documentation has been moved into dedicated .api.php files in Drupal core. Drupal developers can access that information locally, and the file contents are used 1:1 for Drupal's online API documentation.
- Edit term
Ever wanted to edit a taxonomy term when looking at its page? Drupal 7 now provides you a tab. Additionally, the taxonomy term description has a text format assigned now, allowing you to use a client-side editor for it.
- File API
Drupal 7 ships with an entirely overhauled API for handling and processing of files. Drupal 7 also introduces stream wrappers from PHP5, allowing you to store and access files in many different ways and locations, even remotely. Drupal 7 is the first Drupal release with a proper separation between public and private filesystem, and you can use both at the same time.
- jQuery Form Update
Wysiwyg API CCK Integration
TinyMCE AHAH Integration
TinyMCE Drag and Drop Integration
As a result of the community's joined effort on the Wysiwyg module, Drupal 7 contains many improvements that will allow a better integration of client-side editors. Lessons learned: Module duplication sucks. Only if Drupal developers and users are joining forces, we can improve the overall situation. (And no, Drupal 7 does not ship with an editor. And having the experience as one of the Wysiwyg module maintainers, I'm highly opposed to ever do that.)
- Secure Password Hashes (phpass)
Starting with Drupal 7, all passwords of users that are stored in Drupal's database are additionally "salted", so as to make it harder to reverse-engineer the user's unencrypted, original, plain-text password.
- Simple CDN