Building an Intranet: Drupal vs Plone
I landed a contract to setup an intranet for a local company. They had looked at Microsoft's SharePoint, but decided it was way too complex for their needs. So they asked me to help them find something better. I originally planned to go with Drupal, due to its great taxonomy model. Having the ability to tag any piece of content from the same vocabulary makes for a very organic structure, allowing the users to find what they need quickly without having to deal with a rigid, arbitrary folder structure.
Unfortunately, Drupal is missing a lot of other features required for a robust intranet, primarily a robust document management feature. External files in drupal are treated more as attachments than as primary nodes, which makes it rather difficult for a user to quickly get to that important presentation the boss needs. There are plans to rectify this, including a Google Summer of Code application this year (though it doesn't appear to have been accepted). Until then, though, I'll need something else.
Which led me back to Plone. I played with this during 2.1, and was impressed by it's breadth of features, including document management and granular security. However, it doesn't have anything close to Drupal's taxonomy model built-in. There's a basic keyword feature, but it's a single list of terms global to all content types, so it won't scale very far. There are a couple of add-ons ("Products" in the plone/zope nomenclature) but they can't be applied to the existing content types. To get the full power, you need to build your own types. This isn't that big a deal, since it lets you provide content types just the way you want to. But it requires more work up-front than with drupal.
Plus, it means I have to give in and deal with Python and all its whitespace pickiness. Sure it's a great language (according to the zealots), but c'mon - there are plenty of code samples around the net, but you can't just copy-paste into your app. You have to go through and verify all the whitespace lines up before you can run it. How silly.
Anyway, I'm almost finished with some custom types using ATVocabularyManager. Then I can get back to building the client's intranet....