the translated name of the provider * 'url' => the url to the main page for the provider * 'settings_description' => a description of the provider that will be posted in the admin settings form * 'supported_features' => an array of rows describing the state of certain supported features by the provider. * These will be rendered in a table, with the columns being 'Feature', 'Supported', 'Notes'. */ function emvideo_yahoomusic_info() { $features = array( array(t('Autoplay'), t('Yes'), ''), array(t('Thumbnails'), t('Yes'), t('')), array(t('Full screen mode'), t('Yes'), t('You may customize the player to enable or disable full screen playback. Full screen mode is enabled by default.')), ); return array( 'provider' => 'yahoomusic', 'name' => t('Yahoo! Music'), 'url' => EMVIDEO_YAHOOMUSIC_MAIN_URL, 'settings_description' => t('These settings specifically affect videos displayed from Yahoo Music. You can learn more about its API here.', array('@yahoomusic' => EMVIDEO_YAHOOMUSIC_MAIN_URL, '@api' => EMVIDEO_YAHOOMUSIC_API_INFO)), 'supported_features' => $features, ); } /** * hook emvideo_PROVIDER_settings * this should return a subform to be added to the emvideo_settings() admin settings page. * note that a form field will already be provided, at $form['PROVIDER'] (such as $form['yahoomusic']) * so if you want specific provider settings within that field, you can add the elements to that form field. */ function emvideo_yahoomusic_settings() { $form['yahoomusic']['api'] = array( '#type' => 'fieldset', '#title' => t('Yahoo! Music API'), '#description' => t('You will first need to apply for a Yahoo App ID from the Yahoo! Developer Network.', array('@yahoomusic' => EMVIDEO_YAHOOMUSIC_API_APPLICATION_URL)), '#collapsible' => TRUE, '#collapsed' => TRUE, ); $form['yahoomusic']['api']['emvideo_yahoomusic_app_id'] = array( '#type' => 'textfield', '#title' => t('Yahoo! App ID'), '#default_value' => variable_get('emvideo_yahoomusic_app_id', ''), '#description' => t('Please enter your Yahoo! App ID here.'), ); $form['yahoomusic']['api']['emvideo_yahoomusic_locale'] = array( '#type' => 'select', '#title' => t('Locale'), '#default_value' => variable_get('emvideo_yahoomusic_locale','us'), '#options' => array( 'us' => t('United States'), 'e1' => t('United States (Español)'), 'ca' => t('Canada'), 'mx' => t('Mexico'), 'au' => t('Australia'), 'nz' => t('New Zealand'), 'uk' => t('United Kingdom'), 'de' => t('Germany'), 'es' => t('Spain'), 'it' => t('Italy'), 'fr' => t('France'), ), '#description' => t('If your application is designed for use by a web site or service in a particular country, Yahoo! Music requires that you use the locale for that country.'), ); $form['yahoomusic']['player_options'] = array( '#type' => 'fieldset', '#title' => t('Embedded video player options'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_full_screen'] = array( '#type' => 'checkbox', '#title' => t('Allow fullscreen'), '#default_value' => variable_get('emvideo_yahoomusic_full_screen', 1), '#description' => t('Allow users to view video using the entire computer screen.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_close_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Close'), '#default_value' => variable_get('emvideo_yahoomusic_close_enable', 0), '#description' => t('Sets visibility of the close button; button action will throw a callback event of type "close".'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_controls_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Controls'), '#default_value' => variable_get('emvideo_yahoomusic_controls_enable', 1), '#description' => t('Enables the player controls.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_info_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Info'), '#default_value' => variable_get('emvideo_yahoomusic_info_enable', 1), '#description' => t('Sets visibility of the "more info" button.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_now_playing_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Intro'), '#default_value' => variable_get('emvideo_yahoomusic_now_playing_enable', 1), '#description' => t('Enables the intro "Now Playing: ..." component during the first few seconds of playback.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_post_panel_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Post Panel'), '#default_value' => variable_get('emvideo_yahoomusic_post_panel_enable', 1), '#description' => t('Enables the post panel; displayed after a clip completes playback.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_pre_panel_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Pre Panel'), '#default_value' => variable_get('emvideo_yahoomusic_pre_panel_enable', 1), '#description' => t('Enables the pre meta panel on player initialization when autoStart is disabled and a valid id has been passed into the player.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_share_enable'] = array( '#type' => 'checkbox', '#title' => t('Enable Share'), '#default_value' => variable_get('emvideo_yahoomusic_share_enable', 1), '#description' => t('Enables the Share panel.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_bgcolor'] = array( '#type' => 'textfield', '#title' => t('Background Color'), '#default_value' => variable_get('emvideo_yahoomusic_bgcolor', EMVIDEO_YAHOOMUSIC_BGCOLOR_DEFAULT), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_bandwidth'] = array( '#type' => 'textfield', '#title' => t('Bandwidth'), '#default_value' => variable_get('emvideo_yahoomusic_bandwidth', ''), '#description' => t('Used to force a bandwidth; if bw is not specified the player will attempt to determine the best video bitrate quality for the user.'), ); $form['yahoomusic']['player_options']['emvideo_yahoomusic_event_handler'] = array( '#type' => 'textfield', '#title' => t('Event Handler'), '#default_value' => variable_get('emvideo_yahoomusic_event_handler', ''), '#description' => t('Callback event handler that the player should make calls to.'), ); return $form; } /** * Implement hook emvideo_PROVIDER_data_version(). */ function emvideo_yahoomusic_data_version() { return EMVIDEO_YAHOOMUSIC_DATA_VERSION; } /** * hook emfield_PROVIDER_data * * provides an array to be serialised and made available with $item elsewhere */ function emvideo_yahoomusic_data($field, $item) { $data = array(); // create some 'field' version control $data['emvideo_yahoomusic_version'] = $data['emvideo_data_version'] = EMVIDEO_YAHOOMUSIC_DATA_VERSION; return $data; } /** * hook emvideo_PROVIDER_extract * this is called to extract the video code from a pasted URL or embed code. * @param $embed * an optional string with the pasted URL or embed code * @return * either an array of regex expressions to be tested, or a string with the video code to be used * if the hook tests the code itself, it should return either the string of the video code (if matched), or an empty array. * otherwise, the calling function will handle testing the embed code against each regex string in the returned array. */ function emvideo_yahoomusic_extract($embed = '') { // http://new.music.yahoo.com/videos/--205781579 // http://new.uk.music.yahoo.com/videos/Coldplay/Violet-Hill--60339090;_ylt=ApVMaK9zo0I8Fb03YCMv5qz1ECYv // http://new.music.yahoo.com/T-I-/videos/view/Whatever-You-Like--184525308 if ($embed && preg_match('@(.*)yahoo.com(.*)--([0-9]+)@i', $embed, $matches)) { return $matches[3]; } // else if ($embed && preg_match('@id=v([^"\&]+)@i', $embed, $matches)) { return $matches[1]; } return FALSE; } /** * hook emvideo_PROVIDER_embedded_link($video_code) * returns a link to view the video at the provider's site * @param $video_code * the string containing the video to watch * @return * a string containing the URL to view the video at the original provider's site */ function emvideo_yahoomusic_embedded_link($video_code) { $locale = _emvideo_yahoomusic_locale_lookup(); return 'http://new.' . $locale . '.music.yahoo.com/videos/--' . $video_code; } function _emvideo_yahoomusic_locale_lookup($value = 'code') { // Taken from http://developer.yahoo.com/music/api_guide/GettingStartedLocales.html // Locale API Hostname eID ympsc lang // United States us.music.yahooapis.com 1301797 4195351 en // United States (Espa�ol) e1.music.yahooapis.com 1307666 559940629 es // Canada ca.music.yahooapis.com 1307409 642778131 en // Mexico mx.music.yahooapis.com 8257040 640680961 es // Australia au.music.yahooapis.com 1307669 638583826 en // New Zealand nz.music.yahooapis.com 5300947 638583833 en // United Kingdom uk.music.yahooapis.com 1301655 529531933 uk // Germany de.music.yahooapis.com 1307668 535823380 de // Spain es.music.yahooapis.com 1307660 534774806 es // Italy it.music.yahooapis.com 1307667 533726232 it // France fr.music.yahooapis.com 1307665 536871959 fr static $locales = array(); $code = variable_get('emvideo_yahoomusic_locale','us'); switch ($code) { case 'us': $locales[$code] = array('name' => 'United States', 'eid' => 1301797, 'ympsc' => 4195351, 'lang' => 'en'); break; case 'e1': $locales[$code] = array('name' => 'United States (Espanol)', 'eid' => 1307666, 'ympsc' => 559940629, 'lang' => 'es'); break; case 'ca': $locales[$code] = array('name' => 'Canada', 'eid' => 1307409, 'ympsc' => 642778131, 'lang' => 'en'); break; case 'mx': $locales[$code] = array('name' => 'Mexico', 'eid' => 8257040, 'ympsc' => 640680961, 'lang' => 'es'); break; case 'au': $locales[$code] = array('name' => 'Australia', 'eid' => 1307669, 'ympsc' => 638583826, 'lang' => 'en'); break; case 'nz': $locales[$code] = array('name' => 'New Zealand', 'eid' => 5300947, 'ympsc' => 638583833, 'lang' => 'en'); break; case 'uk': $locales[$code] = array('name' => 'United Kingdom', 'eid' => 1301655, 'ympsc' => 529531933, 'lang' => 'uk'); break; case 'de': $locales[$code] = array('name' => 'Germany', 'eid' => 1307668, 'ympsc' => 535823380, 'lang' => 'de'); break; case 'es': $locales[$code] = array('name' => 'Spain', 'eid' => 1307660, 'ympsc' => 534774806, 'lang' => 'es'); break; case 'it': $locales[$code] = array('name' => 'Italy', 'eid' => 1307667, 'ympsc' => 533726232, 'lang' => 'it'); break; case 'fr': $locales[$code] = array('name' => 'France', 'eid' => 1307665, 'ympsc' => 536871959, 'lang' => 'fr'); break; default: $code = 'us'; $locales[$code] = array('name' => 'United States', 'eid' => 1301797, 'ympsc' => 4195351, 'lang' => 'en'); } $locales[$code]['hostname'] = $code . '.music.yahooapis.com'; switch ($value) { case 'code': return $code; break; case 'name': return $locales[$code]['name']; break; case 'hostname': return $locales[$code]['hostname']; break; case 'eid': return $locales[$code]['eid']; break; case 'ympsc': return $locales[$code]['ympsc']; break; case 'lang': return $locales[$code]['lang']; break; default: drupal_set_message(t('Bad locale lookup request.'), 'warning'); return ''; } } /** * The embedded flash displaying the yahoomusic video. */ function theme_emvideo_yahoomusic_flash($embed, $width, $height, $autoplay, $options = array()) { static $count; if ($embed) { $variables = array(); $variables['id'] = 'v' . $embed; $variables['eID'] = _emvideo_yahoomusic_locale_lookup('eid'); $variables['ympsc'] = _emvideo_yahoomusic_locale_lookup('ympsc'); $variables['lang'] = _emvideo_yahoomusic_locale_lookup('lang'); $fullscreen = variable_get('emvideo_yahoomusic_full_screen', 1); $fullscreen_value = $fullscreen ? "true" : "false"; $variables['enableFullScreen'] = $fullscreen ? "1" : "0"; $variables['autoStart'] = $autoplay ? '1' : '0'; $variables['bw'] = variable_get('emvideo_yahoomusic_bandwidth', ''); $variables['eh'] = variable_get('emvideo_yahoomusic_event_handler', ''); $variables['closeEnable'] = variable_get('emvideo_yahoomusic_close_enable', 0); $variables['controlsEnable'] = variable_get('emvideo_yahoomusic_controls_enable', 1); $variables['infoEnable'] = variable_get('emvideo_yahoomusic_info_enable', 1); $variables['nowplayingEnable'] = variable_get('emvideo_yahoomusic_now_playing_enable', 1); $variables['postpanelEnable'] = variable_get('emvideo_yahoomusic_post_panel_enable', 1); $variables['prepanelEnable'] = variable_get('emvideo_yahoomusic_pre_panel_enable', 1); $variables['shareEnable'] = variable_get('emvideo_yahoomusic_share_enable', 1); $bgcolor = variable_get('emvideo_yahoomusic_bgcolor', EMVIDEO_YAHOOMUSIC_BGCOLOR_DEFAULT); foreach ($variables as $name => $value) { if ($value !== '') { // Add to flashvars string. if ($name == 'id') { $flash_vars = $name . '=' . $value; } else { $flash_vars .= '&' . $name . '=' . $value; } } else { // Remove from variables array unset($variables[$name]); } } $id = isset($options['id']) ? $options['id'] : 'video-cck-yahoomusic-flash-'. (++$count); $div_id = isset($options['div_id']) ? $options['div_id'] : 'video-cck-yahoomusic-flash-wrapper-'. $count; $url = "http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf"; if (variable_get('emfield_swfobject', FALSE) && (module_exists('swfobject_api') || variable_get('emfield_swfobject_location', ''))) { if (module_exists('swfobject_api')) { $params['width'] = $width; $params['height'] = $height; $params['div_id'] = $id; $params['allowFullScreen'] = $fullscreen_value; $params['bgcolor'] = $bgcolor; $output .= theme('swfobject_api', $url, $params, $variables, $id); } else { drupal_add_js(variable_get('emfield_swfobject_location', '')); $flashvars = array(); foreach ($variables as $name => $value) { $flashvars[] = "$name: '$value'"; } $flashvars = implode(',', $flashvars); $output .= << Sorry, you need to install flash to see this content. FLASH; } } else { $output .= << FLASH; } } return $output; } /** * hook emvideo_PROVIDER_thumbnail * returns the external url for a thumbnail of a specific video * TODO: make the args: ($embed, $field, $item), with $field/$item provided if we need it, but otherwise simplifying things * @param $field * the field of the requesting node * @param $item * the actual content of the field from the requesting node * @return * a URL pointing to the thumbnail */ function emvideo_yahoomusic_thumbnail($field, $item, $formatter, $node, $width, $height) { $yahoomusic_id = $item['value']; $locale = _emvideo_yahoomusic_locale_lookup(); $tn = "http://d.yimg.com/img.music.yahoo.com/image/v1/video/$yahoomusic_id;encoding=jpg;size=" . $width . 'x' .$height . ";locale=$locale;"; // if we have a large thumbnail size, then get the largest version available. if ($width > 385 || $height > 231) { $tn = "http://d.yimg.com/img.music.yahoo.com/image/v1/video/$yahoomusic_id;encoding=jpg;locale=$locale;"; } return $tn; } /** * hook emvideo_PROVIDER_video * this actually displays the full/normal-sized video we want, usually on the default page view * @param $embed * the video code for the video to embed * @param $width * the width to display the video * @param $height * the height to display the video * @param $field * the field info from the requesting node * @param $item * the actual content from the field * @return * the html of the embedded video */ function emvideo_yahoomusic_video($embed, $width, $height, $field, $item, $node, $autoplay) { $output = theme('emvideo_yahoomusic_flash', $embed, $width, $height, $autoplay); return $output; } /** * hook emvideo_PROVIDER_video * this actually displays the preview-sized video we want, commonly for the teaser * @param $embed * the video code for the video to embed * @param $width * the width to display the video * @param $height * the height to display the video * @param $field * the field info from the requesting node * @param $item * the actual content from the field * @return * the html of the embedded video */ function emvideo_yahoomusic_preview($embed, $width, $height, $field, $item, $autoplay) { $output = theme('emvideo_yahoomusic_flash', $embed, $width, $height, $autoplay); return $output; } /** * Implementation of hook_emfield_subtheme. */ function emvideo_yahoomusic_emfield_subtheme() { return array( 'emvideo_yahoomusic_flash' => array( 'arguments' => array('embed' => NULL, 'width' => NULL, 'height' => NULL, 'autoplay' => NULL), 'file' => 'providers/yahoomusic.inc' ) ); }