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.
311 lines
8.5 KiB
PHP
311 lines
8.5 KiB
PHP
<?php
|
|
/**
|
|
* Ajax class for font settings.
|
|
*
|
|
* @package Bsf_Custom_Fonts
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* AJAX events class to manage dashboard application requests.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
class BSF_Custom_Fonts_Admin_Ajax {
|
|
/**
|
|
* Instance
|
|
*
|
|
* @access private
|
|
* @var null $instance
|
|
* @since 4.0.0
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Initiator
|
|
*
|
|
* @since 4.0.0
|
|
* @return object initialized object of class.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Errors class instance.
|
|
*
|
|
* @var array
|
|
* @since 4.0.0
|
|
*/
|
|
private $errors = array();
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
public function __construct() {
|
|
$this->errors = array(
|
|
'permission' => __( 'Sorry, you are not allowed to do this operation.', 'custom-fonts' ),
|
|
'nonce' => __( 'Nonce validation failed', 'custom-fonts' ),
|
|
'default' => __( 'Sorry, something went wrong.', 'custom-fonts' ),
|
|
'invalid' => __( 'No post data found!', 'custom-fonts' ),
|
|
);
|
|
|
|
$ajax_events = array(
|
|
'bcf_add_new_local_font',
|
|
'bcf_add_new_google_font',
|
|
'bcf_delete_font',
|
|
'bcf_edit_font',
|
|
);
|
|
|
|
foreach ( $ajax_events as $key => $event ) {
|
|
add_action( 'wp_ajax_' . $event, array( $this, $event ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get ajax error message.
|
|
*
|
|
* @param string $type Message type.
|
|
* @return string
|
|
* @since 4.0.0
|
|
*/
|
|
public function get_error_msg( $type ) {
|
|
|
|
if ( ! isset( $this->errors[ $type ] ) ) {
|
|
$type = 'default';
|
|
}
|
|
|
|
return $this->errors[ $type ];
|
|
}
|
|
|
|
/**
|
|
* Create the local font post.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function bcf_add_new_local_font() {
|
|
|
|
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
|
|
|
|
if ( ! current_user_can( 'edit_theme_options' ) ) {
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Nonce verification
|
|
*/
|
|
if ( ! check_ajax_referer( 'add_font_nonce', 'security', false ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$font_data = isset( $_POST['font_data'] ) ? bcf_sanitize_text_field_recursive( json_decode( stripslashes( $_POST['font_data'] ), true ) ) : array();
|
|
$font_variations = ! empty( $font_data['variations'] ) ? $font_data['variations'] : array();
|
|
$font_type = ! empty( $_POST['font_type'] ) ? sanitize_text_field( $_POST['font_type'] ) : 'local';
|
|
|
|
if ( empty( $font_variations ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
// Create post object.
|
|
$new_font_post = array(
|
|
'post_title' => ! empty( $font_data['font_name'] ) ? $font_data['font_name'] : 'untitled',
|
|
'post_status' => 'publish',
|
|
'post_type' => BSF_CUSTOM_FONTS_POST_TYPE,
|
|
);
|
|
|
|
// Insert the post into the database.
|
|
$font_post_id = wp_insert_post( $new_font_post );
|
|
|
|
if ( is_wp_error( $font_post_id ) ) {
|
|
$response_data = array( 'message' => $font_post_id->get_error_message() );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data );
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
update_post_meta( $font_post_id, 'font-type', $font_type );
|
|
|
|
/**
|
|
* Send the response.
|
|
*/
|
|
$response_data = array(
|
|
'message' => __( 'Successfully created the Font!', 'custom-fonts' ),
|
|
);
|
|
wp_send_json_success( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Create the Google font post.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function bcf_add_new_google_font() {
|
|
|
|
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
|
|
|
|
if ( ! current_user_can( 'edit_theme_options' ) ) {
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Nonce verification
|
|
*/
|
|
if ( ! check_ajax_referer( 'add_font_nonce', 'security', false ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$font_data = isset( $_POST['font_data'] ) ? bcf_sanitize_text_field_recursive( json_decode( stripslashes( $_POST['font_data'] ), true ) ) : array();
|
|
$font_type = ! empty( $_POST['font_type'] ) ? sanitize_text_field( $_POST['font_type'] ) : 'local';
|
|
|
|
if ( empty( $font_data ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
// Create post object.
|
|
$new_font_post = array(
|
|
'post_title' => ! empty( $font_data['font_name'] ) ? $font_data['font_name'] : 'untitled',
|
|
'post_status' => 'publish',
|
|
'post_type' => BSF_CUSTOM_FONTS_POST_TYPE,
|
|
);
|
|
|
|
// Insert the post into the database.
|
|
$font_post_id = wp_insert_post( $new_font_post );
|
|
|
|
if ( 'google' === $font_type ) {
|
|
$font_face = bcf_google_fonts_compatibility()->process_google_fonts_locally( $font_data );
|
|
} else {
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data, true, false );
|
|
}
|
|
|
|
if ( is_wp_error( $font_post_id ) ) {
|
|
$response_data = array( 'message' => $font_post_id->get_error_message() );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
update_post_meta( $font_post_id, 'font-type', $font_type );
|
|
|
|
/**
|
|
* Send the response.
|
|
*/
|
|
$response_data = array(
|
|
'message' => __( 'Successfully created the Font!', 'custom-fonts' ),
|
|
);
|
|
wp_send_json_success( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Edit the existing font post.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function bcf_edit_font() {
|
|
|
|
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
|
|
|
|
if ( ! current_user_can( 'edit_theme_options' ) ) {
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Nonce verification
|
|
*/
|
|
if ( ! check_ajax_referer( 'edit_font_nonce', 'security', false ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$font_data = isset( $_POST['font_data'] ) ? bcf_sanitize_text_field_recursive( json_decode( stripslashes( $_POST['font_data'] ), true ) ) : array();
|
|
$font_variations = ! empty( $font_data['variations'] ) ? $font_data['variations'] : array();
|
|
$font_type = ! empty( $_POST['font_type'] ) ? sanitize_text_field( $_POST['font_type'] ) : 'local';
|
|
$font_id = ! empty( $_POST['font_id'] ) ? absint( $_POST['font_id'] ) : false;
|
|
|
|
if ( empty( $font_variations ) || false === $font_id ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
if ( 'google' === $font_type ) {
|
|
$font_face = bcf_google_fonts_compatibility()->process_google_fonts_locally( $font_data );
|
|
} else {
|
|
$font_face = bcf_get_font_face_css( $font_id, $font_data, true, false );
|
|
}
|
|
|
|
update_post_meta( $font_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_id, 'fonts-face', $font_face );
|
|
update_post_meta( $font_id, 'font-type', $font_type );
|
|
|
|
/**
|
|
* Send the response.
|
|
*/
|
|
$response_data = array(
|
|
'message' => __( 'Successfully updated the Font!', 'custom-fonts' ),
|
|
);
|
|
wp_send_json_success( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Delete the font post.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function bcf_delete_font() {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
|
|
|
|
if ( ! current_user_can( 'edit_theme_options' ) ) {
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
/**
|
|
* Nonce verification
|
|
*/
|
|
if ( ! check_ajax_referer( 'delete_font_nonce', 'security', false ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$font_id = isset( $_POST['font_id'] ) ? absint( $_POST['font_id'] ) : 0;
|
|
|
|
if ( ! $font_id ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
if ( BSF_CUSTOM_FONTS_POST_TYPE !== get_post_type( $font_id ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$delete_post_response = wp_delete_post( $font_id );
|
|
|
|
if ( ! is_object( $delete_post_response ) ) {
|
|
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
|
|
wp_send_json_error( $response_data );
|
|
}
|
|
|
|
$response_data = array(
|
|
'message' => __( 'Successfully deleted the Font!', 'custom-fonts' ),
|
|
);
|
|
wp_send_json_success( $response_data );
|
|
}
|
|
}
|
|
|
|
BSF_Custom_Fonts_Admin_Ajax::get_instance();
|