You are here

function workflow_admin_ui_view_permissions_form in Workflow 7

Same name and namespace in other branches
  1. 7.2 workflow_admin_ui/workflow_admin_ui.page.permissions.inc \workflow_admin_ui_view_permissions_form()

View workflow permissions by role

Parameters

$workflow: The workflow object.

1 string reference to 'workflow_admin_ui_view_permissions_form'
workflow_admin_ui_menu in workflow_admin_ui/workflow_admin_ui.module
Implements hook_menu().

File

workflow_admin_ui/workflow_admin_ui.pages.inc, line 143
Provides administrative UI for workflow. Why it's own module? Lower code footprint and better performance. Additional credit to gcassie ( http://drupal.org/user/80260 ) for the initial push to split UI out of core workflow. We're moving…

Code

function workflow_admin_ui_view_permissions_form($workflow) {

  // If we don't have a workflow at this point, go back to admin page.
  if ($workflow) {

    // Let's add some breadcrumbs.
    workflow_admin_ui_breadcrumbs($workflow);
    $name = $workflow
      ->getName();
    $all = array();
    $roles = workflow_admin_ui_get_roles();
    foreach ($roles as $role => $value) {
      $all[$role]['name'] = $value;
    }

    // TODO return to this, this looks similar to actions stuff (transitions) - should be it's own function.
    $result = db_query('SELECT t.roles, s1.state AS state_name, s2.state AS target_state_name ' . 'FROM {workflow_transitions} t ' . 'INNER JOIN {workflow_states} s1 ON s1.sid = t.sid ' . 'INNER JOIN {workflow_states} s2 ON s2.sid = t.target_sid ' . 'WHERE s1.wid = :wid ' . 'ORDER BY s1.weight ASC , s1.state ASC , s2.weight ASC , s2.state ASC', array(
      ':wid' => $workflow->wid,
    ));
    foreach ($result as $data) {
      foreach (explode(',', $data->roles) as $role) {
        $all[$role]['transitions'][] = array(
          check_plain(t($data->state_name)),
          WORKFLOW_ARROW,
          check_plain(t($data->target_state_name)),
        );
      }
    }
    $header = array(
      t('From'),
      '',
      t('To'),
    );
    $output = '';

    // TODO we should theme out the html here.
    foreach ($all as $role => $value) {
      if (!empty($value['name'])) {
        $output .= '<h3>' . t('%role may do these transitions:', array(
          '%role' => $value['name'],
        )) . '</h3>';
      }
      if (!empty($value['transitions'])) {
        $output .= theme('table', array(
          'header' => $header,
          'rows' => $value['transitions'],
        )) . '<p></p>';
      }
      else {
        $output .= '<table><tbody><tr class="odd"><td>' . t('None') . '</td><td></tr></tbody></table><p></p>';
      }
    }
    return $output;
  }
  else {
    drupal_goto('admin/config/workflow/workflow');
  }
}