Advertisement
verygoodplugins

Untitled

Sep 11th, 2023
720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.67 KB | None | 0 0
  1. <?php
  2.  
  3. if ( ! defined( 'ABSPATH' ) ) {
  4.     exit; // Exit if accessed directly.
  5. }
  6. /**
  7.  * Presto Player integration.
  8.  *
  9.  * @since 1.2.0
  10.  */
  11. class WPF_ET_Presto_Player extends WPF_ET_Integrations_Base {
  12.  
  13.     /**
  14.      * The slug for WP Fusion's module tracking.
  15.      *
  16.      * @since 1.2.0
  17.      * @var string $slug
  18.      */
  19.  
  20.     public $slug = 'presto-player';
  21.  
  22.     /**
  23.      * The plugin name for WP Fusion's module tracking.
  24.      *
  25.      * @since 1.2.0
  26.      * @var string $name
  27.      */
  28.     public $name = 'Presto Player';
  29.  
  30.     /**
  31.      * Get things started.
  32.      *
  33.      * @since 1.2.0
  34.      */
  35.     public function init() {
  36.         add_action( 'presto_player_progress', array( $this, 'video_progress' ), 10, 3 );
  37.     }
  38.  
  39.     /**
  40.      * Gets the triggers for the integration.
  41.      *
  42.      * @access protected
  43.      *
  44.      * @since  1.2.0
  45.      *
  46.      * @return array The triggers.
  47.      */
  48.     protected function setup_triggers() {
  49.  
  50.         $triggers = array(
  51.             'video_play'     => array(
  52.                 'name'         => __( 'Video Play', 'wp-fusion-event-tracking' ),
  53.                 'description'  => __( 'Triggered when a video is played.', 'wp-fusion-event-tracking' ),
  54.                 'post_types'   => array( 'pp_video_block' ),
  55.                 'has_single'   => true,
  56.                 'has_global'   => true,
  57.                 'option_types' => array( 'video' ),
  58.             ),
  59.             'video_complete' => array(
  60.                 'name'         => __( 'Video Complete', 'wp-fusion-event-tracking' ),
  61.                 'description'  => __( 'Triggered when a video is watched to completion.', 'wp-fusion-event-tracking' ),
  62.                 'post_types'   => array( 'pp_video_block' ),
  63.                 'has_single'   => true,
  64.                 'has_global'   => true,
  65.                 'option_types' => array( 'video' ),
  66.             ),
  67.         );
  68.  
  69.         return $triggers;
  70.     }
  71.  
  72.     /**
  73.      * Track video progression.
  74.      *
  75.      * @since  1.2.0
  76.      * @param integer $video_id The video id.
  77.      * @param integer $percent The video precentage.
  78.      * @param integer $visit_time The visit time.
  79.      */
  80.     public function video_progress( $video_id, $percent, $visit_time ) {
  81.  
  82.         $user = wpf_get_current_user();
  83.  
  84.         if ( empty( $user ) ) {
  85.             return;
  86.         }
  87.  
  88.         $post_id = $this->get_post_id( $video_id );
  89.  
  90.         if ( 0 === $post_id ) {
  91.             return;
  92.         }
  93.  
  94.         // Video Play.
  95.         if ( 0 === $percent ) {
  96.             $events = $this->get_events( 'video_play', $post_id );
  97.             if ( ! empty( $events ) ) {
  98.                 $args = $this->get_video_vars( $post_id, $video_id );
  99.                 foreach ( $events as $event ) {
  100.                     $event = $this->replace_tags( $event, $args );
  101.                     $this->track_event( $event, $user->user_email );
  102.                 }
  103.             }
  104.         }
  105.  
  106.         // Video Complete.
  107.         if ( 100 === $percent ) {
  108.             $events = $this->get_events( 'video_complete', $post_id );
  109.             if ( ! empty( $events ) ) {
  110.                 $args = $this->get_video_vars( $post_id, $video_id );
  111.                 foreach ( $events as $event ) {
  112.                     $event = $this->replace_tags( $event, $args );
  113.                     $this->track_event( $event, $user->user_email );
  114.                 }
  115.             }
  116.         }
  117.  
  118.     }
  119.  
  120.     /**
  121.      * Get post ID by video ID.
  122.      *
  123.      * @since  1.2.0
  124.      * @param int $video_id The video id.
  125.      * @return int The post ID.
  126.      */
  127.     public function get_post_id( $video_id ) {
  128.  
  129.         $post_id = wp_cache_get( $video_id, 'wpf_pp_vids' );
  130.  
  131.         if ( false !== $post_id ) {
  132.             return $post_id;
  133.         }
  134.  
  135.         global $wpdb;
  136.  
  137.         $table_name = $wpdb->prefix . 'presto_player_videos';
  138.  
  139.         $sql     = $wpdb->prepare( "SELECT post_id FROM $table_name WHERE id = %d", absint( $video_id ) );
  140.         $post_id = $wpdb->get_var( $sql );
  141.         $post_id = intval( $post_id );
  142.  
  143.         wp_cache_add( $video_id, $post_id, 'wpf_pp_vids', HOUR_IN_SECONDS );
  144.  
  145.         return $post_id;
  146.     }
  147.  
  148.  
  149.     /**
  150.      * Gets the video options.
  151.      *
  152.      * @since  1.2.0
  153.      *
  154.      * @return array The video options.
  155.      */
  156.     public function get_video_options() {
  157.  
  158.         return array(
  159.             'name'    => __( 'Video Play', 'wp-fusion-event-tracking' ),
  160.             'type'    => 'video',
  161.             'options' => array(
  162.                 array(
  163.                     'meta'        => 'ID',
  164.                     'preview'     => 33,
  165.                     'placeholder' => __( 'The video ID', 'wp-fusion-event-tracking' ),
  166.                 ),
  167.                 array(
  168.                     'meta'        => 'post_title',
  169.                     'preview'     => 'Video Title',
  170.                     'placeholder' => __( 'The video title', 'wp-fusion-event-tracking' ),
  171.                 ),
  172.                 array(
  173.                     'meta'        => 'post_status',
  174.                     'preview'     => 'published',
  175.                     'placeholder' => __( 'The video status', 'wp-fusion-event-tracking' ),
  176.                 ),
  177.                 array(
  178.                     'meta'        => 'post_date',
  179.                     'preview'     => gmdate( 'Y-m-d', strtotime( 'yesterday' ) ),
  180.                     'placeholder' => __( 'The date the video was created', 'wp-fusion-event-tracking' ),
  181.                 ),
  182.                 array(
  183.                     'meta'        => 'post_modified',
  184.                     'preview'     => gmdate( 'Y-m-d', strtotime( '-3 hours' ) ),
  185.                     'placeholder' => __( 'The video\'s last modified date', 'wp-fusion-event-tracking' ),
  186.                 ),
  187.                 array(
  188.                     'meta'        => 'src',
  189.                     'preview'     => home_url() . '/video.mp4',
  190.                     'placeholder' => __( 'The video src', 'wp-fusion-event-tracking' ),
  191.                 ),
  192.                 array(
  193.                     'meta'        => 'video_id',
  194.                     'preview'     => 35,
  195.                     'placeholder' => __( 'The video ID', 'wp-fusion-event-tracking' ),
  196.                 ),
  197.  
  198.                 array(
  199.                     'meta'        => 'video_poster',
  200.                     'preview'     => home_url() . '/poster.png',
  201.                     'placeholder' => __( 'The video poster', 'wp-fusion-event-tracking' ),
  202.                 ),
  203.  
  204.             ),
  205.         );
  206.  
  207.     }
  208.  
  209.     /**
  210.      * Gets the details from the video for merging.
  211.      *
  212.      * @since  1.2.0
  213.      *
  214.      * @param  int $post_id The post ID.
  215.      * @param  int $video_id The video ID.
  216.      * @return array The video variables.
  217.      */
  218.     public function get_video_vars( $post_id, $video_id = false ) {
  219.         $post = get_post( $post_id, 'ARRAY_A' );
  220.         if ( empty( $post ) ) {
  221.             return array();
  222.         }
  223.  
  224.         // Post fields.
  225.         $meta_column  = array_column( $this->get_video_options()['options'], 'meta' );
  226.         $video_fields = wp_array_slice_assoc( $post, $meta_column );
  227.  
  228.         // Custom fields.
  229.         $blocks = parse_blocks( $post['post_content'] );
  230.         foreach ( $blocks as $block ) {
  231.             // inside wrapper block.
  232.             if ( 'presto-player/reusable-edit' === $block['blockName'] && ! empty( $block['innerBlocks'] ) ) {
  233.                 foreach ( $block['innerBlocks'] as $inner_block ) {
  234.                     // Sometimes one post has multiple videos that's why we passed $video_id to get the correct values.
  235.                     if ( false !== $video_id && intval( $inner_block['attrs']['id'] ) !== intval( $video_id ) ) {
  236.                         continue;
  237.                     }
  238.                     if ( ! empty( $inner_block['attrs']['id'] ) ) {
  239.                         $video_fields['video_id'] = $inner_block['attrs']['id'];
  240.                     }
  241.                     if ( ! empty( $inner_block['attrs']['src'] ) ) {
  242.                         $video_fields['src'] = $inner_block['attrs']['src'];
  243.                     }
  244.                     if ( ! empty( $inner_block['attrs']['poster'] ) ) {
  245.                         $video_fields['poster'] = $inner_block['attrs']['poster'];
  246.                     }
  247.                     break;
  248.                 }
  249.             }
  250.         }
  251.  
  252.         return array(
  253.             'video' => $video_fields,
  254.         );
  255.  
  256.     }
  257.  
  258. }
  259.  
  260. new WPF_ET_Presto_Player();
  261.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement