<?php
/*
Plugin Name: Embedded YouTube videos
Description: Parse embedded videos from YouTube
Version: 1.0
Author: Janis Elsts

ModuleCategory: parser
ModuleClassName: blcYouTubeIframe
ModuleContext: on-demand
ModuleLazyInit: true

ModulePriority: 120
*/

if ( !class_exists('blcEmbedParserBase') ){
	require 'embed-parser-base.php';
}

class blcYouTubeIframe extends blcEmbedParserBase {
	var $supported_formats = array('html');
	
	function init(){
		parent::init();
		$this->short_title = __('YouTube Video', 'broken-link-checker');
		$this->long_title = __('Embedded YouTube video', 'broken-link-checker');
		$this->url_search_string = 'youtube.com/embed/';
	}
	
	/**
	 * Extract embedded elements from a HTML string.
	 * 
	 * Returns an array of IFrame elements found in the input string. 
	 * Elements without a 'src' attribute are skipped. 
	 * 
	 * Each array item has the same basic structure as the array items
	 * returned by blcUtility::extract_tags(), plus an additional 'embed_code' key 
	 * that contains the full HTML code for the entire <ifram> tag.  
	 *  
	 * @uses blcUtility::extract_tags() This function is a simple wrapper around extract_tags()
	 * 
	 * @param string $html
	 * @return array 
	 */
	function extract_embeds($html){
		$results = array();
		
		//remove all <code></code> blocks first
		$html = preg_replace('/<code[^>]*>.+?<\/code>/si', ' ', $html);
		
		//Find likely-looking <iframe> elements
		$iframes = blcUtility::extract_tags($html, 'iframe', false, true);
		foreach($iframes as $embed){
			if ( empty($embed['attributes']['src']) ){
				continue;
			}
			
			$embed['embed_code'] = $embed['full_tag'];
			
			$results[] = $embed;
		}
		
		return $results;
	}
	
	function link_url_from_src($src){
		$parts = @parse_url($src);
		if ( empty($parts) || !isset($parts['path']) ) {
			return null;
		}

		//Is this a playlist?
		if ( strpos($parts['path'], 'videoseries') !== false ) {

			//Extract the playlist ID from the query string.
			if ( !isset($parts['query']) || empty($parts['query']) ) {
				return null;
			}
			parse_str($parts['query'], $query);
			if ( !isset($query['list']) || empty($query['list']) ) {
				return null;
			}

			$playlist_id = $query['list'];
			if ( substr($playlist_id, 0, 2) === 'PL' ) {
				$playlist_id = substr($playlist_id, 2);
			}

			//Reconstruct the playlist URL.
			$url = 'http://www.youtube.com/playlist?list=' . $playlist_id;

		} else {
			//Extract video ID from the SRC. The ID is always 11 characters.
			$video_id = substr(	end(explode('/', $parts['path'])), 0, 11 );

			//Reconstruct the video permalink based on the ID
			$url = 'http://www.youtube.com/watch?v='.$video_id;
		}

		return $url;
	}
}
