38217-vm/wp-content/plugins/fusion-builder/inc/class-awb-off-canvas-admin.php
2026-02-05 17:08:59 +03:00

253 lines
7.0 KiB
PHP

<?php
/**
* Backend Off Canvas class.
*
* @author ThemeFusion
* @copyright (c) Copyright by ThemeFusion
* @link https://avada.com
* @package Fusion-Builder
* @since 3.6
*/
/**
* Adds Off Canvas feature.
*/
class AWB_Off_Canvas_Admin {
/**
* The one, true instance of this object.
*
* @static
* @access private
* @since 3.6
* @var object
*/
private static $instance;
/**
* Off Canvas post type handle.
*
* @access private
* @since 3.6
* @var string
*/
private $post_type = 'awb_off_canvas';
/**
* The default template conditions.
*
* @access public
* @var array
*/
public static $default_conditions_data = [
'conditions' => [],
];
/**
* The class constructor.
*
* @access private
* @since 3.6
* @return void
*/
private function __construct() {
if ( ! apply_filters( 'fusion_load_off_canvas', true ) || false === self::is_enabled() ) {
return;
}
// Add admin page.
add_action( 'admin_action_awb_off_canvas_new', [ $this, 'add_new_off_canvas' ] );
// clone off canvas.
add_action( 'admin_action_clone_off_canvas', [ $this, 'clone_off_canvas' ] );
// Enqueue the JS script for the PO layout conditions option.
add_action( 'avada_page_option_scripts', [ $this, 'option_script' ] );
}
/**
* Creates or returns an instance of this class.
*
* @static
* @access public
* @since 3.6
*/
public static function get_instance() {
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
if ( null === self::$instance ) {
self::$instance = new AWB_Off_Canvas_Admin();
}
return self::$instance;
}
/**
* Checks if off canvas are enabled.
*
* @static
* @access public
* @since 3.6
* @return bool
*/
public static function is_enabled() {
$fusion_settings = awb_get_fusion_settings();
$status_awb_off_canvas = $fusion_settings->get( 'status_awb_Off_Canvas' );
$status_awb_off_canvas = '0' === $status_awb_off_canvas ? false : true;
return boolval( apply_filters( 'fusion_load_off_canvas', $status_awb_off_canvas ) );
}
/**
* Create a new off canvas, fired from off canvas page.
*/
public function add_new_off_canvas() {
wp_safe_redirect( admin_url() );
check_admin_referer( 'awb_off_canvas_new' );
if ( ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'awb_off_canvas' ) ) ) {
return;
}
$off_canvas = [
'post_title' => isset( $_GET['name'] ) ? sanitize_text_field( wp_unslash( $_GET['name'] ) ) : '',
'post_status' => current_user_can( 'publish_posts' ) ? 'publish' : 'pending',
'post_type' => $this->post_type,
];
$set_id = wp_insert_post( $off_canvas, true );
if ( is_wp_error( $set_id ) ) {
$error_string = $set_id->get_error_message();
wp_die( esc_html( $error_string ) );
}
// Just redirect to back-end editor. In future tie it to default editor option.
wp_safe_redirect( awb_get_new_post_edit_link( $set_id ) );
die();
}
/**
* Saves a new element.
*
* @access public
* @since 3.6
*/
public function clone_off_canvas() {
if ( ! ( isset( $_GET['item'] ) || isset( $_POST['item'] ) || ( isset( $_REQUEST['action'] ) && 'clone_off_canvas' === $_REQUEST['action'] ) ) ) { // phpcs:ignore WordPress.Security
wp_die( esc_attr__( 'No element to clone.', 'fusion-builder' ) );
}
if ( isset( $_REQUEST['_fusion_library_clone_nonce'] ) && check_admin_referer( 'clone_off_canvas', '_fusion_library_clone_nonce' ) && current_user_can( 'edit_others_posts' ) ) {
// Get the post being copied.
$id = (int) ( isset( $_GET['item'] ) ? wp_unslash( $_GET['item'] ) : wp_unslash( $_POST['item'] ) ); // phpcs:ignore WordPress.Security
$post = get_post( $id );
// Copy the off canvas and insert it.
if ( $post instanceof WP_Post ) {
$this->clone_off_canvas_post( $post );
// Redirect to the all off canvass screen.
wp_safe_redirect( admin_url( 'admin.php?page=avada-off-canvas' ) );
exit;
} else {
/* translators: The ID not found. */
wp_die( esc_html( sprintf( __( 'Cloning failed. Element not found. ID: %s', 'fusion-builder' ), $id ) ) );
}
}
}
/**
* Clones Off Canvas.
*
* @access public
* @since 3.6
* @param object $post The post object.
* @return int|null
*/
public function clone_off_canvas_post( $post ) {
// Ignore revisions.
if ( 'revision' === $post->post_type ) {
return null;
}
$post_meta = fusion_data()->post_meta( $post->ID )->get_all_meta();
$new_post_parent = $post->post_parent;
$new_post = [
'menu_order' => $post->menu_order,
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $post->post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_mime_type' => $post->post_mime_type,
'post_parent' => $new_post_parent,
'post_password' => $post->post_password,
'post_status' => 'publish',
/* translators: The post title. */
'post_title' => sprintf( esc_attr__( '%s ( Cloned )', 'fusion-builder' ), $post->post_title ),
'post_type' => $post->post_type,
];
// Add new off canvas post.
$new_post_id = wp_insert_post( $new_post );
// Set a proper slug.
$post_name = wp_unique_post_slug( $post->post_name, $new_post_id, 'publish', $post->post_type, $new_post_parent );
$new_post = [];
$new_post['ID'] = $new_post_id;
$new_post['post_name'] = $post_name;
wp_update_post( $new_post );
// Clone off canvas meta.
if ( ! empty( $post_meta ) ) {
foreach ( $post_meta as $key => $val ) {
fusion_data()->post_meta( $new_post_id )->set( $key, $val );
}
}
return $new_post_id;
}
/**
* Add field data.
*
* @since 3.6
* @access public
* @param string $post_type Post type being added to.
* @return void
*/
public function option_script( $post_type ) {
// Not editing a off canvas then we don't need it.
if ( $this->post_type !== $post_type ) {
return;
}
include FUSION_BUILDER_PLUGIN_DIR . 'inc/admin-screens/layout-builder/layout-options.php';
include FUSION_BUILDER_PLUGIN_DIR . 'inc/admin-screens/layout-builder/layout-child-option.php';
wp_enqueue_style( 'fusion_builder_admin_css', FUSION_BUILDER_PLUGIN_URL . 'assets/admin/css/fusion-builder-admin.css', [], FUSION_BUILDER_VERSION );
wp_enqueue_script( 'fusion_builder_app_util_js', FUSION_LIBRARY_URL . '/inc/fusion-app/util.js', [ 'jquery', 'jquery-ui-core', 'underscore', 'backbone' ], FUSION_BUILDER_VERSION, true );
wp_enqueue_script( 'fusion_layout_conditions', FUSION_BUILDER_PLUGIN_URL . 'assets/admin/js/layout-conditions-option.js', [ 'fusion_builder_app_util_js' ], FUSION_BUILDER_VERSION, false );
}
}
/**
* Instantiates the AWB_Off_Canvas_Admin class.
* Make sure the class is properly set-up.
*
* @since object 3.6
* @return object AWB_Off_Canvas_Admin
*/
function AWB_Off_Canvas_Admin() { // phpcs:ignore WordPress.NamingConventions
return AWB_Off_Canvas_Admin::get_instance();
}
AWB_Off_Canvas_Admin();