%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/projetos/prod.jornalshowdafe.com.br/wp-content/plugins/_dflip/inc/
Upload File :
Create Path :
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();



Zerion Mini Shell 1.0