You are here

function merci_load_reservations_for_node_in_timespan in MERCI (Manage Equipment Reservations, Checkout and Inventory) 7.2

Same name and namespace in other branches
  1. 6.2 includes/database.inc \merci_load_reservations_for_node_in_timespan()

Builds an array representing reservations for a Resource within a given timespan

Return value

An associative array with keys as times (in MySQL datetime format) and values as number of reservations.

2 calls to merci_load_reservations_for_node_in_timespan()
merci_is_item_reservable in includes/database.inc
template_preprocess_merci_conflict_grid in theme/theme.inc
@file MERCI - Managed Equipment Reservation Checkout and Inventory

File

includes/database.inc, line 760
MERCI - Managed Equipment Reservation Checkout and Inventory

Code

function merci_load_reservations_for_node_in_timespan($item_nid, $type, $start_date, $end_date, $exclude_nid = NULL) {

  // Determine CCK table and columns the date data is stored in.
  $field = field_info_field('field_merci_date');
  $table = key($field['storage']['details']['sql']['FIELD_LOAD_CURRENT']);
  $column_start_date = $field['storage']['details']['sql']['FIELD_LOAD_CURRENT'][$table]['value'];
  $column_end_date = $field['storage']['details']['sql']['FIELD_LOAD_CURRENT'][$table]['value2'];

  /*
   */
  $type_settings = merci_type_setting($type);
  if ($type_settings == 'bucket' and empty($item_nid)) {
    return merci_reserved_bucket_items($type, $start_date, $end_date, $exclude_nid, FALSE);
  }
  else {
    $sql = "SELECT r.entity_id AS nid, {$column_start_date} AS field_merci_date_value, {$column_end_date} AS field_merci_date_value2, merci_item_nid\n      FROM {node} n\n      JOIN {merci_reservation_detail} d ON n.nid = d.merci_item_nid\n      JOIN {" . $table . "} r ON d.vid = r.revision_id\n      JOIN {node} rn on rn.vid = r.revision_id\n      WHERE n.nid = :item_nid \n        AND NOT d.merci_item_status <= :item_status\n        AND\n                    (({$column_start_date} >= :start1 AND {$column_start_date} <= :start2)\n                    OR ({$column_end_date} >= :start3 AND {$column_end_date} <= :start4)\n                    OR ({$column_start_date} <= :start5 AND {$column_end_date} >= :start6))\n      ";
  }
  $args = array(
    ':item_nid' => $item_nid,
    ':item_status' => MERCI_ITEM_STATUS_AVAILABLE,
    ':start1' => $start_date,
    ':start2' => $end_date,
    ':start3' => $start_date,
    ':start4' => $end_date,
    ':start5' => $start_date,
    ':start6' => $end_date,
  );

  // If we're checking an existing reservation, exclude it from the
  // reserved items.
  if ($exclude_nid) {
    $sql .= " AND d.nid <> :exclude_nid";
    $args[':exclude_nid'] = $exclude_nid;
  }
  $sql .= " ORDER BY {$column_start_date} ";

  // TODO Please convert this statement to the D7 database API syntax.
  $reservations = db_query($sql, $args);
  foreach ($reservations as $reservation) {
    $return[$item_nid][$reservation->nid] = $reservation;
  }
  return isset($return) ? $return : array();
}