!link
", // array ('!link' => l('Add New Variety Timeslot', 'admin/config/booking/variety/create'))); $header = array ( 'tid' => t('Event ID'), 'booking_variety_time_descrip' => t('Description'), 'booking_variety_status' => t('Status'), 'booking_variety_start' => t('Timeslot Start'), 'booking_variety_end' => t('Timeslot End'), 'variety_edit' => t('Edit Timeslot'), 'variety_session_list' => t('List Sessions'), 'variety_session_add' => t('Add Session'), 'variety_session_csv' => t('CSV Report'), ); $result = db_query("SELECT * from {booking_variety_timeslots}"); foreach($result as $data) { $options[$data->tid] = array ( 'tid' => $data->tid, 'booking_variety_time_descrip' => $data->booking_variety_time_descrip, 'booking_variety_status' => $data->booking_variety_status, 'booking_variety_start' => date("Y-m-d H:i", $data->booking_variety_start), 'booking_variety_end' => date("Y-m-d H:i", $data->booking_variety_end), 'variety_edit' => l('Edit Timeslot', t('admin/config/booking/variety/!tid/edit', array('!tid' => $data->tid))), 'variety_session_list' => l('List Sessions', t('admin/config/booking/variety/!tid/session/list', array('!tid' => $data->tid))), 'variety_session_add' => l('Add Session', t('admin/config/booking/variety/!tid/session/create', array('!tid' => $data->tid))), 'variety_session_csv' => l('CSV Report', t('admin/config/booking/variety/!tid/csv', array('!tid' => $data->tid))), ); } $form['table'] = array ( '#type' => 'tableselect', '#header' => $header, '#options' => $options, '#multiple' => false, ); return array ( 'form' => $form, ); } /* function booking_variety_admin_submit($form, &$form_state) { } */ function booking_variety_timeslot_form($node, &$form_state, $create, $editid = 0) { global $event; $form = array (); $prefix = "Add a new variety session timeslot for the bookings module.
"; if ($create == true) { $data = $node; } else { //verify that $editid is a number if (! preg_match('/^[0-9]+$/', $editid)) { drupal_set_message("Error: Invalid variety ID supplied. Unable to update variety session information.", 'error', FALSE); drupal_goto('admin/config/booking/variety'); return ""; } $data = db_select ('booking_variety_timeslots', 'v') ->condition('v.tid', $editid, '=') ->fields('v') ->execute() ->fetchObject(); $prefix = t("Update the !event variety session details.
", array('!event' => $event->booking_eventname)); //add this to the form in a hidden field so we can update the right event $form['tid'] = array ( '#type' => 'hidden', '#value' => $editid, ); } $form['booking_variety_time_descrip'] = array ( '#type' => 'textfield', '#title' => t('The name of this variety session timeslot'), '#size' => 60, '#maxlength' => 150, '#required' => TRUE, '#default_value' => !empty($data->booking_variety_time_descrip) ? $data->booking_variety_time_descrip : '', ); $form['booking_variety_status'] = array( '#type' => 'checkbox', '#title' => t('Make this variety session timeslot active'), '#default_value' => !empty($data->booking_variety_status) ? $data->booking_variety_status : '', ); $form['booking_variety_start'] = array( '#type' => 'date_select', '#title' => t('When will this variety session start'), '#default_value' => empty($data->booking_variety_start) ? date("Y-m-d H:i:s") : date("Y-m-d H:i:s", $data->booking_variety_start), '#date_format' => 'd/m/Y H:i', '#date_label_position' => 'within', '#date_year_range' => '0:+5' ); $form['booking_variety_end'] = array( '#type' => 'date_select', '#title' => t('When will this variety session end?'), '#default_value' => empty($data->booking_variety_end) ? date("Y-m-d H:i:s") : date("Y-m-d H:i:s", $data->booking_variety_end), '#date_format' => 'd/m/Y H:i', '#date_label_position' => 'within', '#date_year_range' => '0:+5' ); if ($create == true) { $form['submit'] = array ( '#type' => 'submit', '#value' => t('Create'), ); } else { $form['Update'] = array ( '#type' => 'submit', '#value' => t('Update'), ); $form['Delete'] = array ( '#type' => 'submit', '#value' => t('Delete'), ); } return array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'form' => $form, ); } function booking_variety_timeslot_form_submit($form, &$form_state) { global $event; $values = $form_state['input']; if ($form_state['values']['op'] == 'Create') { db_insert('booking_variety_timeslots') ->fields(array( 'booking_eventid' => $event->eid, 'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0, 'booking_variety_time_descrip' => $values['booking_variety_time_descrip'], 'booking_variety_start' => _datetime_array_to_ts($values['booking_variety_start']), 'booking_variety_end' => _datetime_array_to_ts($values['booking_variety_end']), )) ->execute(); } elseif ($form_state['values']['op'] == 'Delete') { //verify that tid is a number if (! preg_match('/^[0-9]+$/', $values['tid'])) { drupal_set_message("Error: Invalid variety timeslot ID supplied. Unable to delete entry.", 'error', FALSE); return ""; } $num_deleted = db_delete('booking_variety_timeslots') ->condition('tid', $values['tid']) ->execute(); $message = t("Successfully deleted !num row(s), corresponding to variety session timeslot '!desc'", array('!num' => $num_deleted, '!desc' => $values['booking_variety_time_descrip'])); drupal_set_message($message, $type = 'status'); } else { //verify that booking_eid is a number if (! preg_match('/^[0-9]+$/', $values['tid'])) { drupal_set_message("Error: Invalid variety session timeslot ID supplied. Unable to update entry.", 'error', FALSE); return ""; } //update the event db_update('booking_variety_timeslots') ->fields(array ( 'booking_eventid' => $event->eid, 'booking_variety_time_descrip' => $values['booking_variety_time_descrip'], 'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0, 'booking_variety_start' => _datetime_array_to_ts($values['booking_variety_start']), 'booking_variety_end' => _datetime_array_to_ts($values['booking_variety_end']), )) ->condition('tid', $values['tid']) ->execute(); } $form_state['redirect'] = array('admin/config/booking/variety'); } function booking_variety_create_session_form($node, &$form_state, $timeslot_id = 0) { global $event; $form = array (); $prefix = "Add a new variety session to the specified variety session timeslot for the bookings module.
"; $data = $node; //verify that $editid is a number if (! preg_match('/^[0-9]+$/', $timeslot_id)) { drupal_set_message("Error: Invalid variety ID supplied. Unable to update variety session information.", 'error', FALSE); drupal_goto('admin/config/booking/variety'); return ""; } /* $data = db_select ('booking_variety_timeslots', 'v') ->condition('v.tid', $editid, '=') ->fields('v') ->execute() ->fetchObject(); */ //add this to the form in a hidden field so we can update the right event $form['tid'] = array ( '#type' => 'hidden', '#value' => $timeslot_id, ); $form['booking_variety_descrip'] = array ( '#type' => 'textfield', '#title' => t('The name of the variety session to add to this timeslot'), '#size' => 60, '#maxlength' => 150, '#required' => TRUE, '#default_value' => !empty($data->booking_variety_descrip) ? $data->booking_variety_descrip : '', ); $form['booking_variety_status'] = array( '#type' => 'checkbox', '#title' => t('Make this variety session active?'), '#default_value' => !empty($data->booking_variety_status) ? $data->booking_variety_status : '', ); $form['booking_variety_maxsize'] = array ( '#type' => 'textfield', '#title' => t('The maximum number of people permitted in this variety session'), '#size' => 5, '#maxlength' => 5, '#required' => TRUE, '#default_value' => !empty($data->booking_variety_maxsize) ? $data->booking_variety_maxsize : '0', ); $form['submit'] = array ( '#type' => 'submit', '#value' => t('Create'), ); return array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'form' => $form, ); } function booking_variety_create_session_form_submit($form, &$form_state) { global $event; $values = $form_state['input']; db_insert('booking_variety_sessions') ->fields(array( 'booking_eventid' => $event->eid, 'booking_variety_timeslot_id' => $values['tid'], 'booking_variety_status' => $values['booking_variety_status'] == 1 ? 1 : 0, 'booking_variety_descrip' => $values['booking_variety_descrip'], 'booking_variety_maxsize' => $values['booking_variety_maxsize'], 'booking_variety_regncount' => 0, )) ->execute(); $form_state['redirect'] = array('admin/config/booking/variety'); } function booking_variety_list_session_form($node, &$form_state, $timeslot_id = 0) { global $event; $form = array (); $options = array (); $data = $node; //verify that $editid is a number if (! preg_match('/^[0-9]+$/', $timeslot_id)) { drupal_set_message("Error: Invalid variety ID supplied. Unable to select variety session information.", 'error', FALSE); drupal_goto('admin/config/booking/variety'); return ""; } $prefix = t("!link
", array ('!link' => l('Add New Variety Session', "admin/config/booking/variety/$timeslot_id/session/create"))); $query = db_select ('booking_variety_sessions', 'v'); $query->join('booking_variety_timeslots', 't', 'v.booking_variety_timeslot_id = t.tid'); $query->condition('v.booking_variety_timeslot_id', $timeslot_id, '=') ->fields('v') ->fields('t', array('booking_variety_time_descrip')); $result = $query->execute(); //watchdog('booking', 'Variety session query: @info', array ('@info' => (string)$query)); $header = array ( 'variety_timeslot' => t('Variety Timeslot'), 'booking_variety_descrip' => t('Variety Session Description'), 'booking_variety_status' => t('Status'), 'booking_variety_maxsize' => t('Maximum Capacity'), 'booking_variety_regncount' => t('Current Registration Count'), 'variety_edit' => t('Edit Session') ); foreach($result as $data) { $options[$data->vid] = array ( 'variety_timeslot' => $data->booking_variety_time_descrip, 'booking_variety_descrip' => $data->booking_variety_descrip, 'booking_variety_status' => $data->booking_variety_status == 1 ? 'Active' : 'Inactive', 'booking_variety_maxsize' => $data->booking_variety_maxsize, 'booking_variety_regncount' => $data->booking_variety_regncount, 'variety_edit' => l('Edit Session', t('admin/config/booking/variety/session/!vid/edit', array('!vid' => $data->vid))), ); } $form['table'] = array ( '#type' => 'tableselect', '#header' => $header, '#options' => $options, '#multiple' => false, ); return array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'form' => $form, ); } function booking_variety_edit_session_form() { } /** * Function to generate a CSV file listing the session membership for the specified variety session timeslot */ function booking_varietysessions_csv_report($timeslot_id) { global $event; $data = array(); //verify that $group_id is a number if (! preg_match('/^[0-9]+$/', $timeslot_id)) { drupal_set_message("Error: Invalid variety session timeslot ID '" . $group_id . "' supplied.", 'error', FALSE); drupal_goto('admin/config/booking/variety'); return ""; } //retrieve the sessions for the specified timeslot $variety_sessions = db_query("SELECT * FROM {booking_variety_sessions} WHERE booking_eventid = :eid and booking_variety_timeslot_id = :tid", array(':eid' => $event->eid, ':tid' => $timeslot_id)) ->fetchObject(); if (! $variety_sessions) { drupal_set_message("Error: Could not find matching variety session timeslot. Unable to view session membership.", 'error', FALSE); drupal_goto('admin/config/booking/variety'); return ""; } //set options for the CSV file $name = 'bookings-variety-sessions-' . format_date(time(), 'custom', 'Y-m-d-His'); $filename = file_directory_temp() . '/' . $name; $csv = ''; $delimiter = ','; $enclosure = '"'; $encloseAll = true; $nullToMysqlNull = true; $delimiter_esc = preg_quote($delimiter, '/'); $enclosure_esc = preg_quote($enclosure, '/'); //get the list of study group session memberships $session_members_query = db_query("SELECT r.*, p.* FROM {booking_variety_regn} r inner join {booking_person} p on p.nid = r.booking_person_nid WHERE p.booking_eventid = :eid ORDER BY r.rid", array(':eid' => $event->eid)); $session_members = $session_members_query->fetchAll(); watchdog('booking_debug', 'booking_varietysessions_csv_report session members:@info', array('@info' => print_r( $session_members, true))); //generate the row data foreach ($session_members as $member) { $session_ids = drupal_json_decode($member->booking_variety_ids); watchdog('booking_debug', 'booking_varietysessions_csv_report person session ids:
@info', array('@info' => print_r( $session_ids, true))); //get the session id that matches our timeslot $sid = $session_ids[$timeslot_id]; if (! isset($data[$sid])) { $data[$sid] = array(); } $text = array($member->booking_firstname, $member->booking_lastname); //add the spaces and put this element in the right array $data[$sid][] = implode(' ', $text); } //watchdog('booking_debug', "
Study Group CSV Report\n@info", array('@info' => print_r( $data_array, true))); //calculate the CSV layout $header_array = array_keys($data); $maximums = array(); $column_headings = array(); foreach ($header_array as $column) { $maximums[] = count($data[$column]); //make the column headings a bit more user friendly $column_headings[] = $variety_sessions[$column]['booking_variety_descrip']; } //add the column headings to the CSV $header = implode($delimiter, $column_headings); $csv .= $header . "\n"; //generate each row for the CSV for ($i = 0; $i < max($maximums); $i++) { $output = array(); foreach ($header_array as $column) { $field = isset($data[$column][$i]) ? $data[$column][$i] : ''; //enclose $field if necessary if ( $encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field ) ) { $output[] = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure; } else { $output[] = $field; } } //loop through columns $row = implode($delimiter, $output) . "\n"; $csv .= $row; } //output the CSV to the browser drupal_add_http_header("Content-type", "application/octet-stream; charset=utf-8"); drupal_add_http_header("Content-Disposition", "attachment; filename=" . $name . ".csv"); print $csv; exit(0); }