ID, '_fl_builder_data_settings', true );
if ( ! isset( $data->css ) ) {
$css = '';
} else {
$css = $data->css;
}
if ( ! isset( $data->js ) ) {
$js = '';
} else {
$js = $data->js;
}
?>
css = $_POST['fl_css'];
$data->js = $_POST['fl_js'];
// Update the meta field.
update_post_meta( $post_id, '_fl_builder_data_settings', $data );
update_post_meta( $post_id, '_fl_builder_draft_settings', $data );
}
/**
* WordPress doesn't have a "right way" to get the current
* post type being edited and the new editor doesn't make
* this any easier. This method attempts to fix that.
*
* @since 2.1
* @return void
*/
static public function get_post_type() {
global $post, $typenow, $current_screen;
if ( is_object( $post ) && $post->post_type ) {
return $post->post_type;
} elseif ( $typenow ) {
return $typenow;
} elseif ( is_object( $current_screen ) && $current_screen->post_type ) {
return $current_screen->post_type;
} elseif ( isset( $_REQUEST['post_type'] ) ) {
return sanitize_key( $_REQUEST['post_type'] );
}
return null;
}
/**
* Checks to see if a post type supports the
* WordPress block editor.
*
* @since 2.2
* @param string $post_type
* @return bool
*/
static public function post_type_supports_block_editor( $post_type ) {
if ( ! function_exists( 'use_block_editor_for_post_type' ) || isset( $_GET['classic-editor'] ) ) {
return false;
}
return use_block_editor_for_post_type( $post_type );
}
/**
* Allow sorting by builder enabled in pages list.
* @since 2.2.1
*/
static public function sort_builder_enabled( $query ) {
global $pagenow;
if ( is_admin()
&& 'edit.php' == $pagenow
&& ! isset( $_GET['orderby'] )
&& isset( $_GET['post_type'] )
&& isset( $_GET['bbsort'] ) ) {
$query->set( 'meta_key', '_fl_builder_enabled' );
$query->set( 'meta_value', '1' );
}
}
/**
* Sets the body class, loads assets and renders the UI
* if we are on a post type that supports the builder.
*
* @since 1.0
* @return void
*/
static public function init_rendering() {
global $pagenow;
if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
/**
* Enable/disable builder edit UI buttons
* @see fl_builder_render_admin_edit_ui
*/
$render_ui = apply_filters( 'fl_builder_render_admin_edit_ui', true );
$post_type = self::get_post_type();
$post_types = FLBuilderModel::get_post_types();
if ( $render_ui && in_array( $post_type, $post_types ) ) {
add_filter( 'admin_body_class', __CLASS__ . '::body_class', 99 );
add_action( 'admin_enqueue_scripts', __CLASS__ . '::styles_scripts' );
add_action( 'edit_form_after_title', __CLASS__ . '::render' );
}
}
/**
* Enable/disable sorting by BB enabled.
* @see fl_builder_admin_edit_sort_bb_enabled
*/
if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
$post_types = FLBuilderModel::get_post_types();
$post_type = self::get_post_type();
$block = array(
'fl-builder-template',
'fl-theme-layout',
);
/**
* Array of types to not show filtering on.
* @see fl_builder_admin_edit_sort_blocklist
*/
if ( ! in_array( $post_type, apply_filters( 'fl_builder_admin_edit_sort_blocklist', $block ) ) && in_array( $post_type, $post_types ) ) {
wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
$args = array(
'post_type' => $post_type,
'posts_per_page' => -1,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => '_fl_builder_enabled',
'compare' => '!=',
'value' => '',
),
),
);
$result = new WP_Query( $args );
$count = is_array( $result->posts ) ? count( $result->posts ) : 0;
$clicked = isset( $_GET['bbsort'] ) ? true : false;
wp_localize_script( 'fl-builder-admin-posts-list',
'fl_builder_enabled_count',
array(
'count' => number_format_i18n( $count ),
'brand' => FLBuilderModel::get_branding(),
'clicked' => $clicked,
'type' => $post_type,
)
);
}
}
}
/**
* Enqueues the CSS/JS for the post edit screen.
*
* @since 1.0
* @return void
*/
static public function styles_scripts() {
global $wp_version;
// Styles
wp_enqueue_style( 'fl-builder-admin-posts', FL_BUILDER_URL . 'css/fl-builder-admin-posts.css', array(), FL_BUILDER_VERSION );
// Legacy WP Styles (3.7 and below)
if ( version_compare( $wp_version, '3.7', '<=' ) ) {
wp_enqueue_style( 'fl-builder-admin-posts-legacy', FL_BUILDER_URL . 'css/fl-builder-admin-posts-legacy.css', array(), FL_BUILDER_VERSION );
}
// Scripts
wp_enqueue_script( 'json2' );
wp_enqueue_script( 'fl-builder-admin-posts', FL_BUILDER_URL . 'js/fl-builder-admin-posts.js', array(), FL_BUILDER_VERSION );
}
/**
* Adds classes to the post edit screen body class.
*
* @since 1.0
* @param string $classes The existing body classes.
* @return string The body classes.
*/
static public function body_class( $classes = '' ) {
global $wp_version;
// Builder body class
if ( FLBuilderModel::is_builder_enabled() ) {
$classes .= ' fl-builder-enabled';
}
// Pre WP 3.8 body class
if ( version_compare( $wp_version, '3.8', '<' ) ) {
$classes .= ' fl-pre-wp-3-8';
}
return $classes;
}
/**
* Renders the HTML for the post edit screen.
*
* @since 1.0
* @return void
*/
static public function render() {
global $post;
$post_type_obj = get_post_type_object( $post->post_type );
$post_type_name = strtolower( $post_type_obj->labels->singular_name );
$enabled = FLBuilderModel::is_builder_enabled();
include FL_BUILDER_DIR . 'includes/admin-posts.php';
}
/**
* Renders the action link for post listing pages.
*
* @since 1.0
* @param array $actions
* @return array The array of action data.
*/
static public function render_row_actions_link( $actions = array() ) {
global $post;
if ( 'trash' != $post->post_status && current_user_can( 'edit_post', $post->ID ) && ( function_exists( 'wp_check_post_lock' ) && wp_check_post_lock( $post->ID ) === false ) ) {
/**
* Is post editable from admin post list
* @see fl_builder_is_post_editable
*/
$is_post_editable = (bool) apply_filters( 'fl_builder_is_post_editable', true, $post );
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
$post_types = FLBuilderModel::get_post_types();
$typeobj = get_post_type_object( $post->post_type );
$singular_name = ( isset( $_GET['fl-builder-template-type'] ) ) ? ucfirst( $_GET['fl-builder-template-type'] ) : $typeobj->labels->singular_name;
$singular_name = ( 'Layout' === $singular_name ) ? 'Template' : $singular_name;
if ( in_array( $post->post_type, $post_types ) && $is_post_editable && $user_access ) {
$enabled = get_post_meta( $post->ID, '_fl_builder_enabled', true );
$dot = ' •';
$actions['fl-builder'] = '' . FLBuilderModel::get_branding() . $dot . '';
if ( $enabled && true === apply_filters( 'fl_builder_duplicate_enabled', true ) ) {
$url = add_query_arg( array(
'post_type' => $post->post_type,
'post_id' => $post->ID,
'duplicate_layout' => true,
'duplicate_nonce' => wp_create_nonce( 'duplicate_nonce' ),
), admin_url() );
/* translators: %s: post type being duplicated */
$duplicate_text = sprintf( __( 'Duplicate %s', 'fl-builder' ), $singular_name );
/* translators: %1$s: post type being duplicated: %2$s: Branding name */
$duplicate_alt = esc_attr( sprintf( __( 'Duplicate %1$s with %2$s', 'fl-builder' ), $singular_name, FLBuilderModel::get_branding() ) );
$actions['fl-builder-duplicate'] = sprintf( '%s%s', $duplicate_alt, $url, $duplicate_text, $dot );
}
}
}
return $actions;
}
static public function duplicate_layout() {
if ( isset( $_GET['duplicate_layout'] ) ) {
$id = $_GET['post_id'];
$nonce = $_GET['duplicate_nonce'];
if ( wp_verify_nonce( $nonce, 'duplicate_nonce' ) ) {
$post_id = FLBuilderModel::duplicate_post( $id );
$url = add_query_arg( array(
'post' => $post_id,
'action' => 'edit',
), admin_url( 'post.php' ) );
wp_redirect( $url );
exit;
} else {
wp_die( 'Unauthorized' );
}
}
}
/**
* Where to redirect this post on save.
*
* @since 1.0
* @param string $location
* @return string The location to redirect this post on save.
*/
static public function redirect_post_location( $location ) {
if ( isset( $_POST['fl-builder-redirect'] ) ) {
$location = FLBuilderModel::get_edit_url( absint( $_POST['fl-builder-redirect'] ) );
}
return $location;
}
}
FLBuilderAdminPosts::init();