Added code to import study group data from CSV files

This commit is contained in:
2016-01-17 22:50:10 +11:00
parent a283320925
commit 7bbdf57238
3 changed files with 252 additions and 14 deletions

View File

@@ -8,9 +8,160 @@
/**
* Function for selecting who is available to lead or help sessions
* Function for calculating and assigning leaders and helpers to active study group sessions
*/
function booking_studygroups_leaders_calculate($node, &$form_state, $group_id) {
function booking_studygroups_leaders_calculate() {
global $event;
$calculation_messages = array();
//get a randomly ordered list of people to work with
$people = _booking_shuffle_assoc(_booking_studygroups_retrieve_eligible_people());
//get details of the study groups
$groups = _booking_studygroups_retrieve_groups();
//loop through the list of people
foreach ($people as $person)
{
$age = _booking_get_age_years($person->booking_dob);
$calculation_messages[] = t('Processing eligible Leader/helper with id !id and age !age',
array('!id' => $person->nid, '!age' => $age)
);
//if someone is 22 or over, they're a leader
if ($age >= 22)
{
$next_group_index = $groups[_booking_get_next_studygroup('leader_nid', $groups)];
$calculation_messages[] = t('Assigning id !id to study group !group as a leader',
array('!id' => $person->nid, '!group' => $next_group_index)
);
$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', "<pre>Study Group Leader/Helper calculation\n" . implode("\n", $calculation_messages) . "</pre>");
//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', "<pre>Study Group Element at index $i:\n@info</pre>", array('@info' => print_r( $group, true)));
//watchdog('booking_debug', "<pre>Study Group Leader NID at index $i:\n@info</pre>", 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_event_id', $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_event_id = :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', "<pre>Eligible Leaders/Helpers List:\n@info</pre>", 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', "<pre>Study Group Element:\n@info</pre>", 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 = -1;
$new_group->helper_nid = 0;
$new_group->reserve_nid = 0;
$new_group->processed = 0;
$groups[] = $new_group;
}
}
watchdog('booking', "<pre>Study Group Sessions:\n@info</pre>", array('@info' => print_r( $groups, true)));
return $groups;
}