'max-width:30%'); $rows = array(); //get room definitions $room_definitions = _booking_room_location_lookup(); //ditch the first element which is empty array_shift($room_definitions); $i = 1; foreach ($room_definitions as $room) { $rows[] = array( $room, l(t('Allocate Rooms'), t('admin/booking/rooms/!id/assign', array('!id' => $i))), l(t('View Rooms'), t('admin/booking/rooms/!id/view', array('!id' => $i))), ); $i++; } //output everything $output .= t("
Loading existing room allocations:\n@info", array('@info' => print_r( $room_mapping, true))); //attach the custom css $form['#attached']['css'] = array( drupal_get_path('module', 'booking') . '/booking.css', ); //define the header $header = array ( 'booking_room_location' => array('data' => t('Room Location'), 'field' => 'booking_room_location_id'), 'booking_room_number' => array('data' => t('Room Number')), 'booking_room_singlebed' => array('data' => t('Single Bed')), 'booking_room_doublebed_p1' => array('data' => t('Double Bed Person 1')), 'booking_room_doublebed_p2' => array('data' => t('Double Bed Person 2')), 'booking_room_queenbed_p1' => array('data' => t('Queen Bed Person 1')), 'booking_room_queenbed_p2' => array('data' => t('Queen Bed Person 2')), ); $default_row = array(); $default_row['booking_room_location'] = ""; $default_row['booking_room_number'] = ""; $default_row['booking_room_singlebed'] = ""; $default_row['booking_room_doublebed_p1'] = ""; $default_row['booking_room_doublebed_p2'] = ""; $default_row['booking_room_queenbed_p1'] = ""; $default_row['booking_room_queenbed_p2'] = ""; foreach ($room_query as $data) { //load the existing bed mappings for this room $existing_beds = array(); for ($i = 1; $i <= 3; $i++) { foreach ($room_mapping as $mapping) { //check that the room id in the mapping table matches the room that we're currently adding to the table //and also the bed type matches the first dimension in the array if ($mapping->booking_roomid == $data->rid && $mapping->booking_room_bedtype == $i) { $existing_beds[$i][] = $mapping->booking_nodeid; } } } //watchdog('booking', "
Existing bed mappings:\n@info", array('@info' => print_r( $existing_beds, true))); //create a row that contains just the room location and number $row = _booking_clone_array($default_row); $row['booking_room_location'] = _booking_room_location_lookup($data->booking_room_location_id); $row['booking_room_number'] = $data->booking_room_number; $row['#attributes'] = array('id' => array("new-group-row")); $options[$counter++] = $row; //create an additional row for each single bed for ($i = 0; $i < $data->booking_room_singlebeds; $i++) { //retrieve the default value if one exists $default = (!empty($existing_beds[1][$i])) ? $existing_beds[1][$i] : 0; $row = _booking_clone_array($default_row); $row['booking_room_singlebed'] = array('data' => array( '#type' => 'select', '#options' => $attendee_select, '#name' => 'booking_room_singlebed[' . $data->rid . '][' . $i . ']', '#value' => $default, )); $options[$counter++] = $row; } //create an additional row for each double bed //$j is our counter that increments twice as fast as $i to cater for both beds $j = 0; for ($i = 0; $i < $data->booking_room_doublebeds; $i++) { $row = _booking_clone_array($default_row); $row['booking_room_doublebed_p1'] = array('data' => array( '#type' => 'select', '#options' => $attendee_select, '#name' => 'booking_room_doublebed_p1[' . $data->rid . '][' . $i . ']', '#value' => (!empty($existing_beds[2][$j])) ? $existing_beds[2][$j++] : 0, )); $row['booking_room_doublebed_p2'] = array('data' => array( '#type' => 'select', '#options' => $attendee_select, '#name' => 'booking_room_doublebed_p2[' . $data->rid . '][' . $i . ']', '#value' => (!empty($existing_beds[2][$j])) ? $existing_beds[2][$j++] : 0, )); $options[$counter++] = $row; } //create an additional row for each queen bed //$j is our counter that increments twice as fast as $i to cater for both beds $j = 0; for ($i = 1; $i <= $data->booking_room_queenbeds; $i++) { $row = _booking_clone_array($default_row); $row['booking_room_queenbed_p1'] = array('data' => array( '#type' => 'select', '#options' => $attendee_select, '#name' => 'booking_room_queenbed_p1[' . $data->rid . '][' . $i . ']', '#value' => (!empty($existing_beds[3][$j])) ? $existing_beds[3][$j++] : 0, )); $row['booking_room_queenbed_p2'] = array('data' => array( '#type' => 'select', '#options' => $attendee_select, '#name' => 'booking_room_queenbed_p2[' . $data->rid . '][' . $i . ']', '#value' => (!empty($existing_beds[3][$j])) ? $existing_beds[3][$j++] : 0, )); $options[$counter++] = $row; } } $form['table'] = array ( '#type' => 'tableselect', '#header' => $header, '#options' => $options, '#empty' => t('No rooms found for this room location id.'), ); //so we can access the dropdown elements $form['booking_room_singlebed'] = array( '#type' => 'value' ); $form['booking_room_queenbed_p1'] = array( '#type' => 'value' ); $form['booking_room_queenbed_p2'] = array( '#type' => 'value' ); $form['booking_room_doublebed_p1'] = array( '#type' => 'value' ); $form['booking_room_doublebed_p2'] = array( '#type' => 'value' ); $form['submit'] = array ( '#type' => 'submit', '#value' => t('Submit'), ); return array ( 'form' => $form, ); } /** * Process the submission for room assignment */ function booking_rooms_allocate_form_submit($form, &$form_state) { global $event; //query for existing room allocations $room_mapping_query = db_query("SELECT * FROM {booking_room_mapping} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); $room_mapping = $room_mapping_query->fetchAllAssoc('booking_nodeid'); $bed_inputs = array( 'booking_room_singlebed' => 1, 'booking_room_doublebed_p1' => 2, 'booking_room_doublebed_p2' => 2, 'booking_room_queenbed_p1' => 3, 'booking_room_queenbed_p2' => 3, ); //watchdog('booking', "
Room assignment submission:\n@info", array('@info' => print_r( $singlebed_ids, true))); //go through the different bed types foreach ($bed_inputs as $type => $type_id) { //watchdog('booking', "Bed type !type with id !id", array('!type' => $type, '!id' => $type_id)); //watchdog('booking', "
Room assignment submission:\n@info", array('@info' => print_r( $form_state['values'][$type], true))); //if this bed type wasn't defined in the form, skip it if (empty($form_state['values'][$type])) continue; //go through each room foreach($form_state['values'][$type] as $room => $value) { //go through each bed foreach ($value as $index => $nid) { //if this is actually a person to process if ($nid > 0) { if (empty($room_mapping[$nid])) { drupal_set_message(t('Assigning person id !id to a type !type bed in room id !room.', array('!id' => $nid, '!room' => $room, '!type' => $type_id))); $result = db_insert('booking_room_mapping') ->fields(array( 'booking_roomid' => $room, 'booking_eventid' => $event->eid, 'booking_nodeid' => $nid, 'booking_room_bedtype' => $type_id, )) ->execute(); } elseif ((!empty($room_mapping[$nid])) && $room_mapping[$nid]->booking_roomid != $room) { drupal_set_message(t('Changing person id !id from old room !oldroom to new room !room with type !type bed.', array('!id' => $nid, '!room' => $room, '!type' => $type_id, '!oldroom' => $room_mapping[$nid]->booking_roomid))); db_update('booking_room_mapping') ->fields(array( 'booking_roomid' => $room, 'booking_room_bedtype' => $type_id, )) ->condition('booking_eventid', $event->eid) ->condition('booking_nodeid', $nid) ->execute(); } else { //drupal_set_message(t('Person id !id already has some other room allocation.', // array('!id' => $nid, '!room' => $room, '!type' => $type_id))); } } //valid node id check } //each bed } //each room } //each bed type }