namespace . $this->version, $this->rest_base . '/normalize-rule', array( array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'normalize_rule' ), 'permission_callback' => array( $this, 'permission_check' ), 'args' => array( 'content_type' => array( 'type' => 'string', 'required' => true, 'enum' => array( 'post', 'term', 'archive', \TVD\Content_Sets\Rule::HIDDEN_POST_TYPE_SEARCH_RESULTS, \TVD\Content_Sets\Rule::HIDDEN_POST_TYPE_BLOG, ), ), 'content' => array( 'type' => 'string', 'required' => true, ), 'field' => array( 'type' => 'string', 'required' => true, ), 'operator' => array( 'type' => 'string', 'required' => true, ), 'value' => array( 'type' => array( 'string', 'array' ), 'default' => '', ), ), ), ) ); register_rest_route( $this->namespace . $this->version, $this->rest_base, array( array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'create_item' ), 'permission_callback' => array( $this, 'permission_check' ), 'args' => array( 'post_title' => array( 'type' => 'string', 'required' => true, ), 'post_content' => array( 'type' => 'array', 'required' => true, ), ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'search_items' ), 'permission_callback' => array( $this, 'permission_check' ), 'args' => array( 'content_type' => array( 'type' => 'string', 'required' => true, 'enum' => array( 'post', 'term', 'archive' ), ), 'content' => array( 'type' => 'string', 'required' => true, ), 'field' => array( 'type' => 'string', 'required' => true, ), 'operator' => array( 'type' => 'string', 'required' => true, ), 'value' => array( 'type' => array( 'string', 'array' ), 'default' => '', ), 'query_string' => array( 'type' => 'string', 'required' => true, ), ), ), ) ); register_rest_route( $this->namespace . $this->version, $this->rest_base . '/(?P.+)', array( array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array( $this, 'delete_item' ), 'permission_callback' => array( $this, 'permission_check' ), 'args' => array( 'ID' => array( 'type' => 'integer', 'required' => true, ), ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_item' ), 'permission_callback' => array( $this, 'permission_check' ), 'args' => array( 'ID' => array( 'type' => 'integer', 'required' => true, ), 'post_title' => array( 'type' => 'string', 'required' => true, ), 'post_content' => array( 'type' => 'array', 'required' => true, ), ), ), ) ); } /** * rename this into search posts/ search items * * @param WP_REST_Request $request * * @return WP_REST_Response */ public function search_items( $request ) { $rule = \TVD\Content_Sets\Rule::factory( $request->get_params() ); $paged = false; if ( $request->get_param( 'page' ) ) { $paged = (int) $request->get_param( 'page' ); $per_page = (int) $request->get_param( 'per_page' ) ?: 150; } return new WP_REST_Response( $rule->get_items( $request->get_param( 'query_string' ), $paged, $per_page ), 200 ); } /** * @param WP_REST_Request $request * * @return WP_Error|WP_REST_Response */ public function create_item( $request ) { $set = new \TVD\Content_Sets\Set( $request->get_params() ); $new_set_id = $set->create(); $cache_plugin = tve_dash_detect_cache_plugin(); if ( $cache_plugin ) { tve_dash_cache_plugin_clear( $cache_plugin ); } if ( ! empty( $new_set_id ) ) { return new WP_REST_Response( \TVD\Content_Sets\Set::get_items(), 200 ); } return new WP_Error( 'cant-create', __( 'The request contains invalid rules', 'thrive-dash' ), array( 'status' => 422 ) ); } /** * @param WP_REST_Request $request * * @return WP_REST_Response */ public function delete_item( $request ) { $set = new \TVD\Content_Sets\Set( $request->get_param( 'ID' ) ); $response = $set->delete(); return new WP_REST_Response( $response, 200 ); } /** * @param WP_REST_Request $request * * @return WP_Error|WP_REST_Response */ public function update_item( $request ) { $set = new \TVD\Content_Sets\Set( $request->get_params() ); $set_id = $set->update(); $cache_plugin = tve_dash_detect_cache_plugin(); if ( $cache_plugin ) { tve_dash_cache_plugin_clear( $cache_plugin ); } if ( ! empty( $set_id ) ) { return new WP_REST_Response( ! empty( $request->get_param( 'return_one' ) ) ? $set->jsonSerialize() : \TVD\Content_Sets\Set::get_items(), 200 ); } return new WP_Error( 'cant-update', __( 'The request contains invalid rules', 'thrive-dash' ), array( 'status' => 422 ) ); } /** * Normalizing a rule so that the rule contains all information * * Mainly this is for content_label rule key. * * @param WP_REST_Request $request * * @return WP_REST_Response */ public function normalize_rule( $request ) { $rule = \TVD\Content_Sets\Rule::factory( $request->get_params() ); return new WP_REST_Response( $rule, 200 ); } /** * If the user has access to the admin pages, then he is allowed to perform any operation on the scripts. * * @return bool */ public function permission_check() { return current_user_can( TVE_DASH_CAPABILITY ); } }