You are here

function workbench_scheduler_count_node_schedules in Workbench Scheduler 7

Return an array of counts of schedules for a specific node.

Parameters

int $nid: Node id.

bool|string $status: Which status to return counts.

Return value

int Return count of schedules.

1 call to workbench_scheduler_count_node_schedules()
workbench_scheduler_form_node_form_alter in ./workbench_scheduler.module
Implements hook_form_FORM_ID_alter().

File

./workbench_scheduler.module, line 636
Content scheduling for Workbench.

Code

function workbench_scheduler_count_node_schedules($nid, $status = FALSE) {
  $counts = array(
    'active' => 0,
    'completed' => 0,
  );

  // Select from the workbench_scheduler_nodes table.
  $node_schedules = db_select('workbench_scheduler_nodes', 'wsn')
    ->fields('wsn', array(
    'nid',
  ));

  // Retrieve count of completed.
  $node_schedules
    ->addExpression('SUM(wsn.completed)', 'completed_schedules');

  // Retrieve count of active (count of completed - sum).
  $node_schedules
    ->addExpression('(COUNT(wsn.completed) - SUM(wsn.completed))', 'active_schedules');

  // WHERE node id matches this node id.
  $node_schedules
    ->condition('wsn.nid', $nid)
    ->range(0, 1);

  // Execute.
  $node_schedules = $node_schedules
    ->execute();

  // Returned results?
  if ($node_schedules
    ->rowCount()) {

    // Gather data from first result.
    $result = $node_schedules
      ->fetchObject();
    $counts['completed'] = $result->completed_schedules;
    $counts['active'] = $result->active_schedules;
  }

  // Only want count for a specific status?
  if ($status) {
    if (isset($counts[$status])) {
      return $counts[$status];
    }
    else {
      return 0;
    }
  }
  return array_sum($counts);
}