. */ defined( 'WPINC' ) or die; class Genesis_Columns_Advanced { /** * Constructor * * @since 2.0.0 */ function __construct() { add_action( 'wp_loaded', array( $this, 'init') ); } /** * Initialize plugin. * * @since 2.0.0 */ public function init() { load_plugin_textdomain( 'genesis-columns-advanced', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); add_action('admin_init', array( $this, 'add_tinymce_button' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts_enqueue' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts_enqueue' ) ); $this->add_shortcodes(); add_filter( 'the_content', array( $this, 'shortcode_empty_paragraph_fix' ) ); add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 ); } /** * Initialize the columns shortcode tinymce button * * @since 1.0.0 */ public function add_tinymce_button() { // Check user permissions if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) { return; } // Check if WYSIWYG is enabled if ( 'true' == get_user_option( 'rich_editing' ) ) { add_filter( 'mce_external_languages', array( $this, 'add_tinymce_translations' ) ); add_filter( 'mce_external_plugins', array( $this, 'add_tinymce_plugin' ) ); add_filter( 'mce_buttons', array( $this, 'register_tinymce_button' ) ); add_action( 'admin_print_footer_scripts', array( $this, 'tinymce_popup' ), 100 ); } } /** * Declare script for new button * * @since 1.0.0 * * @param array $plugins An array of all current TinyMCE plugins * @return array $plugins Return the plugins array with our plugin added */ public function add_tinymce_plugin( $plugins ) { $plugins['gca_plugin'] = plugin_dir_url( __FILE__ ) . 'tinymce/js/plugin.js'; return $plugins; } /** * Add translations to TinyMCE button * * @since 2.0.0 * * @param array $locales An array of all current TinyMCE translations * @return array $locales Return the translations array with our translations added */ public function add_tinymce_translations( $locales ) { $locales['gca_translations'] = plugin_dir_path( __FILE__ ) . 'tinymce/plugin-translations.php'; return $locales; } /** * Register new button in the TinyMCE editor * * @since 1.0.0 * * @param array $buttons An array of all current TinyMCE buttons * @return array $buttons Return the buttons array with our button added */ public function register_tinymce_button( $buttons ) { array_push( $buttons, 'gca_plugin' ); return $buttons; } /** * Add the popup and the popup backdrop to the footer of admin page * * @since 1.0.0 */ public function tinymce_popup() { include_once dirname( __FILE__ ) . '/tinymce/popup.php'; } /** * Loads scripts/styles to the admin * * @since 1.0.0 */ function admin_scripts_enqueue() { wp_register_script( 'gca-popup-scripts', plugin_dir_url( __FILE__ ) . 'tinymce/js/popup.js' ); wp_enqueue_script( 'gca-popup-scripts' ); // Used for adding translations to javascript wp_localize_script( 'gca-popup-scripts', 'gca_localize_scripts', array( 'first_column' => __( 'Place your content for the first column here.', 'genesis-columns-advanced' ), 'second_column' => __( 'Place your content for the second column here.', 'genesis-columns-advanced' ), 'third_column' => __( 'Place your content for the third column here.', 'genesis-columns-advanced' ), 'fourth_column' => __( 'Place your content for the fourth column here.', 'genesis-columns-advanced' ), 'fifth_column' => __( 'Place your content for the fifth column here.', 'genesis-columns-advanced' ), 'sixth_column' => __( 'Place your content for the sixth column here.', 'genesis-columns-advanced' ), 'missing_layout' => __( 'You forgot to select a column layout!', 'genesis-columns-advanced' ), 'show_titles' => __( 'Show Titles', 'genesis-columns-advanced' ), 'hide_titles' => __( 'Hide Titles', 'genesis-columns-advanced' ), ) ); wp_enqueue_style( 'gca-popup-styles', plugin_dir_url( __FILE__ ) . 'tinymce/css/popup.css' ); } /** * Loads the optional stylesheet to the frontend if Genesis is not active * * @since 1.0.0 */ function frontend_scripts_enqueue() { // Load the columns stylesheet. Use filter to disable and load your own if ( apply_filters( 'gca_load_column_styles', true ) ) { wp_enqueue_style( 'gca-column-styles', plugin_dir_url( __FILE__ ) . 'css/gca-column-styles.css' ); } } public function add_shortcodes() { foreach ( $this->get_shortcodes() as $shortcode => $atts ) { add_shortcode( $shortcode, array( $this, 'shortcodes' ) ); } } public function get_shortcodes() { static $all_shortcodes; if ( ! empty( $all_shortcodes ) ) { return $all_shortcodes; } // define shortcodes $shortcodes = apply_filters( 'NEED_shortcodes', array( 'one-half' => array( 'type' => 'column' ), 'one-third' => array( 'type' => 'column' ), 'two-thirds' => array( 'type' => 'column' ), 'one-fourth' => array( 'type' => 'column' ), 'two-fourths' => array( 'type' => 'column' ), 'three-fourths' => array( 'type' => 'column' ), 'one-fifth' => array( 'type' => 'column' ), 'two-fifths' => array( 'type' => 'column' ), 'three-fifths' => array( 'type' => 'column' ), 'four-fifths' => array( 'type' => 'column' ), 'one-sixth' => array( 'type' => 'column' ), 'two-sixths' => array( 'type' => 'column' ), 'three-sixths' => array( 'type' => 'column' ), 'four-sixths' => array( 'type' => 'column' ), 'five-sixths' => array( 'type' => 'column' ), 'clearfix' => array( 'type' => 'utility' ), 'vertical-spacer' => array( 'type' => 'utility' ), 'columns-container' => array( 'type' => 'utility' ), )); if ( ! $shortcodes ) { return array(); } foreach ( $shortcodes as $shortcode => $atts ) { // add prefix //$shortcode = $this->prefix . $short; $all_shortcodes[$shortcode] = array( 'class' => $shortcode, 'type' => $atts['type'] ); // If it's a utlity shortcode, don't add the corresponding first shortcode if ( $atts['type'] == 'column' ) { $all_shortcodes[$shortcode . '-first'] = array( 'class' => $shortcode . ' first', 'type' => $atts['type'] ); } } return $all_shortcodes; } public function shortcodes( $atts, $content = null, $name ) { $atts = shortcode_atts( array( 'id' => '', 'class' => '', 'style' => '', ), $atts ); // Get array of all shortcode to retrieve additional attributes $all_shortcodes = $this->get_shortcodes(); // Determine the type of shortcode we are working with $type = $all_shortcodes[$name]['type']; // Setup the markup and identifier (both filterable) $markup = ( $type == 'utility' ) ? apply_filters( 'gca_utility_markup', 'div' ) : apply_filters( 'gca_column_markup', 'div' ); $identifier = ( $type == 'utility' ) ? apply_filters( 'gca_utility_identifier_class', 'gca-utility' ) : apply_filters( 'gca_column_identifier_class', 'gca-column' ); // Setup the id $id = sanitize_text_field( $atts['id'] ); $id = ( $id != '' ) ? ' id="' . $id . '"' : ''; // Setup the classes $class = ' ' . $all_shortcodes[$name]['class']; $extra_classes = sanitize_text_field( $atts['class'] ); $extra_classes = ( $extra_classes != '' ) ? ' ' . $extra_classes : ''; $class = ' class="' . $identifier . $class . $extra_classes . '"'; // Setup the styles $style = sanitize_text_field( $atts['style'] ); $style = ( $style != '' ) ? ' style="' . $style . '"' : ''; // Setup the content $content = ( $content ) ? $this->content_strip_autop( $content ) : ''; // Built output $output = '<' . $markup . $id . $class . $style . '>' . $content . ''; return $output; } /** * Strip content of AutoP * Courtesy of Mathew Smith (Genesis Easy Columns) */ public function content_strip_autop( $content ){ $content = preg_replace( '#^<\/p>|^
|

$#', '', $content ); $content = do_shortcode( shortcode_unautop( trim( $content ) ) ); return $content; } /** * Filters the content to remove any extra paragraph or break tags caused by shortcodes. * * @since 1.0.0 * * @param string $content The content entered into each column shortcode * @return string A string of filtered content */ function shortcode_empty_paragraph_fix( $content ) { $array = array( '

[' => '[', ']

' => ']', ']
' => ']' ); return strtr( $content, $array ); } /** * Adds additional links to the plugin row meta links * * @since 2.0.0 * * @param array $links Already defined meta links * @param string $file Plugin file path and name being processed * @return array $links The new array of meta links */ public function plugin_row_meta( $links, $file ) { // If we are not on the correct plugin, abort if ( $file != 'genesis-columns-advanced/genesis-columns-advanced.php' ) { return $links; } $docs_link = esc_url( add_query_arg( array( 'utm_source' => 'gca', 'utm_medium' => 'plugin', 'utm_campaign' => 'gca_links', 'utm_content' => 'plugins-page-link' ), 'http://www.nickdiego.com/plugins/genesis-columns-advanced' ) ); $new_links = array( '' . esc_html__( 'Documentation', 'genesis-columns-advanced' ) . '', ); $links = array_merge( $links, $new_links ); return $links; } } new Genesis_Columns_Advanced();