laipower/wp-content/plugins/gp-premium/sections/functions/metaboxes/metabox-functions.php
2020-04-07 13:03:04 +00:00

392 lines
13 KiB
PHP

<?php
// No direct access, please
if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! function_exists( 'generate_sections_admin_body_class' ) ) {
add_filter( 'admin_body_class', 'generate_sections_admin_body_class' );
function generate_sections_admin_body_class( $classes ) {
global $post;
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
$classes .= ' generate-sections-enabled';
}
return $classes;
}
}
if ( ! function_exists( 'generate_sections_content_width' ) ) {
add_action( 'wp', 'generate_sections_content_width', 50 );
/**
* Set our content width when sections are enabled
*/
function generate_sections_content_width() {
global $post;
$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';
if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
global $content_width;
$content_width = 2000;
}
}
}
if ( ! function_exists( 'generate_sections_add_metaboxes' ) ) {
add_action( 'add_meta_boxes', 'generate_sections_add_metaboxes', 5 );
/*
* Functions for creating the metaboxes
*/
function generate_sections_add_metaboxes() {
$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );
add_meta_box(
'_generate_use_sections_metabox',
__( 'Sections', 'gp-premium' ),
'generate_sections_use_sections_metabox',
$post_types,
'side',
'high'
);
add_meta_box(
'_generate_sections_metabox',
__( 'Sections', 'gp-premium' ),
'generate_sections_sections_metabox',
$post_types,
'normal',
'high'
);
}
}
if ( ! function_exists( 'generate_sections_sanitize_function' ) ) {
/*
* Sanitize our settings
*/
function generate_sections_sanitize_function( $data, $post_id ) {
$section = array();
if ( isset( $data['title'] ) ) {
$section['title'] = sanitize_text_field( $data['title'] );
}
if ( isset( $data['content'] ) ) {
$section['content'] = sanitize_post_field( 'post_content', $data['content'], $post_id, 'db' );
}
if ( isset( $data['custom_classes'] ) ) {
$section['custom_classes'] = sanitize_text_field( $data['custom_classes'] );
}
if ( isset( $data['custom_id'] ) ) {
$section['custom_id'] = sanitize_text_field( $data['custom_id'] );
}
if ( isset( $data['top_padding'] ) ) {
$section['top_padding'] = '' == $data['top_padding'] ? $data['top_padding'] : absint( $data['top_padding'] );
}
if ( isset( $data['bottom_padding'] ) ) {
$section['bottom_padding'] = '' == $data['bottom_padding'] ? $data['bottom_padding'] : absint( $data['bottom_padding'] );
}
if ( isset( $data['top_padding_unit'] ) ) {
$section['top_padding_unit'] = $data['top_padding_unit'] == '%' ? '%' : '';
}
if ( isset( $data['bottom_padding_unit'] ) ) {
$section['bottom_padding_unit'] = $data['bottom_padding_unit'] == '%' ? '%' : '';
}
if ( isset( $data['background_image'] ) ) {
$section['background_image'] = absint( $data['background_image'] );
}
if ( isset( $data['background_color'] ) ) {
$section['background_color'] = generate_sections_sanitize_rgba( $data['background_color'] );
}
if ( isset( $data['text_color'] ) ) {
$section['text_color'] = generate_sections_sanitize_hex_color( $data['text_color'] );
}
if ( isset( $data['link_color'] ) ) {
$section['link_color'] = generate_sections_sanitize_hex_color( $data['link_color'] );
}
if ( isset( $data['link_color_hover'] ) ) {
$section['link_color_hover'] = generate_sections_sanitize_hex_color( $data['link_color_hover'] );
}
if ( isset( $data['box_type'] ) ) {
$section['box_type'] = $data['box_type'] == 'contained' ? 'contained' : '';
}
if ( isset( $data['inner_box_type'] ) ) {
$section['inner_box_type'] = $data['inner_box_type'] == 'fluid' ? 'fluid' : '';
}
if ( isset( $data['parallax_effect'] ) ) {
$section['parallax_effect'] = $data['parallax_effect'] == 'enable' ? 'enable' : '';
}
if ( isset( $data['background_color_overlay'] ) ) {
$section['background_color_overlay'] = $data['background_color_overlay'] == 'enable' ? 'enable' : '';
}
return $section;
}
}
if ( ! function_exists( 'generate_sections_metabox_scripts' ) ) {
add_action( 'admin_enqueue_scripts', 'generate_sections_metabox_scripts', 20 );
/*
* Enqueue styles and scripts specific to metaboxs
*/
function generate_sections_metabox_scripts( $hook ) {
// I prefer to enqueue the styles only on pages that are using the metaboxes
if ( in_array( $hook, array( "post.php", "post-new.php" ) ) ) {
$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );
$screen = get_current_screen();
$post_type = $screen->id;
if ( in_array( $post_type, (array) $post_types ) ) {
wp_enqueue_style( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'css/generate-sections-metabox.css', false, GENERATE_SECTIONS_VERSION );
wp_enqueue_style( 'generate-lc-switch', plugin_dir_url( __FILE__ ) . 'css/lc_switch.css', false, GENERATE_SECTIONS_VERSION );
//make sure we enqueue some scripts just in case ( only needed for repeating metaboxes )
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-ui-widget' );
wp_enqueue_script( 'jquery-ui-mouse' );
wp_enqueue_script( 'jquery-ui-sortable' );
wp_enqueue_script( 'editor' );
wp_enqueue_script( 'media-upload' );
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'wp-color-picker-alpha', plugin_dir_url( __FILE__ ) . 'js/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), GENERATE_SECTIONS_VERSION );
wp_enqueue_media();
if ( function_exists( 'wp_enqueue_editor' ) ) {
wp_enqueue_editor();
wp_add_inline_script(
'editor',
'window.wp.sectionsEditor = window.wp.editor;',
'after'
);
}
if ( version_compare( get_bloginfo( 'version' ), '5.0', '<' ) ) {
wp_enqueue_script( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'js/generate-sections-metabox-4.9.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-sortable', 'editor', 'media-upload', 'wp-color-picker' ), GENERATE_SECTIONS_VERSION, true );
} else {
wp_enqueue_script( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'js/generate-sections-metabox.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-sortable', 'editor', 'media-upload', 'wp-color-picker' ), GENERATE_SECTIONS_VERSION, true );
}
if ( function_exists( 'wp_add_inline_script' ) ) {
if ( function_exists( 'generate_get_default_color_palettes' ) ) {
// Grab our palette array and turn it into JS
$palettes = json_encode( generate_get_default_color_palettes() );
// Add our custom palettes
// json_encode takes care of escaping
wp_add_inline_script( 'wp-color-picker', 'jQuery.wp.wpColorPicker.prototype.options.palettes = ' . $palettes . ';' );
}
}
}
}
}
}
if ( ! function_exists( 'generate_sections_admin_footer_scripts' ) ) {
add_action( 'admin_footer', 'generate_sections_admin_footer_scripts' );
function generate_sections_admin_footer_scripts() {
// We don't need this if wp_add_inline_script exists
if ( function_exists( 'wp_add_inline_script' ) ) {
return;
}
?>
<script>
if ( typeof lc_switch !== 'undefined' ) {
jQuery(document).ready(function($) { $(".use-sections-switch").lc_switch("","");});
}
</script>
<?php
}
}
if ( ! function_exists( 'generate_sections_use_sections_metabox' ) ) {
function generate_sections_use_sections_metabox() {
include_once( plugin_dir_path( __FILE__ ) . 'views/use-sections.php' );
}
}
if ( ! function_exists( 'generate_sections_sections_metabox' ) ) {
function generate_sections_sections_metabox() {
global $post;
$meta = get_post_meta( $post->ID, '_generate_sections', true );
$sections = isset( $meta['sections'] ) && is_array( $meta['sections' ] ) ? $meta['sections'] : array();
$translation_array = array(
'confirm' => __( 'This action can not be undone, are you sure?', 'gp-premium' ),
'post_id' => $post->ID,
'sections' => $sections,
'default_title' => __( 'Section', 'gp-premium' ),
'default_content_title' => __( 'Content', 'gp-premium' ),
'tabs' => array(
array( 'title' => __( 'Settings', 'gp-premium' ), 'target' => 'style', 'active' => 'false' ),
array( 'title' => __( 'Content', 'gp-premium' ), 'target' => 'content', 'active' => 'true' ),
//array( 'title' => __( 'Layout', 'gp-premium' ), 'target' => 'layout', 'active' => 'false' ),
),
'top_padding' => apply_filters( 'generate_sections_default_padding_top','40' ),
'bottom_padding' => apply_filters( 'generate_sections_default_padding_bottom','40' ),
'media_library_title' => __('Section Background', 'gp-premium' ),
'media_library_button' => __( 'Set as Section Background', 'gp-premium' ),
'generate_nonce' => wp_create_nonce( 'generate_sections_nonce' ),
'default_editor' => user_can_richedit() && wp_default_editor() == 'tinymce' ? 'tmce-active' : 'html-active',
'user_can_richedit' => user_can_richedit(),
'insert_into_section' => __( 'Insert into Section', 'gp-premium' ),
'edit_section' => __( 'Edit Section', 'gp-premium' )
);
wp_localize_script( 'generate-sections-metabox', 'generate_sections_metabox_i18n', $translation_array );
include_once( plugin_dir_path( __FILE__ ) . 'views/sections.php' );
include_once( plugin_dir_path( __FILE__ ) . 'views/sections-template.php' );
add_action( 'print_media_templates', 'generate_sections_print_templates' );
do_action( 'generate_sections_metabox' );
}
}
if ( ! function_exists( 'generate_sections_save_use_metabox' ) ) {
add_action( 'save_post', 'generate_sections_save_use_metabox' );
/*
* Save the "use" metabox
*/
function generate_sections_save_use_metabox( $post_id ) {
if ( ! isset( $_POST['_generate_sections_use_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_use_sections_nonce'], 'generate_sections_use_sections_nonce' ) ) {
return $post_id;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return $post_id;
}
if ( ! current_user_can('edit_post', $post_id ) ) {
return $post_id;
}
if ( isset ( $_POST['_generate_use_sections'] ) && isset ( $_POST['_generate_use_sections']['use_sections'] ) && $_POST['_generate_use_sections']['use_sections'] == 'true' ) {
update_post_meta( $post_id, '_generate_use_sections', array( 'use_sections' => 'true' ) );
} else {
delete_post_meta( $post_id, '_generate_use_sections' );
}
}
}
if ( ! function_exists( 'generate_sections_save_sections_metabox' ) ) {
add_action( 'save_post', 'generate_sections_save_sections_metabox', 20 );
/*
* Save the sections metabox
*/
function generate_sections_save_sections_metabox( $post_id ) {
if ( ! isset( $_POST['_generate_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_nonce'], 'generate_sections_nonce' ) ) {
return $post_id;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return $post_id;
}
if ( ! current_user_can('edit_post', $post_id ) ) {
return $post_id;
}
$clean = array();
if ( isset ( $_POST['_generate_sections'] ) && isset( $_POST['_generate_sections']['sections'] ) && is_array( $_POST['_generate_sections']['sections'] ) ) {
foreach( $_POST['_generate_sections']['sections'] as $section ) {
$section = json_decode( stripslashes( trim($section) ), true);
$section = generate_sections_sanitize_function( $section, $post_id );
if ( ! empty( $section ) ){
$clean[] = $section;
}
}
}
// save data
if ( ! empty( $clean ) ) {
// this maintains data structure of previous version
$meta = array( 'sections' => $clean );
update_post_meta( $post_id, '_generate_sections', $meta );
} else {
delete_post_meta( $post_id, '_generate_sections' );
}
}
}
if ( ! function_exists( 'generate_sections_sanitize_hex_color' ) ) {
/*
* Sanitize colors
* We don't use the built in function so we can use empty values
*/
function generate_sections_sanitize_hex_color( $color ) {
if ( '' === $color ) {
return '';
}
// 3 or 6 hex digits, or the empty string.
if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
return $color;
}
return null;
}
}
if ( ! function_exists( 'generate_sections_sanitize_rgba' ) ) {
/**
* Sanitize RGBA colors
* @since 1.3.42
*/
function generate_sections_sanitize_rgba( $color ) {
if ( '' === $color ) {
return '';
}
// If string does not start with 'rgba', then treat as hex
// sanitize the hex color and finally convert hex to rgba
if ( false === strpos( $color, 'rgba' ) ) {
return generate_sections_sanitize_hex_color( $color );
}
// By now we know the string is formatted as an rgba color so we need to further sanitize it.
$color = str_replace( ' ', '', $color );
sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
return 'rgba('.$red.','.$green.','.$blue.','.$alpha.')';
return '';
}
}