booking_dob); $calculation_messages[] = t('Processing eligible Leader/helper with id !id and age !age', array('!id' => $person->nid, '!age' => $age) ); foreach ($groups as $studygroup) { //watchdog('booking_debug', "
Study Group Element\n@info", array('@info' => print_r( $studygroup, true))); if ($age >= 22 && $studygroup->leader_nid == 0) { $studygroup->leader_nid = $person->nid; $calculation_messages[] = t("Study Group Assignment as leader for nid !nid to group !descrip at session id !sid", array('!nid' => $person->nid, '!descrip' => $studygroup->booking_studygroup_descrip, '!sid' => $studygroup->session_id, '@info' => print_r( $studygroup, true))); break; } elseif ($age < 22 && $studygroup->helper_nid == 0) { $studygroup->helper_nid = $person->nid; $calculation_messages[] = t("Study Group Assignment as helper for nid !nid to group !descrip at session id !sid", array('!nid' => $person->nid, '!descrip' => $studygroup->booking_studygroup_descrip, '!sid' => $studygroup->session_id, '@info' => print_r( $studygroup, true))); break; } } //if someone is 22 or over, they're a leader //$next_group_index = $groups[_booking_get_next_studygroup('leader_nid', $groups)]; //$groups[$next_group_index]->leader_nid = $person->nid; //if someone is under 22, they're a helper //left over people become a reserve leader } watchdog('booking', "
Study Group Leader/Helper calculation\n" . implode("\n", $calculation_messages) . ""); //input the data to the database } function _booking_get_next_studygroup($type, $studygroups) { $count = count($studygroups) - 1; for ($i = 0; $i < $count; $i++) { $group = $studygroups[$i]; $leader = $group->leader_nid; //watchdog('booking_debug', "
Study Group Element at index $i:\n@info", array('@info' => print_r( $group, true))); //watchdog('booking_debug', "
Study Group Leader NID at index $i:\n@info", array('@info' => var_dump($group))); if ($leader == 0) { return $i; } } } /** * Function for */ function _booking_studygroups_retrieve_eligible_people() { global $event; $attendees = array(); //select males that are booked in $query = db_select('booking_person', 'p'); $db_and = db_and(); $db_and->condition('p.booking_eventid', $event->eid, '='); $db_and->condition('p.booking_gender', 'M', '='); $db_and->condition('p.booking_status', 1, '='); $query->condition($db_and); $query->fields('p'); $bookedin_result = $query->execute(); //iterate over the attendee associative array and add some fields foreach ($bookedin_result as $person) { $person->processed = 0; $person->leading = array(); $person->helping = array(); $person->reserve_leading = array(); $attendees[] = $person; } //select males that are on the waiting list up to position number 100 $result2 = db_query('SELECT DISTINCT nid, booking_firstname, booking_lastname, booking_state, booking_readinggroup, booking_country, booking_status, booking_dob, booking_gender FROM ( SELECT p.nid, p.booking_firstname, p.booking_lastname, p.booking_state, p.booking_country, p.booking_readinggroup, pay.booking_payment_date, p.booking_status, p.booking_gender, p.booking_dob FROM {booking_person} p, {booking_payment} pay WHERE booking_eventid = :eid and p.nid = pay.booking_person_nid and ( booking_status = 2 or booking_status = 4) LIMIT 100 ) AS booking WHERE booking_gender = \'M\' ORDER BY booking_status, booking_payment_date', array(':eid' => $event->eid)); //iterate over the attendee associative array and add some fields foreach ($result2 as $person) { $person->processed = 0; $person->leading = array(); $person->helping = array(); $person->reserve_leading = array(); $attendees[] = $person; } //watchdog('booking', "
Eligible Leaders/Helpers List:\n@info", array('@info' => print_r( $attendees, true))); return $attendees; } /** * Function for */ function _booking_studygroups_retrieve_groups() { global $event; $groups = array(); //select all the study groups for this event id $studygroup = db_query("SELECT * FROM {booking_studygroup_list} WHERE booking_eventid = :eid", array(':eid' => $event->eid)); $group_mapping = $studygroup->fetchAllAssoc('sid'); //select the number of study group sessions //assume they all have the same number of sessions //$num_sessions = $studygroup->booking_num_group_sessions; foreach ($group_mapping as $group) { //watchdog('booking_debug', "
Study Group Element:\n@info", array('@info' => print_r( $group, true))); for ($i = 1; $i <= 16; $i++) { $new_group = clone $group; $new_group->session_id = $i; $new_group->leader_nid = 0; $new_group->helper_nid = 0; $new_group->reserve_nid = 0; $new_group->processed = 0; $groups[] = $new_group; } } //watchdog('booking', "
Study Group Sessions:\n@info", array('@info' => print_r( $groups, true))); return $groups; } /** * autocomplete helper to look up names for room allocations * based on https://www.drupal.org/node/854216 * $string = string for search */ function _booking_studygroups_name_autocomplete($string) { global $event; $matches = array(); $query = db_select('booking_person', 'p') ->fields('p', array('nid', 'booking_firstname', 'booking_lastname')); $db_or = db_or()->condition('p.booking_lastname', '%' . db_like($string) . '%', 'LIKE')->condition('p.booking_firstname', '%' . db_like($string) . '%', 'LIKE'); $db_and = db_and()->condition($db_or)->condition('p.booking_eventid', $event->eid, '='); $result = $query->condition($db_and) ->execute(); // save the query to matches foreach ($result as $row) { $name = $row->booking_lastname . ', ' . $row->booking_firstname . ' [' . $row->nid . ']'; $matches[$name] = $name; } // Return the result to the form in json drupal_json_output($matches); } /** * Function to allow admin to edit leaders and helpers for a study group */ function booking_studygroup_leadhelp_edit_form($node, &$form_state, $group_id) { global $event; //verify that $group_id is a number if (! preg_match('/^[0-9]+$/', $group_id)) { drupal_set_message("Error: Invalid study group ID '" . $group_id . "' supplied. Unable to edit group leaders and helpers.", 'error', FALSE); drupal_goto('admin/booking/studygroups'); return ""; } //try to select the study group for this $group_id $studygroup = db_query("SELECT * FROM {booking_studygroup_list} WHERE sid = :sid", array(':sid' => $group_id)) ->fetchObject(); if (! $studygroup) { drupal_set_message("Error: Could not find matching study group ID. Unable to edit leaders/helpers.", 'error', FALSE); drupal_goto('admin/booking/studygroups'); return ""; } $prefix = t("
Edit leaders and helpers for this group.
", array('!descrip' => $studygroup->booking_studygroup_descrip)); //define the table header $header = array ( 'sid' => array('data' => t('Study Group Session ID'), 'field' => 'sid'), 'booking_assign_leader' => array('data' => t('Leader')), 'booking_assign_helper' => array('data' => t('Helper')), 'booking_assign_reserveleader' => array('data' => t('Reserve Leader')), ); //attach the custom css $form['#attached']['css'] = array( drupal_get_path('module', 'booking') . '/booking.css', ); //create the container element for the whole table $form['studygroups'] = array( '#prefix' => '