예제 #1
0
/**
 * Check if there's any admin-related actions to take for bookings. All actions are caught here.
 * @return null
 */
function em_admin_actions_bookings()
{
    global $dbem_form_add_message;
    global $dbem_form_delete_message;
    global $wpdb, $EM_Booking, $EM_Event;
    if (current_user_can(EM_MIN_CAPABILITY) && is_object($EM_Booking) && !empty($_REQUEST['action'])) {
        if ($_REQUEST['action'] == 'bookings_delete') {
            //Delete
            if (isset($_POST['booking_id'])) {
                $EM_Booking = new EM_Booking($_POST['booking_id']);
                $EM_Booking->delete();
            }
        } elseif ($_REQUEST['action'] == 'bookings_edit') {
            //Edit Booking
            $validation = $EM_Booking->get_post();
            if ($validation) {
                //EM_Event gets the event if submitted via POST and validates it (safer than to depend on JS)
                //Save
                if ($EM_Booking->save()) {
                    function em_booking_save_notification()
                    {
                        global $EM_Booking;
                        ?>
<div class="updated"><p><strong><?php 
                        echo $EM_Booking->feedback_message;
                        ?>
</strong></p></div><?php 
                    }
                } else {
                    function em_booking_save_notification()
                    {
                        global $EM_Booking;
                        ?>
<div class="error"><p><strong><?php 
                        echo $EM_Booking->feedback_message;
                        ?>
</strong></p></div><?php 
                    }
                }
            } else {
                //TODO make errors clearer when saving person
                function em_booking_save_notification()
                {
                    global $EM_Booking;
                    ?>
<div class="error"><p><strong><?php 
                    echo $EM_Booking->feedback_message;
                    ?>
</strong></p></div><?php 
                }
            }
            add_action('admin_notices', 'em_booking_save_notification');
        } elseif ($_REQUEST['action'] == 'bookings_approve' || $_REQUEST['action'] == 'bookings_reject' || $_REQUEST['action'] == 'bookings_unapprove') {
            //Booking Approvals
            $status_array = array('bookings_unapprove' => 0, 'bookings_approve' => 1, 'bookings_reject' => 2, 'bookings_cancel' => 3);
            if ($EM_Booking->set_status($status_array[$_REQUEST['action']])) {
                function em_booking_save_notification()
                {
                    global $EM_Booking;
                    ?>
<div class="updated"><p><strong><?php 
                    echo $EM_Booking->feedback_message;
                    ?>
</strong></p></div><?php 
                }
            } else {
                function em_booking_save_notification()
                {
                    global $EM_Booking;
                    ?>
<div class="error"><p><strong><?php 
                    echo $EM_Booking->feedback_message;
                    ?>
</strong></p></div><?php 
                }
            }
            add_action('admin_notices', 'em_booking_save_notification');
        } elseif ($_REQUEST['action'] == 'bookings_add_note') {
            $EM_Booking->add_note($_REQUEST['booking_note']);
            function em_booking_save_notification()
            {
                global $EM_Booking;
                ?>
<div class="updated"><p><strong><?php 
                echo $EM_Booking->feedback_message;
                ?>
</strong></p></div><?php 
            }
            add_action('admin_notices', 'em_booking_save_notification');
        }
    } elseif (current_user_can(EM_MIN_CAPABILITY) && is_object($EM_Event) && !empty($_REQUEST['action'])) {
        if ($_REQUEST['action'] == 'export_csv') {
            $EM_Event->get_bookings()->export_csv();
            exit;
        }
    }
}
 /**
  * Deletes ALL bookings related to this booking and then deletes this booking group 
  * @return boolean
  */
 function delete()
 {
     global $wpdb;
     $this->get_bookings(true);
     //queue bookings for deletion
     if (parent::delete()) {
         $result = true;
         $results = array();
         $wpdb->delete(EM_BOOKINGS_RELATIONSHIPS_TABLE, array('booking_main_id' => $this->booking_id), array('%d'));
         foreach ($this->get_bookings() as $EM_Booking) {
             $results[] = $EM_Booking->delete();
         }
         if (in_array(false, $results)) {
             $result = false;
             $this->add_error(sprintf(esc_html__emp('%s could not be deleted', 'dbem'), esc_html__emp('Bookings', 'dbem')));
         }
     } else {
         $result = false;
     }
     return apply_filters('em_multiple_booking_delete', $result !== false, $this);
 }
