You are here

function workflow_block_view in Workflow 7.2

Implements hook_block_view().

File

./workflow.block.inc, line 26
Provide block with Workflow form.

Code

function workflow_block_view($delta) {
  $block = array();
  $form = array();

  // @todo: how to make this work for non-nodes, like terms?
  $entity = NULL;
  if (arg(0) == 'node' && arg(1) !== NULL) {
    $entity_type = arg(0);
    $entity_id = arg(1);
    $entity = entity_load_single($entity_type, $entity_id);
  }
  if ($entity) {
    list($entity_id, , $entity_bundle) = entity_extract_ids($entity_type, $entity);
    if (is_null($field_name = workflow_get_field_name($entity, $entity_type, NULL, $entity_id))) {
      return $block;
    }

    // Get the current sid.
    $current_sid = workflow_node_current_state($entity, $entity_type, $field_name);
    $current_state = $current_sid ? workflow_state_load_single($current_sid) : NULL;
    $workflow = $current_state ? $current_state
      ->getWorkflow() : NULL;
    if (!$workflow) {
      return $block;
    }

    // Show the current state and the Workflow form to allow state changing.
    // N.B. This part is replicated in hook_node_view, workflow_tab_page, workflow_vbo, transition_edit.
    // @todo: support multiple workflows per entity.
    // For workflow_tab_page with multiple workflows, use a separate view. See [#2217291].
    $field = _workflow_info_field($field_name, $workflow);
    $field_id = $field['id'];
    $instance = field_info_instance($entity_type, $field_name, $entity_bundle);
    if (!$field_id) {

      // This is a Workflow Node workflow. Set widget options as in v7.x-1.2
      $field['settings']['widget']['comment'] = isset($workflow->options['comment_log_tab']) ? $workflow->options['comment_log_tab'] : 1;

      // vs. ['comment_log_node'];
      $field['settings']['widget']['current_status'] = TRUE;
    }
    $form_id = implode('_', array(
      'workflow_transition_form',
      $entity_type,
      $entity_id,
      $field_id,
    ));
    $form += drupal_get_form($form_id, $field, $instance, $entity_type, $entity);
    $block['content'] = $form;
    if ($block['content']) {
      $block['subject'] = t('Current state: @state', array(
        '@state' => $current_state
          ->label(),
      ));
    }
  }
  return $block;
}