Roadblocks to Drupal7

I don't know if a migration to Drupal 7 is on the AgriDrupal roadmap but assuming that it is something that might be desired in the future I thought I'd write down a few experience I've had playing with Drupal 7 in the past week or so.

I've actually been looking at the code for the CIARD ring site and trying to get a sense of the issues that might be encountered if it were to be migrated to Drupal 7.  From looking at the AgriDrupal reference implementation much of what I've found would also relate to migrating AgriDrupal as well.

First, some good news.  I've found Drupal 7 very easy to work with.  It has many new features, that make site development and maintenance much easier than with Drupal 6.   The Dashboard feature,  ability to ad/update modules through a UI, and built-in admin_menu make managing a D7 site much easier.

Essentially most of what I've done relates to trying to duplicate the content model in the CIARD Ring in D7.  The RING has numerous content types and uses a variety of contributed modules to define the necessary fields.  The use of taxonomy terms in some content types is common and it was really easy to export/import the vocabularies from a test instance of the RING to a D7 site.  The taxonomy_csv and taxonomy_manager modules worked quite well in D7. Most of the CCK field modules (i.e. Link, Email, Date, Field_Group) have been ported to D7 and worked without a hitch.  

Although Fields are built into the core for D7, there is still a contributed CCK module that defines a content_migrate module that can be used to migrate content types from D6 to D7. 

Now for a couple of roadblocks...

Althought there is a nodereference module (as part of the references module) in D7 there isn't a backreference module yet available.  The author of the backreference module for D6 indicates on the project page that he's still trying to figure out how to best migrate the functionality to D7 using the new Fields API.

Similarly,  there isn't a Conditional Fields module available for D7 yet and the issue queue on the project page mentions a D7 port but nothing beyond a planning/brainstorming phase.

The CCK, References, and Computed_Field modules are still "dev" releases so a migration of the RING/AgriDrupal content model is still going to be a work in progress and without the backreference and conditional_field modules it's currently not doable without changing to some other approach.

Although the reference implementation of AgriDrupal doesn't use it, the CIARD Ring site uses a Location module to geo-locate services and organizations represented on the RING.  I could see that functionality being a common customization of the AgriDrupal refererence implmentation.  Unfortunately, the Location module for D7 has not yet been fully implemented.  There are a couple of developement branches underway and I was able to download one of them from a GIT repository and get it installed and enabled on D7.  However, it still doesn't have Views or Field support, two very important features.

Another roadblock (more like a speed bump) is the lack of the FeedAPI module in D7.  There's good news here though.  I took a look at all of the content types which used feeds implemented using FeedAPI, Feeds Element Mapper, etc and was able to completely mimic the consumption of data from the feeds in use on both the RING and AgriDrupal reference implementation using the Feeds module and Feeds_XPath_Parser modules.  The Feeds Importers I created are much simpler than the FeedAPI implementation and much more easily extendible.  At some point a migration from FeedAPI to Feeds should happen if there is a desire to eventually migrate AgriDrupal to D7.

Finally,  while looking at instantiating various content types I came across a few fields that used some custom PHP that lived in the sites/default/files directory that was used to populate Countries and Languages select lists.  When I encountered those field I decided to take a stab at creating a D7 module that would expose function hooks for providing this data.  I created a module called ciard_data_services that expose getCountries and getLanguages functions.  The advantage here is that the custom PHP for the field is reduced to a single line ( return module_invoke('ciard_data_services', 'getCountries');   ) and the module could be installled/enabled on both the RING and AgriDrupal sites to provide Country/Language data.  It also means that ciard_data_services module could be updated such that it's not pulling it's data from a csv file, but calling a web service to acquire that data dynamically.

Overall, I've been pretty impressed with Drupal 7 but while it's a very solid first general audience release there is still work to be done by the contributed module development community to provide all the functionality needed by the CIARD RING and AgriDrupal sites.  That said, I think  following development efforts on D7 will be worth the effort due to it's robust integrated RDF/Open Linked Data support.