You are here

function video_multidownload_download in Video 6

Same name and namespace in other branches
  1. 5 plugins/video_multidownload/video_multidownload.module \video_multidownload_download()
  2. 6.2 plugins/video_multidownload/video_multidownload.module \video_multidownload_download()
1 string reference to 'video_multidownload_download'
video_multidownload_menu in plugins/video_multidownload/video_multidownload.module
Implementation of hook_menu().

File

plugins/video_multidownload/video_multidownload.module, line 182
Enable multiple file download in video module.

Code

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.
  }
}