405 lines
14 KiB
PHP
405 lines
14 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_localize_script(
|
|
'wp-color-picker-alpha',
|
|
'gpSectionsColorPickerL10n',
|
|
array(
|
|
'defaultLabel' => __( 'Color value', 'gp-premium' ),
|
|
'pick' => __( 'Select Color', 'gp-premium' ),
|
|
'defaultString' => __( 'Default', 'gp-premium' ),
|
|
'defaultAriaLabel' => __( 'Select default color', 'gp-premium' ),
|
|
'clear' => __( 'Clear', 'gp-premium' ),
|
|
'clearAriaLabel' => __( 'Clear color', 'gp-premium' ),
|
|
)
|
|
);
|
|
|
|
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 '';
|
|
}
|
|
}
|