*/ class MEC_feature_restful extends MEC_base { /** * @var MEC_factory */ public $factory; /** * @var MEC_restful */ public $restful; private $settings; /** * Constructor method * @author Webnus */ public function __construct() { // Import MEC Factory $this->factory = $this->getFactory(); // Import MEC RESTful $this->restful = $this->getRestful(); // MEC Settings $this->settings = $this->getMain()->get_settings(); } /** * Initialize * @author Webnus */ public function init() { // Disabled if(!isset($this->settings['restful_api_status']) || !$this->settings['restful_api_status']) return; $this->factory->action('rest_api_init', [$this, 'register']); } public function register() { // Get Events register_rest_route($this->restful->get_namespace(), 'events', [ 'methods' => 'GET', 'callback' => [$this, 'events'], 'permission_callback' => [$this->restful, 'guest'], ]); } public function events(WP_REST_Request $request) { $limit = $request->get_param('limit'); if(!$limit) $limit = 12; if(!is_numeric($limit)) { return $this->restful->response([ 'data' => new WP_Error(400, esc_html__('Limit parameter must be numeric!', 'modern-events-calendar-lite')), 'status' => 400, ]); } $order = $request->get_param('order'); if(!$order) $order = 'ASC'; if(!in_array($order, ['ASC', 'DESC'])) { return $this->restful->response([ 'data' => new WP_Error(400, esc_html__('Order parameter is invalid!', 'modern-events-calendar-lite')), 'status' => 400, ]); } $start_date_type = $request->get_param('start_date_type'); if(!$start_date_type) $start_date_type = 'today'; $start_date = $request->get_param('start_date'); if($start_date_type === 'date' && !$start_date) { return $this->restful->response([ 'data' => new WP_Error(400, esc_html__('When the start_date_type parameter is set to date, then start_date parameter is required.', 'modern-events-calendar-lite')), 'status' => 400, ]); } $end_date_type = $request->get_param('end_date_type'); if(!$end_date_type) $end_date_type = 'date'; $end_date = $request->get_param('end_date'); $show_only_past_events = (int) $request->get_param('show_only_past_events'); $include_past_events = (int) $request->get_param('include_past_events'); $show_only_ongoing_events = (int) $request->get_param('show_only_ongoing_events'); $include_ongoing_events = (int) $request->get_param('include_ongoing_events'); $args = [ 'sk-options' => [ 'list' => [ 'limit' => $limit, 'order_method' => $order, 'start_date_type' => $start_date_type, 'start_date' => $start_date, 'end_date_type' => $end_date_type, 'maximum_date_range' => $end_date ] ], 'show_only_past_events' => $show_only_past_events, 'show_past_events' => $include_past_events, 'show_only_ongoing_events' => $show_only_ongoing_events, 'show_ongoing_events' => $include_ongoing_events, 's' => (string) $request->get_param('keyword'), 'label' => (string) $request->get_param('labels'), 'ex_label' => (string) $request->get_param('ex_labels'), 'category' => (string) $request->get_param('categories'), 'ex_category' => (string) $request->get_param('ex_categories'), 'location' => (string) $request->get_param('locations'), 'ex_location' => (string) $request->get_param('ex_locations'), 'address' => (string) $request->get_param('address'), 'organizer' => (string) $request->get_param('organizers'), 'ex_organizer' => (string) $request->get_param('ex_organizers'), 'sponsor' => (string) $request->get_param('sponsors'), 'speaker' => (string) $request->get_param('speakers'), 'tag' => (string) $request->get_param('tags'), 'ex_tag' => (string) $request->get_param('ex_tags'), ]; // Events Object $EO = new MEC_skin_list(); $EO->initialize($args); // Set Offset $EO->offset = (int) $request->get_param('offset'); // Search $EO->search(); // Events $events = $EO->fetch(); // Response return $this->restful->response([ 'data' => [ 'events' => $events, 'pagination' => [ 'next_date' => $EO->end_date, 'next_offset' => $EO->next_offset, 'has_more_events' => $EO->has_more_events, 'found' => $EO->found, ], ] ]); } }