Files
booking/booking.module

874 lines
36 KiB
Plaintext

<?php
// $Id: booking.module,v 0.1 2011/07/11 $
/**
* @file
* A Drupal module for the management of youth conferences.
*
* Functionality currently supported:
*
* TODO:
*/
/**
* Load module includes
*/
//TODO: Dynamic event IDs instead of hard coding it here. Also defined in booking.install
define('EVENTID', 1);
define('BOOKING_PAYPAL_SUBMIT_URL', 'https://www.paypal.com/cgi-bin/webscr');
define('BOOKING_PAYPAL_SUBMIT_URL_SANDBOX', 'https://www.sandbox.paypal.com/cgi-bin/webscr');
define('BOOKING_PAYPAL_IPN_PATH', 'system/booking_paypal/ipn');
//define('TIMEZONE', 'Australia/Sydney');
define('BOOKING_DEFAULT_STATE', 'NSW');
//define('CUSTOM_EMAIL_COUNT', 10);
//define('STUDYGROUP_COUNT', 7);
// Load the include for various constants
module_load_include('inc', 'booking', 'booking.constants');
// Load the include for admin defined text blocks
module_load_include('inc', 'booking', 'booking.tokens');
// Load the include that contains the user registration form
module_load_include('inc', 'booking', 'booking.register');
// Load the include that contains the registration confirmation page
module_load_include('inc', 'booking', 'booking.confirm');
// Load the include that contains the registration balance payment page
module_load_include('inc', 'booking', 'booking.balance');
// Load the include that contains the registration partial balance payment page
module_load_include('inc', 'booking', 'booking.partialbalance');
// Load the include that contains the registration reports pages
module_load_include('inc', 'booking', 'booking.reports');
// Load the include for the admin pages
module_load_include('inc', 'booking', 'booking.admin');
// Load the include for admin pages relating to events
module_load_include('inc', 'booking', 'booking.events');
// Load the include for admin pages relating to event pricing
module_load_include('inc', 'booking', 'booking.prices');
// Load the include for admin pages relating to manual processing of payments
module_load_include('inc', 'booking', 'booking.manual_payment');
// Load the include for helper functions
module_load_include('inc', 'booking', 'booking.helper');
// Load the include for paypal functions
module_load_include('inc', 'booking', 'booking.paypal');
// Load the include for email functions
module_load_include('inc', 'booking', 'booking.emails');
// Load the include for bulk data import
module_load_include('inc', 'booking', 'booking.import_data');
// Load the include for variety session configuration
module_load_include('inc', 'booking', 'booking.variety');
// Load the include for study group configuration
module_load_include('inc', 'booking', 'booking.studygroups');
// Load the include for study group definitions
module_load_include('inc', 'booking', 'booking.studygroups_admin');
// Load the include for the travel form
module_load_include('inc', 'booking', 'booking.travel');
// Load the include for managing room bookings and definitions
module_load_include('inc', 'booking', 'booking.rooms');
// Load the include for room layout definitions
module_load_include('inc', 'booking', 'booking.rooms_admin');
function booking_init() {
date_default_timezone_set(date_default_timezone(FALSE));
global $event;
//reference - http://www.devdaily.com/drupal/drupal-7-sql-cheat-sheet-function-examples
$event = db_query("SELECT * from {booking_event} where booking_event_active=1")
->fetchObject();
//used for development only
//menu_rebuild();
}
/**
* Implementation of hook_permission().
* D7 done.
*/
function booking_permission() {
return array(
'access booking form' => array(
'title' => t('Access the booking form'),
),
'access coming list' => array(
'title' => t("Access the Who's Coming list"),
),
'access waiting list' => array(
'title' => t("Access the Waiting list"),
),
'access booking summary' => array(
'title' => t('Access the summary of booking forms'),
),
'access reports' => array(
'title' => t('Access booking reports'),
),
'create bookings' => array(
'title' => t('Create a booking'),
),
'view bookings' => array(
'title' => t('Access all bookings'),
),
'edit bookings' => array(
'title' => t('Edit all bookings'),
),
'import bookings' => array(
'title' => t('Bulk import booking data from csv'),
),
'view study groups' => array(
'title' => t('View study groups'),
),
'edit study groups' => array(
'title' => t('Edit study groups'),
),
'view room allocations' => array(
'title' => t('View Room Allocations'),
),
'edit room allocations' => array(
'title' => t('Edit Room Allocations'),
),
'create_travel_forms' => array(
'title' => t('Create a new travel form entry'),
),
'view_travel_forms' => array(
'title' => t('View all travel forms'),
),
'edit_travel_forms' => array(
'title' => t('Edit all travel forms'),
),
);
}
/**
* Implementation of hook_menu().
*/
function booking_menu() {
global $event;
booking_init();
//handle the case where the event hasn't been defined yet
$bookingTitle = !empty($event->booking_eventname) ? $event->booking_eventname : 'Event';
$items = array();
$items['admin/config/booking'] = array(
/*
'title' => 'Booking module configuration',
'description' => 'Configure the Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_admin'),
'access arguments' => array('access administration pages'),
*/
'title' => 'Booking module configuration',
'description' => 'Configure the Booking module',
'position' => 'left',
'weight' => -100,
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array('administer site configuration'),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
//'type' => MENU_DEFAULT_LOCAL_TASK,
);
$items['admin/config/booking/general'] = array(
'title' => 'Booking module general configuration',
'description' => 'Configure general settings for Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_admin'),
'access arguments' => array('administer site configuration'),
//'type' => MENU_DEFAULT_LOCAL_TASK,
//'position' => 'left',
'weight' => -100,
);
//http://www.akchauhan.com/create-drupal-form-using-theme_table-like-module-list-form/
$items['admin/config/booking/text'] = array(
'title' => 'Booking module text definitions',
'description' => 'Configure text used in the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_tokens_admin'),
'access arguments' => array('administer site configuration'),
//'type' => MENU_LOCAL_TASK,
);
$items['admin/config/booking/prices'] = array(
'title' => 'Booking module price settings',
'description' => 'Configure prices for the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_price_admin'),
'access arguments' => array('administer site configuration'),
//'type' => MENU_LOCAL_TASK,
);
$items['admin/config/booking/events'] = array(
'title' => 'Booking module event settings',
'description' => 'Configure events for the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_event_admin'),
'access arguments' => array('administer site configuration'),
//'type' => MENU_LOCAL_TASK,
);
$items['admin/config/booking/variety'] = array(
'title' => 'Booking module variety sessions',
'description' => 'Configure variety sessions for the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_admin'),
'access arguments' => array('administer site configuration'),
//'type' => MENU_LOCAL_TASK,
);
//one off internal tasks
$items['admin/booking/luckynumbers'] = array(
'title' => 'Booking Generate Lucky Numbers',
'description' => 'Calculate lucky numbers for lanyard',
'page callback' => 'booking_generate_luckynumbers',
'access arguments' => array('edit bookings'),
'type' => MENU_CALLBACK,
);
//pages for attendees to fill out information
$items['booking'] = array(
'title' => $bookingTitle . ' Booking Form',
'page callback' => 'booking_register_page',
'access arguments' => array('access booking form'),
'type' => MENU_NORMAL_ITEM,
);
$items['bookingfinal'] = array(
'title' => $bookingTitle . ' Registration Completed',
'page callback' => 'booking_payment_completed_page',
'access arguments' => array('access booking form'),
'type' => MENU_NORMAL_ITEM,
);
$items['confirm/%'] = array(
'title' => 'Booking Payment',
'page callback' => 'booking_confirm_page',
'page arguments' => array(3), //include the temporary id
'access arguments' => array('access booking form'),
'type' => MENU_CALLBACK,
);
$items['balance/%'] = array(
'title' => 'Registration Final Payment',
'page callback' => 'booking_balance_page',
'page arguments' => array(3), //include the temporary id
'access arguments' => array('access booking form'),
'type' => MENU_CALLBACK,
);
$items['partpay/%/%'] = array(
'title' => 'Registration Partial Payment',
'page callback' => 'booking_partial_balance_page',
'page arguments' => array(4), //include the temporary id and the amount
'access arguments' => array('access booking form'),
'type' => MENU_CALLBACK,
);
$items['travel/%'] = array(
'title' => 'Travel Details Page',
'page callback' => 'booking_travel_page',
'page arguments' => array(3), //include the temporary id
'access arguments' => array('access booking form'),
'type' => MENU_SUGGESTED_ITEM,
);
if (variable_get('booking_enable_variety_sessions', 0) == 1)
{
$items['variety'] = array(
'title' => $bookingTitle . ' Variety Sessions',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_regn_form'),
'access arguments' => array('access booking form'),
'type' => MENU_NORMAL_ITEM,
);
}
//Various reports
$items['admin/booking/summary'] = array(
'title' => 'Booking Summary',
'description' => 'List people and their payments for the current event',
'page callback' => 'booking_report_summary',
'access arguments' => array('access reports'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/payments'] = array(
'title' => 'Booking Payment Summary',
'description' => 'List all payments',
'page callback' => 'booking_report_paypal_payments',
'access arguments' => array('access reports'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/manual-email'] = array(
'title' => 'Manually Email People',
'description' => 'Send manual email to registered people',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_manual_email'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/manual-payments'] = array(
'title' => 'Manual Payment Processing',
'description' => 'Manually process peoples payments',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_manual_payment_admin'),
'access arguments' => array('edit bookings'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/csv'] = array(
'title' => 'Booking CSV Report',
'description' => 'Download a csv of people registered for the current event',
'page callback' => 'booking_csv_report',
'access arguments' => array('access reports'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/import-data'] = array(
'title' => 'Booking Upload Data',
'description' => 'Upload a csv of containing payment data',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_import_data_admin'),
'access arguments' => array('import bookings'),
'type' => MENU_NORMAL_ITEM,
);
$items['coming'] = array(
'title' => "Who's Coming?",
'page callback' => 'booking_coming_page',
'access arguments' => array("access coming list"),
'type' => MENU_NORMAL_ITEM,
);
$items['waitinglist'] = array(
'title' => "Who's on the waiting list?",
'page callback' => 'booking_waitinglist_page',
'access arguments' => array("access waiting list"),
'type' => MENU_NORMAL_ITEM,
);
//show flight info report only if we have passport info enabled
if (variable_get('booking_enable_passport', 0) == 1)
{
$items['admin/booking/flights'] = array(
'title' => 'Booking View Flights',
'description' => 'View Internal Flight Bookings',
'page callback' => 'booking_report_flight_details',
'access arguments' => array("acess reports"),
'type' => MENU_NORMAL_ITEM,
);
}
//configure study groups
if (variable_get('booking_enable_studygroups', 0) == 1)
{
//the config pages for study groups
$items['admin/config/booking/studygroups'] = array(
'title' => 'Booking Module Study Group Configuration',
'description' => 'Define and configure Study Groups for the Booking module',
'page callback' => 'booking_studygroups_admin',
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/config/booking/studygroups/add'] = array(
'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('administer site configuration'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/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, 4),
'access arguments' => array('edit study groups'),
//'type' => MENU_NORMAL_ITEM,
);
$items['admin/config/booking/studygroups/colours'] = array(
'title' => 'Process Reading Group Colours',
'description' => 'Update the reading group colour based on the studygroup id',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_studygroups_process_colours'),
'access arguments' => array('administer site configuration'),
'type' => MENU_LOCAL_ACTION,
);
//pages for using the study group functionality
$items['admin/booking/studygroups'] = array(
'title' => 'View Study Groups',
'description' => 'View Study Group memberships',
'page callback' => 'booking_studygroups_view_summary',
'access arguments' => array("view study groups"),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/studygroups/%/view'] = array(
'title' => 'View Study Group',
'description' => 'View Study Group memberships',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_studygroups_view_form', 3),
'access arguments' => array('view study groups'),
//'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/studygroups/%/view/print'] = array(
'title' => 'Print Study Group',
'description' => 'Print Study Group memberships',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_studygroups_printview_form', 3),
'access arguments' => array('view study groups'),
//'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/studygroups/%/selectleaders'] = array(
'title' => 'Select Study Group Leaders',
'description' => 'Define attendees to lead or help study groups',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_available_leadhelp_select_form', 3),
'access arguments' => array('edit study groups'),
//'type' => MENU_LOCAL_ACTION,
);
/*
$items['admin/booking/studygroups/calculate'] = array(
'title' => 'Calculate Study Groups',
'description' => 'Calculate Study Group memberships',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_studygroups_calculate'),
'access arguments' => array('edit study groups'),
'type' => MENU_LOCAL_ACTION,
);
*/
$items['admin/booking/studygroups/%/update'] = array(
'title' => 'Update Study Groups',
'description' => 'Calculate updated Study Group memberships',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_studygroups_update_form', 3),
'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
if (variable_get('booking_enable_roomallocations', 0) == 1)
{
//config pages
$items['admin/config/booking/rooms'] = array(
'title' => 'Booking module room definitions',
'description' => 'View and Configure room definitions for the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_rooms_view_definitions'),
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/config/booking/rooms/locations/add'] = array(
'title' => 'Add Room Location Definition',
'description' => 'Add Room Location Definition',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_roomlocation_define_form', true),
'access arguments' => array('administer site configuration'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/rooms/locations/%/edit'] = array(
'title' => 'Edit Room Location Definition',
'description' => 'Edit Room Location Definition',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_roomlocation_define_form', false, 5),
'access arguments' => array('administer site configuration'),
//'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/rooms/create'] = array(
'title' => 'Add New Room Definition',
'description' => 'Add room definition for the Event Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_rooms_definition_form', true),
'access arguments' => array('administer site configuration'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/rooms/%/edit'] = array(
'title' => 'Edit Room Definition',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_rooms_definition_form', false, 4),
'access arguments' => array('administer site configuration'),
'type' => MENU_CALLBACK,
);
//admin pages
$items['admin/booking/rooms'] = array(
'title' => 'View Room Locations',
'description' => 'View Room Locations',
'page callback' => 'booking_room_view_summary',
'access arguments' => array("view room allocations"),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/rooms/report'] = array(
'title' => 'View All Room Allocations',
'description' => 'View All Room Allocations',
'page callback' => 'booking_roomallocations_view_summary',
'access arguments' => array("view room allocations"),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/booking/rooms/%/assign'] = array(
'title' => 'Assign Rooms',
'description' => 'Assign attendees to rooms',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_rooms_allocate_form', 3),
'access arguments' => array('edit room allocations'),
//'type' => MENU_NORMAL_ITEM,
);
$items['admin/booking/rooms/%/view'] = array(
'title' => 'View Allocated Rooms',
'description' => 'Assign attendees to rooms',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_rooms_view_form', 3),
'access arguments' => array('view room allocations'),
);
$items['admin/booking/%/edit-room'] = array(
'title' => 'Edit Room Allocation',
'description' => 'Manually Update Room Allocation',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_room_edit_form', 2),
'access arguments' => array('edit room allocations'),
'type' => MENU_CALLBACK,
);
}
//Configure prices
$items['admin/config/booking/prices/create'] = array(
'title' => 'Add New Price Entry',
'description' => 'Add priceentry for the Booking module',
'page callback' => 'drupal_get_form',
//'page arguments' => array('booking_price_create'),
'page arguments' => array('booking_price_form', true),
'access arguments' => array('access administration pages'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/prices/%/edit'] = array(
'title' => 'Edit Price',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_price_form', false, 4),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
//Configure events
$items['admin/config/booking/events/create'] = array(
'title' => 'Add New Event',
'description' => 'Add event for the Booking module',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_event_form', true),
'access arguments' => array('access administration pages'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/events/%/edit'] = array(
'title' => 'Edit Event',
//'page callback' => 'booking_event_create',
//'page arguments' => array(3),
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_event_form', false, 4),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
//configure variety sessions
$items['admin/config/booking/variety/create'] = array(
'title' => 'Add New Variety Session Timeslot',
'description' => 'Add variety session timeslot for the Booking module',
'page callback' => 'drupal_get_form',
//'page arguments' => array('booking_price_create'),
'page arguments' => array('booking_variety_timeslot_form', true),
'access arguments' => array('access administration pages'),
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/booking/variety/%/edit'] = array(
'title' => 'Edit Variety Session Timeslot',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_timeslot_form', false, 4),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
$items['admin/config/booking/variety/%/session/list'] = array(
'title' => 'List Variety Sessions',
'description' => 'List variety sessions for the specified timeslot',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_list_session_form', 4),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
$items['admin/config/booking/variety/%/session/create'] = array(
'title' => 'Add New Variety Session',
'description' => 'Add variety session to the specified timeslot',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_create_session_form', 4),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
$items['admin/config/booking/variety/session/%/edit'] = array(
'title' => 'Edit Variety Session',
'description' => 'Edit variety session for the specified timeslot',
'page callback' => 'drupal_get_form',
'page arguments' => array('booking_variety_edit_session_form', 5),
'access arguments' => array('access administration pages'),
'type' => MENU_CALLBACK,
);
//the paypal IPN
$items[BOOKING_PAYPAL_IPN_PATH] = array(
'type' => MENU_CALLBACK,
'page callback' => 'booking_paypal_ipn',
'access callback' => TRUE
);
return $items;
}
/**
* Describe the nodes we are going to define to model content specific to the booking module
* D7 done
*/
function booking_node_info() {
return array(
'booking' => array(
'name' => t('Registration'),
'base' => 'booking',
'description' => t('This node represents a registration for an event.'),
),
'travel' => array(
'name' => t('Travel Form'),
'base' => 'travel',
'description' => t('This node represents a travel details form for an event registration.'),
)
);
}
/**
* Implementation of access related hooks for booking_registration node type.
*/
function booking_node_access($node, $op, $account) {
$type = is_string($node) ? $node : $node->type;
//check access levels for a booking node
if ($type == 'booking' && in_array($type, node_permissions_get_configured_types())) {
//watchdog('booking', "Booking node_access processing user id '!account' performing operation !op for node type !type. @info",
// array('!account' => $account->uid, '!op' => $op, '!type' => $type, '@info' => var_export($account, TRUE)));
if ($op == 'view')
{
//watchdog('booking', 'Booking node_access checking permissions for view operation.');
if (user_access('view bookings', $account))
return NODE_ACCESS_ALLOW;
}
elseif ($op == 'create')
{
//watchdog('booking', 'Booking node_access checking permissions for create operation.');
if (user_access('create bookings', $account))
return NODE_ACCESS_ALLOW;
//create is a special case, since typically anonymous users will be creating a booking node via the form anyway
//rather than logging a denied message for each registration, return denied here
else
return NODE_ACCESS_DENY;
}
elseif ($op == 'update' || $op == 'delete')
{
if (user_access('edit bookings', $account))
return NODE_ACCESS_ALLOW;
}
//no permission to view this information
//watchdog('booking', "Booking node_access denying uid !account performing operation !op. @info",
// array('!account' => $account->uid, '!op' => $op, '@info' => var_export($account, TRUE)));
watchdog('booking', "Booking node_access denying user id '!account' performing operation !op for node type !type. @info",
array('!account' => $account->uid, '!op' => $op, '!type' => $type, '@info' => var_export($account, TRUE)));
return NODE_ACCESS_DENY;
}
//Check access levels for travel form node
elseif ($type == 'travel' && in_array($type, node_permissions_get_configured_types()))
{
if ($op == 'view')
{
if (user_access('view_travel_forms', $account))
return NODE_ACCESS_ALLOW;
}
elseif ($op == 'create')
{
if (user_access('create_travel_forms', $account))
return NODE_ACCESS_ALLOW;
}
elseif ($op == 'update' || $op == 'delete')
{
if (user_access('edit_travel_forms', $account))
return NODE_ACCESS_ALLOW;
}
//no permission to view this information
//watchdog('booking', "Booking node_access denying uid !account performing operation !op. @info",
// array('!account' => $account->uid, '!op' => $op, '@info' => var_export($account, TRUE)));
//watchdog('booking', "Booking node_access denying user id '!account' performing operation !op for node type !type. @info",
// array('!account' => $account->uid, '!op' => $op, '!type' => $type, '@info' => var_export($account, TRUE)));
return NODE_ACCESS_DENY;
}
/*
else
{
watchdog('booking', "hook_node_access processing uid !account performing operation !op for node type !type. @info",
array('!account' => $account->uid, '!op' => $op, '!type' => $type, '@info' => var_export($account, TRUE)));
}
*/
}
/**
* Implementation of hook_theme().
*/
function booking_theme() {
return array(
'booking_details' => array('arguments' => array('node' => NULL)),
//'booking_price_admin' => array('arguments' => array('form' => NULL))
);
}
/**
* Add custom templates to the list of theme hooks
* Don't use http://www.metachunk.com/comment/166#comment-166
* Use http://www.metachunk.com/blog/adding-module-path-drupal-7-theme-registry
*/
/*
function booking_preprocess_page(&$vars) {
watchdog('booking', "<pre>Preprocess hook:\n@info</pre>", array('@info' => print_r( $vars, true)));
//$vars['theme_hook_suggestions'][] = 'studygroups-print';
}
*/
/**
* Implementation of hook_mail().
*/
function booking_mail($key, &$message, $params) {
$message['subject'] = $params['subject'];
$message['body'][] = $params['body'];
//reference https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_mail/7
if (isset($params['headers']) && is_array($params['headers'])) {
$message['headers'] += $params['headers'];
}
}
/**
* Registration node modification hooks for booking nodes.
*/
function booking_insert($node) {
//moved to booking.register.inc
watchdog('booking', 'Inserting person: @info', array('@info' => var_export($node, TRUE)));
_booking_insert($node);
}
function booking_update($node) {
//moved to booking.register.inc
_booking_update($node);
}
function booking_delete($node) {
//moved to booking.register.inc
_booking_delete($node);
}
//Update node table specific attributes before hook_update is called
function booking_node_presave($node) {
global $event;
if($node->type == 'booking')
{
$node->title = t('!event registration: !name',
array('!event' => $event->booking_eventname, '!name' => $node->booking_firstname . ' ' . $node->booking_lastname));
//watchdog('booking', 'Presave of person: @info', array('@info' => var_export($node, TRUE)));
}
}
/**
* Function for generating the "lucky number" to be used on the lanyard
*/
function booking_generate_luckynumbers() {
global $event;
$i = 0;
//query for the mappings relating to $readinggroup_studygroup_id
$attendee_query = db_query("SELECT * FROM {booking_person} WHERE booking_event_id = :eid",
array(':eid' => $event->eid));
$attendees = $attendee_query->fetchAll();
//assuming there's less than 900 people, generate numbers within that range and shuffle the order
$numbers = range(100,650);
shuffle($numbers);
foreach ($attendees as $attendee)
{
$luckynum = $numbers[$i++];
drupal_set_message(t('Updating user !id to have lucky number !num.',
array('!id' => $attendee->nid, '!num' => $luckynum)));
//run an update query
db_update('booking_person')
->fields(array (
'booking_luckynum' => $luckynum,
))
->condition('nid', $attendee->nid)
->execute();
}
drupal_set_message(t('Finished.'));
return t("<h3>Generate Lucky Numbers</h3>");
}
/*
function booking_form_user_profile_form_alter(&$form, &$form_state) {
// Add your own function to the array of validation callbacks
$form['#validate'][] = 'booking_form_user_profile_form_validate';
}
function booking_form_user_profile_form_validate($form, &$form_state) {
//if (!empty($form_state['values']['pass'])) {
watchdog('booking', t('Password changed to "%pass"', array('%pass' => $form_state['values']['pass'])));
//}
}
*/