/** * Create a rendez vous in draft mode * * @package Rendez Vous * @subpackage Ajax * * @since Rendez Vous (1.0.0) */ function rendez_vous_ajax_create() { check_ajax_referer('rendez-vous-editor', 'nonce'); if (!bp_current_user_can('publish_rendez_vouss')) { wp_send_json_error(__('You cannot create a rendez-vous.', 'rendez-vous')); } // Init the create arguments $args = array('title' => '', 'venue' => '', 'type' => 0, 'description' => '', 'duration' => '', 'days' => array(), 'attendees' => array()); // First attendees $attendees = array_map('absint', $_POST['attendees']); if (empty($attendees)) { wp_send_json_error(__('No users were selected.', 'rendez-vous')); } // Add to create arguments $args['attendees'] = $attendees; // Then fields if (empty($_POST['desc']) || !is_array($_POST['desc'])) { wp_send_json_error(__('Please describe your rendez-vous using the What tab.', 'rendez-vous')); } else { $fields = $_POST['desc']; } $required_fields_missing = array(); foreach ($fields as $field) { if ('required' == $field['class'] && empty($field['value'])) { $required_fields_missing[] = $field['label']; } // Add to create arguments $args[$field['id']] = $field['value']; } // Required fields are missing if (!empty($required_fields_missing)) { wp_send_json_error(__('Please make sure to fill all required fields.', 'rendez-vous')); } // Then dates if (empty($_POST['maydates']) || !is_array($_POST['maydates'])) { wp_send_json_error(__('Please define dates for your rendez-vous using the When tab.', 'rendez-vous')); } else { $dates = $_POST['maydates']; } $maydates = array(); $maydates_errors = array(); foreach ($dates as $date) { $timestamp = false; if (!empty($date['hour1'])) { if (!preg_match('/^[0-2]?[0-9]:[0-5][0-9]$/', $date['hour1'])) { $maydates_errors[] = $date['hour1']; continue; } $timestamp = strtotime($date['mysql'] . ' ' . $date['hour1']); $maydates[$timestamp] = array(); } if (!empty($date['hour2'])) { if (!preg_match('/^[0-2]?[0-9]:[0-5][0-9]$/', $date['hour2'])) { $maydates_errors[] = $date['hour2']; continue; } $timestamp = strtotime($date['mysql'] . ' ' . $date['hour2']); $maydates[$timestamp] = array(); } if (!empty($date['hour3'])) { if (!preg_match('/^[0-2]?[0-9]:[0-5][0-9]$/', $date['hour3'])) { $maydates_errors[] = $date['hour3']; continue; } $timestamp = strtotime($date['mysql'] . ' ' . $date['hour3']); $maydates[$timestamp] = array(); } } // Check duration format if (!empty($args['duration']) && !preg_match('/^[0-2]?[0-9]:[0-5][0-9]$/', $args['duration'])) { $maydates_errors[] = $args['duration']; } if (!empty($maydates_errors)) { wp_send_json_error(__('Please make sure to respect the format HH:MM when defining time.', 'rendez-vous')); } if (!empty($maydates)) { $args['days'] = $maydates; } if (!empty($_POST['group_id'])) { $args['group_id'] = absint($_POST['group_id']); } $rendez_vous_id = rendez_vous_save($args); if (empty($rendez_vous_id)) { wp_send_json_error(__('The rendez-vous was not created due to an error.', 'rendez-vous')); } else { // url to edit rendez-vous screen wp_send_json_success(esc_url_raw(rendez_vous_get_edit_link($rendez_vous_id, bp_loggedin_user_id()))); } }
/** * Handle rendez-vous actions (group/member contexts) * * @package Rendez Vous * @subpackage Functions * * @since Rendez Vous (1.1.0) * * @return string the rendez-vous screen id */ function rendez_vous_handle_actions() { $action = isset($_GET['action']) ? $_GET['action'] : false; $screen = ''; // Edit template if (!empty($_GET['action']) && 'edit' == $_GET['action'] && !empty($_GET['rdv'])) { $redirect = remove_query_arg(array('rdv', 'action', 'n'), wp_get_referer()); $rendez_vous_id = absint($_GET['rdv']); $rendez_vous = rendez_vous_get_item($rendez_vous_id); if (empty($rendez_vous) || !current_user_can('edit_rendez_vous', $rendez_vous_id)) { bp_core_add_message(__('Rendez-vous could not be found', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } if ('draft' == $rendez_vous->status) { bp_core_add_message(__('Your rendez-vous is in draft mode, check informations and publish!', 'rendez-vous')); } rendez_vous()->item = $rendez_vous; $screen = 'edit'; do_action('rendez_vous_edit_screen'); } // Display single if (!empty($_GET['rdv']) && (empty($action) || !in_array($action, array('edit', 'delete')))) { $redirect = remove_query_arg(array('rdv', 'n', 'action'), wp_get_referer()); $rendez_vous_id = absint($_GET['rdv']); $rendez_vous = rendez_vous_get_item($rendez_vous_id); if (is_null($rendez_vous->organizer)) { bp_core_add_message(__('The rendez-vous was not found.', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } // Public rendez-vous can be seen by anybody $has_access = true; if ('private' == $rendez_vous->status) { $has_access = current_user_can('read_private_rendez_vouss', $rendez_vous_id); } if (empty($rendez_vous) || empty($has_access) || 'draft' == $rendez_vous->status) { bp_core_add_message(__('You do not have access to this rendez-vous', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } rendez_vous()->item = $rendez_vous; $screen = 'single'; do_action('rendez_vous_single_screen'); } // Publish & Updates. if (!empty($_POST['_rendez_vous_edit']) && !empty($_POST['_rendez_vous_edit']['id'])) { check_admin_referer('rendez_vous_update'); $redirect = remove_query_arg(array('rdv', 'n', 'action'), wp_get_referer()); if (!current_user_can('edit_rendez_vous', absint($_POST['_rendez_vous_edit']['id']))) { bp_core_add_message(__('Editing this rendez-vous is not allowed.', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } $args = array(); $action = sanitize_key($_POST['_rendez_vous_edit']['action']); $args = array_diff_key($_POST['_rendez_vous_edit'], array('action' => 0, 'submit' => 0)); $args['status'] = 'publish'; // Make sure the organizer doesn't change if rendez-vous is edited by someone else if (!bp_is_my_profile()) { $args['organizer'] = apply_filters('rendez_vous_edit_action_organizer_id', bp_displayed_user_id(), $args); } $notify = !empty($_POST['_rendez_vous_edit']['notify']) ? 1 : 0; $activity = !empty($_POST['_rendez_vous_edit']['activity']) && empty($args['privacy']) ? 1 : 0; do_action("rendez_vous_before_{$action}", $args, $notify, $activity); $id = rendez_vous_save($args); if (empty($id)) { bp_core_add_message(__('Editing this rendez-vous failed.', 'rendez-vous'), 'error'); } else { bp_core_add_message(__('Rendez-vous successfully edited.', 'rendez-vous')); $redirect = add_query_arg('rdv', $id, $redirect); // Rendez-vous is edited or published, let's handle notifications & activity do_action("rendez_vous_after_{$action}", $id, $args, $notify, $activity); } // finally redirect ! bp_core_redirect($redirect); } // Set user preferences. if (!empty($_POST['_rendez_vous_prefs']) && !empty($_POST['_rendez_vous_prefs']['id'])) { check_admin_referer('rendez_vous_prefs'); $redirect = remove_query_arg(array('n', 'action'), wp_get_referer()); $rendez_vous_id = absint($_POST['_rendez_vous_prefs']['id']); $rendez_vous = rendez_vous_get_item($rendez_vous_id); $attendee_id = bp_loggedin_user_id(); $has_access = $attendee_id; if (!empty($has_access) && 'private' == $rendez_vous->status) { $has_access = current_user_can('read_private_rendez_vouss', $rendez_vous_id); } if (empty($has_access)) { bp_core_add_message(__('You do not have access to this rendez-vous', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } $args = $_POST['_rendez_vous_prefs']; // Get days if (!empty($args['days'][$attendee_id])) { $args['days'] = $args['days'][$attendee_id]; } else { $args['days'] = array(); } do_action("rendez_vous_before_attendee_prefs", $args); if (!Rendez_Vous_Item::attendees_pref($rendez_vous_id, $attendee_id, $args['days'])) { bp_core_add_message(__('Saving your preferences failed.', 'rendez-vous'), 'error'); } else { bp_core_add_message(__('Preferences successfully saved.', 'rendez-vous')); // let's handle notifications to the organizer do_action("rendez_vous_after_attendee_prefs", $args, $attendee_id, $rendez_vous); } // finally redirect ! bp_core_redirect($redirect); } // Delete if (!empty($_GET['action']) && 'delete' == $_GET['action'] && !empty($_GET['rdv'])) { check_admin_referer('rendez_vous_delete'); $redirect = remove_query_arg(array('rdv', 'action', 'n'), wp_get_referer()); $rendez_vous_id = absint($_GET['rdv']); if (empty($rendez_vous_id) || !current_user_can('delete_rendez_vous', $rendez_vous_id)) { bp_core_add_message(__('Rendez-vous could not be found', 'rendez-vous'), 'error'); bp_core_redirect($redirect); } $deleted = rendez_vous_delete_item($rendez_vous_id); if (!empty($deleted)) { bp_core_add_message(__('Rendez-vous successfully cancelled.', 'rendez-vous')); } else { bp_core_add_message(__('Rendez-vous could not be cancelled', 'rendez-vous'), 'error'); } // finally redirect ! bp_core_redirect($redirect); } return $screen; }