diff --git a/booking.module b/booking.module index f11afe5..fb235a8 100644 --- a/booking.module +++ b/booking.module @@ -532,6 +532,23 @@ function booking_menu() { 'access arguments' => array('edit study groups'), //'type' => MENU_LOCAL_ACTION, ); + $items['admin/booking/studygroups/%/editleaders'] = array( + 'title' => 'Edit Study Group Leaders', + 'description' => 'Edit Study Group Leaders and Helpers', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_studygroup_leadhelp_edit_form', 3), + 'access arguments' => array('edit study groups'), + //'type' => MENU_LOCAL_ACTION, + ); + + //callback for autocomplete lookup + $items['booking/studygroups/autocomplete'] = array( + 'title' => 'Autocomplete for studygroup allocations', + 'page callback' => '_booking_studygroups_name_autocomplete', + 'access arguments' => array('edit study groups'), + 'type' => MENU_CALLBACK + ); + /* $items['admin/booking/studygroups/calculate'] = array( 'title' => 'Calculate Study Groups', diff --git a/booking.studygroup_leaders.inc b/booking.studygroup_leaders.inc index 678aad7..679b409 100644 --- a/booking.studygroup_leaders.inc +++ b/booking.studygroup_leaders.inc @@ -140,8 +140,6 @@ function _booking_studygroups_retrieve_eligible_people() { } - - /** * Function for */ @@ -178,4 +176,168 @@ function _booking_studygroups_retrieve_groups() { //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' => '