diff --git a/includes/workflow_fields.features.inc b/includes/workflow_fields.features.inc new file mode 100644 index 0000000..eb2989f --- /dev/null +++ b/includes/workflow_fields.features.inc @@ -0,0 +1,132 @@ +fetchAll(); + + foreach ($results as $result) { + $option_key = $result->type . '|' . $result->entity; + $option_value = $result->entity . ': ' . $result->type; + $options[$option_key] = $option_value; + } + + return $options; +} + +/** + * Implements component_features_export(). + */ +function workflow_fields_config_features_export($data, &$export, $module_name) { + $export['dependencies']['workflow_fields'] = 'workflow_fields'; + foreach ($data as $component) { + $export['features']['workflow_fields_config'][$component] = $component; + } +} + +/** + * Implements component_features_export_render(). + */ +function workflow_fields_config_features_export_render($module_name, $data, $export = NULL) { + $code = array(); + + $code[] = ' $workflow_fields = array();'; + + foreach ($data as $config) { + list($type, $entity) = explode('|', $config); + $sid_fields = workflow_fields_config_get_sid_fields($type, $entity); + + $code[] = " \$workflow_fields['$entity']['$type'] = array("; + + foreach ($sid_fields as $sid => $fields) { + $code[] = " '$sid' => array("; + + foreach ($fields as $field_permissions) { + $code[] = " '{$field_permissions->name}' => array("; + $code[] = " 'visible_roles' => '{$field_permissions->visible_roles}',"; + $code[] = " 'editable_roles' => '{$field_permissions->editable_roles}',"; + $code[] = " ),"; + } + + $code[] = " ),"; + } + + $code[] = " );"; + } + $code[] = ' return $workflow_fields;'; + $code = implode("\n", $code); + return array('workflow_fields_config_default_config' => $code); +} + +/** + * Implements component_features_rebuild(). + */ +function workflow_fields_config_features_rebuild($module) { + $items = module_invoke($module, 'workflow_fields_config_default_config'); + + if (!empty($items)) { + foreach ($items as $entity => $types) { + foreach ($types as $type => $sids) { + foreach ($sids as $sid => $fields) { + foreach ($fields as $field => $permissions) { + workflow_fields_config_save_configuration($entity, $type, $sid, $field, $permissions); + } + } + } + } + } +} + +/** + * Implements component_features_revert(). + */ +function workflow_fields_config_features_revert($module) { + workflow_fields_config_features_rebuild($module); +} + +/** + * Gets all workflow_fields configuration for the given entity/type pair. + */ +function workflow_fields_config_get_sid_fields($type, $entity) { + $sid_fields = array(); + $query = 'SELECT sid FROM {workflow_fields} WHERE type = :type AND entity = :entity GROUP BY sid'; + $replacements = array( + ':type' => $type, + ':entity' => $entity, + ); + $result = db_query($query, $replacements); + $rows = $result->fetchCol(); + + foreach ($rows as $sid) { + $query = 'SELECT name, visible_roles, editable_roles from workflow_fields where sid=:sid'; + $replacements = array(':sid' => $sid); + $result = db_query($query, $replacements); + $fields = $result->fetchAll(); + $sid_fields[$sid] = $fields; + } + + return $sid_fields; +} + +/** + * Saves a single entry on the workflow_fields table. + */ +function workflow_fields_config_save_configuration($entity, $type, $sid, $field, $permissions) { + $query = 'INSERT INTO {workflow_fields} (entity, type, sid, name, visible_roles, editable_roles) VALUES (:entity, :type, :sid, :name, :vroles, :eroles)'; + $replacements = array( + ':entity' => $entity, + ':type' => $type, + ':sid' => $sid, + ':name' => $field, + ':vroles' => $permissions['visible_roles'], + ':eroles' => $permissions['editable_roles'], + ); + db_query($query, $replacements); +} diff --git a/workflow_fields.module b/workflow_fields.module index d6f5404..8ee8002 100644 --- a/workflow_fields.module +++ b/workflow_fields.module @@ -33,6 +33,21 @@ function workflow_fields_permission() { } /** + * Implements hook_features_api(). + */ +function workflow_fields_features_api() { + return array( + 'workflow_fields_config' => array( + 'name' => 'Workflow Fields Configuration', + 'file' => drupal_get_path('module', 'workflow_fields') . '/includes/workflow_fields.features.inc', + 'default_hook' => 'workflow_fields_config_default_config', + 'feature_source' => TRUE, + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + ); +} + +/** * Administration form that renders a table listing of the fields for workflow's content type. */ function workflow_fields_form_workflow_admin_ui_form($form, &$form_state, $workflow, $sid) {