array ( '#type' => 'markup', '#markup' => "
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) { 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 attendees found.'), ); //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; $counter = 0; $checkboxes = $form_state['values']['table']; //$singlebed_ids = $form_state['values']['booking_room_singlebed']; $values = $form_state['input']; $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 $key => $value) { //go through each bed foreach ($value as $index => $nid) { //if this is actually a person to process if ($nid > 0) { drupal_set_message(t('Assigning person id !id to a !type bed in room id !room.', array('!id' => $nid, '!room' => $key, '!type' => $type_id))); //TODO: Check there isn't already a mapping for this person $result = db_insert('booking_room_mapping') ->fields(array( 'booking_roomid' => $key, 'booking_eventid' => $event->eid, 'booking_nodeid' => $nid, 'booking_room_bedtype' => $type_id, )) ->execute(); } } //each bed } //each room } //each bed type }