summaryrefslogtreecommitdiff
path: root/download.inc
diff options
context:
space:
mode:
Diffstat (limited to 'download.inc')
-rwxr-xr-xdownload.inc211
1 files changed, 211 insertions, 0 deletions
diff --git a/download.inc b/download.inc
new file mode 100755
index 0000000..1f27c5b
--- /dev/null
+++ b/download.inc
@@ -0,0 +1,211 @@
+<?php
+// $Id$
+
+function textbook_companion_download_example_file()
+{
+ $example_file_id = arg(2);
+ $root_path = textbook_companion_path();
+
+ $example_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE id = %d LIMIT 1", $example_file_id);
+ $example_file_data = db_fetch_object($example_files_q);
+ header('Content-Type: ' . $example_file_data->filemime);
+ header('Content-disposition: attachment; filename="' . $example_file_data->filename . '"');
+ header('Content-Length: ' . filesize($root_path . $example_file_data->filepath));
+ readfile($root_path . $example_file_data->filepath);
+}
+
+function textbook_companion_download_dependency_file()
+{
+ $dependency_file_id = arg(2);
+ $root_path = textbook_companion_path();
+
+ $dependency_file_q = db_query("SELECT * FROM {textbook_companion_dependency_files} WHERE id = %d LIMIT 1", $dependency_file_id);
+ $dependency_file_data = db_fetch_object($dependency_file_q);
+ header('Content-Type: ' . $dependency_file_data->filemime);
+ header('Content-disposition: attachment; filename="' . $dependency_file_data->filename . '"');
+ header('Content-Length: ' . filesize($root_path . $dependency_file_data->filepath));
+ ob_clean();
+ readfile($root_path . $dependency_file_data->filepath);
+ exit;
+}
+
+function textbook_companion_download_example()
+{
+ $example_id = arg(2);
+ $root_path = textbook_companion_path();
+
+ /* get example data */
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d", $example_id);
+ $example_data = db_fetch_object($example_q);
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $example_data->chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ $example_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE example_id = %d", $example_id);
+ $example_dependency_files_q = db_query("SELECT * FROM {textbook_companion_example_dependency} WHERE example_id = %d", $example_id);
+
+ $EX_PATH = 'EX' . $example_data->number . '/';
+
+ /* zip filename */
+ $zip_filename = $root_path . 'zip-' . time() . '-' . rand(0, 999999) . '.zip';
+
+ /* creating zip archive on the server */
+ $zip = new ZipArchive;
+ $zip->open($zip_filename, ZipArchive::CREATE);
+
+ while ($example_files_row = db_fetch_object($example_files_q))
+ {
+ $zip->addFile($root_path . $example_files_row->filepath, $EX_PATH . $example_files_row->filename);
+ }
+ /* dependency files */
+ while ($example_dependency_files_row = db_fetch_object($example_dependency_files_q))
+ {
+ $dependency_file_data = db_fetch_object(db_query("SELECT * FROM {textbook_companion_dependency_files} WHERE id = %d LIMIT 1", $example_dependency_files_row->dependency_id));
+ if ($dependency_file_data)
+ $zip->addFile($root_path . $dependency_file_data->filepath, $EX_PATH . 'DEPENDENCIES/' . $dependency_file_data->filename);
+ }
+ $zip_file_count = $zip->numFiles;
+ $zip->close();
+
+ if ($zip_file_count > 0)
+ {
+ /* download zip file */
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="EX' . $example_data->number . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ readfile($zip_filename);
+ unlink($zip_filename);
+ } else {
+ drupal_set_message("There are no files in this examples to download", 'error');
+ drupal_goto('textbook_run');
+ }
+}
+
+function textbook_companion_download_chapter()
+{
+ $chapter_id = arg(2);
+ $root_path = textbook_companion_path();
+
+ /* get example data */
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ $CH_PATH = 'CH' . $chapter_data->number . '/';
+
+ /* zip filename */
+ $zip_filename = $root_path . 'zip-' . time() . '-' . rand(0, 999999) . '.zip';
+
+ /* creating zip archive on the server */
+ $zip = new ZipArchive;
+ $zip->open($zip_filename, ZipArchive::CREATE);
+
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d AND approval_status = 1", $chapter_id);
+ while ($example_row = db_fetch_object($example_q))
+ {
+ $EX_PATH = 'EX' . $example_row->number . '/';
+ $example_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE example_id = %d", $example_row->id);
+ $example_dependency_files_q = db_query("SELECT * FROM {textbook_companion_example_dependency} WHERE example_id = %d", $example_row->id);
+ while ($example_files_row = db_fetch_object($example_files_q))
+ {
+ $zip->addFile($root_path . $example_files_row->filepath, $CH_PATH . $EX_PATH . $example_files_row->filename);
+ }
+ /* dependency files */
+ while ($example_dependency_files_row = db_fetch_object($example_dependency_files_q))
+ {
+ $dependency_file_data = db_fetch_object(db_query("SELECT * FROM {textbook_companion_dependency_files} WHERE id = %d LIMIT 1", $example_dependency_files_row->dependency_id));
+ if ($dependency_file_data)
+ $zip->addFile($root_path . $dependency_file_data->filepath, $CH_PATH . $EX_PATH . 'DEPENDENCIES/' . $dependency_file_data->filename);
+ }
+ }
+ $zip_file_count = $zip->numFiles;
+ $zip->close();
+
+ if ($zip_file_count > 0)
+ {
+ /* download zip file */
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="CH' . $chapter_data->number . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ readfile($zip_filename);
+ unlink($zip_filename);
+ } else {
+ drupal_set_message("There are no examples in this chapter to download", 'error');
+ drupal_goto('textbook_run');
+ }
+}
+
+function textbook_companion_download_book()
+{
+ $book_id = arg(2);
+ $root_path = textbook_companion_path();
+ /* get example data */
+ $book_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE id = %d", $book_id);
+ $book_data = db_fetch_object($book_q);
+ $zipname = str_replace(' ','_',($book_data->book));
+ $BK_PATH = $zipname . '/';
+
+ /* zip filename */
+ $zip_filename = $root_path . 'zip-' . time() . '-' . rand(0, 999999) . '.zip';
+
+ /* creating zip archive on the server */
+ $zip = new ZipArchive;
+ $zip->open($zip_filename, ZipArchive::CREATE);
+
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE preference_id = %d", $book_id);
+ while ($chapter_row = db_fetch_object($chapter_q))
+ {
+ $CH_PATH = 'CH' . $chapter_row->number . '/';
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d AND approval_status = 1", $chapter_row->id);
+ while ($example_row = db_fetch_object($example_q))
+ {
+ $EX_PATH = 'EX' . $example_row->number . '/';
+ $example_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE example_id = %d", $example_row->id);
+ $example_dependency_files_q = db_query("SELECT * FROM {textbook_companion_example_dependency} WHERE example_id = %d", $example_row->id);
+ while ($example_files_row = db_fetch_object($example_files_q))
+ {
+ $zip->addFile($root_path . $example_files_row->filepath, $BK_PATH . $CH_PATH . $EX_PATH . $example_files_row->filename);
+ }
+ /* dependency files */
+ while ($example_dependency_files_row = db_fetch_object($example_dependency_files_q))
+ {
+ $dependency_file_data = db_fetch_object(db_query("SELECT * FROM {textbook_companion_dependency_files} WHERE id = %d LIMIT 1", $example_dependency_files_row->dependency_id));
+ if ($dependency_file_data)
+ $zip->addFile($root_path . $dependency_file_data->filepath, $BK_PATH . $CH_PATH . $EX_PATH . 'DEPENDENCIES/' . $dependency_file_data->filename);
+ }
+ $query = "SELECT * FROM textbook_companion_dependency_files WHERE preference_id = %d";
+ $result = db_query($query, $book_id);
+ while($row = db_fetch_object($result)) {
+ $zip->addFile($root_path . $row->filepath, $BK_PATH . 'DEPENDENCIES/' . $row->filename);
+ }
+ }
+ }
+ $zip_file_count = $zip->numFiles;
+ $zip->close();
+
+ if ($zip_file_count > 0)
+ {
+ /* download zip file */
+ global $user;
+ if($user->uid){
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="' . str_replace(' ','_',($book_data->book)) . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ ob_clean();
+ readfile($zip_filename);
+ unlink($zip_filename);
+ }else{
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="' . str_replace(' ','_',($book_data->book)) . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ header("Content-Transfer-Encoding: binary");
+ header('Expires: 0');
+ header('Pragma: no-cache');
+ ob_end_flush();
+ ob_clean();
+ flush();
+ readfile($zip_filename);
+ unlink($zip_filename);
+ }
+ } else {
+ drupal_set_message("There are no examples in this book to download", 'error');
+ drupal_goto('textbook_run');
+ }
+}
+