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