aboutsummaryrefslogtreecommitdiff
path: root/types/video_google
diff options
context:
space:
mode:
authorHeshan Wanigasooriya <heshanmw@gmail.com>2009-04-27 09:40:04 +0000
committerHeshan Wanigasooriya <heshanmw@gmail.com>2009-04-27 09:40:04 +0000
commit8914e5e66485a1cb9ee1fb741ae47a561167104e (patch)
treec717efd7d4293212a617d697853f49b3da64ca3f /types/video_google
parent23348d9bc9a704d4a1a58c9580d03737ee52f8a3 (diff)
downloadvideo-8914e5e66485a1cb9ee1fb741ae47a561167104e.tar.gz
video-8914e5e66485a1cb9ee1fb741ae47a561167104e.tar.bz2
add video types to the latest version
Diffstat (limited to 'types/video_google')
-rw-r--r--types/video_google/video_google.info5
-rw-r--r--types/video_google/video_google.module248
2 files changed, 253 insertions, 0 deletions
diff --git a/types/video_google/video_google.info b/types/video_google/video_google.info
new file mode 100644
index 0000000..5226b71
--- /dev/null
+++ b/types/video_google/video_google.info
@@ -0,0 +1,5 @@
+name = Google Video
+description = Enable Google video support for Video module.
+dependencies[] = video
+package = "Video"
+core = 6.x \ No newline at end of file
diff --git a/types/video_google/video_google.module b/types/video_google/video_google.module
new file mode 100644
index 0000000..88e17c7
--- /dev/null
+++ b/types/video_google/video_google.module
@@ -0,0 +1,248 @@
+<?php
+/**
+ * @file
+ * Enable Google Video support for video module.
+ *
+ * @author Fabio Varesano <fvaresano at yahoo dot it>
+ * porting to Drupal 6
+ * @author Heshan Wanigasooriya <heshan at heidisoft.com><heshanmw@gmail.com>
+ * @todo
+ */
+
+
+/**
+ * Implementation of hook_menu
+*/
+function video_google_menu() {
+ $items = array();
+ $maycache=true;
+ if($maycache) {
+ $items['node/add/video/google'] = array(
+ 'title' => 'Google',
+ 'access arguments' => array('create video')
+ );
+ }
+ return $items;
+}
+
+
+/**
+ * Implementation of hook_v_help
+*/
+function video_google_v_help() {
+
+ $help = array();
+ $help['google']['data'] = '<b><a href="http://video.google.com" name="video_google">' . t('Google Video support') . '</a></b>';
+ $help['google']['children'] = array(t('You can host videos on video.google.com and put them on your site.
+ To do this, after you upload the video on Google video you just have to get the URL of the video.'));
+
+ return $help;
+}
+
+
+/**
+ * Implementation of hook_v_info()
+*/
+function video_google_v_info() {
+ $info['google'] = array(
+ '#name' => 'Google Video',
+ '#description' => t('Post a video available on !link to this website.', array('!link' => l(t('Google Video'), 'http://video.google.com'), NULL, NULL, NULL, TRUE)),
+ '#autothumbable' => true,
+ '#autoresolution' => true,
+ '#autoplaytime' => false, // seems that thereisn't a video lenght field in the google video xml
+ );
+
+ return $info;
+}
+
+
+/**
+ * Implementation of hook_v_form()
+*/
+function video_google_v_form(&$node, &$form) {
+
+ $form['video']['vidfile'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Google Video URL'),
+ '#default_value' => $node->vidfile,
+ '#maxlength' => 700,
+ '#required' => TRUE,
+ '#weight' => -20,
+ '#description' => t('Insert the URL to the google video. ') . l(t('More information.'), 'video/help', array('fragment' => 'videofile')));
+
+ return $form;
+}
+
+
+
+/**
+ * implementation of hook_v_validate
+*/
+function video_google_v_validate($node) {
+ // TODO: use youtube REST or XML-RPC to query youtube: check video available and embeddable
+ if(!preg_match("/^http:\/\/video\.google\.com\/videoplay\?docid=/", $node->vidfile)) {
+ form_set_error('vidfile', t('The Google Video URL field must be similar to <em>http://video.google.com/videoplay?docid=1806507480014945777</em>'));
+ }
+ else {
+ //get the video id
+ $id = _video_google_get_id($node->vidfile);
+
+ $response = _video_apiclient_google_request($id);
+ if(count($response) == 0) { // google video wasn't able to find the video
+ form_set_error('vidfile', t('The system was not able to find this video on Google Video. Please check the URL of your Google video.'));
+ }
+ }
+}
+
+
+/**
+ * Implementation of hook_v_play
+*/
+function video_google_v_play($node) {
+ return theme('video_google_play', $node);
+}
+
+
+
+/** AUTOTHUMBNAILING LOGIC */
+
+define('VIDEO_GOOGLE_XML', 'http://video.google.com/videofeed');
+
+function _video_apiclient_google_request($id, $cacheable = TRUE) {
+ $args = array('docid' => $id);
+ return _video_apiclient_request_xml('google', VIDEO_GOOGLE_XML, $args, $cacheable);
+}
+
+function _video_apiclient_google_get_thumbnail_url($id) {
+
+ $xml = _video_apiclient_google_request($id);
+
+ // we *should* be able to use media:thumbnail
+ // but unfortunately, that is stripped out from the request hook
+ // so instead, we'll parse it from the description, where it's repeated.
+ // TODO: look into how to fix this...
+ $desc = $xml['ITEM']['DESCRIPTION'][0];
+ $regex = '@<img src="([^"]*)"@';
+ if (preg_match($regex, $desc, $matches)) {
+ return $matches[1];
+ }
+ return null;
+}
+
+
+/**
+ * Implementation of hook_v_auto_thumbnail
+*/
+function video_google_v_auto_thumbnail($node) {
+ if (count($_POST)) {
+ if ($_POST['vidfile'] == $node->vidfile) {
+ _video_image_thumbnail_debug(t('No new video to thumbnail'));
+ return NULL;
+ }
+ if ($_POST['tempimage']['fids']['_original']) {
+ _video_image_thumbnail_debug(t('Video already thumbnailed'));
+ return NULL;
+ }
+ }
+ // let's include apiclient logic
+
+ //get the video id
+ if (!$node->vidfile && count($_POST)) {
+ $vidfile = $_POST['vidfile'];
+ } else {
+ $vidfile = $node->vidfile;
+ }
+ $id = _video_google_get_id($vidfile);
+ // get thumbnail url
+ $thumbnail_url = _video_apiclient_google_get_thumbnail_url($id);
+
+ return _video_image_get_thumb_file_object($thumbnail_url, $id);
+}
+
+
+/**
+ * Implementation of hook_v_auto_resolution
+*/
+function video_google_v_auto_resolution(&$node) {
+ // we set google videos to 400x326 by default
+ return array(400, 326);
+}
+
+
+
+/** THEMEABLE FUNCTIONS */
+
+/**
+ * Play videos hosted on video.google.com
+ * Allows users to host videos on video.google.com and then use the video ID to post it in the module.
+ *
+ * @param $node
+ * object with node information
+ *
+ * @return
+ * string of content to display
+ */
+function theme_video_google_play($node) {
+ $width = ($node->video_scaled_x ? $node->video_scaled_x : '425');
+ $height = ($node->video_scaled_y ? $node->video_scaled_y : '350');
+ // Strip heading "google:"
+ $videoid = _video_google_get_id(check_plain($node->vidfile));
+ //$videoid = substr($node->vidfile, 7);
+
+ // this will be executed by not Internet Explorer browsers
+ $output = '<!--[if !IE]> <-->
+<object type="application/x-shockwave-flash" width="'. $width .'" height="'. $height .'"
+data="http://video.google.com/googleplayer.swf?docId='. check_plain($videoid) .'">
+<!--> <![endif]-->' . "\n";
+
+ // this will be executed by Internet Explorer
+ $output .= '<!--[if IE]>
+<object type="application/x-shockwave-flash" width="'. $width .'" height="'. $height .'"
+classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
+<![endif]-->' . "\n";
+
+ // params will be passed to both IE or not IE browsers
+ $output .= '<param name="movie" value="http://video.google.com/googleplayer.swf?docId=' . check_plain($videoid) . '" />' . "\n";
+ // following a list of params simply copied from old embed tag params. I don't know if this are really needed.
+ $output .= '<param name="quality" value="best" />
+ <param name="bgcolor" value="#ffffff" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <param name="scale" value="noScale" />
+ <param name="wmode" value="transparent" />
+ <param name="salign" value="TL" />
+ <param name="FlashVars" value="playerMode=embedded" />'
+ . _video_get_parameters($node) .
+ '<p>'. t('Your browser is not able to display this multimedia content.') .'</p>
+</object>';
+
+
+ $output = theme('video_format_play', $output, t('http://video.google.com/support'), t('Link to video.google.com'), t('video.google.com'));
+ return $output;
+}
+
+
+
+/** HELPER FUNCTIONS */
+
+/**
+ * Get the docid from an URL
+*/
+function _video_google_get_id($url) {
+ $pattern = '/-?[0-9]+/'; // maybe too weak? some id have a leading -
+ preg_match_all($pattern, $url, $matches, PREG_PATTERN_ORDER);
+ return $matches[0][0];
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function video_google_theme() {
+ return array(
+ 'video_google_play' => array(
+ 'arguments' => array('node' => NULL),
+ ),
+ );
+}
+
+module_load_include('inc', 'video', 'includes/apiclient');