location = true === Fusion_App()->is_builder || ( isset( $_POST ) && isset( $_POST['fusion_front_end'] ) && $_POST['fusion_front_end'] ) ? 'front' : 'back'; // phpcs:ignore WordPress.Security.NonceVerification, WordPress.Security.ValidatedSanitizedInput
// Check for action and action2 and trigger appropriate function.
add_action( 'admin_init', [ $this, 'bulk_actions' ] );
}
/**
* Get action based on request.
* phpcs:disable WordPress.Security
*
* @since 3.2
* @access public
*/
public function get_action() {
if ( isset( $_REQUEST['action'] ) ) {
if ( -1 !== $_REQUEST['action'] && '-1' !== $_REQUEST['action'] ) {
return sanitize_text_field( wp_unslash( $_REQUEST['action'] ) );
}
}
if ( isset( $_REQUEST['action2'] ) ) {
if ( -1 !== $_REQUEST['action2'] && '-1' !== $_REQUEST['action2'] ) {
return sanitize_text_field( wp_unslash( $_REQUEST['action2'] ) );
}
}
if ( ( isset( $_REQUEST['page'] ) && false !== strpos( $_REQUEST['page'], 'avada' ) ) && ( isset( $_REQUEST['action2'] ) || isset( $_REQUEST['action'] ) ) ) {
$referer = fusion_get_referer();
if ( $referer ) {
wp_safe_redirect( $referer );
exit;
}
}
return false;
}
// phpcs:enable WordPress.Security
/**
* Apply bulk action.
*
* @since 3.2
* @access public
*/
public function bulk_actions() {
$action = $this->get_action();
$bulk_actions = [
'fusion_bulk_restore_element',
'fusion_bulk_delete_element',
'fusion_bulk_trash_element',
'fusion_restore_element',
'fusion_delete_element',
'fusion_trash_element',
'fusion_library_new',
];
if ( $action && in_array( $action, $bulk_actions, true ) ) {
// Check referer based on actions.
if ( strpos( $action, 'bulk' ) ) {
check_admin_referer( 'bulk-' . $this->get_bulk_nonce_action(), '_wpnonce' );
} elseif ( 'fusion_library_new' === $action ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement
// do nothing.
} else {
check_admin_referer( $this->get_single_nonce_action(), '_wpnonce' );
}
switch ( $action ) {
case 'fusion_library_new':
$this->add_new_library_element();
break;
case 'fusion_bulk_trash_element':
case 'fusion_trash_element':
$this->trash_element();
break;
case 'fusion_bulk_restore_element':
case 'fusion_restore_element':
$this->restore_element();
break;
case 'fusion_bulk_delete_element':
case 'fusion_delete_element':
$this->delete_element_post();
break;
}
}
}
/**
* Get the nonce action for bulk actions.
*
* @since 3.11
* @access public
*/
public function get_bulk_nonce_action() {
$action = 'elements';
if ( isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$element_ids = (array) wp_unslash( $_GET['post'] ); // phpcs:ignore WordPress.Security
}
if ( isset( $element_ids[0] ) && ! empty( $element_ids ) ) {
switch ( get_post_type( $element_ids[0] ) ) {
case 'fusion_element':
$action = 'elements';
break;
case 'fusion_form':
$action = 'forms';
break;
case 'awb_off_canvas':
$action = 'offcanvases';
break;
case 'fusion_tb_section':
$action = 'sections';
break;
case 'fusion_icons':
$action = 'iconsets';
break;
}
}
return $action;
}
/**
* Get the nonce action for single actions.
*
* @since 3.11
* @access public
*/
public function get_single_nonce_action() {
$action = 'fusion-library';
if ( isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$element_ids = (array) wp_unslash( $_GET['post'] ); // phpcs:ignore WordPress.Security
}
if ( isset( $element_ids[0] ) && ! empty( $element_ids ) ) {
switch ( get_post_type( $element_ids[0] ) ) {
case 'fusion_element':
$action = 'fusion-library';
break;
case 'fusion_form':
$action = 'fusion-form-builder';
break;
case 'awb_off_canvas':
$action = 'awb-off-canvas';
break;
case 'fusion_tb_section':
$action = 'fusion-template-builder';
break;
case 'fusion_icons':
$action = 'fusion-template-builder';
break;
}
}
return $action;
}
/**
* Setup the post type and taxonomies.
*
* @since 2.2
* @access public
*/
public function register_layouts() {
// If they are already registered, don't repeat.
if ( $this->layouts_registered ) {
return;
}
$is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() );
$labels = [
'name' => _x( 'Fusion Templates', 'Layout type general name', 'fusion-builder' ),
'singular_name' => _x( 'Layout', 'Layout type singular name', 'fusion-builder' ),
'add_new' => _x( 'Add New', 'Layout item', 'fusion-builder' ),
'add_new_item' => esc_html__( 'Add New Layout', 'fusion-builder' ),
'edit_item' => esc_html__( 'Edit Layout', 'fusion-builder' ),
'new_item' => esc_html__( 'New Layout', 'fusion-builder' ),
'all_items' => esc_html__( 'All Layouts', 'fusion-builder' ),
'view_item' => esc_html__( 'View Layout', 'fusion-builder' ),
'search_items' => esc_html__( 'Search Layouts', 'fusion-builder' ),
'not_found' => esc_html__( 'Nothing found', 'fusion-builder' ),
'not_found_in_trash' => esc_html__( 'Nothing found in Trash', 'fusion-builder' ),
'item_published' => esc_html__( 'Layout published.', 'fusion-builder' ),
'item_published_privately' => esc_html__( 'Layout published privately.', 'fusion-builder' ),
'item_reverted_to_draft' => esc_html__( 'Layout reverted to draft.', 'fusion-builder' ),
'item_scheduled' => esc_html__( 'Layout scheduled.', 'fusion-builder' ),
'item_updated' => esc_html__( 'Layout updated.', 'fusion-builder' ),
'parent_item_colon' => '',
];
$args = [
'labels' => $labels,
'public' => false,
'publicly_queryable' => $is_builder,
'show_ui' => true,
'show_in_menu' => false,
'exclude_from_search' => true,
'can_export' => true,
'query_var' => true,
'has_archive' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'show_in_nav_menus' => false,
'supports' => [ 'title', 'editor', 'revisions' ],
];
register_post_type( 'fusion_template', apply_filters( 'fusion_layout_template_args', $args ) );
$labels = [
'name' => _x( 'Fusion Elements', 'element type general name', 'fusion-builder' ),
'singular_name' => _x( 'Element', 'Element type singular name', 'fusion-builder' ),
'add_new' => _x( 'Add New', 'Element item', 'fusion-builder' ),
'add_new_item' => esc_html__( 'Add New Element', 'fusion-builder' ),
'edit_item' => esc_html__( 'Edit Element', 'fusion-builder' ),
'new_item' => esc_html__( 'New Element', 'fusion-builder' ),
'all_items' => esc_html__( 'All Elements', 'fusion-builder' ),
'view_item' => esc_html__( 'View Element', 'fusion-builder' ),
'search_items' => esc_html__( 'Search Elements', 'fusion-builder' ),
'not_found' => esc_html__( 'Nothing found', 'fusion-builder' ),
'not_found_in_trash' => esc_html__( 'Nothing found in Trash', 'fusion-builder' ),
'item_published' => esc_html__( 'Element published.', 'fusion-builder' ),
'item_published_privately' => esc_html__( 'Element published privately.', 'fusion-builder' ),
'item_reverted_to_draft' => esc_html__( 'Element reverted to draft.', 'fusion-builder' ),
'item_scheduled' => esc_html__( 'Element scheduled.', 'fusion-builder' ),
'item_updated' => esc_html__( 'Element updated.', 'fusion-builder' ),
'parent_item_colon' => '',
];
$args = [
'labels' => $labels,
'public' => false,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => false,
'exclude_from_search' => true,
'can_export' => true,
'query_var' => true,
'has_archive' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'supports' => [ 'title', 'editor', 'revisions' ],
/**
* Removed because of a WPML issue, see #2335
'capabilities' => array(
'create_posts' => 'do_not_allow',
),
*/
];
register_post_type( 'fusion_element', apply_filters( 'fusion_layout_element_args', $args ) );
$labels = [
'name' => esc_attr__( 'Category', 'fusion-builder' ),
];
register_taxonomy(
'element_category',
[ 'fusion_element' ],
[
'hierarchical' => true,
'labels' => $labels,
'publicly_queryable' => $is_builder,
'show_ui' => false,
'show_admin_column' => true,
'query_var' => true,
'show_in_nav_menus' => false,
]
);
$labels = [
'name' => esc_attr__( 'Category', 'fusion-builder' ),
];
register_taxonomy(
'template_category',
[ 'fusion_template' ],
[
'hierarchical' => true,
'labels' => $labels,
'publicly_queryable' => $is_builder,
'show_ui' => false,
'show_admin_column' => false,
'query_var' => true,
'show_in_nav_menus' => false,
]
);
$this->layouts_registered = true;
}
/**
* Delete custom template or element.
*/
public function delete_layout() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( isset( $_POST['fusion_layout_id'] ) && '' !== $_POST['fusion_layout_id'] && current_user_can( 'delete_post', $_POST['fusion_layout_id'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$layout_id = (int) $_POST['fusion_layout_id'];
$is_global = ( 'yes' === get_post_meta( $layout_id, '_fusion_is_global', true ) ? true : false );
if ( $is_global && ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_private_posts', 'avada_library', 'global_elements' ) ) ) {
wp_send_json_error();
wp_die();
}
wp_delete_post( $layout_id, true );
}
wp_send_json_success();
wp_die();
}
/**
* Add custom template or element.
*
* @param string $post_type The post-type.
* @param string $name The post-title.
* @param string $content The post-content.
* @param array $meta The post-meta.
* @param array $taxonomy Taxonomies.
* @param string $term Term.
*/
public function create_layout( $post_type, $name, $content, $meta = [], $taxonomy = [], $term = '' ) {
if ( ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'avada_library' ) ) ) {
return;
}
$layout = [
'post_title' => sanitize_text_field( $name ),
'post_content' => $content,
'post_status' => current_user_can( 'publish_posts' ) ? 'publish' : 'pending',
'post_type' => $post_type,
];
$layout_id = wp_insert_post( $layout );
if ( ! empty( $meta ) ) {
foreach ( $meta as $meta_key => $meta_value ) {
add_post_meta( $layout_id, $meta_key, sanitize_text_field( $meta_value ) );
}
}
if ( '' !== $term ) {
wp_set_object_terms( $layout_id, $term, $taxonomy );
}
do_action( 'fusion_builder_create_layout_after' );
return $layout_id;
}
/**
* Save custom layout.
*/
public function save_layout() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( isset( $_POST['fusion_layout_name'] ) && '' !== $_POST['fusion_layout_name'] && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'avada_library' ) ) ) {
$layout_name = wp_unslash( $_POST['fusion_layout_name'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$taxonomy = 'element_category';
$term = '';
$meta = [];
$layout_type = '';
$global_data = '';
$global_type = [
'elements' => 'element',
'columns' => 'column',
'sections' => 'container',
'post_cards' => 'post_card',
'mega_menus' => 'mega_menu',
];
if ( isset( $_POST['fusion_layout_post_type'] ) && '' !== $_POST['fusion_layout_post_type'] ) {
$post_type = sanitize_text_field( wp_unslash( $_POST['fusion_layout_post_type'] ) );
// Make sure only our library post types can be created.
$post_type_object = get_post_type_object( $post_type );
if ( ! current_user_can( $post_type_object->cap->edit_posts ) || ( 'fusion_template' !== $post_type && 'fusion_element' !== $post_type ) ) {
return;
}
if ( isset( $_POST['fusion_current_post_id'] ) && '' !== $_POST['fusion_current_post_id'] ) {
$post_id = wp_unslash( $_POST['fusion_current_post_id'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
if ( isset( $_POST['fusion_layout_element_type'] ) && '' !== $_POST['fusion_layout_element_type'] ) {
$meta['_fusion_element_type'] = wp_unslash( $_POST['fusion_layout_element_type'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$layout_type = ' fusion-element-type-' . wp_unslash( $_POST['fusion_layout_element_type'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
if ( 'fusion_template' === $post_type ) {
$meta['fusion_builder_status'] = 'active';
// Save custom css.
if ( isset( $_POST['fusion_custom_css'] ) && '' !== $_POST['fusion_custom_css'] ) {
$meta['_fusion_builder_custom_css'] = wp_unslash( $_POST['fusion_custom_css'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
// Save page template.
if ( isset( $_POST['fusion_page_template'] ) && '' !== $_POST['fusion_page_template'] ) {
$meta['_wp_page_template'] = wp_unslash( $_POST['fusion_page_template'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
// Save globals.
$_POST['fusion_layout_content'] = apply_filters( 'content_save_pre', $_POST['fusion_layout_content'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
// Globals.
if ( isset( $_POST['fusion_save_global'] ) && 'false' !== $_POST['fusion_save_global'] && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_private_posts', 'avada_library', 'global_elements' ) ) ) {
$meta['_fusion_is_global'] = 'yes';
$global_data = 'fusion-global';
} else {
$position = false;
if ( isset( $_POST['fusion_layout_content'] ) ) {
$position = strpos( sanitize_text_field( wp_unslash( $_POST['fusion_layout_content'] ) ), 'fusion_global' );
}
if ( false !== $position ) {
// Remove fusion_global attributes from content if it is simple library element.
$_POST['fusion_layout_content'] = preg_replace( '/fusion_global=[^][^][0-9]*[^][^]/', '', wp_unslash( $_POST['fusion_layout_content'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
}
}
// Add Fusion Options to meta data.
if ( isset( $_POST['fusion_options'] ) && '' !== wp_unslash( $_POST['fusion_options'] ) && is_array( wp_unslash( $_POST['fusion_options'] ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$_fusion_options = wp_unslash( $_POST['fusion_options'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
if ( isset( $_POST['fusion_po_type'] ) && 'object' === $_POST['fusion_po_type'] ) {
foreach ( $_fusion_options as $option => $value ) {
$meta[ $option ] = $value;
}
} else {
foreach ( $_fusion_options as $option ) {
$meta[ $option[0] ] = $option[1];
}
}
}
// Post category.
if ( isset( $_POST['fusion_layout_new_cat'] ) && '' !== $_POST['fusion_layout_new_cat'] ) {
$term = sanitize_text_field( wp_unslash( $_POST['fusion_layout_new_cat'] ) );
$global_type = $global_type[ $term ];
}
$post_fusion_layout_content = ( isset( $_POST['fusion_layout_content'] ) ) ? wp_unslash( $_POST['fusion_layout_content'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$new_layout_id = $this->create_layout( $post_type, $layout_name, $post_fusion_layout_content, $meta, $taxonomy, $term );
if ( empty( $new_layout_id ) ) {
die();
}
?>
location ) : ?>
location ) : ?>
location ) : ?>
location ? get_edit_post_link( $new_layout_id ) : add_query_arg( 'fb-edit', '1', get_permalink( $new_layout_id ) ); ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
isset( $_GET['name'] ) ? sanitize_text_field( wp_unslash( $_GET['name'] ) ) : '',
'post_status' => current_user_can( 'publish_posts' ) ? 'publish' : 'pending',
'post_type' => $post_type,
'post_content' => $post_content,
];
// Set global if checked.
if ( 'fusion_element' === $post_type && isset( $_GET['global'] ) && sanitize_text_field( wp_unslash( $_GET['global'] ) ) ) {
$library_element['meta_input'] = [
'_fusion_is_global' => 'yes',
];
}
$library_id = wp_insert_post( $library_element, true );
if ( is_wp_error( $library_id ) ) {
$error_string = $library_id->get_error_message();
wp_die( esc_html( $error_string ) );
}
// If we are adding element, add type.
if ( 'fusion_element' === $post_type ) {
$library_type = wp_set_object_terms( $library_id, $category, 'element_category' );
if ( is_wp_error( $library_type ) ) {
$error_string = $library_type->get_error_message();
wp_die( esc_html( $error_string ) );
}
}
// if we are adding template. Set default width to 100%.
if ( 'fusion_template' === $post_type ) {
fusion_data()->post_meta( $library_id )->set( 'blog_width_100', 'yes' );
}
// Just redirect to back-end editor. In future tie it to default editor option.
wp_safe_redirect( awb_get_new_post_edit_link( $library_id ) );
die();
}
/**
* Load custom elements.
*/
public function load_custom_elements() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( isset( $_POST['cat'] ) && '' !== $_POST['cat'] ) {
$cat = wp_unslash( $_POST['cat'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
// Query elements.
$query = fusion_cached_query(
[
'post_status' => 'publish',
'post_type' => 'fusion_element',
'posts_per_page' => '-1',
'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery
[
'taxonomy' => 'element_category',
'field' => 'slug',
'terms' => $cat,
],
],
]
);
?>
have_posts() ) : ?>
the_post(); ?>
ID, '_fusion_element_type', true ) ); ?>
-
location || ( 'front' !== $this->location && ! $query->have_posts() ) ) : ?>
location ) : ?>
set_import_options_from_request();
echo wp_json_encode( AWB_Studio_Import()->get_studio_content() );
wp_die();
}
$data = [];
$layout_id = (int) $_POST['fusion_layout_id'];
$layout = get_post( $layout_id );
// Globals.
if ( isset( $_POST['fusion_is_global'] ) && 'false' !== $_POST['fusion_is_global'] ) {
$position = strpos( $layout->post_content, ']' );
if ( false !== $position ) {
$layout->post_content = apply_filters( 'content_edit_pre', $layout->post_content, $layout->post_content, $layout_id );
$layout->post_content = substr_replace( $layout->post_content, ' fusion_global="' . $layout_id . '"]', $position, 1 );
}
}
if ( $layout ) {
// Set page content.
$data['post_content'] = apply_filters( 'content_edit_pre', $layout->post_content, $layout_id );
// Set page template.
if ( 'fusion_template' === get_post_type( $layout_id ) ) {
$page_template = get_post_meta( $layout_id, '_wp_page_template', true );
if ( isset( $page_template ) && ! empty( $page_template ) ) {
$data['page_template'] = $page_template;
}
$custom_css = get_post_meta( $layout_id, '_fusion_builder_custom_css', true );
$data['post_meta'] = get_post_meta( $layout_id );
if ( isset( $custom_css ) && ! empty( $custom_css ) ) {
$data['custom_css'] = $custom_css;
}
}
}
$json_data = wp_json_encode( $data );
die( $json_data ); // phpcs:ignore WordPress.Security.EscapeOutput
}
/**
* Load custom page layout.
*/
public function load_demo() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( ! isset( $_POST['page_name'] ) && '' === $_POST['page_name'] ) {
die( -1 );
}
if ( ! isset( $_POST['demo_name'] ) && '' === $_POST['demo_name'] ) {
die( -1 );
}
if ( ! isset( $_POST['post_id'] ) && '' === $_POST['post_id'] ) {
die( -1 );
}
$data = [];
$page_name = sanitize_text_field( wp_unslash( $_POST['page_name'] ) );
$demo_name = sanitize_text_field( wp_unslash( $_POST['demo_name'] ) );
$post_id = (int) $_POST['post_id'];
$fusion_builder_demos = apply_filters( 'fusion_builder_get_demo_pages', [] );
if ( isset( $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ] ) && ! empty( $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ] ) ) {
// Set page content.
$data['post_content'] = $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ]['content'];
// Set page template.
$page_template = $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ]['page_template'];
if ( isset( $page_template ) && ! empty( $page_template ) ) {
$data['page_template'] = $page_template;
}
}
if ( isset( $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ]['meta'] ) && ! empty( $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ]['meta'] ) ) {
$data['meta'] = $fusion_builder_demos[ $demo_name ]['pages'][ $page_name ]['meta'];
}
$json_data = wp_json_encode( $data );
die( $json_data ); // phpcs:ignore WordPress.Security.EscapeOutput
}
/**
* Save custom layout.
*/
public function update_layout() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( isset( $_POST['fusion_layout_id'] ) && '' !== $_POST['fusion_layout_id'] && apply_filters( 'fusion_global_save', true, 'ajax' ) && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_private_posts', 'avada_library', 'global_elements' ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$layout_id = wp_unslash( $_POST['fusion_layout_id'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$content = isset( $_POST['fusion_layout_content'] ) ? wp_unslash( $_POST['fusion_layout_content'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$to_replace = [ addslashes( ' fusion_global="' . $layout_id . '"' ), ' fusion_global="' . $layout_id . '"' ];
$content = str_replace( $to_replace, '', $content );
// Filter nested globals.
$content = apply_filters( 'content_save_pre', $content, $content, $layout_id );
$post = [
'ID' => $layout_id,
'post_content' => $content,
];
wp_update_post( $post );
}
wp_die();
}
/**
* Get image URL from image ID.
*/
public function get_image_url() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( ! isset( $_POST['fusion_image_ids'] ) && '' === $_POST['fusion_image_ids'] ) {
die( -1 );
}
$data = [];
$image_ids = wp_unslash( $_POST['fusion_image_ids'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
foreach ( $image_ids as $image_id ) {
if ( '' !== $image_id ) {
$image_url = wp_get_attachment_url( $image_id, 'thumbnail' );
$image_html = '';
$image_html .= '

';
$image_html .= '
';
$image_html .= '
';
$data['images'][] = $image_html;
}
}
$json_data = wp_json_encode( $data );
die( $json_data ); // phpcs:ignore WordPress.Security.EscapeOutput
}
/**
* Process action for trash element.
*
* @since 1.0
* @return void
*/
public function trash_element() {
if ( current_user_can( 'delete_published_pages' ) ) {
$element_ids = '';
if ( isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$element_ids = wp_unslash( $_GET['post'] ); // phpcs:ignore WordPress.Security
}
if ( '' !== $element_ids ) {
$element_ids = (array) $element_ids;
}
if ( ! empty( $element_ids ) ) {
foreach ( $element_ids as $id ) {
wp_trash_post( $id );
}
}
}
$referer = fusion_get_referer();
if ( $referer ) {
wp_safe_redirect( $referer );
exit;
}
}
/**
* Process action for restore element.
*
* @since 1.0
* @return void
*/
public function restore_element() {
if ( current_user_can( 'publish_pages' ) ) {
$element_ids = '';
if ( isset( $_GET['post'] ) ) { // // phpcs:ignore WordPress.Security.NonceVerification
$element_ids = wp_unslash( $_GET['post'] ); // phpcs:ignore WordPress.Security
}
if ( '' !== $element_ids ) {
$element_ids = (array) $element_ids;
}
if ( ! empty( $element_ids ) ) {
foreach ( $element_ids as $id ) {
wp_untrash_post( $id );
}
}
}
$referer = fusion_get_referer();
if ( $referer ) {
wp_safe_redirect( $referer );
exit;
}
}
/**
* Process action for untrash element.
*
* @since 1.0
* @return void
*/
public function delete_element_post() {
if ( current_user_can( 'delete_published_pages' ) ) {
$element_ids = '';
if ( isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$element_ids = wp_unslash( $_GET['post'] ); // phpcs:ignore WordPress.Security
}
if ( '' !== $element_ids ) {
$element_ids = (array) $element_ids;
}
if ( ! empty( $element_ids ) ) {
// Register taxonomies.
$this->register_layouts();
foreach ( $element_ids as $id ) {
wp_delete_post( $id, true );
}
}
}
$referer = fusion_get_referer();
if ( $referer ) {
wp_safe_redirect( $referer );
exit;
}
}
/**
* Get the library-edit link.
*
* @access public
* @since 2.2.0
* @param int $id The post-ID.
* @return string
*/
public function get_library_item_edit_link( $id ) {
if ( 'front' === $this->location ) {
return esc_url( add_query_arg( 'fb-edit', '1', get_the_permalink( $id ) ) );
}
return esc_url_raw( htmlspecialchars_decode( get_edit_post_link( $id ) ) );
}
/**
* Display library content in builder.
*
* @since 1.0
* @return void
*/
public function display_library_content( $builder ) {
global $post;
$saved_post = $post;
$post_type = get_query_var( 'post_type', get_post_type() );
$post_card = fusion_is_post_card();
$mega_menu = fusion_is_mega_menu();
?>
registration->is_registered() ) : ?>
registration->is_registered() ) : ?>
'publish',
'post_type' => 'fusion_element',
'posts_per_page' => '-1',
'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery
[
'taxonomy' => 'element_category',
'field' => 'slug',
'terms' => 'sections',
],
],
]
);
?>
have_posts() ) :
$query->the_post();
$is_global = ( 'yes' === get_post_meta( get_the_ID(), '_fusion_is_global', true ) ? 'fusion-global' : '' );
global $post;
?>
-
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location || ( 'front' !== $this->location && ! $query->have_posts() ) ) : ?>
location ) : ?>
'publish',
'post_type' => 'fusion_element',
'posts_per_page' => '-1',
'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery
[
'taxonomy' => 'element_category',
'field' => 'slug',
'terms' => 'columns',
],
],
]
);
?>
have_posts() ) : ?>
the_post();
$is_global = ( 'yes' === get_post_meta( get_the_ID(), '_fusion_is_global', true ) ? 'fusion-global' : '' );
global $post;
?>
-
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location || ( 'front' !== $this->location && ! $query->have_posts() ) ) : ?>
location ) : ?>
'publish',
'post_type' => 'fusion_element',
'posts_per_page' => '-1',
'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery
[
'taxonomy' => 'element_category',
'field' => 'slug',
'terms' => 'elements',
],
],
]
);
?>
have_posts() ) :
$query->the_post();
$is_global = ( 'yes' === get_post_meta( get_the_ID(), '_fusion_is_global', true ) ? 'fusion-global' : '' );
global $post;
$element_type = esc_attr( get_post_meta( $post->ID, '_fusion_element_type', true ) );
?>
-
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location || ( 'front' !== $this->location && ! $query->have_posts() ) ) : ?>
location ) : ?>
'publish',
'post_type' => 'fusion_template',
'posts_per_page' => '-1',
]
);
?>
'
);
?>
location ) : ?>
location ) : ?>
location ) : ?>
location ) : ?>
location || ( 'front' !== $this->location && ! $query->have_posts() ) ) : ?>
location ) : ?>
post_content = fusion_is_preview_frame() ? $builder->front_end_content( $_post->post_content ) : $_post->post_content;
$overrides['footer'] = $_post;
} elseif ( has_term( 'page_title_bar', 'fusion_tb_category' ) ) {
$_post->post_content = fusion_is_preview_frame() ? $builder->front_end_content( $_post->post_content ) : $_post->post_content;
$overrides['page_title_bar'] = $_post;
} elseif ( has_term( 'header', 'fusion_tb_category' ) ) {
$_post->post_content = fusion_is_preview_frame() ? $builder->front_end_content( $_post->post_content ) : $_post->post_content;
$overrides['header'] = $_post;
}
// Prevent main content being filtered.
remove_filter( 'the_content', [ $builder, 'front_end_content' ], 99 );
remove_filter( 'body_class', [ $builder, 'body_class' ] );
remove_filter( 'do_shortcode_tag', [ $builder, 'create_shortcode_contents_map' ], 10, 4 );
// Create a dummy post to use as content.
if ( ! isset( $overrides['content'] ) ) {
$overrides['content'] = Fusion_Dummy_Post::get_dummy_post();
}
} else {
// Reset the content override because we are editing content directly.
if ( isset( $overrides['content'] ) ) {
$overrides['content'] = false;
}
}
}
return $overrides;
}
/**
* Copies taxonomies.
*
* @access public
* @param array $taxonomies Taxonomies.
* @return array
* @since 3.1
*/
public function copy_taxonomies( $taxonomies ) {
$taxonomies[] = 'element_category';
return $taxonomies;
}
/**
* Saves a new element.
*
* @access public
* @since 3.3
*/
public function clone_library_element() {
if ( ! ( isset( $_GET['item'] ) || isset( $_POST['item'] ) || ( isset( $_REQUEST['action'] ) && 'clone_library_element' === $_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_element', '_fusion_library_clone_nonce' ) && current_user_can( 'edit_others_posts' ) ) {
// Get the post being copied.
$id = isset( $_GET['item'] ) ? wp_unslash( $_GET['item'] ) : wp_unslash( $_POST['item'] ); // phpcs:ignore WordPress.Security
$post = get_post( $id );
// Copy the section and insert it.
if ( isset( $post ) && $post ) {
$this->clone_element( $post );
// Redirect to the all sections screen.
wp_safe_redirect( admin_url( 'admin.php?page=avada-library' ) );
exit;
} else {
/* translators: The ID not found. */
wp_die( sprintf( esc_attr__( 'Cloning failed. Element not found. ID: %s', 'fusion-builder' ), htmlspecialchars( $id ) ) ); // phpcs:ignore WordPress.Security
}
}
}
/**
* Clones a section.
*
* @access public
* @since 3.3
* @param object $post The post object.
* @return int
*/
public function clone_element( $post ) {
// Ignore revisions.
if ( 'revision' === $post->post_type ) {
return;
}
$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 section 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 );
$taxonomy = 'fusion_element' === $post->post_type ? 'element_category' : 'template_category';
// Post terms.
wp_set_object_terms(
$new_post_id,
wp_get_object_terms(
$post->ID,
$taxonomy,
[ 'fields' => 'ids' ]
),
$taxonomy
);
// Clone section 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;
}
/**
* Checks if footer should be rendered in Live Builder.
*
* @param string $default The default value.
* @param string $page_id The page ID.
* @return boolean
*/
public function should_render_footer( $default, $page_id ) {
return $this->should_render_for_template( 'live_footer', $default, $page_id );
}
/**
* Checks if header should be rendered in Live Builder.
*
* @param string $default The default value.
* @param string $page_id The page ID.
* @return boolean
*/
public function should_render_header( $default, $page_id ) {
return $this->should_render_for_template( 'live_header', $default, $page_id );
}
/**
* Checks if page title bar should be rendered in Live Builder.
*
* @param string $default The default value.
* @param string $page_id The page ID.
* @return boolean
*/
public function should_render_page_title_bar( $default, $page_id ) {
return $this->should_render_for_template( 'live_ptb', $default, $page_id );
}
/**
* Checks if specific section should be rendered based on PO.
*
* @param string $type The render type.
* @param string $default The default value.
* @param string $page_id The page ID.
* @return boolean
*/
public function should_render_for_template( $type, $default, $page_id ) {
$is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() );
$post_type = get_post_type( $page_id );
if ( $is_builder && 'fusion_template' === $post_type ) {
$should_show = fusion_data()->post_meta( $page_id )->get( $type );
$default = empty( $should_show ) || 'no' === $should_show ? false : $default;
}
return $default;
}
}
/**
* Instantiates the Fusion_Builder_Library class.
* Make sure the class is properly set-up.
*
* @since object 2.2
* @return object Fusion_Builder_Library
*/
function Fusion_Builder_Library() { // phpcs:ignore WordPress.NamingConventions
return Fusion_Builder_Library::get_instance();
}
Fusion_Builder_Library();