HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/public_html/WP-POS/wp-content/themes/angle/functions/wpzoom/components/video-api.php
<?php
/**
 * WPZOOM_Video_API Class
 *
 * @package WPZOOM
 * @subpackage Video_API
 */


class WPZOOM_Video_API {
	/**
	 * Fetches and returns extended video data for the embedded video (if there is one) in the current post (if within the Loop) or a specified post
	 */
	public static function fetch_extended_video_data( $post = null ) {
		$post = get_post( $post );
		if ( $post === null ) {
			return false;
		}

		$embed = trim( get_post_meta( $post->ID, 'wpzoom_post_embed_code', true ) );
		if ( empty( $embed ) ) {
			return false;
		}

		$url = self::extract_url_from_embed( $embed );
		if ( $url === false ) {
			return false;
		}

		$video = self::extract_video_id( $url );
		if ( $video === false || ! is_array( $video ) ) {
			return false;
		}

		if ( $video['provider'] == 'youtube' ) {
			$datauri = 'http://gdata.youtube.com/feeds/api/videos/' . $video['id'] . '?v=2&alt=jsonc';
		} elseif ( $video['provider'] == 'vimeo' ) {
			$datauri = 'http://vimeo.com/api/v2/video/' . $video['id'] . '.json';
		} elseif ( $video['provider'] == 'dailymotion' ) {
			$datauri = 'https://api.dailymotion.com/video/' . $video['id'] . '?fields=id,title,description,duration,owner,url,embed_html,created_time,modified_time';
		}

		$response = wp_remote_get( $datauri, array( 'sslverify' => false ) );
		if ( is_wp_error( $response ) ) {
			return false;
		}

		$body = wp_remote_retrieve_body( $response );
		if ( empty( $body ) ) {
			return false;
		}

		$decoded = json_decode( $body, true );
		if ( is_array( $decoded ) && ! empty( $decoded ) ) {
			if ( $video['provider'] == 'youtube' ) {
				return $decoded['data'];
			} elseif ( $video['provider'] == 'vimeo' ) {
				return $decoded[0];
			} elseif ( $video['provider'] == 'dailymotion' ) {
				return $decoded;
			}

			return false;
		}

		return false;
	}

	/**
	 * Takes a video embed code and returns the source URL
	 */
	public static function extract_url_from_embed( $embed_code ) {
		$embed_code = trim( $embed_code );
		if ( empty( $embed_code ) ) {
			return false;
		}

		if ( ! class_exists( 'DOMDocument' ) ) {
			return false;
		}
		libxml_use_internal_errors( true );
		$DOM = new DOMDocument();
		if ( $DOM->loadHTML( $embed_code ) === false ) {
			return false;
		}

		$iframes = $DOM->getElementsByTagName( 'iframe' );
		if ( empty( $iframes ) || $iframes->length < 1 ) {
			return false;
		}

		$iframe = $iframes->item( 0 );
		if ( $iframe == null || ! $iframe->hasAttributes() ) {
			return false;
		}

		$src = trim( $iframe->attributes->getNamedItem( 'src' )->nodeValue );
		if ( empty( $src ) ) {
			return false;
		}
		$src = self::normalize_url_protocol( $src );
		return ! empty( $src ) && filter_var( $src, FILTER_VALIDATE_URL ) ? $src : false;
	}

	/**
	 * Takes an embed code URL and tries to figure out the oEmbed-compatible URL equivalent
	 * by extracting the domain and video ID
	 */
	public static function convert_embed_url( $url ) {
		$url = html_entity_decode( trim( $url ) );
		if ( empty( $url ) ) {
			return false;
		}
		$url = self::normalize_url_protocol( $url );
		if ( empty( $url ) || filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
			return false;
		}

		$url_parts = parse_url( $url );
		if ( $url_parts === false || empty( $url_parts ) || ! is_array( $url_parts ) ||
		   ! isset( $url_parts['host'] ) || empty( $url_parts['host'] ) ||
		   ! isset( $url_parts['path'] ) || empty( $url_parts['path'] ) ) {
			return false;
		}

		$host = preg_replace( '#^www\.(.+\.)#i', '$1', $url_parts['host'] );

		if ( $host == 'youtube.com' || $host == 'youtube-nocookie.com' ) {
			$id = trim( preg_replace( '#^/embed/#i', '', $url_parts['path'] ) );
			return ! empty( $id ) ? 'http://youtube.com/watch?v=' . $id : false;
		} elseif ( $host == 'player.vimeo.com' ) {
			$id = trim( preg_replace( '#^/video/#i', '', $url_parts['path'] ) );
			return ! empty( $id ) ? 'http://vimeo.com/' . $id : false;
		} elseif ( $host == 'dailymotion.com' ) {
			$id = trim( preg_replace( '#^/embed/video/#i', '', $url_parts['path'] ) );
			return ! empty( $id ) ? 'http://dailymotion.com/video/' . $id : false;
		}

		return false;
	}

	/**
	 * Extracts a video ID (and provider) from a video URL
	 */
	public static function extract_video_id( $url ) {
		$url = html_entity_decode( trim( $url ) );
		if ( empty( $url ) ) {
			return false;
		}
		$url = self::normalize_url_protocol( $url );
		if ( empty( $url ) || filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
			return false;
		}

		$url_parts = parse_url( $url );
		if ( $url_parts === false || empty( $url_parts ) || ! is_array( $url_parts ) ||
			 ! isset( $url_parts['host'] ) || empty( $url_parts['host'] ) ||
			 ! isset( $url_parts['path'] ) || empty( $url_parts['path'] ) ) {
			return false;
		}

		$host = preg_replace( '#^www\.(.+\.)#i', '$1', $url_parts['host'] );

		$provider = $id = '';

		if ( $host == 'youtube.com' || $host == 'youtube-nocookie.com' ) {
			$provider = 'youtube';
			$id       = trim( preg_replace( '#^/embed/#i', '', $url_parts['path'] ) );
		} elseif ( $host == 'player.vimeo.com' ) {
			$provider = 'vimeo';
			$id       = trim( preg_replace( '#^/video/#i', '', $url_parts['path'] ) );
		} elseif ( $host == 'dailymotion.com' ) {
			$provider = 'dailymotion';
			$id       = trim( preg_replace( '#^/embed/video/#i', '', $url_parts['path'] ) );
		}

		return ! empty( $provider ) && ! empty( $id ) ? array(
			'id'       => $id,
			'provider' => $provider,
		) : false;
	}

	/**
	 * Tries to make sure the given URL has a proper protocol, even if it was given without one (e.g. protocol-relative URLs)
	 */
	public static function normalize_url_protocol( $url ) {
		$url = trim( $url );
		if ( empty( $url ) || preg_match( '#^https?://#i', $url ) ) {
			return $url;
		}
		return 'http' . ( is_ssl() ? 's' : '' ) . '://' . preg_replace( '#^https?://#i', '', ltrim( $url, '/' ) );
	}
}