function _eme_are_dates_valid($date) { // if it is a series of dates if (strstr($date, ',')) { $dates=explode(',',$date); foreach ( $dates as $date ) { if (!_eme_is_date_valid($date)) return false; } } return true; }
function eme_events_page() { global $wpdb, $eme_timezone; $extra_conditions = array(); $action = isset($_GET['eme_admin_action']) ? $_GET['eme_admin_action'] : ''; $event_ID = isset($_GET['event_id']) ? intval($_GET['event_id']) : ''; $recurrence_ID = isset($_GET['recurrence_id']) ? intval($_GET['recurrence_id']) : ''; $selectedEvents = isset($_GET['events']) ? $_GET['events'] : ''; $current_userid = get_current_user_id(); // if the delete event button is pushed while editing an event, set the action if (isset($_POST['event_delete_button'])) { $selectedEvents = array($event_ID); $action = "deleteEvents"; } // if the delete recurrence button is pushed while editing a recurrence, set the action if (isset($_POST['event_deleteRecurrence_button'])) { $recurrence = eme_get_recurrence($recurrence_ID); $selectedEvents = array($recurrence['event_id']); $action = "deleteRecurrence"; } // in case some generic actions were taken (like disable hello or disable donate), ignore all other actions if (isset($_GET['disable_hello_to_user']) || isset($_GET['disable_donate_message']) || isset($_GET['dbupdate']) || isset($_GET['disable_legacy_warning'])) { $action = ""; } if ($action == 'publicEvents') { if (current_user_can(get_option('eme_cap_edit_events'))) { eme_change_event_state($selectedEvents, STATUS_PUBLIC); $feedback_message = __('Event(s) published!', 'eme'); } else { $feedback_message = __('You have no right to edit events!', 'eme'); } eme_events_table($feedback_message); return; } if ($action == 'privateEvents') { if (current_user_can(get_option('eme_cap_edit_events'))) { eme_change_event_state($selectedEvents, STATUS_PRIVATE); $feedback_message = __('Event(s) made private!', 'eme'); } else { $feedback_message = __('You have no right to edit events!', 'eme'); } eme_events_table($feedback_message); return; } if ($action == 'draftEvents') { if (current_user_can(get_option('eme_cap_edit_events'))) { eme_change_event_state($selectedEvents, STATUS_DRAFT); $feedback_message = __('Event(s) changed to draft!', 'eme'); } else { $feedback_message = __('You have no right to edit events!', 'eme'); } eme_events_table($feedback_message); return; } // DELETE action (either from the event list, or when the delete button is pushed while editing an event) if ($action == 'deleteEvents') { if (current_user_can(get_option('eme_cap_edit_events'))) { foreach ($selectedEvents as $event_ID) { $tmp_event = array(); $tmp_event = eme_get_event($event_ID); if ($tmp_event['recurrence_id'] > 0) { # if the event is part of a recurrence and it is the last event of the recurrence, delete the recurrence # else just delete the singe event if (eme_recurrence_count($tmp_event['recurrence_id']) == 1) { $tmp_recurrence = eme_get_recurrence($tmp_event['recurrence_id']); eme_db_delete_recurrence($tmp_event, $tmp_recurrence); } else { eme_db_delete_event($tmp_event); } } else { eme_db_delete_event($tmp_event); } } $feedback_message = __('Event(s) deleted!', 'eme'); } else { $feedback_message = __('You have no right to delete events!', 'eme'); } eme_events_table($feedback_message); return; } // DELETE action (either from the event list, or when the delete button is pushed while editing a recurrence) if ($action == 'deleteRecurrence') { if (current_user_can(get_option('eme_cap_edit_events'))) { foreach ($selectedEvents as $event_ID) { $tmp_event = array(); $tmp_event = eme_get_event($event_ID); if ($tmp_event['recurrence_id'] > 0) { $tmp_recurrence = eme_get_recurrence($tmp_event['recurrence_id']); eme_db_delete_recurrence($tmp_event, $tmp_recurrence); } } $feedback_message = __('Event(s) deleted!', 'eme'); } else { $feedback_message = __('You have no right to delete events!', 'eme'); } eme_events_table($feedback_message); return; } // UPDATE or CREATE action if ($action == 'insert_event' || $action == 'update_event' || $action == 'update_recurrence') { if (!(current_user_can(get_option('eme_cap_add_event')) || current_user_can(get_option('eme_cap_edit_events')))) { $feedback_message = __('You have no right to insert or update events', 'eme'); eme_events_table($feedback_message); return; } $event = array(); $location = eme_new_location(); $event['event_name'] = isset($_POST['event_name']) ? trim(stripslashes($_POST['event_name'])) : ''; if (!current_user_can(get_option('eme_cap_publish_event'))) { $event['event_status'] = STATUS_DRAFT; } else { $event['event_status'] = isset($_POST['event_status']) ? stripslashes($_POST['event_status']) : get_option('eme_event_initial_state'); } $event['event_start_date'] = isset($_POST['event_start_date']) ? $_POST['event_start_date'] : ''; // for compatibility: check also the POST variable event_date $event['event_start_date'] = isset($_POST['event_date']) ? $_POST['event_date'] : $event['event_start_date']; $event['event_end_date'] = isset($_POST['event_end_date']) ? $_POST['event_end_date'] : ''; if (!_eme_is_date_valid($event['event_start_date'])) { $event['event_start_date'] = ""; } if (!_eme_is_date_valid($event['event_end_date'])) { $event['event_end_date'] = ""; } $eme_date_obj = new ExpressiveDate(null, $eme_timezone); if (isset($_POST['event_start_time']) && !empty($_POST['event_start_time'])) { $event['event_start_time'] = $eme_date_obj->setTimestampFromString($_POST['event_start_time'] . " " . $eme_timezone)->format("H:i:00"); } else { $event['event_start_time'] = "00:00:00"; } if (isset($_POST['event_end_time']) && !empty($_POST['event_end_time'])) { $event['event_end_time'] = $eme_date_obj->setTimestampFromString($_POST['event_end_time'] . " " . $eme_timezone)->format("H:i:00"); } else { $event['event_end_time'] = "00:00:00"; } $recurrence['recurrence_freq'] = isset($_POST['recurrence_freq']) ? $_POST['recurrence_freq'] : ''; if ($recurrence['recurrence_freq'] == 'specific') { $recurrence['recurrence_specific_days'] = isset($_POST['recurrence_start_date']) ? $_POST['recurrence_start_date'] : $event['event_start_date']; $recurrence['recurrence_start_date'] = ""; $recurrence['recurrence_end_date'] = ""; } else { $recurrence['recurrence_specific_days'] = ""; $recurrence['recurrence_start_date'] = isset($_POST['recurrence_start_date']) ? $_POST['recurrence_start_date'] : $event['event_start_date']; $recurrence['recurrence_end_date'] = isset($_POST['recurrence_end_date']) ? $_POST['recurrence_end_date'] : $event['event_end_date']; } if (!_eme_is_date_valid($recurrence['recurrence_start_date'])) { $recurrence['recurrence_start_date'] = ""; } if (!_eme_is_date_valid($recurrence['recurrence_end_date'])) { $recurrence['recurrence_end_date'] = $recurrence['recurrence_start_date']; } if (!_eme_are_dates_valid($recurrence['recurrence_specific_days'])) { $recurrence['recurrence_specific_days'] = ""; } if ($recurrence['recurrence_freq'] == 'weekly') { if (isset($_POST['recurrence_bydays'])) { $recurrence['recurrence_byday'] = implode(",", $_POST['recurrence_bydays']); } else { $recurrence['recurrence_byday'] = ''; } } else { if (isset($_POST['recurrence_byday'])) { $recurrence['recurrence_byday'] = $_POST['recurrence_byday']; } else { $recurrence['recurrence_byday'] = ''; } } $recurrence['recurrence_interval'] = isset($_POST['recurrence_interval']) ? $_POST['recurrence_interval'] : 1; if ($recurrence['recurrence_interval'] == 0) { $recurrence['recurrence_interval'] = 1; } $recurrence['recurrence_byweekno'] = isset($_POST['recurrence_byweekno']) ? $_POST['recurrence_byweekno'] : ''; $event['event_rsvp'] = isset($_POST['event_rsvp']) && is_numeric($_POST['event_rsvp']) ? $_POST['event_rsvp'] : 0; $event['rsvp_number_days'] = isset($_POST['rsvp_number_days']) && is_numeric($_POST['rsvp_number_days']) ? $_POST['rsvp_number_days'] : 0; $event['rsvp_number_hours'] = isset($_POST['rsvp_number_hours']) && is_numeric($_POST['rsvp_number_hours']) ? $_POST['rsvp_number_hours'] : 0; $event['registration_requires_approval'] = isset($_POST['registration_requires_approval']) && is_numeric($_POST['registration_requires_approval']) ? $_POST['registration_requires_approval'] : 0; $event['registration_wp_users_only'] = isset($_POST['registration_wp_users_only']) && is_numeric($_POST['registration_wp_users_only']) ? $_POST['registration_wp_users_only'] : 0; $event['event_seats'] = isset($_POST['event_seats']) ? $_POST['event_seats'] : 0; if (preg_match("/\\|\\|/", $event['event_seats'])) { $multiseat = preg_split("/\\|\\|/", $event['event_seats']); foreach ($multiseat as $key => $value) { if (!is_numeric($value)) { $multiseat[$key] = 0; } } $event['event_seats'] = eme_convert_array2multi($multiseat); } else { if (!is_numeric($event['event_seats'])) { $event['event_seats'] = 0; } } $event['use_paypal'] = isset($_POST['use_paypal']) && is_numeric($_POST['use_paypal']) ? $_POST['use_paypal'] : 0; $event['use_2co'] = isset($_POST['use_2co']) && is_numeric($_POST['use_2co']) ? $_POST['use_2co'] : 0; $event['use_webmoney'] = isset($_POST['use_webmoney']) && is_numeric($_POST['use_webmoney']) ? $_POST['use_webmoney'] : 0; $event['use_fdgg'] = isset($_POST['use_fdgg']) && is_numeric($_POST['use_fdgg']) ? $_POST['use_fdgg'] : 0; $event['use_mollie'] = isset($_POST['use_mollie']) && is_numeric($_POST['use_mollie']) ? $_POST['use_mollie'] : 0; $event['use_sagepay'] = isset($_POST['use_sagepay']) && is_numeric($_POST['use_sagepay']) ? $_POST['use_sagepay'] : 0; $event['price'] = isset($_POST['price']) ? $_POST['price'] : 0; if (preg_match("/\\|\\|/", $event['price'])) { $multiprice = preg_split("/\\|\\|/", $event['price']); foreach ($multiprice as $key => $value) { if (!is_numeric($value)) { $multiprice[$key] = 0; } } $event['price'] = eme_convert_array2multi($multiprice); } else { if (!is_numeric($event['price'])) { $event['price'] = 0; } } $event['currency'] = isset($_POST['currency']) ? $_POST['currency'] : ""; if (isset($_POST['event_contactperson_id']) && $_POST['event_contactperson_id'] != '') { $event['event_contactperson_id'] = $_POST['event_contactperson_id']; } else { $event['event_contactperson_id'] = 0; } //if (! _eme_is_time_valid ( $event_end_time )) // $event_end_time = $event_start_time; $location['location_name'] = isset($_POST['location_name']) ? trim(stripslashes($_POST['location_name'])) : ''; $location['location_address'] = isset($_POST['location_address']) ? stripslashes($_POST['location_address']) : ''; $location['location_town'] = isset($_POST['location_town']) ? stripslashes($_POST['location_town']) : ''; $location['location_latitude'] = isset($_POST['location_latitude']) ? $_POST['location_latitude'] : ''; $location['location_longitude'] = isset($_POST['location_longitude']) ? $_POST['location_longitude'] : ''; $location['location_author'] = $current_userid; $location['location_description'] = ""; //switched to WP TinyMCE field //$event['event_notes'] = stripslashes ( $_POST['event_notes'] ); $event['event_notes'] = isset($_POST['content']) ? stripslashes($_POST['content']) : ''; $event['event_page_title_format'] = isset($_POST['event_page_title_format']) ? stripslashes($_POST['event_page_title_format']) : ''; $event['event_single_event_format'] = isset($_POST['event_single_event_format']) ? stripslashes($_POST['event_single_event_format']) : ''; $event['event_contactperson_email_body'] = isset($_POST['event_contactperson_email_body']) ? stripslashes($_POST['event_contactperson_email_body']) : ''; $event['event_registration_recorded_ok_html'] = isset($_POST['event_registration_recorded_ok_html']) ? stripslashes($_POST['event_registration_recorded_ok_html']) : ''; $event['event_respondent_email_body'] = isset($_POST['event_respondent_email_body']) ? stripslashes($_POST['event_respondent_email_body']) : ''; $event['event_registration_pending_email_body'] = isset($_POST['event_registration_pending_email_body']) ? stripslashes($_POST['event_registration_pending_email_body']) : ''; $event['event_registration_updated_email_body'] = isset($_POST['event_registration_updated_email_body']) ? stripslashes($_POST['event_registration_updated_email_body']) : ''; $event['event_registration_cancelled_email_body'] = isset($_POST['event_registration_cancelled_email_body']) ? stripslashes($_POST['event_registration_cancelled_email_body']) : ''; $event['event_registration_denied_email_body'] = isset($_POST['event_registration_denied_email_body']) ? stripslashes($_POST['event_registration_denied_email_body']) : ''; $event['event_registration_form_format'] = isset($_POST['event_registration_form_format']) ? stripslashes($_POST['event_registration_form_format']) : ''; $event['event_cancel_form_format'] = isset($_POST['event_cancel_form_format']) ? stripslashes($_POST['event_cancel_form_format']) : ''; $event['event_url'] = isset($_POST['event_url']) ? eme_strip_tags($_POST['event_url']) : ''; $event['event_image_url'] = isset($_POST['event_image_url']) ? eme_strip_tags($_POST['event_image_url']) : ''; $event['event_image_id'] = isset($_POST['event_image_id']) ? intval($_POST['event_image_id']) : 0; $event['event_slug'] = isset($_POST['event_slug']) ? eme_permalink_convert(eme_strip_tags($_POST['event_slug'])) : eme_permalink_convert($event['event_name']); if (isset($_POST['event_category_ids'])) { // the category id's need to begin and end with a comma // this is needed so we can later search for a specific // cat using LIKE '%,$cat,%' $event['event_category_ids'] = ""; foreach ($_POST['event_category_ids'] as $cat) { if (is_numeric($cat)) { if (empty($event['event_category_ids'])) { $event['event_category_ids'] = "{$cat}"; } else { $event['event_category_ids'] .= ",{$cat}"; } } } } else { $event['event_category_ids'] = ""; } $event_attributes = array(); for ($i = 1; isset($_POST["mtm_{$i}_ref"]) && trim($_POST["mtm_{$i}_ref"]) != ''; $i++) { if (trim($_POST["mtm_{$i}_name"]) != '') { $event_attributes[$_POST["mtm_{$i}_ref"]] = stripslashes($_POST["mtm_{$i}_name"]); } } $event['event_attributes'] = serialize($event_attributes); $event_properties = array(); $event_properties = eme_init_event_props($event_properties); foreach ($_POST as $key => $value) { if (preg_match('/eme_prop_(.+)/', $key, $matches)) { $event_properties[$matches[1]] = stripslashes($value); } } $event['event_properties'] = serialize($event_properties); $validation_result = eme_validate_event($event); if ($validation_result != "OK") { // validation unsuccessful echo "<div id='message' class='error '>\n <p>" . __("Ach, there's a problem here:", "eme") . " {$validation_result}</p>\n </div>"; eme_event_form($event, "Edit event {$event_ID}", $event_ID); return; } // validation successful if (isset($_POST['location-select-id']) && $_POST['location-select-id'] != "") { $event['location_id'] = $_POST['location-select-id']; } else { if (empty($location['location_name']) && empty($location['location_address']) && empty($location['location_town'])) { $event['location_id'] = 0; } else { $related_location_id = eme_get_identical_location_id($location['location_name'], $location['location_address'], $location['location_town']); // print_r($related_location); if ($related_location_id) { $event['location_id'] = $related_location_id; } else { $new_location = eme_insert_location($location); if (!$new_location) { echo "<div id='message' class='error '>\n <p>" . __("Could not create the new location for this event: either you don't have the right to insert locations or there's a DB problem.", "eme") . "</p>\n </div>"; return; } $event['location_id'] = $new_location['location_id']; } } } if (!$event_ID && !$recurrence_ID) { $event['event_author'] = $current_userid; // new event or new recurrence if (isset($_POST['repeated_event']) && $_POST['repeated_event']) { //insert new recurrence if (!eme_db_insert_recurrence($event, $recurrence)) { $feedback_message = __('Database insert failed!', 'eme'); } else { $feedback_message = __('New recurrent event inserted!', 'eme'); //if (has_action('eme_insert_event_action')) do_action('eme_insert_event_action',$event); } } else { // INSERT new event if (!eme_db_insert_event($event)) { $feedback_message = __('Database insert failed!', 'eme'); } else { $feedback_message = __('New event successfully inserted!', 'eme'); } } } else { // something exists if ($recurrence_ID) { $tmp_recurrence = eme_get_recurrence($recurrence_ID); if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($tmp_recurrence['event_author'] == $current_userid || $tmp_recurrence['event_contactperson_id'] == $current_userid)) { // UPDATE old recurrence $recurrence['recurrence_id'] = $recurrence_ID; if (eme_db_update_recurrence($event, $recurrence)) { $feedback_message = __('Recurrence updated!', 'eme'); //if (has_action('eme_update_event_action')) do_action('eme_update_event_action',$event); } else { $feedback_message = __('Something went wrong with the recurrence update...', 'eme'); } } else { $feedback_message = sprintf(__("You have no right to update '%s'", 'eme'), $tmp_event['event_name']); } } else { $tmp_event = eme_get_event($event_ID); if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($tmp_event['event_author'] == $current_userid || $tmp_event['event_contactperson_id'] == $current_userid)) { if (isset($_POST['repeated_event']) && $_POST['repeated_event']) { // we go from single event to recurrence: create the recurrence and delete the single event eme_db_insert_recurrence($event, $recurrence); eme_db_delete_event($tmp_event); $feedback_message = __('New recurrent event inserted!', 'eme'); //if (has_action('eme_insert_event_action')) do_action('eme_insert_event_action',$event); } else { // UPDATE old event // unlink from recurrence in case it was generated by one $event['recurrence_id'] = 0; if (eme_db_update_event($event, $event_ID)) { $feedback_message = sprintf(__("Updated '%s'", 'eme'), $event['event_name']); } else { $feedback_message = sprintf(__("Failed to update '%s'", 'eme'), $event['event_name']); } //if (has_action('eme_update_event_action')) do_action('eme_update_event_action',$event); } } else { $feedback_message = sprintf(__("You have no right to update '%s'", 'eme'), $tmp_event['event_name']); } } } //$wpdb->query($sql); eme_events_table($feedback_message); return; } if ($action == 'edit_event') { if (!$event_ID) { if (current_user_can(get_option('eme_cap_add_event'))) { $title = __("Insert New Event", 'eme'); eme_event_form($event, $title, $event_ID); } else { $feedback_message = __('You have no right to add events!', 'eme'); eme_events_table($feedback_message); } } else { $event = eme_get_event($event_ID); if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { // UPDATE event $title = sprintf(__("Edit Event '%s'", 'eme'), $event['event_name']); eme_event_form($event, $title, $event_ID); } else { $feedback_message = sprintf(__("You have no right to update '%s'", 'eme'), $event['event_name']); eme_events_table($feedback_message); } } return; } //Add duplicate event if requested if ($action == 'duplicate_event') { $event = eme_get_event($event_ID); // make it look like a new event unset($event['event_id']); unset($event['recurrence_id']); $event['event_name'] .= __(" (Copy)", "eme"); if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $title = sprintf(__("Edit event copy '%s'", 'eme'), $event['event_name']); eme_event_form($event, $title, 0); } else { $feedback_message = sprintf(__("You have no right to copy '%s'", 'eme'), $event['event_name']); eme_events_table($feedback_message); } return; } if ($action == 'edit_recurrence') { $recurrence = eme_get_recurrence($recurrence_ID); if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($recurrence['event_author'] == $current_userid || $recurrence['event_contactperson_id'] == $current_userid)) { $title = __("Edit Recurrence", 'eme') . " '" . $recurrence['event_name'] . "'"; eme_event_form($recurrence, $title, $recurrence_ID); } else { $feedback_message = __('You have no right to update', 'eme') . " '" . $recurrence['event_name'] . "' !"; eme_events_table($feedback_message); } return; } if ($action == "-1" || $action == "") { // No action, only showing the events list $scope = isset($_GET['scope']) ? $_GET['scope'] : ''; switch ($scope) { case "past": $title = __('Past Events', 'eme'); break; case "all": $title = __('All Events', 'eme'); break; default: $title = __('Future Events', 'eme'); $scope = "future"; } eme_events_table("", $scope); return; } }