Created
January 9, 2013 20:18
-
-
Save fastmover/4496466 to your computer and use it in GitHub Desktop.
media_youtube.theme.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @file media_youtube/includes/themes/media_youtube.theme.inc | |
* | |
* Theme and preprocess functions for Media: YouTube. | |
*/ | |
/** | |
* Preprocess function for theme('media_youtube_video'). | |
*/ | |
function media_youtube_preprocess_media_youtube_video(&$variables) { | |
// Build the URL for display. | |
$uri = $variables['uri']; | |
$wrapper = file_stream_wrapper_get_instance_by_uri($uri); | |
$parts = $wrapper->get_parameters(); | |
$variables['video_id'] = check_plain($parts['v']); | |
$variables['width'] = isset($variables['width']) ? $variables['width'] : media_youtube_variable_get('width'); | |
$variables['height'] = isset($variables['height']) ? $variables['height'] : media_youtube_variable_get('height'); | |
$variables['autoplay'] = isset($variables['autoplay']) ? $variables['autoplay'] : media_youtube_variable_get('autoplay'); | |
$variables['fullscreen'] = isset($variables['fullscreen']) ? $variables['fullscreen'] : media_youtube_variable_get('fullscreen'); | |
$variables['autoplay'] = $variables['autoplay'] ? 1 : 0; | |
$variables['fullscreen'] = $variables['fullscreen'] ? 'true' : 'false'; | |
$variables['wrapper_id'] = 'media_youtube_' . $variables['video_id'] . '_' . $variables['id']; | |
// For users with JavaScript, these object and embed tags will be replaced | |
// by an iframe, so that we can support users without Flash. | |
$variables['output'] = <<<OUTPUT | |
<object width="{$variables['width']}" height="{$variables['height']}"> | |
<param name="movie" value="http://www.youtube.com/v/{$variables['video_id']}"></param> | |
<param name="allowFullScreen" value="{$variables['fullscreen']}"></param> | |
<param name="wmode" value="transparent" /> | |
<embed src="http://www.youtube.com/v/{$variables['video_id']}" type="application/x-shockwave-flash" width="{$variables['width']}" height="{$variables['height']}" allowfullscreen="{$variables['fullscreen']}"></embed> | |
</object> | |
OUTPUT; | |
// @todo Replace this inline JavaScript with at least calls to | |
// drupal_add_js()/drupal_get_js(), and ideally, with a behavior. Keep | |
// in mind that the solution needs to work when inside a colorbox or | |
// otherwise in an AJAX response, but that should now be possible in D7. | |
$iframe_id = drupal_json_encode($variables['wrapper_id'] .'_iframe'); | |
$wrapper_id = drupal_json_encode($variables['wrapper_id']); | |
$JSObject = 'Drupal.settings.media_youtube[' . $wrapper_id . ']'; | |
$variables['output'] .= <<<OUTPUT | |
<script type="text/javascript"> | |
if (Drupal.settings && Drupal.media_youtube) { | |
Drupal.settings.media_youtube = Drupal.settings.media_youtube || {}; | |
$JSObject = {}; | |
$JSObject.width = {$variables['width']}; | |
$JSObject.height = {$variables['height']}; | |
$JSObject.video_id = "{$variables['video_id']}"; | |
$JSObject.fullscreen = {$variables['fullscreen']}; | |
$JSObject.id = $iframe_id; | |
$JSObject.options = { autoplay: {$variables['autoplay']} }; | |
Drupal.media_youtube.insertEmbed($wrapper_id); | |
} | |
</script> | |
OUTPUT; | |
drupal_add_js(drupal_get_path('module', 'media_youtube') . '/js/media_youtube.js'); | |
drupal_add_css(drupal_get_path('module', 'media_youtube') . '/css/media_youtube.css'); | |
drupal_add_js(drupal_get_path('module', 'media_youtube') . '/js/flash_detect_min.js'); | |
} | |
function theme_media_youtube_field_formatter_styles($variables) { | |
$element = $variables['element']; | |
$style = $variables['style']; | |
$variables['file'] = $element['#item']; | |
$variables['uri'] = $variables['file']['uri']; | |
$variables['style_name'] = $style['name']; | |
return theme('media_youtube_embed', $variables); | |
} | |
/** | |
* Preview for Styles UI. | |
*/ | |
function theme_media_youtube_preview_style($variables) { | |
$variables['uri'] = media_youtube_variable_get('preview_uri'); | |
$variables['field_type'] = 'file'; | |
$variables['object'] = file_uri_to_object($variables['uri']); | |
return theme('styles', $variables); | |
} | |
/** | |
* NOTE: Deprecated with Styles version 2. | |
*/ | |
function theme_media_youtube_styles($variables) { | |
$style = $variables['style']; | |
$variables['file'] = $variables['object']; | |
$variables['uri'] = $variables['object']->uri; | |
$variables['style_name'] = $style['name']; | |
return theme('media_youtube_embed', $variables); | |
} | |
/** | |
* @todo: get this working | |
* | |
* This code is for embedding videos in WYSIYWG areas, not currently working. | |
* NOTE: Deprecated with Styles version 2. | |
*/ | |
function theme_media_youtube_embed($variables) { | |
$preset_name = $variables['preset_name']; | |
$preset = styles_containers_available_styles('file', 'media_youtube', $preset_name); | |
$output = ''; | |
if (!empty($preset)) { | |
// Build the URL for display. | |
$uri = $variables['uri']; | |
$wrapper = file_stream_wrapper_get_instance_by_uri($uri); | |
$parts = $wrapper->get_parameters(); | |
$fullscreen_value = $autoplay = 'false'; | |
$in_browser = $thumbnail = FALSE; | |
foreach ($preset['effects'] as $effect) { | |
switch ($effect['name']) { | |
case 'autoplay': | |
$autoplay = $effect['data']['autoplay'] ? 'true' : 'false'; | |
break; | |
case 'resize': | |
$width = $effect['data']['width']; | |
$height = $effect['data']['height']; | |
break; | |
case 'fullscreen': | |
$fullscreen_value = $effect['data']['fullscreen'] ? 'true' : 'false'; | |
break; | |
case 'thumbnail': | |
$thumbnail = $effect['data']['thumbnail']; | |
} | |
} | |
if (isset($variables['object']->override)) { | |
$override = $variables['object']->override; | |
if (isset($override['width'])) { | |
$width = $override['width']; | |
} | |
if (isset($override['height'])) { | |
$height = $override['height']; | |
} | |
if (isset($override['wysiwyg'])) { | |
$thumbnail = TRUE; | |
} | |
if (isset($override['browser']) && $override['browser']) { | |
$in_browser = TRUE; | |
$thumbnail = TRUE; | |
} | |
} | |
$width = isset($width) ? $width : media_youtube_variable_get('width'); | |
$height = isset($height) ? $height : media_youtube_variable_get('height'); | |
$video_id = check_plain($parts['v']); | |
if ($thumbnail) { | |
// @todo Clean this up. | |
$image_variables = array( | |
'path' => $wrapper->getOriginalThumbnailPath(), | |
'alt' => $variables['alt'], | |
'title' => $variables['title'], | |
'getsize' => FALSE, | |
); | |
if (isset($preset['image_style'])) { | |
$image_variables['path'] = $wrapper->getLocalThumbnailPath(); | |
$image_variables['style_name'] = $preset['image_style']; | |
$output = theme('image_style', $image_variables); | |
} | |
else { | |
// We need to add this style attribute here so that it doesn't get lost | |
// If you resize a video in a node, save it, edit it, but don't adjust | |
// the sizing of the video while editing, the size will revert to the | |
// default. Adding the specific size here retains the original resizing | |
$WYSIWYG = isset($variables['object']->override['style']) ? $variables['object']->override['style'] : ''; | |
$image_variables['attributes'] = array('width' => $width, 'height' => $height, 'style' => $WYSIWYG); | |
$output = theme('image', $image_variables); | |
} | |
if ($in_browser) { | |
// Add an overlay that says 'YouTube' to media library browser thumbnails. | |
$output .= '<span />'; | |
} | |
} | |
else { | |
$output = theme('media_youtube_video', array('uri' => $uri, 'width' => $width, 'height' => $height, 'autoplay' => ($autoplay == 'true' ? TRUE : NULL), 'fullscreen' => ($fullscreen_value == 'true' ? TRUE : NULL))); | |
} | |
} | |
return $output; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment