You are here

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;
  }
}