Make node_load more generalised

This commit is contained in:
2014-04-28 11:46:42 +10:00
parent 6e2abbc92a
commit 0ff5b531eb
3 changed files with 89 additions and 34 deletions

View File

@@ -1024,13 +1024,15 @@ function booking_form_submit($form, &$form_state) {
$form_state['redirect'] = array('confirm/' . $tempid); $form_state['redirect'] = array('confirm/' . $tempid);
} }
function booking_load($nodes) { /**
* Function to query the database for the complete object representing a registration
*
* @param $node_ids - a list of node IDs to query for
* @return list of objects
*/
function booking_load_query($node_ids = NULL, $fetchAssoc = FALSE)
{
global $event; global $event;
//watchdog('booking', 'Loading node with params: @info', array('@info' => var_export($nodes, TRUE)));
// note that $nodes is an array of object references, keyed by nid
// grab the data from our module tables
// without an array of field names, 'SELECT * FROM table_alias_name' is assumed
$query = db_select('booking_person', 'p'); $query = db_select('booking_person', 'p');
//perform an inner join //perform an inner join
@@ -1050,9 +1052,18 @@ function booking_load($nodes) {
'p.nid = s' . $i . '.booking_node_id and s' . $i . '.booking_studygroup_id = ' . $i); 'p.nid = s' . $i . '.booking_node_id and s' . $i . '.booking_studygroup_id = ' . $i);
} }
//filter the results and select the appropriate fields //filter the results either by specific nodes if passed as a parameter or by all nodes matching the event id
$query->condition('p.nid', array_keys($nodes), 'IN') if (! is_null($node_ids))
->fields('p') {
$query->condition('p.nid', $node_ids, 'IN');
}
else
{
$query->condition('p.booking_event_id', $event->eid, '=');
}
//add the fields we want
$query->fields('p')
->fields('t') ->fields('t')
->fields('pr', array('booking_price', 'booking_price_descrip','booking_late_price')); ->fields('pr', array('booking_price', 'booking_price_descrip','booking_late_price'));
@@ -1068,18 +1079,41 @@ function booking_load($nodes) {
//not looking after study groups so don't add all the extra fields //not looking after study groups so don't add all the extra fields
else else
{ {
//filter the results and select the appropriate fields //filter the results either by specific nodes if passed as a parameter or by all nodes matching the event id
$query->condition('p.nid', array_keys($nodes), 'IN') if (! is_null($node_ids))
->fields('p') {
$query->condition('p.nid', $node_ids, 'IN');
}
else
{
$query->condition('p.booking_event_id', $event->eid, '=');
}
//add the fields we want
$query->fields('p')
->fields('t') ->fields('t')
->fields('pr', array('booking_price', 'booking_price_descrip','booking_late_price')); ->fields('pr', array('booking_price', 'booking_price_descrip','booking_late_price'));
} }
//get the query result //get the query result
$result = $query->execute();
//watchdog('booking', 'Loading node via query: @info', array('@info' => $query->__toString())); if ($fetchAssoc == TRUE)
{
$result = $query->execute()->fetchAllAssoc('nid');
}
else
{
$result = $query->execute();
}
watchdog('booking', "<pre>Loading node query output:\n@info</pre>", array('@info' => print_r( $result, true)));
return $result;
}
function booking_load($nodes) {
global $event;
$result = booking_load_query(array_keys($nodes));
//add that data to the array of node references //add that data to the array of node references
foreach ($result as $record) foreach ($result as $record)

View File

@@ -434,9 +434,11 @@ function booking_csv_report() {
$result = $query->execute()->fetchAll(); $result = $query->execute()->fetchAll();
*/ */
/*
//pivot table based on http://anothermysqldba.blogspot.de/2013/06/pivot-tables-example-in-mysql.html //pivot table based on http://anothermysqldba.blogspot.de/2013/06/pivot-tables-example-in-mysql.html
$query = db_query("select distinct p.*, s1.booking_session_id as session1, s1.booking_is_leader as session1_leader, s1.booking_is_reserveleader as session1_reserveleader, s1.booking_is_helper as session1_helper, s2.booking_session_id as session2, s2.booking_is_leader as session2_leader, s2.booking_is_reserveleader as session2_reserveleader, s2.booking_is_helper as session2_helper, s3.booking_session_id as session3, s3.booking_is_leader as session3_leader, s3.booking_is_reserveleader as session3_reserveleader, s3.booking_is_helper as session3_helper, s4.booking_session_id as session4, s4.booking_is_leader as session4_leader, s4.booking_is_reserveleader as session4_reserveleader, s4.booking_is_helper as session4_helper, s5.booking_session_id as session5, s5.booking_is_leader as session5_leader, s5.booking_is_reserveleader as session5_reserveleader, s5.booking_is_helper as session5_helper, s6.booking_session_id as session6, s6.booking_is_leader as session6_leader, s6.booking_is_reserveleader as session6_reserveleader, s6.booking_is_helper as session6_helper, s7.booking_session_id as readinggroup, s7.booking_is_leader as readinggroup_leader, s7.booking_is_reserveleader as readinggroup_reserveleader, s7.booking_is_helper as readinggroup_helper, pr.booking_price, pr.booking_price_descrip from {booking_person} p $query = db_query("select distinct p.*, s1.booking_session_id as session1, s1.booking_is_leader as session1_leader, s1.booking_is_reserveleader as session1_reserveleader, s1.booking_is_helper as session1_helper, s2.booking_session_id as session2, s2.booking_is_leader as session2_leader, s2.booking_is_reserveleader as session2_reserveleader, s2.booking_is_helper as session2_helper, s3.booking_session_id as session3, s3.booking_is_leader as session3_leader, s3.booking_is_reserveleader as session3_reserveleader, s3.booking_is_helper as session3_helper, s4.booking_session_id as session4, s4.booking_is_leader as session4_leader, s4.booking_is_reserveleader as session4_reserveleader, s4.booking_is_helper as session4_helper, s5.booking_session_id as session5, s5.booking_is_leader as session5_leader, s5.booking_is_reserveleader as session5_reserveleader, s5.booking_is_helper as session5_helper, s6.booking_session_id as session6, s6.booking_is_leader as session6_leader, s6.booking_is_reserveleader as session6_reserveleader, s6.booking_is_helper as session6_helper, s7.booking_session_id as readinggroup, s7.booking_is_leader as readinggroup_leader, s7.booking_is_reserveleader as readinggroup_reserveleader, s7.booking_is_helper as readinggroup_helper, pr.booking_price, pr.booking_price_descrip, t.* from {booking_person} p
inner join {booking_price} pr on p.booking_payment_id = pr.pid inner join {booking_price} pr on p.booking_payment_id = pr.pid
left outer join {booking_travel} t on p.nid = t.booking_person_nid
left outer join {booking_studygroup_mapping} s1 on p.nid = s1.booking_node_id and s1.booking_studygroup_id = 1 left outer join {booking_studygroup_mapping} s1 on p.nid = s1.booking_node_id and s1.booking_studygroup_id = 1
left outer join {booking_studygroup_mapping} s2 on p.nid = s2.booking_node_id and s2.booking_studygroup_id = 2 left outer join {booking_studygroup_mapping} s2 on p.nid = s2.booking_node_id and s2.booking_studygroup_id = 2
left outer join {booking_studygroup_mapping} s3 on p.nid = s3.booking_node_id and s3.booking_studygroup_id = 3 left outer join {booking_studygroup_mapping} s3 on p.nid = s3.booking_node_id and s3.booking_studygroup_id = 3
@@ -447,6 +449,9 @@ function booking_csv_report() {
where p.booking_event_id = :eid ORDER BY p.nid", array('eid' => $event->eid)); where p.booking_event_id = :eid ORDER BY p.nid", array('eid' => $event->eid));
$result = $query->fetchAllAssoc('nid'); $result = $query->fetchAllAssoc('nid');
*/
$result = booking_load_query(NULL, TRUE);
//watchdog('booking', "CSV raw data: @info", array('@info' => var_export($result, TRUE))); //watchdog('booking', "CSV raw data: @info", array('@info' => var_export($result, TRUE)));

View File

@@ -986,10 +986,13 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
$rows = array(); $rows = array();
$last_session = ""; $last_session = "";
/*
//attach the custom css //attach the custom css
$form['#attached']['css'] = array( $form['#attached']['css'] = array(
drupal_get_path('module', 'booking') . '/booking.css', drupal_get_path('module', 'booking') . '/booking.css',
); );
*/
//verify that $group_id is a number //verify that $group_id is a number
if (! preg_match('/^[0-9]+$/', $group_id)) { if (! preg_match('/^[0-9]+$/', $group_id)) {
@@ -1011,11 +1014,10 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
} }
$header = array( $header = array(
'booking_session_id' => array('data' => t('Study Group Session'), 'field' => 'm.booking_session_id', 'sort' => 'asc'), 'booking_session_id' => array('data' => t('Study Group Session'), 'field' => 'm.booking_session_id'),
'booking_name' => array('data' => t('Name'), 'field' => 'p.booking_lastname'), 'booking_name' => array('data' => t('Name'), 'field' => 'p.booking_lastname', 'sort' => 'asc'),
'booking_is_leader' => array('data' => t('Leader?'), 'field' => 'm.booking_is_leader'), 'booking_mobilenum' => array('data' => t('Mobile Number'), 'field' => 'p.booking_mobile'),
'booking_is_helper' => array('data' => t('Helper?'), 'field' => 'm.booking_is_helper'), 'booking_studygroup_role' => array('data' => t('Role')),
'booking_is_reserveleader' => array('data' => t('Reserve Leader?'), 'field' => 'm.booking_is_reserveleader'),
); );
$query = db_select('booking_person', 'p'); $query = db_select('booking_person', 'p');
@@ -1024,22 +1026,35 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
$db_and->condition('p.booking_event_id', $event->eid, '='); $db_and->condition('p.booking_event_id', $event->eid, '=');
$db_and->condition('m.booking_studygroup_id', $group_id, '='); $db_and->condition('m.booking_studygroup_id', $group_id, '=');
$query->condition($db_and); $query->condition($db_and);
$query->fields('p')->fields('m')->orderBy('p.booking_lastname', 'ASC'); $query->fields('p')->fields('m');
$result = $query->execute(); $table_sort = $query->extend('TableSort')->orderbyHeader($header);
$result = $table_sort->execute();
//$result = $query->execute();
//watchdog('booking', 'Study groups raw data: @info', array ('@info' => var_export($result, TRUE))); //watchdog('booking', 'Study groups raw data: @info', array ('@info' => var_export($result, TRUE)));
foreach($result as $data) foreach($result as $data)
{ {
$class = ""; $class = "";
$role = "";
//apply theme as required //apply theme as required
if ($data->booking_is_leader == 'Y') if ($data->booking_is_leader == 'Y')
{
$class = "leader-row"; $class = "leader-row";
$role = "Leader";
}
elseif ($data->booking_is_helper == 'Y') elseif ($data->booking_is_helper == 'Y')
{
$class = "helper-row"; $class = "helper-row";
$role = "Helper";
}
elseif ($data->booking_is_reserveleader == 'Y') elseif ($data->booking_is_reserveleader == 'Y')
{
$class = "helper-row"; $class = "helper-row";
$role = "Reserve Leader";
}
else else
$class = "normal-row"; $class = "normal-row";
@@ -1047,12 +1062,10 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
'data' => array( 'data' => array(
$data->booking_session_id, $data->booking_session_id,
$data->booking_firstname . " " . $data->booking_lastname, $data->booking_firstname . " " . $data->booking_lastname,
$data->booking_is_leader == 'Y' ? 'Yes' : 'No', $data->booking_mobile,
$data->booking_is_helper == 'Y' ? 'Yes' : 'No', $role,
$data->booking_is_reserveleader == 'Y' ? 'Yes' : 'No',
), ),
'class' => $class, 'class' => array($class),
'no_striping' => TRUE,
); );
} }
@@ -1066,7 +1079,7 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
//'#attributes' => array('id' => 'sort-table'), //'#attributes' => array('id' => 'sort-table'),
); );
*/ */
return array ( $result = array (
'first_para' => array ( 'first_para' => array (
'#type' => 'markup', '#type' => 'markup',
'#markup' => $prefix, '#markup' => $prefix,
@@ -1075,10 +1088,13 @@ function booking_studygroups_printview_form($node, &$form_state, $group_id) {
'#theme' => 'table', '#theme' => 'table',
'#header' => $header, '#header' => $header,
'#rows' => $rows, '#rows' => $rows,
'#sticky' => FALSE, '#attributes' => array('id' => 'sort-table'),
//'#sticky' => FALSE,
) )
); );
watchdog('booking', "<pre>Group printable format:\n@info</pre>", array('@info' => print_r( $result, true)));
return $result;
} }
/** /**