You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.4 KiB
PHTML
166 lines
4.4 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* The REST API.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @package RankMath
|
||
|
* @subpackage RankMathPro
|
||
|
* @author MyThemeShop <admin@mythemeshop.com>
|
||
|
*/
|
||
|
|
||
|
namespace RankMathPro\Schema;
|
||
|
|
||
|
use WP_Error;
|
||
|
use WP_REST_Server;
|
||
|
use WP_REST_Request;
|
||
|
use WP_REST_Controller;
|
||
|
use RankMath\Helper;
|
||
|
use RankMath\Schema\DB;
|
||
|
use RankMath\Traits\Meta;
|
||
|
use RankMath\Rest\Sanitize;
|
||
|
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Rest class.
|
||
|
*/
|
||
|
class Rest extends WP_REST_Controller {
|
||
|
|
||
|
use Meta;
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
*/
|
||
|
public function __construct() {
|
||
|
$this->namespace = \RankMath\Rest\Rest_Helper::BASE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Registers the routes for the objects of the controller.
|
||
|
*/
|
||
|
public function register_routes() {
|
||
|
register_rest_route(
|
||
|
$this->namespace,
|
||
|
'/saveTemplate',
|
||
|
[
|
||
|
'methods' => WP_REST_Server::CREATABLE,
|
||
|
'callback' => [ $this, 'save_template' ],
|
||
|
'args' => [
|
||
|
'schema' => [
|
||
|
'required' => true,
|
||
|
'description' => esc_html__( 'Schema to add.', 'rank-math-pro' ),
|
||
|
'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
|
||
|
],
|
||
|
],
|
||
|
'permission_callback' => [ $this, 'get_permissions_check' ],
|
||
|
]
|
||
|
);
|
||
|
|
||
|
register_rest_route(
|
||
|
$this->namespace,
|
||
|
'/getVideoData',
|
||
|
[
|
||
|
'methods' => WP_REST_Server::CREATABLE,
|
||
|
'callback' => [ $this, 'get_video_data' ],
|
||
|
'args' => $this->get_video_args(),
|
||
|
'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
|
||
|
]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Video details.
|
||
|
*
|
||
|
* @param WP_REST_Request $request Full details about the request.
|
||
|
* @return bool Whether the API key matches or not.
|
||
|
*/
|
||
|
public function get_video_data( WP_REST_Request $request ) {
|
||
|
$object_id = $request->get_param( 'objectID' );
|
||
|
$url = $request->get_param( 'url' );
|
||
|
$post_type = get_post_type( $object_id );
|
||
|
if ( false === filter_var( $url, FILTER_VALIDATE_URL ) || ! Helper::get_settings( "titles.pt_{$post_type}_autodetect_video", 'on' ) ) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
global $wp_embed;
|
||
|
return ( new \RankMathPro\Schema\Video\Parser( get_post( $object_id ) ) )->get_metadata( $wp_embed->autoembed( $url ) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update metadata.
|
||
|
*
|
||
|
* @param WP_REST_Request $request Full details about the request.
|
||
|
*
|
||
|
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
|
||
|
*/
|
||
|
public function save_template( WP_REST_Request $request ) {
|
||
|
$sanitizer = Sanitize::get();
|
||
|
$schema = $request->get_param( 'schema' );
|
||
|
$post_id = $request->get_param( 'postId' );
|
||
|
|
||
|
foreach ( $schema as $id => $value ) {
|
||
|
$schema[ $id ] = $sanitizer->sanitize( $id, $value );
|
||
|
}
|
||
|
|
||
|
if ( $post_id ) {
|
||
|
DB::delete_schema_data( $post_id );
|
||
|
}
|
||
|
|
||
|
$meta_key = 'rank_math_schema_' . $schema['@type'];
|
||
|
$template_id = wp_insert_post(
|
||
|
[
|
||
|
'ID' => $post_id,
|
||
|
'post_status' => 'publish',
|
||
|
'post_type' => 'rank_math_schema',
|
||
|
'post_title' => $schema['metadata']['title'],
|
||
|
]
|
||
|
);
|
||
|
|
||
|
update_post_meta( $template_id, $meta_key, $schema );
|
||
|
return [
|
||
|
'id' => $template_id,
|
||
|
'link' => get_edit_post_link( $template_id ),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks whether a given request has permission to read post.
|
||
|
*
|
||
|
* @param WP_REST_Request $request Full details about the request.
|
||
|
*
|
||
|
* @return true|WP_Error True if the request has read access, WP_Error object otherwise.
|
||
|
*/
|
||
|
public static function get_permissions_check( $request ) { // phpcs:ignore
|
||
|
if ( current_user_can( 'edit_posts' ) ) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return new WP_Error(
|
||
|
'rest_cannot_edit',
|
||
|
__( 'Sorry, you are not allowed to save template.', 'rank-math-pro' ),
|
||
|
[ 'status' => rest_authorization_required_code() ]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get video arguments.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function get_video_args() {
|
||
|
return [
|
||
|
'objectID' => [
|
||
|
'type' => 'integer',
|
||
|
'required' => true,
|
||
|
'description' => esc_html__( 'Object unique id', 'rank-math-pro' ),
|
||
|
'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
|
||
|
],
|
||
|
'url' => [
|
||
|
'required' => true,
|
||
|
'description' => esc_html__( 'Video URL.', 'rank-math-pro' ),
|
||
|
'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
}
|