@ -6,10 +6,8 @@
/**
/**
* Code
* Code
*/
*/
/* INIT SECTION */
// We cannot use dropbox_init.inc.php because this one already outputs data.
// We cannot use dropbox_init.inc.php because this one already outputs data.
$language_file = 'dropbox';
$language_file = 'dropbox';
// including the basic Chamilo initialisation file
// including the basic Chamilo initialisation file
@ -32,137 +30,126 @@ $course_id = api_get_course_int_id();
$user_id = api_get_user_id();
$user_id = api_get_user_id();
if (isset($_GET['cat_id']) AND is_numeric($_GET['cat_id']) AND $_GET['action'] == 'downloadcategory' AND isset($_GET['sent_received'])) {
if (isset($_GET['cat_id']) AND is_numeric($_GET['cat_id']) AND $_GET['action'] == 'downloadcategory' AND isset($_GET['sent_received'])) {
// step 1: constructingd' the sql statement. Due to the nature off the classes of the dropbox the categories for sent files are stored in the table
/** step 1: constructing the sql statement.
// 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
Due to the nature off the classes of the dropbox the categories for sent files are stored in the table
// in dropbox_person (which stores the link file-person)
dropbox_file while the categories for the received files are stored in dropbox_post.
// Therefore we have to create to separate sql statements to find which files are in the categorie (depending if we zip-download a sent category or a
It would have been more elegant if these could be stored in dropbox_person (which stores the link file-person)
// received category)
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.
if ($_GET['sent_received'] == 'sent') {
$sql = "SELECT DISTINCT file.id, file.filename, file.title
// 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 ".$dropbox_cnf['tbl_file']." file INNER JOIN ".$dropbox_cnf['tbl_person']." person
FROM ".$dropbox_cnf['tbl_file']." file INNER JOIN ".$dropbox_cnf['tbl_person']." person
ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
WHERE
WHERE
file.uploader_id = $user_id AND
file.uploader_id = $user_id AND
file.cat_id='".intval($_GET['cat_id'])."' AND
file.cat_id='".intval($_GET['cat_id'])."' AND
person.user_id = $user_id";
person.user_id = $user_id";
}
}
if ($_GET['sent_received'] == 'received') {
if ($_GET['sent_received'] == 'received') {
$sql = "SELECT DISTINCT file.id, file.filename, file.title
$sql = "SELECT DISTINCT file.id, file.filename, file.title
FROM ".$dropbox_cnf['tbl_file']." file INNER JOIN ".$dropbox_cnf['tbl_person']." person
FROM ".$dropbox_cnf['tbl_file']." file INNER JOIN ".$dropbox_cnf['tbl_person']." person
ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
ON (person.file_id=file.id AND file.c_id = $course_id AND person.c_id = $course_id)
INNER JOIN ".$dropbox_cnf['tbl_post']." post
INNER JOIN ".$dropbox_cnf['tbl_post']." post
ON (post.file_id = file.id AND post.c_id = $course_id AND file.c_id = $course_id)
ON (post.file_id = file.id AND post.c_id = $course_id AND file.c_id = $course_id)
WHERE
WHERE
post.cat_id = ".intval($_GET['cat_id'])." AND
post.cat_id = ".intval($_GET['cat_id'])." AND
post.dest_user_id = $user_id" ;
post.dest_user_id = $user_id" ;
}
}
$result = Database::query($sql);
while ($row = Database::fetch_array($result)) {
$files_to_download[] = $row['id'];
}
if (!is_array($files_to_download) OR empty($files_to_download)) {
header('location: index.php?view='.Security::remove_XSS($_GET['sent_received']).'&error=ErrorNoFilesInFolder');
exit;
}
zip_download($files_to_download);
exit;
}
$result = Database::query($sql);
while ($row = Database::fetch_array($result)) {
$files_to_download[] = $row['id'];
}
if (!is_array($files_to_download) OR empty($files_to_download)) {
header('location: index.php?view='.Security::remove_XSS($_GET['sent_received']).'&error=ErrorNoFilesInFolder');
exit;
}
zip_download($files_to_download);
exit;
}
/* DOWNLOAD A FILE */
/* DOWNLOAD A FILE */
/* AUTHORIZATION */
/* AUTHORIZATION */
// Check if the id makes sense
// Check if the id makes sense
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
Display::display_header($nameTools, 'Dropbox');
Display::display_header($nameTools, 'Dropbox');
Display :: display_error_message(get_lang('Error'));
Display :: display_error_message(get_lang('Error'));
Display::display_footer();
Display::display_footer();
exit;
exit;
}
}
// Check if the user is allowed to download the file
// Check if the user is allowed to download the file
$allowed_to_download = false;
$allowed_to_download = false;
if (user_can_download_file($_GET['id'], api_get_user_id())) {
if (user_can_download_file($_GET['id'], api_get_user_id())) {
$allowed_to_download = true;
$allowed_to_download = true;
}
}
/* ERROR IF NOT ALLOWED TO DOWNLOAD */
/* ERROR IF NOT ALLOWED TO DOWNLOAD */
if (!$allowed_to_download) {
if (!$allowed_to_download) {
Display::display_header($nameTools, 'Dropbox');
Display::display_header($nameTools, 'Dropbox');
Display::display_error_message(get_lang('YouAreNotAllowedToDownloadThisFile'));
Display::display_error_message(get_lang('YouAreNotAllowedToDownloadThisFile'));
Display::display_footer();
Display::display_footer();
exit;
exit;
} else {
} else {
/* DOWNLOAD THE FILE */
/* DOWNLOAD THE FILE */
// the user is allowed to download the file
// the user is allowed to download the file
$_SESSION['_seen'][$_course['id']][TOOL_DROPBOX][] = intval($_GET['id']);
$_SESSION['_seen'][$_course['id']][TOOL_DROPBOX][] = intval($_GET['id']);
$work = new Dropbox_work($_GET['id']);
$work = new Dropbox_work($_GET['id']);
$path = dropbox_cnf('sysPath') . '/' . $work -> filename; //path to file as stored on server
$path = dropbox_cnf('sysPath') . '/' . $work -> filename; //path to file as stored on server
if (!Security::check_abs_path($path, dropbox_cnf('sysPath').'/')) {
if (!Security::check_abs_path($path, dropbox_cnf('sysPath').'/')) {
exit;
exit;
}
$file = $work->title;
$mimetype = DocumentManager::file_get_mime_type(true);
$fileinfo = pathinfo($file);
$extension = $fileinfo['extension'];
if (!empty($extension) & & isset($mimetype[$extension]) & & $_GET['action'] != 'download') {
// give hint to browser about filetype
header( 'Content-type: ' . $mimetype[$extension] . "\n");
} else {
//no information about filetype: force a download dialog window in browser
header( "Content-type: application/octet-stream\n");
}
}
$file = $work->title;
header('Content-Disposition: attachment; filename='.$file);
$mimetype = DocumentManager::file_get_mime_type(true);
$fileinfo = pathinfo($file);
/**
$extension = $fileinfo['extension'];
* Note that if you use these two headers from a previous example:
* header('Cache-Control: no-cache, must-revalidate');
if (!empty($extension) & & isset($mimetype[$extension]) & & $_GET['action'] != 'download') {
* header('Pragma: no-cache');
// give hint to browser about filetype
* before sending a file to the browser, the "Open" option on Internet Explorer's file download dialog will not work properly. If the user clicks "Open" instead of "Save," the target application will open an empty file, because the downloaded file was not cached. The user will have to save the file to their hard drive in order to use it.
header( 'Content-type: ' . $mimetype[$extension] . "\n");
* Make sure to leave these headers out if you'd like your visitors to be able to use IE's "Open" option.
} else {
*/
//no information about filetype: force a download dialog window in browser
header("Pragma: \n");
header( "Content-type: application/octet-stream\n");
header("Cache-Control: \n");
}
header("Cache-Control: public\n"); // IE cannot download from sessions without a cache
/*if (!in_array(strtolower($extension), array('doc', 'xls', 'ppt', 'pps', 'sxw', 'sxc', 'sxi'))) {
/*if (isset($_SERVER['HTTPS'])) {
header('Content-Disposition: inline; filename='.$file); // bugs with open office
/**
} else {
* We need to set the following headers to make downloads work using IE in HTTPS mode.
header('Content-Disposition: attachment; filename='.$file);
*
}*/
//header('Pragma: ');
//header('Cache-Control: ');
header('Content-Disposition: attachment; filename='.$file);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate( "D, d M Y H:i:s") . " GMT\n");
/**
header("Cache-Control: no-store, no-cache, must-revalidate\n"); // HTTP/1.1
* Note that if you use these two headers from a previous example:
header("Cache-Control: post-check=0, pre-check=0\n", false);
* header('Cache-Control: no-cache, must-revalidate');
}*/
* header('Pragma: no-cache');
* before sending a file to the browser, the "Open" option on Internet Explorer's file download dialog will not work properly. If the user clicks "Open" instead of "Save," the target application will open an empty file, because the downloaded file was not cached. The user will have to save the file to their hard drive in order to use it.
header('Content-Description: '.trim(htmlentities($file)));
* Make sure to leave these headers out if you'd like your visitors to be able to use IE's "Open" option.
header('Content-transfer-encoding: binary');
*/
header("Pragma: \n");
header("Content-Length: " . filesize($path)."\n" );
header("Cache-Control: \n");
header("Cache-Control: public\n"); // IE cannot download from sessions without a cache
$fp = fopen( $path, 'rb');
fpassthru($fp);
/*if (isset($_SERVER['HTTPS'])) {
exit();
/**
* We need to set the following headers to make downloads work using IE in HTTPS mode.
*
//header('Pragma: ');
//header('Cache-Control: ');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate( "D, d M Y H:i:s") . " GMT\n");
header("Cache-Control: no-store, no-cache, must-revalidate\n"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0\n", false);
}*/
header('Content-Description: '.trim(htmlentities($file)));
header('Content-transfer-encoding: binary');
header("Content-Length: " . filesize($path)."\n" );
$fp = fopen( $path, 'rb');
fpassthru($fp);
exit();
}
}
//@todo clean this file the code below is useless there are 2 exits in previous conditions ... maybe a bad copy/paste/merge?
//@todo clean this file the code below is useless there are 2 exits in previous conditions ... maybe a bad copy/paste/merge?
exit;
exit;