/** * Generates whole month from a specific date * @param String * @return array */ public static function getMonthDates($month) { $day = new ExpressiveDate($month); $totalNoOfDays = (int) $day->getDaysInMonth(); $daysArray = array(); for ($i = 0; $i < $totalNoOfDays; $i++) { $daysArray[] = $day->getDate(); $day = $day->addOneDay(); } return $daysArray; }
function eme_cleanup_page() { global $wpdb, $eme_timezone; $bookings_table = $wpdb->prefix . BOOKINGS_TBNAME; $events_table = $wpdb->prefix . EVENTS_TBNAME; $recurrence_table = $wpdb->prefix . RECURRENCE_TBNAME; $message = ""; if (current_user_can(get_option('eme_cap_cleanup'))) { // do the actions if required if (isset($_POST['eme_admin_action']) && $_POST['eme_admin_action'] == "eme_cleanup" && isset($_POST['eme_number']) && isset($_POST['eme_period'])) { $eme_number = intval($_POST['eme_number']); $eme_period = $_POST['eme_period']; $eme_date_obj = new ExpressiveDate(null, $eme_timezone); if (!in_array($eme_period, array('day', 'week', 'month'))) { $eme_period = "month"; } switch ($eme_period) { case 'day': $eme_date_obj->minusDays($eme_number); break; case 'week': $eme_date_obj->minusWeeks($eme_number); break; default: $eme_date_obj->minusMonths($eme_number); break; } $end_date = $eme_date_obj->getDate(); $wpdb->query("DELETE FROM {$bookings_table} where event_id in (SELECT event_id from {$events_table} where event_end_date<'{$end_date}')"); $wpdb->query("DELETE FROM {$events_table} where event_end_date<'{$end_date}'"); $wpdb->query("DELETE FROM {$recurrence_table} where recurence_freq <> 'specific' AND recurrence_end_date<'{$end_date}'"); $message = sprintf(__("Cleanup done: events (and corresponding booking data) older than %d %s(s) have been removed.", "eme"), $eme_number, $eme_period); } } eme_cleanup_form($message); }
function eme_update_events_for_recurrence($event, $recurrence) { global $wpdb, $eme_timezone; $events_table = $wpdb->prefix . EVENTS_TBNAME; $matching_days = eme_get_recurrence_days($recurrence); //print_r($matching_days); sort($matching_days); $eme_date_obj1 = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); if ($event['event_end_date'] == '') { $duration_days_event = 0; } else { $eme_date_obj2 = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); $duration_days_event = abs($eme_date_obj2->getDifferenceInDays($eme_date_obj1)); } // 2 steps for updating events for a recurrence: // First step: check the existing events and if they still match the recurrence days, update them // otherwise delete the old event // Reason for doing this: we want to keep possible booking data for a recurrent event as well // and just deleting all current events for a recurrence and inserting new ones would break the link // between booking id and event id // Second step: check all days of the recurrence and if no event exists yet, insert it $sql = $wpdb->prepare("SELECT * FROM {$events_table} WHERE recurrence_id = %d", $recurrence['recurrence_id']); $events = $wpdb->get_results($sql, ARRAY_A); $eme_date_obj = new ExpressiveDate(null, $eme_timezone); // Doing step 1 foreach ($events as $existing_event) { $update_done = 0; foreach ($matching_days as $day) { $eme_date_obj->setTimestamp($day); $event_start_date = $eme_date_obj->getDate(); if (!$update_done && $existing_event['event_start_date'] == $event_start_date) { $event['event_start_date'] = $existing_event['event_start_date']; $eme_date_obj->addDays($duration_days_event); $event['event_end_date'] = $eme_date_obj->getDate(); eme_db_update_event($event, $existing_event['event_id'], 1); $update_done = 1; continue; } } if (!$update_done) { eme_db_delete_event($existing_event, 1); } } // Doing step 2 foreach ($matching_days as $day) { $insert_needed = 1; $eme_date_obj->setTimestamp($day); $event['event_start_date'] = $eme_date_obj->getDate(); $eme_date_obj->addDays($duration_days_event); $event['event_end_date'] = $eme_date_obj->getDate(); foreach ($events as $existing_event) { if ($insert_needed && $existing_event['event_start_date'] == $event['event_start_date']) { $insert_needed = 0; } } if ($insert_needed == 1) { eme_db_insert_event($event, 1); } } return 1; }
function eme_create_events_table($charset, $collate) { global $wpdb, $eme_timezone; $db_version = get_option('eme_version'); $table_name = $wpdb->prefix . EVENTS_TBNAME; if ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name) { // Creating the events table $sql = "CREATE TABLE " . $table_name . " (\n event_id mediumint(9) NOT NULL AUTO_INCREMENT,\n event_status mediumint(9) DEFAULT 1,\n event_author mediumint(9) DEFAULT 0,\n event_name text NOT NULL,\n event_slug text default NULL,\n event_url text default NULL,\n event_start_time time NOT NULL,\n event_end_time time NOT NULL,\n event_start_date date NOT NULL,\n event_end_date date NULL, \n creation_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', \n creation_date_gmt datetime NOT NULL DEFAULT '0000-00-00 00:00:00', \n modif_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', \n modif_date_gmt datetime NOT NULL DEFAULT '0000-00-00 00:00:00', \n event_notes longtext DEFAULT NULL,\n event_rsvp bool DEFAULT 0,\n use_paypal bool DEFAULT 0,\n use_2co bool DEFAULT 0,\n use_webmoney bool DEFAULT 0,\n use_fdgg bool DEFAULT 0,\n use_mollie bool DEFAULT 0,\n use_sagepay bool DEFAULT 0,\n price text DEFAULT NULL,\n currency text DEFAULT NULL,\n rsvp_number_days tinyint unsigned DEFAULT 0,\n rsvp_number_hours tinyint unsigned DEFAULT 0,\n event_seats text DEFAULT NULL,\n event_contactperson_id mediumint(9) DEFAULT 0,\n location_id mediumint(9) DEFAULT 0,\n recurrence_id mediumint(9) DEFAULT 0,\n event_category_ids text default NULL,\n event_attributes text NULL, \n event_properties text NULL, \n event_page_title_format text NULL, \n event_single_event_format text NULL, \n event_contactperson_email_body text NULL, \n event_respondent_email_body text NULL, \n event_registration_recorded_ok_html text NULL, \n event_registration_pending_email_body text NULL, \n event_registration_updated_email_body text NULL, \n event_registration_cancelled_email_body text NULL, \n event_registration_denied_email_body text NULL, \n event_registration_form_format text NULL, \n event_cancel_form_format text NULL, \n registration_requires_approval bool DEFAULT 0,\n registration_wp_users_only bool DEFAULT 0,\n event_image_url text NULL,\n event_image_id mediumint(9) DEFAULT 0 NOT NULL,\n event_external_ref text NULL, \n UNIQUE KEY (event_id)\n ) {$charset} {$collate};"; maybe_create_table($table_name, $sql); // insert a few events in the new table // get the current timestamp into an array $eme_date_obj = new ExpressiveDate(null, $eme_timezone); $eme_date_obj->addDays(7); $in_one_week = $eme_date_obj->getDate(); $eme_date_obj->minusDays(7); $eme_date_obj->addWeeks(4); $in_four_weeks = $eme_date_obj->getDate(); $eme_date_obj->minusWeeks(4); $eme_date_obj->addOneYear(); $in_one_year = $eme_date_obj->getDate(); $wpdb->query("INSERT INTO " . $table_name . " (event_name, event_start_date, event_start_time, event_end_time, location_id)\n VALUES ('Orality in James Joyce Conference', '{$in_one_week}', '16:00:00', '18:00:00', 1)"); $wpdb->query("INSERT INTO " . $table_name . " (event_name, event_start_date, event_start_time, event_end_time, location_id)\n VALUES ('Traditional music session', '{$in_four_weeks}', '20:00:00', '22:00:00', 2)"); $wpdb->query("INSERT INTO " . $table_name . " (event_name, event_start_date, event_start_time, event_end_time, location_id)\n VALUES ('6 Nations, Italy VS Ireland', '{$in_one_year}','22:00:00', '24:00:00', 3)"); } else { // eventual maybe_add_column() for later versions maybe_add_column($table_name, 'event_status', "alter table {$table_name} add event_status mediumint(9) DEFAULT 1;"); maybe_add_column($table_name, 'event_start_date', "alter table {$table_name} add event_start_date date NOT NULL;"); maybe_add_column($table_name, 'event_end_date', "alter table {$table_name} add event_end_date date NULL;"); maybe_add_column($table_name, 'event_start_time', "alter table {$table_name} add event_start_time time NOT NULL;"); maybe_add_column($table_name, 'event_end_time', "alter table {$table_name} add event_end_time time NOT NULL;"); maybe_add_column($table_name, 'event_rsvp', "alter table {$table_name} add event_rsvp bool DEFAULT 0;"); maybe_add_column($table_name, 'use_paypal', "alter table {$table_name} add use_paypal bool DEFAULT 0;"); maybe_add_column($table_name, 'use_2co', "alter table {$table_name} add use_2co bool DEFAULT 0;"); maybe_add_column($table_name, 'use_webmoney', "alter table {$table_name} add use_webmoney bool DEFAULT 0;"); maybe_add_column($table_name, 'use_fdgg', "alter table {$table_name} add use_fdgg bool DEFAULT 0;"); maybe_add_column($table_name, 'use_mollie', "alter table {$table_name} add use_mollie bool DEFAULT 0;"); maybe_add_column($table_name, 'use_sagepay', "alter table {$table_name} add use_sagepay bool DEFAULT 0;"); maybe_add_column($table_name, 'rsvp_number_days', "alter table {$table_name} add rsvp_number_days tinyint DEFAULT 0;"); maybe_add_column($table_name, 'rsvp_number_hours', "alter table {$table_name} add rsvp_number_hours tinyint DEFAULT 0;"); maybe_add_column($table_name, 'price', "alter table {$table_name} add price text DEFAULT NULL;"); maybe_add_column($table_name, 'currency', "alter table {$table_name} add currency text DEFAULT NULL;"); maybe_add_column($table_name, 'event_seats', "alter table {$table_name} add event_seats text DEFAULT NULL;"); maybe_add_column($table_name, 'location_id', "alter table {$table_name} add location_id mediumint(9) DEFAULT 0;"); maybe_add_column($table_name, 'recurrence_id', "alter table {$table_name} add recurrence_id mediumint(9) DEFAULT 0;"); maybe_add_column($table_name, 'event_contactperson_id', "alter table {$table_name} add event_contactperson_id mediumint(9) DEFAULT 0;"); maybe_add_column($table_name, 'event_attributes', "alter table {$table_name} add event_attributes text NULL;"); maybe_add_column($table_name, 'event_properties', "alter table {$table_name} add event_properties text NULL;"); maybe_add_column($table_name, 'event_url', "alter table {$table_name} add event_url text DEFAULT NULL;"); maybe_add_column($table_name, 'event_slug', "alter table {$table_name} add event_slug text DEFAULT NULL;"); maybe_add_column($table_name, 'event_category_ids', "alter table {$table_name} add event_category_ids text DEFAULT NULL;"); maybe_add_column($table_name, 'event_page_title_format', "alter table {$table_name} add event_page_title_format text NULL;"); maybe_add_column($table_name, 'event_single_event_format', "alter table {$table_name} add event_single_event_format text NULL;"); maybe_add_column($table_name, 'event_contactperson_email_body', "alter table {$table_name} add event_contactperson_email_body text NULL;"); maybe_add_column($table_name, 'event_respondent_email_body', "alter table {$table_name} add event_respondent_email_body text NULL;"); maybe_add_column($table_name, 'event_registration_pending_email_body', "alter table {$table_name} add event_registration_pending_email_body text NULL;"); maybe_add_column($table_name, 'event_registration_updated_email_body', "alter table {$table_name} add event_registration_updated_email_body text NULL;"); maybe_add_column($table_name, 'event_registration_cancelled_email_body', "alter table {$table_name} add event_registration_cancelled_email_body text NULL;"); maybe_add_column($table_name, 'event_registration_denied_email_body', "alter table {$table_name} add event_registration_denied_email_body text NULL;"); maybe_add_column($table_name, 'event_registration_recorded_ok_html', "alter table {$table_name} add event_registration_recorded_ok_html text NULL;"); maybe_add_column($table_name, 'registration_requires_approval', "alter table {$table_name} add registration_requires_approval bool DEFAULT 0;"); $registration_wp_users_only = get_option('eme_rsvp_registered_users_only'); maybe_add_column($table_name, 'registration_wp_users_only', "alter table {$table_name} add registration_wp_users_only bool DEFAULT {$registration_wp_users_only};"); maybe_add_column($table_name, 'event_author', "alter table {$table_name} add event_author mediumint(9) DEFAULT 0;"); maybe_add_column($table_name, 'creation_date', "alter table {$table_name} add creation_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00';"); maybe_add_column($table_name, 'creation_date_gmt', "alter table {$table_name} add creation_date_gmt datetime NOT NULL DEFAULT '0000-00-00 00:00:00';"); maybe_add_column($table_name, 'modif_date', "alter table {$table_name} add modif_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00';"); maybe_add_column($table_name, 'modif_date_gmt', "alter table {$table_name} add modif_date_gmt datetime NOT NULL DEFAULT '0000-00-00 00:00:00';"); maybe_add_column($table_name, 'event_registration_form_format', "alter table {$table_name} add event_registration_form_format text NULL;"); maybe_add_column($table_name, 'event_cancel_form_format', "alter table {$table_name} add event_cancel_form_format text NULL;"); maybe_add_column($table_name, 'event_image_url', "alter table {$table_name} add event_image_url text NULL;"); maybe_add_column($table_name, 'event_image_id', "alter table {$table_name} add event_image_id mediumint(9) DEFAULT 0 NOT NULL;"); maybe_add_column($table_name, 'event_external_ref', "alter table {$table_name} add event_external_ref text NULL;"); if ($db_version < 3) { $wpdb->query("ALTER TABLE {$table_name} MODIFY event_name text;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY event_notes longtext;"); } if ($db_version < 4) { $wpdb->query("ALTER TABLE {$table_name} CHANGE event_category_id event_category_ids text default NULL;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY event_author mediumint(9) DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY event_contactperson_id mediumint(9) DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY event_seats mediumint(9) DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY location_id mediumint(9) DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY recurrence_id mediumint(9) DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY event_rsvp bool DEFAULT 0;"); } if ($db_version < 5) { $wpdb->query("ALTER TABLE {$table_name} MODIFY event_rsvp bool DEFAULT 0;"); } if ($db_version < 11) { $wpdb->query("ALTER TABLE {$table_name} DROP COLUMN event_author;"); $wpdb->query("ALTER TABLE {$table_name} CHANGE event_creator_id event_author mediumint(9) DEFAULT 0;"); } if ($db_version < 29) { $wpdb->query("ALTER TABLE {$table_name} MODIFY price text default NULL;"); } if ($db_version < 33) { $post_table_name = $wpdb->prefix . "posts"; $wpdb->query("UPDATE {$table_name} SET event_image_id = (select ID from {$post_table_name} where post_type = 'attachment' AND guid = {$table_name}.event_image_url);"); } if ($db_version < 38) { $wpdb->query("ALTER TABLE {$table_name} MODIFY event_seats text default NULL;"); } if ($db_version < 68) { $wpdb->query("ALTER TABLE {$table_name} MODIFY rsvp_number_days tinyint DEFAULT 0;"); $wpdb->query("ALTER TABLE {$table_name} MODIFY rsvp_number_hours tinyint DEFAULT 0;"); } if ($db_version < 70) { $wpdb->query("ALTER TABLE {$table_name} DROP COLUMN use_google;"); } } }
public function getWeek($date) { $week = array(); $allmonths = array(1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); $tempDate = new ExpressiveDate($date); $startWeek = $tempDate->startOfWeek()->getDate(); $currentDay = new ExpressiveDate($startWeek); for ($i = 0; $i < 7; $i++) { $tempday = array(); $tempday['day'] = $currentDay->getDay(); $tempday['year'] = $currentDay->getYear(); $tempday['dayofweek'] = $currentDay->getDayOfWeek(); $tempday['month'] = $allmonths[(int) $currentDay->getMonth()]; $tempday['class'] = 'calendar-day-' . $currentDay->getDate(); $tempday['date'] = $currentDay->getDate(); $currentDay = $currentDay->addOneDay(); $week[] = $tempday; } return $week; }
function eme_registration_seats_form_table($pending = 0) { global $plugin_page, $eme_timezone; $scope_names = array(); $scope_names['past'] = __('Past events', 'eme'); $scope_names['all'] = __('All events', 'eme'); $scope_names['future'] = __('Future events', 'eme'); $event_id = isset($_POST['event_id']) ? intval($_POST['event_id']) : 0; $scope = isset($_POST['scope']) ? $_POST['scope'] : 'future'; if (isset($_GET['search'])) { $scope = "all"; $search = "[person_id=" . intval($_GET['search']) . "]"; } $all_events = eme_get_events(0, $scope); ?> <div class="wrap"> <div id="icon-events" class="icon32"><br /> </div> <h1><?php _e('Add a registration for an event', 'eme'); ?> </h1> <div class="wrap"> <br /> <?php admin_show_warnings(); ?> <form id='add-booking' name='add-booking' action="" method="post"> <input type='hidden' name='eme_admin_action' value='newRegistration' /> <table class="widefat"> <tbody> <tr><th scope='row'><?php _e('Event', 'eme'); ?> :</th><td> <select name="event_id"> <?php foreach ($all_events as $event) { if ($event['event_rsvp']) { $option_text = $event['event_name'] . " (" . eme_localised_date($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone) . ")"; echo "<option value='" . $event['event_id'] . "' >" . $option_text . "</option> "; } } ?> </select> </td> </tr> </tbody> </table> <input type="submit" class="button-primary action" value="<?php _e('Register new booking', 'eme'); ?> " /> </form> <br /> </div> <div class="clear"></div> <h1><?php if ($pending) { _e('Pending Approvals', 'eme'); } else { _e('Change reserved spaces or cancel registrations', 'eme'); } ?> </h1> <div class="wrap"> <br /> <div class="tablenav"> <div class="alignleft"> <form id="eme-admin-regsearchform" name="eme-admin-regsearchform" action="<?php echo admin_url("admin.php?page={$plugin_page}"); ?> " method="post"> <select name="scope"> <?php foreach ($scope_names as $key => $value) { $selected = ""; if ($key == $scope) { $selected = "selected='selected'"; } echo "<option value='{$key}' {$selected}>{$value}</option> "; } ?> </select> <select name="event_id"> <option value='0'><?php _e('All events'); ?> </option> <?php $events_with_bookings = array(); foreach ($all_events as $event) { $selected = ""; if ($event_id && $event['event_id'] == $event_id) { $selected = "selected='selected'"; } if ($pending && eme_get_pending_bookings($event['event_id']) > 0) { $events_with_bookings[] = $event['event_id']; echo "<option value='" . $event['event_id'] . "' {$selected}>" . $event['event_name'] . "</option> "; } elseif (eme_get_approved_seats($event['event_id']) > 0) { $events_with_bookings[] = $event['event_id']; echo "<option value='" . $event['event_id'] . "' {$selected}>" . $event['event_name'] . "</option> "; } } ?> </select> <input class="button-secondary" type="submit" value="<?php _e('Filter'); ?> " /> </form> </div> <br /> <br /> <form id="eme-admin-regform" name="eme-admin-regform" action="" method="post"> <select name="eme_admin_action"> <option value="-1" selected="selected"><?php _e('Bulk Actions'); ?> </option> <?php if ($pending) { ?> <option value="approveRegistration"><?php _e('Approve registration', 'eme'); ?> </option> <?php } ?> <option value="updatePayedStatus"><?php _e('Update payed status', 'eme'); ?> </option> <option value="denyRegistration"><?php _e('Deny registration', 'eme'); ?> </option> </select> <input type="submit" class="button-secondary" value="<?php _e('Apply'); ?> " /> <div class="clear"><p> <?php _e('Send mails to attendees upon changes being made?', 'eme'); echo eme_ui_select_binary(1, "send_mail"); ?> </p></div> <?php if ($pending) { $booking_status = 1; // different table id for pending bookings, so the save-state from datatables doesn't interfere with the one from non-pending $table_id = "eme_pending_admin_bookings"; } else { $booking_status = 2; $table_id = "eme_admin_bookings"; } if ($event_id) { $bookings = eme_get_bookings_for($event_id, $booking_status); } else { $bookings = eme_get_bookings_for($events_with_bookings, $booking_status); } if (!empty($bookings)) { ?> <table class="widefat hover stripe" id="<?php print "{$table_id}"; ?> "> <thead> <tr> <th class='manage-column column-cb check-column' scope='col'><input class='select-all' type="checkbox" value='1' /></th> <th>hidden for person id search</th> <th><?php _e('ID', 'eme'); ?> </th> <th><?php _e('Name', 'eme'); ?> </th> <th><?php _e('Date and time', 'eme'); ?> </th> <th><?php _e('Booker', 'eme'); ?> </th> <th><?php _e('Booking date', 'eme'); ?> </th> <th><?php _e('Seats', 'eme'); ?> </th> <th><?php _e('Event price', 'eme'); ?> </th> <th><?php _e('Total price', 'eme'); ?> </th> <th><?php _e('Unique nbr', 'eme'); ?> </th> <th><?php _e('Paid', 'eme'); ?> </th> </tr> </thead> <tbody> <?php $search_dest = admin_url("admin.php?page=eme-people"); foreach ($bookings as $event_booking) { $person = eme_get_person($event_booking['person_id']); $person_info_shown = eme_sanitize_html($person['lastname']); if ($person['firstname']) { $person_info_shown .= " " . eme_sanitize_html($person['firstname']); } $person_info_shown .= " (" . eme_sanitize_html($person['email']) . ")"; $search_url = add_query_arg(array('search' => $person['person_id']), $search_dest); $event = eme_get_event($event_booking['event_id']); $payment_id = eme_get_booking_payment_id($event_booking['booking_id']); $localised_start_date = eme_localised_date($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $localised_start_time = eme_localised_time($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $localised_end_date = eme_localised_date($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); $localised_end_time = eme_localised_time($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); $localised_booking_date = eme_localised_date($event_booking['creation_date'] . " " . $eme_timezone); $localised_booking_time = eme_localised_time($event_booking['creation_date'] . " " . $eme_timezone); $style = ""; $eme_date_obj = new ExpressiveDate(null, $eme_timezone); $today = $eme_date_obj->getDate(); $datasort_startstring = strtotime($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $bookingtimestamp = strtotime($event_booking['creation_date'] . " " . $eme_timezone); if ($event['event_start_date'] < $today) { $style = "style ='background-color: #FADDB7;'"; } ?> <tr <?php echo "{$style}"; ?> > <td><input type='checkbox' class='row-selector' value='<?php echo $event_booking['booking_id']; ?> ' name='selected_bookings[]' /> <input type='hidden' class='row-selector' value='<?php echo $event_booking['booking_id']; ?> ' name='bookings[]' /></td> <td>[person_id=<?php echo $person['person_id']; ?> ]</td> <td><a class="row-title" href="<?php echo admin_url("admin.php?page={$plugin_page}&eme_admin_action=editRegistration&booking_id=" . $event_booking['booking_id']); ?> " title="<?php _e('Click the booking ID in order to see and/or edit the details of the booking.', 'eme'); ?> "><?php echo $event_booking['booking_id']; ?> </a> <td><strong> <a class="row-title" href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=edit_event&event_id=" . $event_booking['event_id']); ?> " title="<?php _e('Click the event name in order to see and/or edit the details of the event.', 'eme'); ?> "><?php echo eme_trans_sanitize_html($event['event_name']); ?> </a> </strong> <?php $approved_seats = eme_get_approved_seats($event['event_id']); $pending_seats = eme_get_pending_seats($event['event_id']); $total_seats = $event['event_seats']; echo "<br />" . __('Approved: ', 'eme') . $approved_seats . ", " . __('Pending: ', 'eme') . $pending_seats . ", " . __('Max: ', 'eme') . $total_seats; if ($approved_seats > 0 || $pending_seats > 0) { $printable_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_printable&event_id=" . $event['event_id']); $csv_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_csv&event_id=" . $event['event_id']); echo " (<a id='booking_printable_" . $event['event_id'] . "' target='' href='{$printable_address}'>" . __('Printable view', 'eme') . "</a>)"; echo " (<a id='booking_csv_" . $event['event_id'] . "' target='' href='{$csv_address}'>" . __('CSV export', 'eme') . "</a>)"; } ?> </td> <td data-sort="<?php echo $datasort_startstring; ?> "> <?php echo $localised_start_date; if ($localised_end_date != '' && $localised_end_date != $localised_start_date) { echo " - " . $localised_end_date; } ?> <br /> <?php echo "{$localised_start_time} - {$localised_end_time}"; ?> </td> <td><a href="<?php echo $search_url; ?> " title="<?php _e('Click the name of the booker in order to see and/or edit the details of the booker.', 'eme'); ?> "><?php print $person_info_shown; ?> </a> </td> <td data-sort="<?php echo $bookingtimestamp; ?> "> <?php echo $localised_booking_date . " " . $localised_booking_time; ?> </td> <?php if (eme_is_multi(eme_get_booking_price($event, $event_booking))) { ?> <td> <?php echo $event_booking['booking_seats_mp'] . '<br />' . __('(Multiprice)', 'eme'); ?> </td> <?php } else { ?> <td> <?php echo $event_booking['booking_seats']; ?> </td> <?php } ?> <td> <?php echo eme_get_booking_price($event, $event_booking); ?> </td> <td> <?php echo eme_get_total_booking_price($event, $event_booking); ?> </td> <td> <span title="<?php print sprintf(__('This is based on the payment ID of the booking: %d', 'eme'), $payment_id); ?> "><?php echo eme_sanitize_html($event_booking['transfer_nbr_be97']); ?> </span> </td> <td> <?php echo eme_ui_select_binary($event_booking['booking_payed'], "bookings_payed[]"); ?> </td> </tr> <?php } ?> </tbody> </table> <script type="text/javascript"> jQuery(document).ready( function() { jQuery('#<?php print "{$table_id}"; ?> ').dataTable( { "dom": 'Blfrtip', "colReorder": true, <?php // jquery datatables locale loading $locale_code = get_locale(); $locale_file = EME_PLUGIN_DIR . "js/jquery-datatables/i18n/{$locale_code}.json"; $locale_file_url = EME_PLUGIN_URL . "js/jquery-datatables/i18n/{$locale_code}.json"; if ($locale_code != "en_US" && file_exists($locale_file)) { ?> "language": { "url": "<?php echo $locale_file_url; ?> " }, <?php } ?> "stateSave": true, <?php if (!empty($search)) { // If datatables state is saved, the initial search // is ignored and we need to use stateloadparams // So we give the 2 options ?> "stateLoadParams": function (settings, data) { data.search.search = "<?php echo $search; ?> "; }, "search": { "search": "<?php echo $search; ?> " }, <?php } ?> "pagingType": "full", "columnDefs": [ { "sortable": false, "targets": 0 }, { "visible": false, "targets": 1 } ], "buttons": [ 'csv', 'print', { extend: 'colvis', columns: [2,3,4,5,6,7,8,9,10,11] } ] } ); } ); </script> <?php } ?> <div class='tablenav'> <div class="alignleft actions"><br class='clear' /> </div> <br class='clear' /> </div> </div> </form> </div> </div> <?php }
function eme_events_table($message = "", $scope = "future") { global $eme_timezone; if (!empty($message)) { echo "<div id='message' class='updated fade'><p>" . eme_trans_sanitize_html($message) . "</p></div>"; } //$list_limit = get_option('eme_events_admin_limit'); //if ($list_limit<5 || $list_limit>200) { // $list_limit=20; // update_option('eme_events_admin_limit',$list_limit); //} //$offset = isset($_GET['offset']) ? intval($_GET['offset']) : 0; //$events = eme_get_events ( $limit+1, "future", "ASC", $offset ); $o_category = isset($_GET['category']) ? intval($_GET['category']) : 0; $status = isset($_GET['event_status']) ? intval($_GET['event_status']) : ''; if (!empty($status)) { $extra_conditions = 'event_status = ' . $status; } else { $extra_conditions = ''; } //$events = eme_get_events ( 0, $scope, "ASC", $offset, "", $o_category, '', '', 1, '', 0, $extra_conditions); $events = eme_get_events(0, $scope, "ASC", 0, "", $o_category, '', '', 1, '', 0, $extra_conditions); $events_count = count($events); $scope_names = array(); $scope_names['past'] = __('Past events', 'eme'); $scope_names['all'] = __('All events', 'eme'); $scope_names['future'] = __('Future events', 'eme'); ?> <div class="wrap"> <div id="icon-events" class="icon32"><br /> </div> <h1><?php echo $scope_names[$scope]; ?> </h1> <?php admin_show_warnings(); ?> <!--<div id='new-event' class='switch-tab'><a href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=edit_event"); ?> ><?php _e('New Event ...', 'eme'); ?> </a></div>--> <?php $event_status_array = eme_status_array(); ?> <div class="tablenav"> <form id="posts-filter" action="" method="get"> <input type='hidden' name='page' value='events-manager' /> <select name="scope"> <?php foreach ($scope_names as $key => $value) { $selected = ""; if ($key == $scope) { $selected = "selected='selected'"; } echo "<option value='{$key}' {$selected}>{$value}</option> "; } ?> </select> <select id="event_status" name="event_status"> <option value="0"><?php _e('Event Status', 'eme'); ?> </option> <?php foreach ($event_status_array as $event_status_key => $event_status_value) { ?> <option value="<?php echo $event_status_key; ?> " <?php if (isset($_GET['event_status']) && $_GET['event_status'] == $event_status_key) { echo 'selected="selected"'; } ?> ><?php echo $event_status_value; ?> </option> <?php } ?> </select> <select name="category"> <option value='0'><?php _e('All categories', 'eme'); ?> </option> <?php $categories = eme_get_categories(); foreach ($categories as $category) { $selected = ""; if ($o_category == $category['category_id']) { $selected = "selected='selected'"; } echo "<option value='" . $category['category_id'] . "' {$selected}>" . $category['category_name'] . "</option>"; } ?> </select> <input id="post-query-submit" class="button-secondary" type="submit" value="<?php _e('Filter'); ?> " /> </form> <?php if ($events_count > 0) { ?> <form id="eme_events_listform" action="" method="get"> <input type='hidden' name='page' value='events-manager' /> <select name="eme_admin_action"> <option value="-1" selected="selected"><?php _e('Bulk Actions'); ?> </option> <option value="deleteEvents"><?php _e('Delete selected events', 'eme'); ?> </option> <option value="deleteRecurrence"><?php _e('Delete selected recurrent events', 'eme'); ?> </option> <option value="publicEvents"><?php _e('Publish selected events', 'eme'); ?> </option> <option value="privateEvents"><?php _e('Make selected events private', 'eme'); ?> </option> <option value="draftEvents"><?php _e('Make selected events draft', 'eme'); ?> </option> </select> <input type="submit" value="<?php _e('Apply'); ?> " name="doaction2" id="doaction2" class="button-secondary action" /> <div class="clear"></div> <br /> <table class="widefat hover stripe" id="eme_admin_events"> <thead> <tr> <th class='manage-column column-cb check-column' scope='col'><input class='select-all' type="checkbox" value='1' /></th> <th><?php _e('ID', 'eme'); ?> </th> <th><?php _e('Name', 'eme'); ?> </th> <th><?php _e('Status', 'eme'); ?> </th> <th><?php _e('Copy', 'eme'); ?> </th> <th><?php _e('Location', 'eme'); ?> </th> <th><?php _e('Date and time', 'eme'); ?> </th> <th><?php _e('Recurrence info', 'eme'); ?> </th> </tr> </thead> <tbody> <?php $eme_date_obj = new ExpressiveDate(null, $eme_timezone); $today = $eme_date_obj->getDate(); foreach ($events as $event) { $localised_start_date = eme_localised_date($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $localised_start_time = eme_localised_time($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $localised_end_date = eme_localised_date($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); $localised_end_time = eme_localised_time($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); $datasort_startstring = strtotime($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); $location_summary = ""; if (isset($event['location_id']) && $event['location_id']) { $location = eme_get_location($event['location_id']); $location_summary = "<b>" . eme_trans_sanitize_html($location['location_name']) . "</b><br />" . eme_trans_sanitize_html($location['location_address']) . " - " . eme_trans_sanitize_html($location['location_town']); } $style = ""; if ($event['event_start_date'] < $today) { $style = "style ='background-color: #FADDB7;'"; } ?> <tr <?php echo "{$style}"; ?> > <td><input type='checkbox' class='row-selector' value='<?php echo $event['event_id']; ?> ' name='events[]' /></td> <td><?php echo $event['event_id']; ?> </td> <td><strong> <a class="row-title" href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=edit_event&event_id=" . $event['event_id']); ?> " title="<?php _e('Edit event', 'eme'); ?> "><?php echo eme_trans_sanitize_html($event['event_name']); ?> </a> </strong> <?php $categories = explode(',', $event['event_category_ids']); foreach ($categories as $cat) { $category = eme_get_category($cat); if ($category) { echo "<br /><span title='" . __('Category', 'eme') . ": " . eme_trans_sanitize_html($category['category_name']) . "'>" . eme_trans_sanitize_html($category['category_name']) . "</span>"; } } if ($event['event_rsvp']) { $booked_seats = eme_get_booked_seats($event['event_id']); $available_seats = eme_get_available_seats($event['event_id']); $pending_seats = eme_get_pending_seats($event['event_id']); $total_seats = $event['event_seats']; if (eme_is_multi($event['event_seats'])) { $available_seats_string = $available_seats . ' (' . eme_convert_array2multi(eme_get_available_multiseats($event['event_id'])) . ')'; $pending_seats_string = $pending_seats . ' (' . eme_convert_array2multi(eme_get_pending_multiseats($event['event_id'])) . ')'; $total_seats_string = eme_get_multitotal($total_seats) . ' (' . $event['event_seats'] . ')'; } else { $available_seats_string = $available_seats; $pending_seats_string = $pending_seats; $total_seats_string = $total_seats; } if ($pending_seats > 0) { echo "<br />" . __('RSVP Info: ', 'eme') . __('Free: ', 'eme') . $available_seats_string . ", " . __('Pending: ', 'eme') . $pending_seats_string . ", " . __('Max: ', 'eme') . $total_seats_string; } else { echo "<br />" . __('RSVP Info: ', 'eme') . __('Free: ', 'eme') . $available_seats_string . ", " . __('Max: ', 'eme') . $total_seats_string; } if ($booked_seats > 0 || $pending_seats > 0) { $printable_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_printable&event_id=" . $event['event_id']); $csv_address = admin_url("admin.php?page=eme-people&eme_admin_action=booking_csv&event_id=" . $event['event_id']); echo " (<a id='booking_printable_" . $event['event_id'] . "' href='{$printable_address}'>" . __('Printable view', 'eme') . "</a>)"; echo " (<a id='booking_csv_" . $event['event_id'] . "' href='{$csv_address}'>" . __('CSV export', 'eme') . "</a>)"; } } ?> </td> <td> <?php if (isset($event_status_array[$event['event_status']])) { echo $event_status_array[$event['event_status']]; $event_url = eme_event_url($event); if ($event['event_status'] == STATUS_DRAFT) { echo "<br /> <a href='{$event_url}'>" . __('Preview event', 'eme') . "</a>"; } else { echo "<br /> <a href='{$event_url}'>" . __('View event', 'eme') . "</a>"; } } ?> </td> <td> <a href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=duplicate_event&event_id=" . $event['event_id']); ?> " title="<?php _e('Duplicate this event', 'eme'); ?> "><img src='<?php echo EME_PLUGIN_URL . "images/copy_24.png"; ?> '/></a> </td> <td> <?php echo $location_summary; ?> </td> <td data-sort="<?php echo $datasort_startstring; ?> "> <?php echo $localised_start_date; if ($localised_end_date != '' && $localised_end_date != $localised_start_date) { echo " - " . $localised_end_date; } ?> <br /> <?php if ($event['event_properties']['all_day'] == 1) { _e('All day', 'eme'); } else { echo "{$localised_start_time} - {$localised_end_time}"; } ?> </td> <td> <?php if ($event['recurrence_id']) { $recurrence_desc = eme_get_recurrence_desc($event['recurrence_id']); ?> <b><?php echo $recurrence_desc; ?> <br /> <a href="<?php echo admin_url("admin.php?page=events-manager&eme_admin_action=edit_recurrence&recurrence_id=" . $event['recurrence_id']); ?> "><?php print sprintf(__('Edit Recurrence ID %d', 'eme'), $event['recurrence_id']); ?> </a></b> <?php } ?> </td> </tr> <?php } ?> </tbody> </table> </form> <?php } else { echo "<div id='events-admin-no-events'>" . get_option('eme_no_events_message') . "</div></div>"; } ?> <script type="text/javascript"> jQuery(document).ready( function() { jQuery('#eme_admin_events').dataTable( { "dom": 'Blfrtip', "colReorder": true, <?php $locale_code = get_locale(); $locale_file = EME_PLUGIN_DIR . "js/jquery-datatables/i18n/{$locale_code}.json"; $locale_file_url = EME_PLUGIN_URL . "js/jquery-datatables/i18n/{$locale_code}.json"; if ($locale_code != "en_US" && file_exists($locale_file)) { ?> "language": { "url": "<?php echo $locale_file_url; ?> " }, <?php } ?> "stateSave": true, "pagingType": "full", "columnDefs": [ { "sortable": false, "targets": [0,4,7] } ], "buttons": [ 'csv', 'print', { extend: 'colvis', columns: ':not(:first-child)' } ] } ); } ); </script> </div> </div> <?php }
function eme_get_calendar($args = "") { global $wp_locale; global $wpdb, $eme_timezone; // the calendar is being used, so we need the jquery for the calendar global $eme_need_calendar_js; $eme_need_calendar_js = 1; $defaults = array('category' => 0, 'notcategory' => 0, 'full' => 0, 'month' => '', 'year' => '', 'echo' => 1, 'long_events' => 0, 'author' => '', 'contact_person' => '', 'location_id' => '', 'template_id' => 0); $r = wp_parse_args($args, $defaults); extract($r); $echo = $echo === "true" || $echo === "1" ? true : $echo; $full = $full === "true" || $full === "1" ? true : $full; $long_events = $long_events === "true" || $long_events === "1" ? true : $long_events; $echo = $echo === "false" || $echo === "0" ? false : $echo; $full = $full === "false" || $full === "0" ? false : $full; $long_events = $long_events === "false" || $long_events === "0" ? false : $long_events; // this comes from global wordpress preferences $start_of_week = get_option('start_of_week'); $eme_date_obj = new ExpressiveDate(null, $eme_timezone); if (get_option('eme_use_client_clock') && isset($_SESSION['eme_client_mday']) && isset($_SESSION['eme_client_month']) && isset($_SESSION['eme_client_fullyear'])) { // these come from client unless their clock is wrong $iNowDay = sprintf("%02d", $_SESSION['eme_client_mday']); $iNowMonth = sprintf("%02d", $_SESSION['eme_client_month']); $iNowYear = sprintf("%04d", $_SESSION['eme_client_fullyear']); } else { // Get current year, month and day list($iNowYear, $iNowMonth, $iNowDay) = explode('-', $eme_date_obj->getDate()); } $iSelectedYear = $year; $iSelectedMonth = $month; if ($iSelectedMonth == '') { $iSelectedMonth = $iNowMonth; } if ($iSelectedYear == '') { $iSelectedYear = $iNowYear; } $iSelectedMonth = sprintf("%02d", $iSelectedMonth); // Get name and number of days of specified month $eme_date_obj->setDay(1); $eme_date_obj->setMonth($iSelectedMonth); $eme_date_obj->setYear($iSelectedYear); // Get friendly month name, but since DateTime::format doesn't respect the locale, we need eme_localised_date if ($full) { list($sMonthName, $iDaysInMonth) = explode('-', eme_localised_date($eme_date_obj->getDate(), 'F-t')); } else { list($sMonthName, $iDaysInMonth) = explode('-', eme_localised_date($eme_date_obj->getDate(), 'M-t')); } // take into account some locale info: some always best show full month name, some show month after year, some have a year suffix $locale_code = substr(get_locale(), 0, 2); $showMonthAfterYear = 0; $yearSuffix = ""; switch ($locale_code) { case "hu": $showMonthAfterYear = 1; break; case "ja": $showMonthAfterYear = 1; $sMonthName = eme_localised_date($eme_date_obj->getDate(), 'F'); $yearSuffix = "年"; break; case "ko": $showMonthAfterYear = 1; $sMonthName = eme_localised_date($eme_date_obj->getDate(), 'F'); $yearSuffix = "년"; break; case "zh": $showMonthAfterYear = 1; $sMonthName = eme_localised_date($eme_date_obj->getDate(), 'F'); $yearSuffix = "年"; break; } if ($showMonthAfterYear) { $cal_datestring = "{$iSelectedYear}{$yearSuffix} {$sMonthName}"; } else { $cal_datestring = "{$sMonthName} {$iSelectedYear}{$yearSuffix}"; } // Get previous year and month $iPrevYear = $iSelectedYear; $iPrevMonth = $iSelectedMonth - 1; if ($iPrevMonth <= 0) { $iPrevYear--; $iPrevMonth = 12; // set to December } $iPrevMonth = sprintf("%02d", $iPrevMonth); // Get next year and month $iNextYear = $iSelectedYear; $iNextMonth = $iSelectedMonth + 1; if ($iNextMonth > 12) { $iNextYear++; $iNextMonth = 1; } $iNextMonth = sprintf("%02d", $iNextMonth); // Get number of days of previous month $eme_date_obj2 = new ExpressiveDate(null, $eme_timezone); $eme_date_obj2->setDay(1); $eme_date_obj2->setMonth($iPrevMonth); $eme_date_obj2->setYear($iPrevYear); $iPrevDaysInMonth = (int) $eme_date_obj2->getDaysInMonth(); // Get numeric representation of the day of the week of the first day of specified (current) month // remember: first day of week is a Sunday // if you want the day of the week to begin on Monday: start_of_week=1, Tuesday: start_of_week=2, etc ... // So, if e.g. the month starts on a Sunday and start_of_week=1 (Monday), then $iFirstDayDow is 6 $iFirstDayDow = (int) $eme_date_obj->getDayOfWeekAsNumeric() - $start_of_week; if ($iFirstDayDow < 0) { $iFirstDayDow += 7; } // On what day the previous month begins $iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1; // we'll look for events in the requested month and 7 days before and after $calbegin = "{$iPrevYear}-{$iPrevMonth}-{$iPrevShowFrom}"; $calend = "{$iNextYear}-{$iNextMonth}-07"; $events = eme_get_events(0, "{$calbegin}--{$calend}", "ASC", 0, $location_id, $category, $author, $contact_person, 1, $notcategory); $eventful_days = array(); if ($events) { //Go through the events and slot them into the right d-m index foreach ($events as $event) { if ($event['event_status'] == STATUS_PRIVATE && !is_user_logged_in()) { continue; } $eme_date_obj_end = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); $eme_date_obj_now = new ExpressiveDate(null, $eme_timezone); if (get_option('eme_cal_hide_past_events') && $eme_date_obj_end->lessThan($eme_date_obj_now)) { continue; } if ($long_events) { //If $long_events is set then show a date as eventful if there is an multi-day event which runs during that day $eme_date_obj_tmp = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); if ($eme_date_obj_end->lessThan($eme_date_obj_tmp)) { $eme_date_obj_end = $eme_date_obj_tmp->copy(); } $day_count = 0; while ($eme_date_obj_tmp->lessOrEqualTo($eme_date_obj_end)) { $event_eventful_date = $eme_date_obj_tmp->getDate(); //Only show events on the day that they start if (isset($eventful_days[$event_eventful_date]) && is_array($eventful_days[$event_eventful_date])) { $eventful_days[$event_eventful_date][] = $event; } else { $eventful_days[$event_eventful_date] = array($event); } $eme_date_obj_tmp->addOneDay(); } } else { //Only show events on the day that they start if (isset($eventful_days[$event['event_start_date']]) && is_array($eventful_days[$event['event_start_date']])) { $eventful_days[$event['event_start_date']][] = $event; } else { $eventful_days[$event['event_start_date']] = array($event); } } } } // we found all the events for the wanted days, now get them in the correct format with a good link if ($template_id) { $event_format = eme_get_template_format($template_id); } else { $event_format = get_option('eme_full_calendar_event_format'); } $event_title_format = get_option('eme_small_calendar_event_title_format'); $event_title_separator_format = get_option('eme_small_calendar_event_title_separator'); $cells = array(); foreach ($eventful_days as $day_key => $events) { // Set the date into the key $events_titles = array(); foreach ($events as $event) { $events_titles[] = eme_replace_placeholders($event_title_format, $event, "text"); } $link_title = implode($event_title_separator_format, $events_titles); $cal_day_link = eme_calendar_day_url($day_key); // Let's add the possible options // template_id is not being used per event if (!empty($location_id)) { $cal_day_link = add_query_arg(array('location_id' => $location_id), $cal_day_link); } if (!empty($category)) { $cal_day_link = add_query_arg(array('category' => $category), $cal_day_link); } if (!empty($notcategory)) { $cal_day_link = add_query_arg(array('notcategory' => $scope), $cal_day_link); } if (!empty($author)) { $cal_day_link = add_query_arg(array('author' => $author), $cal_day_link); } if (!empty($contact_person)) { $cal_day_link = add_query_arg(array('contact_person' => $contact_person), $cal_day_link); } $event_date = explode('-', $day_key); $event_day = ltrim($event_date[2], '0'); $cells[$day_key] = "<a title='{$link_title}' href='{$cal_day_link}'>{$event_day}</a>"; if ($full) { $cells[$day_key] .= "<ul class='eme-calendar-day-event'>"; foreach ($events as $event) { $cells[$day_key] .= eme_replace_placeholders($event_format, $event); } $cells[$day_key] .= "</ul>"; } } // If previous month $isPreviousMonth = $iFirstDayDow > 0; // Initial day on the calendar $iCalendarDay = $isPreviousMonth ? $iPrevShowFrom : 1; $isNextMonth = false; $sCalTblRows = ''; // Generate rows for the calendar for ($i = 0; $i < 6; $i++) { // 6-weeks range if ($isNextMonth) { continue; } $sCalTblRows .= "<tr>"; for ($j = 0; $j < 7; $j++) { // 7 days a week // we need the calendar day with 2 digits for the planned events $iCalendarDay_padded = sprintf("%02d", $iCalendarDay); if ($isPreviousMonth) { $calstring = "{$iPrevYear}-{$iPrevMonth}-{$iCalendarDay_padded}"; } elseif ($isNextMonth) { $calstring = "{$iNextYear}-{$iNextMonth}-{$iCalendarDay_padded}"; } else { $calstring = "{$iSelectedYear}-{$iSelectedMonth}-{$iCalendarDay_padded}"; } // each day in the calendar has the name of the day as a class by default $eme_date_obj = new ExpressiveDate($calstring, $eme_timezone); $sClass = $eme_date_obj->format('D'); if (isset($cells[$calstring])) { if ($isPreviousMonth) { $sClass .= " eventful-pre event-day-{$iCalendarDay}"; } elseif ($isNextMonth) { $sClass .= " eventful-post event-day-{$iCalendarDay}"; } elseif ($calstring == "{$iNowYear}-{$iNowMonth}-{$iNowDay}") { $sClass .= " eventful-today event-day-{$iCalendarDay}"; } else { $sClass .= " eventful event-day-{$iCalendarDay}"; } $sCalTblRows .= '<td class="' . $sClass . '">' . $cells[$calstring] . "</td>\n"; } else { if ($isPreviousMonth) { $sClass .= " eventless-pre"; } elseif ($isNextMonth) { $sClass .= " eventless-post"; } elseif ($calstring == "{$iNowYear}-{$iNowMonth}-{$iNowDay}") { $sClass .= " eventless-today"; } else { $sClass .= " eventless"; } $sCalTblRows .= '<td class="' . $sClass . '">' . $iCalendarDay . "</td>\n"; } // Next day $iCalendarDay++; if ($isPreviousMonth && $iCalendarDay > $iPrevDaysInMonth) { $isPreviousMonth = false; $iCalendarDay = 1; } if (!$isPreviousMonth && !$isNextMonth && $iCalendarDay > $iDaysInMonth) { $isNextMonth = true; $iCalendarDay = 1; } } $sCalTblRows .= "</tr>\n"; } $weekdays = array(__('Sunday'), __('Monday'), __('Tuesday'), __('Wednesday'), __('Thursday'), __('Friday'), __('Saturday')); $sCalDayNames = ""; // respect the beginning of the week offset for ($i = $start_of_week; $i < $start_of_week + 7; $i++) { $j = $i; if ($j == 7) { $j -= 7; } if ($full) { $sCalDayNames .= "<td>" . $wp_locale->get_weekday_abbrev($weekdays[$j]) . "</td>"; } else { $sCalDayNames .= "<td>" . $wp_locale->get_weekday_initial($weekdays[$j]) . "</td>"; } } // the real links are created via jquery when clicking on the prev-month or next-month class-links $previous_link = "<a class='prev-month' href=\"#\"><<</a>"; $next_link = "<a class='next-month' href=\"#\">>></a>"; $random = rand(100, 200); $full ? $class = 'eme-calendar-full' : ($class = 'eme-calendar'); $calendar = "<div class='{$class}' id='eme-calendar-{$random}'>"; if ($full) { $fullclass = 'fullcalendar'; $head = "<td class='month_name' colspan='7'>{$previous_link} {$next_link} {$cal_datestring}</td>\n"; } else { $fullclass = ''; $head = "<td>{$previous_link}</td><td class='month_name' colspan='5'>{$cal_datestring}</td><td>{$next_link}</td>\n"; } // Build the heading portion of the calendar table $calendar .= "<table class='eme-calendar-table {$fullclass}'>\n" . "<thead>\n<tr>\n" . $head . "</tr>\n</thead>\n" . "<tr class='days-names'>\n" . $sCalDayNames . "</tr>\n"; $calendar .= $sCalTblRows; $calendar .= "</table>\n</div>"; // we generate the onclick javascript per calendar div // this is important if more than one calendar exists on the page $calendar .= "<script type='text/javascript'>\n jQuery('#eme-calendar-" . $random . " a.prev-month').click(function(e){\n e.preventDefault();\n tableDiv = jQuery('#eme-calendar-" . $random . "');\n loadCalendar(tableDiv, '{$full}', '{$long_events}','{$iPrevMonth}','{$iPrevYear}','{$category}','{$author}','{$contact_person}','{$location_id}','{$notcategory}','{$template_id}');\n } );\n jQuery('#eme-calendar-" . $random . " a.next-month').click(function(e){\n e.preventDefault();\n tableDiv = jQuery('#eme-calendar-" . $random . "');\n loadCalendar(tableDiv, '{$full}', '{$long_events}','{$iNextMonth}','{$iNextYear}','{$category}','{$author}','{$contact_person}','{$location_id}','{$notcategory}','{$template_id}');\n } );\n </script>"; $output = $calendar; if ($echo) { echo $output; } else { return $output; } }