diff options
Diffstat (limited to 'plugins/video_multidownload')
-rw-r--r-- | plugins/video_multidownload/video_multidownload.info | 6 | ||||
-rw-r--r-- | plugins/video_multidownload/video_multidownload.module | 393 |
2 files changed, 0 insertions, 399 deletions
diff --git a/plugins/video_multidownload/video_multidownload.info b/plugins/video_multidownload/video_multidownload.info deleted file mode 100644 index 5c87e9c..0000000 --- a/plugins/video_multidownload/video_multidownload.info +++ /dev/null @@ -1,6 +0,0 @@ -;$Id$ -name = Video Multidownload -description = Enable multiple file download in video module. -dependencies[] = video -package = "Video" -core = 6.x diff --git a/plugins/video_multidownload/video_multidownload.module b/plugins/video_multidownload/video_multidownload.module deleted file mode 100644 index 5cce13b..0000000 --- a/plugins/video_multidownload/video_multidownload.module +++ /dev/null @@ -1,393 +0,0 @@ -<?php -//$Id$ -/** - * @file - * Enable multiple file download in video module. - * - * @author Fabio Varesano <fvaresano at yahoo dot it> - * @author Heshan Wanigasooriya <heshan at heidisoft.com><heshanmw at gmail dot com> - * @todo - */ - - -/** - * Implementation of hook_help(). - */ -function video_multidownload_help($path, $arg) { - switch ($path) { - case 'admin/modules#description': - return t('Enable multiple file download in video module.'); - } -} - - -/** - * Implementation of hook_menu(). - * - * @param $may_cache - * boolean indicating whether cacheable menu items should be returned - * - * @return - * array of menu information - */ -function video_multidownload_menu() { - $items = array(); -/* TODO - Non menu code that was placed in hook_menu under the '!$may_cache' block - so that it could be run during initialization, should now be moved to hook_init. - Previously we called hook_init twice, once early in the bootstrap process, second - just after the bootstrap has finished. The first instance is now called boot - instead of init. - - In Drupal 6, there are now two hooks that can be used by modules to execute code - at the beginning of a page request. hook_boot() replaces hook_boot() in Drupal 5 - and runs on each page request, even for cached pages. hook_boot() now only runs - for non-cached pages and thus can be used for code that was previously placed in - hook_menu() with $may_cache = FALSE: - - Dynamic menu items under a '!$may_cache' block can often be simplified - to remove references to arg(n) and use of '%<function-name>' to check - conditions. See http://drupal.org/node/103114. - - The title and description arguments should not have strings wrapped in t(), - because translation of these happen in a later stage in the menu system. -*/ - $may_cache=true; - if ($may_cache) { - $items['admin/content/video/multidownload'] = array( - 'title' => 'Multidownload', - 'description' => 'Administer video_multidownload module settings', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('video_multidownload_settings_form'), - 'access arguments' => array('administer site configuration'), - 'type' => MENU_NORMAL_ITEM, - ); - } - else { - if (arg(0) == 'node' && is_numeric(arg(1))) { - if ($node = node_load(arg(1)) and $node->type == 'video') { - if(isset($node->disable_multidownload) && - !$node->disable_multidownload && - ($node->use_play_folder || $node->download_folder!='') - ) { - $items['node/'.'%'.'/multidownload'] = array( - 'title' => 'download other formats', - 'page callback' => 'video_multidownload_download', - 'access arguments' => array('access video'), - 'weight' => 7, - 'type' => MENU_LOCAL_TASK); - } - } - } - } - return $items; -} - - -/** - * Implementation of hook_perm(). - */ -function video_multidownload_perm() { - return array('create multi-file downloads'); -} - - -/** - * Implementation of hook_settings() - */ -function video_multidownload_settings_form() { - $form = array(); - - $options = array(1 => 'Yes', 0 => 'No'); - - $form['multifile'] = array('#type' => 'fieldset', '#title' => t('Multi-file download options'), '#description' => t('Allows a list of files to be shown on the download page. The list is usually gotten from a specified folder. This ability is useful for providing different sizes and video types for download.')); - $form['multifile']['video_multidownload'] = array( - '#type' => 'radios', - '#title' => t('Allow Multi-file Downloads'), - '#options' => $options, - '#default_value' => variable_get('video_multidownload', 0), - '#description' => t('This feature can be disabled separately for each node. If turned on make sure you set the permissions so users can use this feature.') . ' ' . l(t('access control'), 'admin/access')); - $form['multifile']['video_download_ext'] = array( - '#type' => 'textfield', - '#title' => t('File extensions to show'), - '#default_value' => variable_get('video_download_ext', 'mov,wmv,rm,flv,avi,divx,mpg,mpeg,mp4,zip'), - '#description' => t('The extensions of files to list from the multi-file download folder on the download page. Extensions should be comma seperated with no spaces, for example (mov,wmv,rm).')); - - return system_settings_form($form); -} - - -/** - * Implementation of hook_form_alter() - * We use this to add multidownload fields to the video creation form. - */ -function video_multidownload_form_alter(&$form, &$form_state, $form_id) { - - if ($form_id == 'video_node_form' && isset($form['video']) && user_access('create multi-file downloads')) { - - $node = $form['#node']; - - $form['multi-file'] = array( - '#type' => 'fieldset', - '#title' => t('Multiple files in download tab'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#weight' => -18, - '#description' => t('These options allow you to have multiple files shown on the download page. This is useful for allowing users to download different file sizes and video formats. ') . l(t('More information.'), 'video/help', array('fragment' => 'multi-download')) - ); - $form['multi-file']['disable_multidownload'] = array( - '#type' => 'checkbox', - '#title' => t('Disable multi-file downloads'), - '#default_value' => isset($node->disable_multidownload) ? $node->disable_multidownload : 1, - '#description' => t('Disables multi-file downloads for this video only.') - ); - $form['multi-file']['download_folder'] = array( - '#type' => 'textfield', - '#title' => t('Multi-file download folder'), - '#default_value' => $node->download_folder, - '#maxlength' => 250, - '#description' => t('Enter the folder containing your videos. It must be relative from the drupal directory. If the absolute path is "C:\inetpub\drupal\videos\projectfolder\" or "/usr/htdocs/drupal/videos/projectfolder/" then enter something like "videos/projectfolder/".')); - $form['multi-file']['use_play_folder'] = array( - '#type' => 'checkbox', - '#title' => t('Show files in "play" folder'), - '#default_value' => $node->use_play_folder, - '#description' => t('Display videos in the same directory as the "play" video. If folder above is entered this will be in addition.')); - } -} - - -/** - * Implementation of hook_nodeapi() - */ -function video_multidownload_nodeapi(&$node, $op, $teaser) { - if($node->type == 'video') { - switch ($op) { - - case 'validate': - //Validate multi-file download values. - if (user_access('create multi-file downloads')) { //Make sure the user has permission. - //Checks to make sure either multi-downloads are disabled, or a valid folder is given, or use_play_folder is checked. - if ($node->disable_multidownload == 0 and !is_dir(getcwd() . '/' . $node->download_folder) and $node->use_play_folder == 0) { - form_set_error('disable_multidownload', t("Please disable multi-file downloads if you are not going to use the feature.")); - form_set_error('download_folder', t('Download directory does not exist. Make sure it has a trailing forward slash "/".')); - } - } - break; - } - } -} - - - -function video_multidownload_download() { - if ($node = node_load(arg(1))) { - if (variable_get("video_multidownload", 0) == 0 or $node->disable_multidownload == 1) { - - } - else if (arg(3) != '') { //If we are passed an encoded URL redirect to the downloader. - _video_multidownload_download_goto(arg(3), $node->vid, TRUE); - } - else { //Multiple file downloads is turned on. - $download_error = FALSE; //Initialize and clear the error flag. - $node->file_array = array(); //Initialize the final file array. - global $base_url; - $full_download_folder = getcwd() . '/' . $node->download_folder; //Get absolute path to folder. - //If the download folder is set and valid scan it for files. - if ($node->download_folder != '' and file_exists($full_download_folder)) { - $scan_download_folder = _video_multidownload_scandir($full_download_folder); //Get array of file names in the directory. - $scan_download_folder['local_dir'] = $full_download_folder; //For getting filesize. - $scan_download_folder['dir_stub'] = $node->download_folder; //To put in the URL. - $folder_array[] = $scan_download_folder; - - } - //If option is set to use "play" folder and it exists, scan it for files. - $play_dir_stub = str_replace(basename($node->vidfile), "", $node->vidfile); //Remove the filename from the play file to get directory. - $play_dir = getcwd() . '/' . $play_dir_stub; //Get the local directory path where the file is kept. - if ($node->use_play_folder == 1 and file_exists($play_dir) and $play_dir_stub != '/') { //Make sure play stub won't allow scanning base drupal directory. - $scan_play_folder = _video_multidownload_scandir($play_dir); - $scan_play_folder['local_dir'] = $play_dir; //For getting filesize. - $scan_play_folder['dir_stub'] = $play_dir_stub; //To put in the URL. - $folder_array[] = $scan_play_folder; - } - - if (count($folder_array) > 0) { //Make sure we have a folder to scan. - foreach ($folder_array as $dir_scan) { //Scan through one or both folders results. - foreach ($dir_scan as $file) { //Go through each file in the directory. - if (is_file($dir_scan['local_dir'] . "/" . $file)) { //Make sure it's a valid file. - //Checks the new file with the files already in the array to eliminate dupes. - $match = false; - foreach ($node->file_array as $file_array_file) { - if ($file_array_file['file'] == $file) { //If the file is already in the array. - $match = TRUE; - } - } //If we get here with $match still set FALSE we don't have a dupe. - - $file_ext = substr($file, strrpos($file, '.') + 1); //Get the file extension. - $ext_array = explode(',', variable_get('video_download_ext', 'mov,wmv,avi')); - - if (!$match and in_array($file_ext, $ext_array)) { //Only add file if it's not already in the array and it's extension shouldn't be hidden. - $file_array_size[] = filesize($dir_scan['local_dir'] . $file); //Create an array of the file sizes for sorting. - - global $base_url; - $file_url = $base_url . '/' . $dir_scan['dir_stub'] . $file; //Generate absolute URL to video. - $file_url = str_replace(' ', '%20', $file_url); //Replace any spaces in filename. - $encoded_url = base64_encode($file_url); //Encode URL to base64 MIME value so it can be passed in URL. - $encoded_url = str_replace('/', '-', $encoded_url); //Replace "/" with "-" so it doesn't mess up the URL. - - $node->file_array[] = array( 'file' => $file - , 'type' => $file_ext - , 'size' => filesize($dir_scan['local_dir'] . $file) - , 'encoded_url' => $encoded_url - ); - } - } //Close the valid file check. - } //Close the directory scan. - } //Close scan location array. - - if (count($node->file_array) > 0) { //Make sure atleast 1 file was found. - array_multisort($file_array_size, SORT_ASC, $node->file_array); //Sort based of file size. - - } - else { //Else if no files were found in the directory. - $download_error = TRUE; - } - } - else { //Else if we have no valid folders to scan. - $download_error = TRUE; - } - - //If there was no error send the files array to the theme function for display. - if($download_error == FALSE) { - print theme('video_multidownload_download', $node); //Print to the screen from the theme_video_download function. - } - else { //Else if there is an error download the play file. - _video_download_goto($node->vidfile, $node->vid); - } - - } //Close multi-file downloads is turned on. - } -} - - -/** - * Outputs the HTML for the download page when multi-file download are turned on. - * - * @param $node - * object with node information - * - * @return - * string of content to display - */ -function theme_video_multidownload_download($node) { - $output = ''; - //Replace some common file types with full name and links. - $find = array('mov', 'wmv', 'rm', 'avi', 'zip', 'divx', 'flv', 'ogg'); - $replace = array('<a href="http://www.apple.com/quicktime" title="'. t('QuickTime Homepage') . '">' . t('Quicktime') . '</a>' - , '<a href="http://www.microsoft.com/windowsmedia" title="'. t('Windows Media Homepage') . '">' . t('Windows Media') . '</a>' - , '<a href="http://www.real.com" title="'. t('Real Media Homepage') . '">' . t('Real Media') . '</a>' - , '<a href="http://en.wikipedia.org/wiki/AVI" title="'. t('AVI Information at wikipedia.org') . '">' . t('AVI') . '</a>' - , '<a href="http://en.wikipedia.org/wiki/ZIP_file_format" title="'. t('ZIP Information at wikipedia.org') . '">' . t('ZIP') . '</a>' - , '<a href="http://www.divx.com" title="'. t('Divx Homepage') . '">' . t('DIVX') . '</a>' - , '<a href="http://www.macromedia.com/go/getflashplayer" title="'. t('Macromedia Flash Homepage') . '">' .t('Flash FLV') . '</a>' - , '<a href="http://www.theora.org/theorafaq.html" title="'. t('Ogg Theora FAQ at theora.org') . '">'.t('Ogg Theora FAQ') .'</a>, <a href="http://en.wikipedia.org/wiki/Wikipedia:Media_help_(Ogg)" title="'. t('Ogg Theora media help at Wikipedia') . '">' . t('Ogg Theora help') . '</a>' - ); - $output .= '<br /><div class="videodownload">'; //Enclose all HTML in "videodownload" class. - foreach($node->file_array as $file) { //Goes through the array of video files and gets them ready for display. - $file_type = str_replace($find, $replace, $file['type']); //Match and replace common file types. - $link = l($file['file'], "node/$node->nid/multidownload/" . $file['encoded_url']); //Create link to download file. - $file_array_table[] = array($link, format_size($file['size']), $file_type); //Create table row. - } - $headers = array(t('File Link'), t('File Size'), t('File Type')); - $output .= theme_table($headers, $file_array_table); //Create the table of files. - $output .= '</div>'; //Close the "videodownload" class. - - //Adds a breadcrumb back to view on the download page. This may not be needed but some better breadcrumbs are. - $breadcrumb = drupal_get_breadcrumb(); - $breadcrumb[] = l(t('View'), "node/$node->nid"); - drupal_set_breadcrumb($breadcrumb); - - drupal_set_title(t('Downloading').' '. theme('placeholder', $node->title)); - return theme("page", $output); -} - - - -/** - * Scans a directory and returns an array of all the filenames in the directory. - * This function is only necessary to maintain PHP 4 support. - * - * @param $dir - * The directory. Can be an absolute path or relative from the current working directory. - * - * @return - * array of filenames. - */ -function _video_multidownload_scandir($dir) { - //Try a few different ways to open the directory. - if (is_dir($dir)) { - $dir_open = opendir($dir); - } - else if (is_dir($new_dir = getcwd() . $dir)) { - $dir_open = opendir($new_dir); - } - else if (is_dir($new_dir = getcwd() . '/' . $dir)) { - $dir_open = opendir($new_dir); - } - else { //If directory does not exist. - return FALSE; - } - if (!$dir_open) { //If opendir returned false then return false. - return FALSE; - } - //If it makes it this far $dir_open should be valid. - while (($dir_content = readdir($dir_open)) !== FALSE) { - $files[] = $dir_content; - } - return $files; -} - - -/** - * Forward user directly to the file for downloading - * - * @param $input_url - * string should be either a base64 encoded absolute URL, relative URL, or absolute URL. - * - * @param $vid - * integer node version ID of the node to have it's download counter updated. - * - * @param $base64_encoded - * boolean value determines whether the $input is base64 encoded. - * - * @return - * Nothing - */ -function _video_multidownload_download_goto($input_url, $vid, $base64_encoded) { - if (user_access('download video') && $base64_encoded) { - - $encoded_url = str_replace('-', '/', $input_url); //Replace "-" to "/" for MIME base64. - $location = base64_decode($encoded_url); - - if (variable_get('video_downloadcounter', 1)) { - db_query("UPDATE {video} SET download_counter = download_counter + 1 where vid = '%d'", $vid); //Increment download counter. - } - - header("Location: $location"); //Redirect to the video files URL. - } - else { //If the user does not have access to download videos. - drupal_set_message(t('You do not have permission to download videos.'), 'error'); - $node = node_load(array('vid' => $vid)); //Load a node with the $vid so we can get the nid. - drupal_goto("node/$node->nid"); //Use the nid we just loaded to go back to the node page. - } -} - -/** - * Implementation of hook_theme(). - */ -function video_multidownload_theme() { - return array( - 'video_multidownload_download' => array( - 'arguments' => array('node' => NULL), - ), - ); -} |