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