7. Major drawbacks
• Not ideal for a distributed team
• Makes it difficult to push settings to production
• Content and settings are mixed in one db dump
• Easy to lose control
12. From DB to code and vice versa
$ # Dump your changes into code.
$ drush features-update feature_name
$ # Restore your changes into the db.
$ drush features-revert feature_name
13. Want to add a component to a feature?
1. add it to the .info file
2. $ drush features-update feature_name
14. Want to remove a component from a feature?
1. remove it from the .info file
2. $ drush features-update feature_name
25. Controller Feature Workflow
6001
Developer A
Time
Developer B
Time
DevA$ svn ci -m “Enable Rules module.”
Developer A commits his changes.
26. Controller Feature Workflow
6001
Developer A
Time
Developer B
Time
DevB$ svn up && dr updatedb -y && dr cc all
Developer B updates his local copy
and wants to remove a user role.
27. hook_update_N()
/**
* Removing contributor role
*/
function feature_controller_update_6002() {
$return = array();
$role_name = 'contributor';
$result = db_query("SELECT rid FROM {role} WHERE name='%s'", $role_name);
while ($role = db_fetch_object($result)) {
$rid = $role->rid;
$return[] = update_sql("DELETE FROM {role} WHERE rid = '$rid'");
$return[] = update_sql("DELETE FROM {users_roles} WHERE rid = '$rid'");
}
return $return;
}
feature_controller.install
28. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002
Time
DevB$ svn ci -m “Removed contributor role.”
Developer B commits his changes.
29. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002
Time
Click. Click. Click.
DevB$ patch -p0 < inline.patch
Click. Click. Click.
Developer B adds an OpenID account for admin
and patches the Inline module.
30. hook_update_N()
/**
* Adding Nuvole OpenID to admin account
*/
function feature_controller_update_6003() {
$return = array();
$uid = 1;
$claimed_id = 'http://admin.myopenid.com/';
$return[] = update_sql("DELETE FROM {authmap} WHERE authname = '$claimed_id'");
$return[] = update_sql("INSERT INTO {authmap}(uid, authname, module)
VALUES($uid, '$claimed_id', 'openid')");
return $return;
}
feature_controller.install
32. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002 6003
Time
DevB$ svn ci -m “Add OpenID for admin. Patching Inline”
Developer B commits his changes.
33. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002 6003
Time
Developer C
Time
DevC$ svn co http://svn.nuvole.org/project
Developer C joins.
37. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002 6003
Time
Developer C
Time
Click. Click. Click.
Developer C installs the project.
38. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002 6003
Time
Developer C
Time
Click. Click. Click.
Developer C creates and enables a new feature.
41. Controller Feature Workflow
6001
Developer A
Time
Developer B
6002 6003
Time
Developer C
6004
Time
DevC$ svn ci -m “News Feature.”
Developer C commits his changes.