getDate() public method

Get a date string in the format of 2012-12-04.
public getDate ( ) : string
return string
Example #1
0
 /**
  * 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;
 }
Example #2
0
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;");
        }
    }
}
Example #5
0
 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;
 }
Example #6
0
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}&amp;eme_admin_action=editRegistration&amp;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&amp;eme_admin_action=edit_event&amp;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&amp;eme_admin_action=booking_printable&amp;event_id=" . $event['event_id']);
                $csv_address = admin_url("admin.php?page=eme-people&amp;eme_admin_action=booking_csv&amp;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 
}
Example #7
0
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&amp;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&amp;eme_admin_action=edit_event&amp;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&amp;eme_admin_action=booking_printable&amp;event_id=" . $event['event_id']);
                    $csv_address = admin_url("admin.php?page=eme-people&amp;eme_admin_action=booking_csv&amp;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&amp;eme_admin_action=duplicate_event&amp;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&amp;eme_admin_action=edit_recurrence&amp;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 
}
Example #8
0
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=\"#\">&lt;&lt;</a>";
    $next_link = "<a class='next-month' href=\"#\">&gt;&gt;</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;
    }
}