%PDF- %PDF-
Direktori : /var/www/projetos/prod.jornalshowdafe.com.br/wp-content/plugins/_dflip/inc/ |
Current File : /var/www/projetos/prod.jornalshowdafe.com.br/wp-content/plugins/_dflip/inc/shortcode.php |
<?php /** * Created by PhpStorm. * User: Deepak * Date: 5/3/2016 * Time: 2:27 PM */ class DFlip_ShortCode { /** * Holds the singleton class object. * * @since 1.0.0 * * @var object */ public static $instance; /** * Holds the base DFlip class object. * * @since 1.0.0 * * @var object */ public $base; /** * Primary class constructor. * * @since 1.0.0 */ public function __construct() { // Load the base class object. $this->base = DFlip::get_instance(); // Load shortcode hooks and filters. add_shortcode( 'dflip', array( $this, 'shortcode' ) ); // add_shortcode( 'dflip-multi', array( $this, 'dflip_multi_shortcode' ) ); } /** * Builds the dFlip Shortcode for the plugin * * @param array $attr Attributes of the shortcode. * @param string $content Content of the button or thumb * * @return string HTML content to display image-text. * @since 1.0.0 * */ public function shortcode( $attr, $content = '' ) { if ( $this->base->selective_script_loading == true ) { //enqueue script wp_enqueue_script( $this->base->plugin_slug . '-script' ); //enqueue styles wp_enqueue_style( $this->base->plugin_slug . '-style' ); } $ismulti = isset( $attr['books'] ) && trim( $attr['books'] ) !== ''; $atts_default = array( 'class' => '', 'id' => '', 'books' => '' ); //atts or post defaults $atts = shortcode_atts( $atts_default, $attr, 'dflip' ); if ( $ismulti ) { if ( isset( $attr['trigger'] ) ) { unset( $attr['trigger'] ); } $limit = isset( $attr['limit'] ) ? (int) $attr['limit'] : (int) $this->base->get_config( "multiplePostLimit" ); if ( $limit === 0 ) { $limit = '-1'; } $orderby = isset( $attr['orderby'] ) ? $attr['orderby'] : 'date'; $order = isset( $attr['order'] ) ? $attr['order'] : 'DESC'; $ids = array(); $books = explode( ',', $atts['books'] ); foreach ( (array) $books as $query ) { $query = trim( $query ); if ( is_numeric( $query ) ) { array_push( $ids, $query ); } else { if ( $query === 'all' || $query === '*' ) { $postslist = get_posts( array( 'post_type' => 'dflip', 'posts_per_page' => -1, 'numberposts' => $limit, 'nopaging' => true, 'exclude' => $ids, 'orderby' => $orderby, 'order' => $order ) ); foreach ( $postslist as $post ) { array_push( $ids, $post->ID ); } } else { $postslist = get_posts( array( 'tax_query' => array( array( 'taxonomy' => 'dflip_category', 'field' => 'slug', 'terms' => $query, ) ), 'post_type' => 'dflip', 'posts_per_page' => -1, 'numberposts' => $limit, 'nopaging' => true, 'exclude' => $ids, 'orderby' => $orderby, 'order' => $order ) ); foreach ( $postslist as $post ) { array_push( $ids, $post->ID ); } } } } $html = '<div class="dflip-books">';//can get overridden by shelf //region Shelf $shelfImage = ''; if ( isset( $attr['shelf-image'] ) ) { $shelfImage = $attr['shelf-image']; } if ( $shelfImage != 'none' ) { if ( !empty( $shelfImage ) ) { $shelfImage = $this->base->get_shelf_image( $shelfImage ); } $shelfTypeClass = ''; if ( $shelfImage != '' || $this->base->shelf_image != '' ) { $shelfTypeClass = 'df-has-shelf '; } if ( $shelfImage != '' ) { $id = 'df_shelf_' . rand(); $html = '<div id=' . $id . ' class="dflip-books ' . $shelfTypeClass . '">'; $html .= "<style>#" . $id . ".df-has-shelf df-post-shelf:before, #" . $id . ".df-has-shelf df-post-shelf:after{background-image: url('" . $shelfImage . "');}</style>"; } else { $html = '<div class="dflip-books ' . $shelfTypeClass . '">'; } } //endregion $limitMax = ( $limit === '-1' || $limit === -1 ) ? 999 : (int) $limit; $_count = 0; foreach ( $ids as $id ) { if ( $_count >= $limitMax ) { break; } $attr['id'] = $id; $html .= $this->book( $attr, $content, true ); $_count++; } return $html . '</div>'; } else { return $this->book( $attr, $content ); } } /** * Helper function for dFlip Shortcode * * @param $raw_attr * @param string $content Content of the button or thumb * * @param bool $multi checks if this is a part of multiple books request * * @return string HTML content to display image-text. * @since 1.0.0 * * @internal param array $attr Attributes of the shortcode. */ public function book( $raw_attr, $content = '', $multi = false ) { $base = $this->base; $atts_default = array( 'class' => '', 'id' => '', 'type' => $multi ? 'thumb' : 'book' ); //atts or post defaults $atts = shortcode_atts( $atts_default, $raw_attr, 'dflip' ); //in PHP7 if $attr is not an array it causes issue if ( !is_array( $raw_attr ) ) { $raw_attr = array(); } $html_attr = array(); //default data $id = $atts['id'] === '' ? 'rand' . rand() : $atts['id']; $type = $atts['type']; $class = $atts['class']; $title = do_shortcode( $content ); $thumb_url = ''; //get Id $post_id = $atts['id']; $post = trim( $post_id ) === '' ? null : get_post( $post_id ); $post_data = array(); $post_data['source'] = isset( $raw_attr['source'] ) ? $raw_attr['source'] : ""; //pull post data if available for the script part only if ( $post != null && !empty( $post_id ) && is_numeric( $post_id ) ) { if ( ( $post->post_status === "private" && !current_user_can( 'read_private_posts' ) ) ) { return ''; } $post_data = $this->get_post_data( $post, $post_data ); $id = $post->ID; if ( empty( $title ) ) { $title = get_the_title( $post_id ); } $post_data['slug'] = $post->post_name; $html_attr['data-slug'] = $post->post_name; //this can be overwritten $html_attr['data-_slug'] = $post->post_name; //this is for fallback $html_attr['_slug'] = $post->post_name; if ( !empty( $post_data['thumb'] ) ) { $thumb_url = $post_data['thumb']; } unset( $post_data['thumb'] ); unset( $post_data['class'] ); } else { /*handled by new attribute support*/ } //deep-link $html_attr['data-title'] = sanitize_title( $title ); if ( !$multi && isset( $raw_attr['slug'] ) && !empty( $raw_attr['slug'] ) ) { $html_attr['data-slug'] = sanitize_title( $raw_attr['slug'] ); } if ( empty( $title ) ) { $title = $base->get_translate( "text_open_book" );//"Open Book"; } /*Attribute overrides*/ $attrHTML = ' '; $html_attr['id'] = 'df_' . $id; $post_data['id'] = $id; $html_attr['data-df-option'] = 'df_option_' . $id; if ( !isset( $raw_attr['thumb'] ) && $thumb_url !== '' ) { $html_attr['thumb'] = $thumb_url; } //$attr is removed since it can contain insecure and malicious data, atts hold only required keys and sanitized values // keys should be small case - later converted to proper variable using getAttributes() $keys = array( 'data-thumb' => '', 'data-page' => 'page', 'target' => '', 'height' => '', 'data-source' => 'data-source,pdf-source', 'data-is3d' => 'webgl,is3d', 'data-viewertype' => 'viewertype,viewer-type,data-viewer-type', 'data-pagemode' => 'pagemode', 'data-trigger' => 'trigger', ); foreach ( $keys as $key => $aliasString ) { $aliases = explode( ',', $key . ',' . $aliasString ); foreach ( $aliases as $alias ) { if ( isset( $raw_attr[ $alias ] ) ) { $html_attr[ $key ] = esc_attr( $raw_attr[ $alias ] ); break; } } } if ( isset( $raw_attr['open'] ) && $raw_attr['open'] == 'auto' ) { $class = $class . " df-auto-open-lightbox "; } $href = "#"; if ( isset( $post_data["url"] ) && $post_data["url"] != "" ) { $href = $post_data["url"]; unset( $post_data["url"] ); } if ( $href === "#" ) { unset( $html_attr['target'] ); } if ( $type !== 'thumb' ) { unset( $html_attr['thumb'] ); } foreach ( $html_attr as $key => $value ) { $attrHTML .= esc_attr( $key ) . '="' . esc_attr( $value ) . '" '; } $html = ""; if ( $type === 'link' ) { $type = 'custom'; } if ( $type === 'button' || $type === 'thumb' || $type === 'custom' || $type === 'hidden' ) { $hidden = ''; if ( $type === 'hidden' ) { $hidden = "hidden"; } $html = '<a class="_df_' . $type . ' ' . esc_attr( $class ) . '" href="' . $href . '" ' . $attrHTML . ' ' . $hidden . '>' . $title . '</a>'; } else { $html = '<div class="_df_book df-container df-loading ' . esc_attr( $class ) . '" ' . $attrHTML . '></div>'; } if ( count( $post_data ) > 0 ) { /*Normally this occurs only when a valid post id is added*/ $code = 'window.' . $html_attr['data-df-option'] . ' = ' . json_encode( $post_data ) . '; if(window.DFLIP && window.DFLIP.parseBooks){window.DFLIP.parseBooks();}'; $html .= '<script class="df-shortcode-script" type="application/javascript">' . $code . '</script>'; } wp_enqueue_script( $base->plugin_slug . '-script' ); //enqueue styles wp_enqueue_style( $base->plugin_slug . '-style' ); return $html; } public function get_post_data( $post, $post_data = array() ) { if ( $post->post_mime_type == "application/pdf" ) { $post_data['source'] = wp_get_attachment_url( $post->ID ); if ( $this->base->get_config( 'enablePostPages' ) == 'true' ) { $post_data['url'] = get_attachment_link( $post->ID ); } } elseif ( $post->post_type == $this->base->plugin_slug ) { $post_meta = get_post_meta( $post->ID, '_dflip_data' ); if ( is_array( $post_meta ) && count( $post_meta ) > 0 ) { $post_meta = $post_meta[0]; } $options = array( //internal options 'source_type' => 'source_type', 'pdf_source' => 'pdf_source', 'pdf_thumb' => 'pdf_thumb', 'pages' => 'pages', 'outline' => 'outline', //js options 'viewerType' => 'viewerType', 'enableDownload' => 'enableDownload', 'cover3DType' => 'cover3DType', 'color3DCover' => 'color3DCover', 'hasSpiral' => 'hasSpiral', 'spiralColor' => 'spiralColor', 'flipbook3DTiltAngleUp' => 'flipbook3DTiltAngleUp', 'flipbook3DTiltAngleLeft' => 'flipbook3DTiltAngleLeft', 'color3DSheets' => 'color3DSheets', 'backgroundColor' => 'bg_color', 'backgroundImage' => 'bg_image', 'autoEnableOutline' => 'auto_outline', 'autoEnableThumbnail' => 'auto_thumbnail', 'overwritePDFOutline' => 'overwrite_outline', 'showDownloadControl' => 'enable_download', 'showSearchControl' => 'enable_search', 'showPrintControl' => 'enable_print', 'soundEnable' => 'auto_sound', 'maxTextureSize' => 'texture_size', 'pageMode' => 'page_mode', 'singlePageMode' => 'single_page_mode', 'pageSize' => 'page_size', 'controlsPosition' => 'controls_position', 'autoPlay' => 'autoplay', 'autoPlayDuration' => 'autoplay_duration', 'autoPlayStart' => 'autoplay_start', 'is3D' => 'webgl', 'duration' => 'duration', 'height' => 'height', 'hard' => 'hard', 'direction' => 'direction' ); $post_data['source_type'] = ''; //else it will throw Undefined array key "source_type" below foreach ( $options as $key => $match_key ) { if ( isset( $post_meta[ $match_key ] ) ) { $value = $post_meta[ $match_key ]; if ( $value === "" || $value === null || $value == "global" ) {//newly added will be null in old post continue; } else if ( $value === "true" ) { $post_data[ $key ] = true; } elseif ( $value === "false" ) { $post_data[ $key ] = false; } else { $post_data[ $key ] = $value; } } } //region source $source_type = $post_data['source_type']; $thumb_url = ''; $post_data['source'] = ''; if ( $source_type == 'pdf' && isset( $post_data['pdf_source'] ) ) { $post_data['source'] = $post_data['pdf_source']; $thumb_url = empty( $post_data['pdf_thumb'] ) ? '' : $post_data['pdf_thumb']; } if ( $source_type == 'image' ) { $pages = array_map( 'maybe_unserialize', $post_data['pages'] ); $source_list = array(); $links = array(); $index = 0; foreach ( $pages as $image ) { if ( $thumb_url === '' ) { $thumb_url = $image['url']; } if ( $image['url'] !== '' ) { array_push( $source_list, $image['url'] ); } if ( isset( $image['hotspots'] ) && $image['hotspots'] !== '' ) { $links[ $index ] = $image['hotspots']; } $index++; } $post_data['links'] = $links; $post_data['source'] = $source_list; } $post_data['thumb'] = $thumb_url; unset( $post_data['source_type'] ); unset( $post_data['pages'] ); unset( $post_data['pdf_source'] ); unset( $post_data['pdf_thumb'] ); //endregion if ( $this->base->get_config( 'enablePostPages' ) == 'true' ) { $post_data['url'] = get_post_permalink( $post->ID ); } $post_data['slug'] = $post->post_name; $post_data['wpOptions'] = 'true'; foreach ( $post_data as $key => $value ) { if ( $value === '' || $value === null || $value === "global" ) {//}) {//newly added will be null in old post unset( $post_data[ $key ] ); } } } return $post_data; } /** * Returns the singleton instance of the class. * * @return object dFlip_PostType object. * @since 1.0.0 * */ public static function get_instance() { if ( !isset( self::$instance ) && !( self::$instance instanceof DFlip_ShortCode ) ) { self::$instance = new DFlip_ShortCode(); } return self::$instance; } } //Load the dFlip Plugin Class $dflip_shortcode = DFlip_ShortCode::get_instance();