From 54ec39cbbde6376ae4f0460c570fd4336ae4ba6d Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Mon, 17 Nov 2014 18:42:50 +1100 Subject: [PATCH] Tidy up studygroup definition form --- booking.install | 10 +- booking.module | 35 ++++-- booking.studygroups.inc | 33 ------ booking.studygroups_admin.inc | 211 ++++++++++++++++++++++++++-------- 4 files changed, 195 insertions(+), 94 deletions(-) diff --git a/booking.install b/booking.install index 220be5a..2b341af 100644 --- a/booking.install +++ b/booking.install @@ -175,7 +175,7 @@ function booking_update_7203() { * Pre-populate the study group sessions table */ function booking_update_7204() { - +/* $result = db_insert('booking_studygroup_list') ->fields(array( 'booking_eventid' => 2, @@ -456,6 +456,14 @@ function booking_update_7224() { db_add_field('booking_person', 'booking_rtrnflight_destination_ts', $date_spec); } +/** +* Add reading group flag to study group table +*/ +function booking_update_7225() { + $spec = array('type' => 'varchar', 'length' => '1', 'not null' => FALSE); + db_add_field('booking_studygroup_list', 'booking_is_readinggroup', $spec); +} + /** * Implementation of hook_install(). diff --git a/booking.module b/booking.module index 2ed3c4a..9f416bd 100644 --- a/booking.module +++ b/booking.module @@ -363,13 +363,22 @@ function booking_menu() { ); $items['admin/booking/studygroups/add'] = array( - 'title' => 'Add Study Group', - 'description' => 'Add Study Group definition', + 'title' => 'Add Study Group Definition', + 'description' => 'Add Study Group Definition', 'page callback' => 'drupal_get_form', 'page arguments' => array('booking_studygroups_define_form', true), 'access arguments' => array("edit study groups"), 'type' => MENU_LOCAL_ACTION, ); + + $items['admin/booking/studygroups/%/edit'] = array( + 'title' => 'Edit Study Group Definition', + 'description' => 'Edit Study Group Definition', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_studygroups_define_form', false, 3), + 'access arguments' => array('edit study groups'), + //'type' => MENU_NORMAL_ITEM, + ); $items['admin/booking/studygroups/%/view'] = array( 'title' => 'View Study Group', @@ -380,15 +389,6 @@ function booking_menu() { //'type' => MENU_NORMAL_ITEM, ); - $items['admin/booking/%/edit-studygroup'] = array( - 'title' => 'Edit Study Group Allocation', - 'description' => 'Manually Update Study Group memberships', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('booking_studygroups_edit_form', 2), - 'access arguments' => array('edit study groups'), - 'type' => MENU_CALLBACK, - ); - $items['admin/booking/studygroups/%/view/print'] = array( 'title' => 'Print Study Group', 'description' => 'Print Study Group memberships', @@ -432,7 +432,18 @@ function booking_menu() { 'page arguments' => array('booking_studygroups_process_colours'), 'access arguments' => array('edit study groups'), 'type' => MENU_LOCAL_ACTION, - ); + ); + + + $items['admin/booking/%/edit-studygroup-membership'] = array( + 'title' => 'Edit Study Group Allocation', + 'description' => 'Manually Update Study Group memberships', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('booking_studygroups_edit_form', 2), + 'access arguments' => array('edit study groups'), + 'type' => MENU_CALLBACK, + ); + } //configure rooms diff --git a/booking.studygroups.inc b/booking.studygroups.inc index ec91fa0..5f4544c 100644 --- a/booking.studygroups.inc +++ b/booking.studygroups.inc @@ -5,39 +5,6 @@ * Admin pages for calculating study group session membership */ -/** - * Function for listing the study groups and links to view each one - */ -function booking_studygroups_view_summary() { - - global $event; - $output = ""; - $header = array('Study Group', 'Session Count', 'View', 'Select Leaders', 'Auto-Update'); - $attributes = array('style' => 'max-width:50%'); - - //get study groups - $query = db_select('booking_studygroup_list', 's') - ->fields('s') - ->condition('s.booking_eventid', $event->eid, '='); - $result = $query->execute(); - - foreach ($result as $group) { - $rows[] = array( - $group->booking_studygroup_descrip, - $group->booking_num_group_sessions, - l(t('View', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/view', array('!id' => $group->sid))), - l(t('Edit Leaders/Helpers', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/selectleaders', array('!id' => $group->sid))), - l(t('Auto Update', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/update', array('!id' => $group->sid))), - ); - } - - //output everything - $output .= t("

!event Study Groups

", array('!event' => $event->booking_eventname)); - $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes)); - - return $output; - -} /** * Function for selecting who is available to lead or help sessions diff --git a/booking.studygroups_admin.inc b/booking.studygroups_admin.inc index 79cb6bd..50c11b4 100644 --- a/booking.studygroups_admin.inc +++ b/booking.studygroups_admin.inc @@ -5,6 +5,43 @@ * Admin pages for defining study groups */ +/** + * Function for listing the study groups and links to view each one + */ +function booking_studygroups_view_summary() { + + global $event; + $output = ""; + $header = array('Study Group', 'Session Count', 'View Membership', 'Compute Membership', 'Select Leaders', 'Edit Definition'); + //$attributes = array('style' => 'max-width:50%'); + $attributes = array(); + + //get study groups + $query = db_select('booking_studygroup_list', 's') + ->fields('s') + ->condition('s.booking_eventid', $event->eid, '='); + $result = $query->execute(); + + foreach ($result as $group) { + $rows[] = array( + $group->booking_studygroup_descrip, + $group->booking_num_group_sessions, + l(t('Current Membership', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/view', array('!id' => $group->sid))), + l(t('Compute Membership Update', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/update', array('!id' => $group->sid))), + l(t('Edit Leaders/Helpers', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/selectleaders', array('!id' => $group->sid))), + l(t('Edit Group Definition', array('!id' => $group->sid)), t('admin/booking/studygroups/!id/edit', array('!id' => $group->sid))), + + ); + } + + //output everything + $output .= t("

!event Study Groups

", array('!event' => $event->booking_eventname)); + $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes)); + + return $output; + +} + /** * Form to view or add a studygroup definition */ @@ -15,11 +52,13 @@ function booking_studygroups_define_form($node, &$form_state, $create, $editid = if ($create == true) { + drupal_set_title('Add Study Group'); $data = $node; watchdog('booking', 'Creating new study group: @info', array ('@info' => var_export($node, TRUE))); } else { + drupal_set_title('Edit Study Group'); //verify that $editid is a number if (! preg_match('/^[0-9]+$/', $editid)) { drupal_set_message("Error: Invalid study group ID supplied. Unable to edit study group definition.", 'error', FALSE); @@ -28,7 +67,7 @@ function booking_studygroups_define_form($node, &$form_state, $create, $editid = } $data = db_query("SELECT * FROM {booking_studygroup_list} WHERE sid = :id", - array(':sid' => $editid)) + array(':id' => $editid)) ->fetchObject(); $prefix = t("

Update the "!event " study group definition.

", array('!event' => $data->booking_studygroup_descrip)); //add this to the form in a hidden field so we can update the right price @@ -39,58 +78,134 @@ function booking_studygroups_define_form($node, &$form_state, $create, $editid = watchdog('booking', 'Editing study group definition: @info', array ('@info' => var_export($data, TRUE))); } - - $form['booking_studygroup_descrip'] = array ( - '#type' => 'textfield', - '#title' => t('Description of this study group (eg Monday)'), - '#size' => 60, - '#maxlength' => 150, - '#required' => TRUE, - '#default_value' => !empty($data->booking_studygroup_descrip) ? $data->booking_studygroup_descrip : '', - ); - $form['booking_num_group_sessions'] = array ( - '#type' => 'textfield', - '#title' => t('The number of sessions this study group will have'), - '#size' => 5, - '#maxlength' => 10, - '#required' => TRUE, - '#default_value' => !empty($data->booking_num_group_sessions) ? $data->booking_num_group_sessions : '', - ); - $form['booking_is_readinggroup'] = array ( - '#type' => 'radios', - '#title' => t('Reading group?'), - '#description' => t('Select whether this study group definition is for a reading group. Leave as No unless you want team colours associated with this group'), - '#options' => array (0 => t('No'), t('Yes')), - '#default_value' => !empty($data->booking_is_readinggroup) ? $data->booking_is_readinggroup : NULL, - ); - - if ($create == true) + if(!isset($form_state['storage']['confirm'])) { - $form['submit'] = array - ( - '#type' => 'submit', - '#value' => t('Create'), + $form['booking_studygroup_descrip'] = array ( + '#type' => 'textfield', + '#title' => t('Description of this study group (eg Monday)'), + '#size' => 60, + '#maxlength' => 150, + '#required' => TRUE, + '#default_value' => !empty($data->booking_studygroup_descrip) ? $data->booking_studygroup_descrip : '', ); - } else { - $form['Update'] = array - ( - '#type' => 'submit', - '#value' => t('Update'), - ); - $form['Delete'] = array - ( - '#type' => 'submit', - '#value' => t('Delete'), + + $form['booking_num_group_sessions'] = array ( + '#type' => 'textfield', + '#title' => t('The number of sessions this study group will have'), + '#size' => 5, + '#maxlength' => 10, + '#required' => TRUE, + '#default_value' => !empty($data->booking_num_group_sessions) ? $data->booking_num_group_sessions : '', + ); + + $form['booking_is_readinggroup'] = array ( + '#type' => 'radios', + '#title' => t('Reading group?'), + '#description' => t('Select whether this study group definition is for a reading group. Leave as No unless you want team colours associated with this group'), + '#options' => array (0 => t('No'), t('Yes')), + '#default_value' => !empty($data->booking_is_readinggroup) ? $data->booking_is_readinggroup : NULL, + ); + + if ($create == true) + { + $form['submit'] = array + ( + '#type' => 'submit', + '#value' => t('Create Study Group'), + ); + } else { + $form['Update'] = array + ( + '#type' => 'submit', + '#value' => t('Update Study Group'), + ); + $form['Delete'] = array + ( + '#type' => 'submit', + '#value' => t("Delete Study Group Definition"), + ); + } + + return array ( + 'first_para' => array ( + '#type' => 'markup', + '#markup' => $prefix, + ), + 'form' => $form, ); } + //confirm delete + else + { + return confirm_form($form, "Are you sure you wish to delete studygroup definition with id " . $editid . "?", + current_path(), NULL, "Delete Study Group Definition"); + } - return array ( - 'first_para' => array ( - '#type' => 'markup', - '#markup' => $prefix, - ), - 'form' => $form, - ); +} + + +function booking_studygroups_define_form_submit($form, &$form_state) { + + global $event; + $values = $form_state['input']; + $redirect_path = array('admin/booking/studygroups'); + + //watchdog('booking', 'Checkboxes when setting buttons: @info', array ('@info' => var_export($checkboxes, TRUE))); + if ($form_state['values']['op'] == 'Create Study Group') + { + db_insert('booking_studygroup_list') + ->fields(array( + 'booking_eventid' => $event->eid, + 'booking_studygroup_descrip' => $values['booking_studygroup_descrip'], + 'booking_num_group_sessions' => $values['booking_num_group_sessions'], + 'booking_is_readinggroup' => $values['booking_is_readinggroup'] == 1 ? 'Y' : 'N', + )) + ->execute(); + } + //if we're deleting, add the confirmation to the form if it hasn't been defined yet + elseif($form_state['values']['op'] == "Delete Study Group Definition" && (!isset($form_state['storage']['confirm']))) + { + watchdog('booking', "
Studygroup deletion confirmation being set:\n@info
", array('@info' => print_r( $form_state, true))); + $form_state['storage']['confirm'] = TRUE; + $form_state['rebuild'] = TRUE; + } + elseif ($form_state['values']['op'] == 'Delete Study Group Definition') + { + //verify that booking_pid is a number + if (! preg_match('/^[0-9]+$/', $values['booking_sid'])) { + drupal_set_message("Error: Invalid studygroup ID supplied. Unable to delete entry.", 'error', FALSE); + return ""; + } + + //TODO: Confirmation + //return confirm_form($form, "Really delete price?", 'admin/config/booking/prices'); + + $num_deleted = db_delete('booking_studygroup_list') + ->condition('sid', $values['booking_sid']) + ->execute(); + } + elseif ($form_state['values']['op'] == 'Update Study Group') + { + + //verify that booking_sid is a number + if (! preg_match('/^[0-9]+$/', $values['booking_sid'])) { + drupal_set_message("Error: Invalid studygroup ID supplied. Unable to update study group.", 'error', FALSE); + return ""; + } + + //update the study group + db_update('booking_studygroup_list') + ->fields(array ( + 'booking_eventid' => $event->eid, + 'booking_studygroup_descrip' => $values['booking_studygroup_descrip'], + 'booking_num_group_sessions' => $values['booking_num_group_sessions'], + 'booking_is_readinggroup' => $values['booking_is_readinggroup'] == 1 ? 'Y' : 'N', + )) + ->condition('sid', $values['booking_sid']) + ->execute(); + } + + $form_state['redirect'] = $redirect_path; } \ No newline at end of file