function workflowfield_field_widget_form_alter in Workflow 7
Implements hook_field_widget_form_alter().
Sets the default value for a workflow_field options widget. This is normally OK for 'node edit', but not for 'node add' and 'comment form'.
File
- workflow_field/
workflowfield.widget.inc, line 67 - Defines a Workflow field, widget (sfrom options.module) and formatter (from list field). All hooks are wrapper functions for a D8-style WorkflowDefaultWidget object.
Code
function workflowfield_field_widget_form_alter(&$element, &$form_state, $context) {
if ($context['field']['type'] == 'workflow') {
if (isset($form_state['node'])) {
$entity = $form_state['node'];
$entity_type = 'node';
// comments are only supported on nodes.
}
else {
$entity = $element['#entity'];
$entity_type = $element['#entity_type'];
}
if (!$entity) {
// We are now on the Field settings page, so do nothing.
return;
}
$field_name = $context['field']['field_name'];
if ($entity_type == 'comment') {
$entity_type = 'node';
// @todo: Comments are only possible on nodes?
$entity = $context['form']['#node'];
if ($current_sid = _workflow_get_sid_by_items($context['items'])) {
// This is a preview: OK
}
else {
// A comment form. Get data from Entity.
$items = field_get_items($entity_type, $entity, $field_name);
$current_sid = _workflow_get_sid_by_items($items);
}
}
elseif ($items = $context['items']) {
// A node edit page.
$current_sid = _workflow_get_sid_by_items($items);
}
else {
// A node add page.
$wid = $context['field']['settings']['wid'];
$workflow = Workflow::load($wid);
$current_sid = $workflow
->getFirstSid($entity_type, $entity);
}
$element['#default_value'] = $current_sid;
}
}