예제 #3
0
function em_ajax_actions()
{
    //TODO Clean this up.... use a uniformed way of calling EM Ajax actions
    if (!empty($_REQUEST['em_ajax']) || !empty($_REQUEST['em_ajax_action'])) {
        if (isset($_REQUEST['dbem_ajax_action']) && $_REQUEST['dbem_ajax_action'] == 'booking_data') {
            if (isset($_REQUEST['id'])) {
                $EM_Event = new EM_Event($_REQUEST['id']);
                echo "[{bookedSeats:" . $EM_Event->get_bookings()->get_booked_seats() . ", availableSeats:" . $EM_Event->get_bookings()->get_available_seats() . "}]";
            }
            die;
        }
        if (isset($_REQUEST['em_ajax_action']) && $_REQUEST['em_ajax_action'] == 'get_location') {
            if (isset($_REQUEST['id'])) {
                $EM_Location = new EM_Location($_REQUEST['id']);
                $location_array = $EM_Location->to_array();
                $location_array['location_balloon'] = $EM_Location->output(get_option('dbem_location_baloon_format'));
                echo EM_Object::json_encode($location_array);
            }
            die;
        }
        if (isset($_REQUEST['query']) && $_REQUEST['query'] == 'GlobalMapData') {
            $locations = EM_Locations::get($_REQUEST);
            $json_locations = array();
            foreach ($locations as $location_key => $location) {
                $json_locations[$location_key] = $location->to_array();
                $json_locations[$location_key]['location_balloon'] = $location->output(get_option('dbem_map_text_format'));
            }
            echo EM_Object::json_encode($json_locations);
            die;
        }
        if (isset($_REQUEST['ajaxCalendar']) && $_REQUEST['ajaxCalendar']) {
            //FIXME if long events enabled originally, this won't show up on ajax call
            echo EM_Calendar::output($_REQUEST);
            die;
        }
        //EM Ajax requests require this flag.
        if (is_admin()) {
            //Admin operations
            //Booking Actions
            global $EM_Booking;
            if (!empty($_REQUEST['bookings']) || is_object($EM_Booking)) {
                if (is_object($EM_Booking)) {
                    $_REQUEST['bookings'] = $EM_Booking;
                    //small hack to prevent unecessary db reads
                }
                $EM_Bookings = new EM_Bookings();
                //Empty, not bound to event.
                if ($_REQUEST['action'] == 'bookings_approve') {
                    $EM_Bookings->approve($_REQUEST['bookings']);
                    echo $EM_Bookings->feedback_message;
                    die;
                } elseif ($_REQUEST['action'] == 'bookings_reject') {
                    $EM_Bookings->reject($_REQUEST['bookings']);
                    echo $EM_Bookings->feedback_message;
                    die;
                } elseif ($_REQUEST['action'] == 'bookings_unapprove') {
                    $EM_Bookings->unapprove($_REQUEST['bookings']);
                    echo $EM_Bookings->feedback_message;
                    die;
                } elseif ($_REQUEST['action'] == 'bookings_delete') {
                    //Just do it here, since we may be deleting bookings of different events.
                    $result = false;
                    if (EM_Object::array_is_numeric($_REQUEST['bookings'])) {
                        $results = array();
                        foreach ($_REQUEST['bookings'] as $booking_id) {
                            $EM_Booking = new EM_Booking($booking_id);
                            $results[] = $EM_Booking->delete();
                        }
                        $result = !in_array(false, $results);
                    } elseif (is_numeric($_REQUEST['bookings'])) {
                        $EM_Booking = new EM_Booking($_REQUEST['bookings']);
                        $result = $EM_Booking->delete();
                    } elseif (is_object($EM_Booking)) {
                        $result = $EM_Booking->delete();
                    }
                    if ($result) {
                        echo __('Booking Deleted', 'dbem');
                    } else {
                        echo '<span style="color:red">' . __('Booking deletion unsuccessful', 'dbem') . '</span>';
                    }
                    die;
                }
            }
            //Specific Oject Ajax
            if (!empty($_REQUEST['em_obj'])) {
                switch ($_REQUEST['em_obj']) {
                    case 'em_bookings_events_table':
                    case 'em_bookings_pending_table':
                    case 'em_bookings_confirmed_table':
                        call_user_func($_REQUEST['em_obj']);
                        break;
                }
                die;
            }
        }
    }
}