123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- /* For licensing terms, see /license.txt */
- /**
- * @package chamilo.dropbox
- */
- // including the basic Chamilo initialisation file
- require_once __DIR__.'/../inc/global.inc.php';
- // the dropbox file that contains additional functions
- require_once 'dropbox_functions.inc.php';
- /* DOWNLOAD A FOLDER */
- $course_id = api_get_course_int_id();
- $user_id = api_get_user_id();
- if (isset($_GET['cat_id']) &&
- is_numeric($_GET['cat_id']) &&
- $_GET['action'] == 'downloadcategory' &&
- isset($_GET['sent_received'])
- ) {
- /** step 1: constructing the sql statement.
- Due to the nature off the classes of the dropbox the categories for sent files are stored in the table
- dropbox_file while the categories for the received files are stored in dropbox_post.
- It would have been more elegant if these could be stored in dropbox_person (which stores the link file-person)
- Therefore we have to create to separate sql statements to find which files are in the category
- (depending if we zip-download a sent category or a received category)*/
- if ($_GET['sent_received'] == 'sent') {
- // here we also incorporate the person table to make sure that deleted sent documents are not included.
- $sql = "SELECT DISTINCT file.id, file.filename, file.title
- FROM ". Database::get_course_table(TABLE_DROPBOX_FILE)." file
- INNER JOIN ". Database::get_course_table(TABLE_DROPBOX_PERSON)." person
- ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
- WHERE
- file.uploader_id = $user_id AND
- file.cat_id='".intval($_GET['cat_id'])."' AND
- person.user_id = $user_id";
- }
- if ($_GET['sent_received'] == 'received') {
- $sql = "SELECT DISTINCT file.id, file.filename, file.title
- FROM ". Database::get_course_table(TABLE_DROPBOX_FILE)." file
- INNER JOIN ". Database::get_course_table(TABLE_DROPBOX_PERSON)." person
- ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
- INNER JOIN ".Database::get_course_table(TABLE_DROPBOX_POST)." post
- ON (post.file_id = file.id AND post.c_id = $course_id AND file.c_id = $course_id)
- WHERE
- post.cat_id = ".intval($_GET['cat_id'])." AND
- post.dest_user_id = $user_id";
- }
- $files_to_download = array();
- $result = Database::query($sql);
- while ($row = Database::fetch_array($result)) {
- $files_to_download[] = $row['id'];
- }
- if (!is_array($files_to_download) || empty($files_to_download)) {
- header('Location: index.php?'.api_get_cidreq().'&view='.Security::remove_XSS($_GET['sent_received']).'&error=ErrorNoFilesInFolder');
- exit;
- }
- zip_download($files_to_download);
- exit;
- }
- /* DOWNLOAD A FILE */
- /* AUTHORIZATION */
- // Check if the id makes sense
- if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
- api_not_allowed(true);
- exit;
- }
- // Check if the user is allowed to download the file
- $allowed_to_download = false;
- if (user_can_download_file($_GET['id'], api_get_user_id())) {
- $allowed_to_download = true;
- }
- /* ERROR IF NOT ALLOWED TO DOWNLOAD */
- if (!$allowed_to_download) {
- api_not_allowed(
- true,
- Display::return_message(
- get_lang('YouAreNotAllowedToDownloadThisFile'),
- 'error'
- )
- );
- exit;
- } else {
- /* DOWNLOAD THE FILE */
- // the user is allowed to download the file
- $_SESSION['_seen'][$_course['id']][TOOL_DROPBOX][] = intval($_GET['id']);
- $work = new Dropbox_Work($_GET['id']);
- //path to file as stored on server
- $path = api_get_path(SYS_COURSE_PATH).$_course['path'].'/dropbox/'.$work->filename;
- if (!Security::check_abs_path(
- $path,
- api_get_path(SYS_COURSE_PATH).$_course['path'].'/dropbox/')
- ) {
- api_not_allowed(true);
- }
- $file = $work->title;
- $result = DocumentManager::file_send_for_download($path, true, $file);
- if ($result === false) {
- api_not_allowed(true);
- }
- exit;
- }
- //@todo clean this file the code below is useless there are 2 exits in previous conditions ... maybe a bad copy/paste/merge?
- exit;
|