/** * Shows all possible files in selectable list. */ protected function buildJsFileDisplay($file_ids) { // Gather the files if recursion IS selected. // Get 'em all ready to be punched into the file list. $recursion_file_ids = _uc_file_sort_names(_uc_file_get_dir_file_ids($file_ids, TRUE)); foreach ($recursion_file_ids as $file_id) { $file = uc_file_get_by_id($file_id); $recursion[] = '<li>' . $file->filename . '</li>'; } // Gather the files if recursion ISN'T selected. // Get 'em all ready to be punched into the file list. $no_recursion_file_ids = $file_ids; foreach ($no_recursion_file_ids as $file_id) { $file = uc_file_get_by_id($file_id); $no_recursion[] = '<li>' . $file->filename . '</li>'; } // We'll disable the recursion checkbox if they're equal. $equivalent = $this->displayArraysEquivalent($recursion_file_ids, $no_recursion_file_ids); // The list to show if the recursion checkbox is $key. $result[TRUE] = $equivalent ? FALSE : $recursion; $result[FALSE] = $no_recursion; // Set up some JS to dynamically update the list based on the // recursion checkbox state. drupal_add_js('uc_file_list[false] = ' . Json::encode('<li>' . implode('</li><li>', $no_recursion) . '</li>') . ';', 'inline'); drupal_add_js('uc_file_list[true] = ' . Json::encode('<li>' . implode('</li><li>', $recursion) . '</li>') . ';', 'inline'); return $result; }
/** * Handles file downloading and error states. * * @param $fid * The fid of the file specified to download. * @param $key * The hash key of a user's download. * @param \Symfony\Component\HttpFoundation\Request $request * The request of the page. */ public function download($fid, Request $request) { $user = \Drupal::currentUser(); // Error messages for various failed download states. $admin_message = $this->t('Please contact the site administrator if this message has been received in error.'); $error_messages = array(UC_FILE_ERROR_NOT_A_FILE => $this->t('The file you requested does not exist.'), UC_FILE_ERROR_TOO_MANY_BOGUS_REQUESTS => $this->t('You have attempted to download an incorrect file URL too many times.'), UC_FILE_ERROR_INVALID_DOWNLOAD => $this->t('The following URL is not a valid download link.') . ' ', UC_FILE_ERROR_TOO_MANY_LOCATIONS => $this->t('You have downloaded this file from too many different locations.'), UC_FILE_ERROR_TOO_MANY_DOWNLOADS => $this->t('You have reached the download limit for this file.'), UC_FILE_ERROR_EXPIRED => $this->t('This file download has expired.') . ' ', UC_FILE_ERROR_HOOK_ERROR => $this->t('A hook denied your access to this file.') . ' '); $ip = $request->getClientIp(); if ($user->hasPermission('view all downloads')) { $file_download = uc_file_get_by_id($fid); } else { $file_download = uc_file_get_by_uid($user->id(), $fid); } if (isset($file_download->filename)) { $file_download->full_path = uc_file_qualify_file($file_download->filename); } else { throw new AccessDeniedHttpException(); } // If it's ok, we push the file to the user. $status = UC_FILE_ERROR_OK; if (!$user->hasPermission('view all downloads')) { $status = $this->validateDownload($file_download, $user, $ip); } if ($status == UC_FILE_ERROR_OK) { $this->transferDownload($file_download, $ip); } else { drupal_set_message($error_messages[$status] . $admin_message, 'error'); // Kick 'em to the curb. >:) $this->redirectDownload($user->id()); } drupal_exit(); }