Spaces Integrating a CCK Field
I wanted to make a CCK Field available only when a given feature was enabled. It turns out it’s really easy.
CCK comes with a hook_field_access() hook (see content_access()). Any implementation of this function that returns FALSE for a given field results in that field being denied to the user.
By implementing this function with a Spaces API call instead of the content_permissions module approach of a new, field-specific permission, all kinds of magic becomes possible.
Read on for demonstration code.
/**
* Implementation of hook_field_access().
* Allow View/Edit access to 'field_my_cck_field' only when 'feature_name' is enabled.
*/
function custom_field_access($op, $field, $account, $node = NULL) {
// Be sure not to affect other fields.
if ($field['field_name'] != 'field_my_cck_field') {
return TRUE;
}
switch ($op) {
case 'edit':
case 'view':
// Make access contingent on whether a given feature is enabled in the current space, such as atrium_book.
return spaces_access_feature('view', 'feature_name');
}
}
EDIT: Issue posted to the Spaces queue with patch to add this functionality generically for all fields.