$vcard->setEmail($row['email']); $vcard->setNote('Originated from an AContent at ' . TR_BASE_HREF . '. See ATutor.ca for additional information.'); $vcard->setURL($row['website']); $imsmanifest_xml = str_replace('{VCARD}', $vcard->getVCard(), $imsmanifest_xml); } else { $imsmanifest_xml = str_replace('{VCARD}', '', $imsmanifest_xml); } /* save the imsmanifest.xml file */ $zipfile->add_file($imsmanifest_xml, 'imsmanifest.xml'); /* Commented by Cindy Qi Li on Jan 12, 2010 // AContent does not have glossary and forums (discussion tools) if ($glossary_xml) { $zipfile->create_dir('resources/GlossaryItem/'); $zipfile->add_file($glossary_xml, 'resources/GlossaryItem/glossary.xml'); } */ $zipfile->close(); // this is optional, since send_file() closes it anyway $ims_course_title = str_replace(array(' ', ':'), '_', $ims_course_title); /** * A problem here with the preg_replace below. * Originally was designed to remove all werid symbols to avoid file corruptions. * In UTF-8, all non-english chars are considered to be 'werid symbols' * We can still replace it as is, or add fileid to the filename to avoid these problems * Well then again people won't be able to tell what this file is about * If we are going to take out the preg_replace, some OS might not be able to understand * these characters and will have problems importing. */ $ims_course_title = preg_replace("{[^a-zA-Z0-9._-]}", "", trim($ims_course_title)); $zipfile->send_file($ims_course_title . '_imscc'); exit;
function export_theme($theme_dir) { require AT_INCLUDE_PATH . 'classes/zipfile.class.php'; /* for zipfile */ require AT_INCLUDE_PATH . 'classes/XML/XML_HTMLSax/XML_HTMLSax.php'; /* for XML_HTMLSax */ require 'theme_template.inc.php'; /* for theme XML templates */ global $db; //identify current theme and then searches db for relavent info $sql = "SELECT * FROM " . TABLE_PREFIX . "themes WHERE dir_name = '{$theme_dir}'"; $result = mysql_query($sql, $db); $row = mysql_fetch_assoc($result); $dir = $row['dir_name'] . '/'; $title = $row['title']; $version = $row['version']; $type = $row['type']; $last_updated = $row['last_updated']; $extra_info = $row['extra_info']; //generate 'theme_info.xml' file based on info $info_xml = str_replace(array('{TITLE}', '{VERSION}', '{TYPE}', '{LAST_UPDATED}', '{EXTRA_INFO}'), array($title, $version, $type, $last_updated, $extra_info), $theme_template_xml); //zip together all the contents of the folder along with the XML file $zipfile = new zipfile(); $zipfile->create_dir($dir); //update installation folder $dir1 = get_main_theme_dir(intval($row["customized"])) . $dir; $zipfile->add_file($info_xml, $dir . 'theme_info.xml'); /* zip other required files */ $zipfile->add_dir($dir1, $dir); /*close & send*/ $zipfile->close(); //Name the Zip file and sends to user for download $zipfile->send_file(str_replace(array(' ', ':'), '_', $title)); }
function get_projects_archive($projects, $shedule) { require_once "zip.lib.php"; $zipfile = new zipfile(); foreach ($projects as $fname => $project) { $fname = 'Projects/' . $fname; $zipfile->addFile($project, $fname); } $zipfile->addFile($shedule, 'shedule.xml'); header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename=projects-' . date("d-m-Y-H-i-s") . '.zip'); echo $zipfile->file(); $zipfile->close(); }
/** * Export test * @param int test id * @param string the test title * @param ref [OPTIONAL] zip object reference * @param array [OPTIONAL] list of already added files. */ function test_qti_export($tid, $test_title = '', $zipfile = null) { require_once AT_INCLUDE_PATH . 'classes/zipfile.class.php'; // for zipfile require_once AT_INCLUDE_PATH . 'classes/XML/XML_HTMLSax/XML_HTMLSax.php'; // for XML_HTMLSax require_once AT_INCLUDE_PATH . 'lib/html_resource_parser.inc.php'; // for get_html_resources() global $savant, $db, $system_courses, $languageManager, $test_zipped_files, $test_files, $use_cc; global $course_id; $course_id = $_SESSION['course_id']; $course_title = $_SESSION['course_title']; $course_language = $system_courses[$_SESSION['course_id']]['primary_language']; if ($course_language == '') { // when oauth export into Transformable $sql = "SELECT course_id, title, primary_language FROM " . TABLE_PREFIX . "courses\n WHERE course_id = (SELECT course_id FROM " . TABLE_PREFIX . "tests\n WHERE test_id=" . $tid . ")"; $result = mysql_query($sql, $db); $course_row = mysql_fetch_assoc($result); $course_language = $course_row['primary_language']; $course_id = $course_row['course_id']; $course_title = $course_row['title']; } $courseLanguage =& $languageManager->getLanguage($course_language); $course_language_charset = $courseLanguage->getCharacterSet(); $imported_files; $zipflag = false; if ($zipfile == null) { $zipflag = true; } if ($test_zipped_files == null) { $test_zipped_files = array(); } if ($zipflag) { $zipfile = new zipfile(); $zipfile->create_dir('resources/'); // for all the dependency files } $resources = array(); $dependencies = array(); // don't want to sort it, i want the same order out. // asort($question_ids); //TODO: Merge the following 2 sqls together. //Randomized or not, export all the questions that are associated with it. $sql = "SELECT TQ.question_id, TQA.weight FROM " . TABLE_PREFIX . "tests_questions TQ INNER JOIN " . TABLE_PREFIX . "tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id={$course_id} AND TQA.test_id={$tid} ORDER BY TQA.ordering, TQA.question_id"; $result = mysql_query($sql, $db); $question_ids = array(); while (($question_row = mysql_fetch_assoc($result)) != false) { $question_ids[] = $question_row['question_id']; } //No questions in the test if (sizeof($question_ids) == 0) { return; } $question_ids_delim = implode(',', $question_ids); //$sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE course_id=$_SESSION[course_id] AND question_id IN($question_ids_delim)"; $sql = "SELECT TQ.*, TQA.weight, TQA.test_id FROM " . TABLE_PREFIX . "tests_questions TQ INNER JOIN " . TABLE_PREFIX . "tests_questions_assoc TQA USING (question_id) WHERE TQA.test_id={$tid} AND TQ.question_id IN({$question_ids_delim}) ORDER BY TQA.ordering, TQA.question_id"; $result = mysql_query($sql, $db); while ($row = mysql_fetch_assoc($result)) { $obj = TestQuestions::getQuestion($row['type']); $local_xml = ''; $local_xml = $obj->exportQTI($row, $course_language_charset, '1.2.1'); $local_dependencies = array(); $text_blob = implode(' ', $row); $local_dependencies = get_html_resources($text_blob, $course_id); $dependencies = array_merge($dependencies, $local_dependencies); $xml = $xml . "\n\n" . $local_xml; } //files that are found inside the test; used by print_organization(), to add all test files into QTI/ folder. $test_files = $dependencies; $resources[] = array('href' => 'tests_' . $tid . '.xml', 'dependencies' => array_keys($dependencies)); $xml = trim($xml); //get test title $sql = "SELECT title, num_takes FROM " . TABLE_PREFIX . "tests WHERE test_id = {$tid}"; $result = mysql_query($sql, $db); $row = mysql_fetch_array($result); //TODO: wrap around xml now $savant->assign('xml_content', $xml); $savant->assign('title', htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8')); $savant->assign('num_takes', $row['num_takes']); $savant->assign('use_cc', $use_cc); $xml = $savant->fetch('test_questions/wrapper.tmpl.php'); $xml_filename = 'tests_' . $tid . '.xml'; if (!$use_cc) { $zipfile->add_file($xml, $xml_filename); } else { $zipfile->add_file($xml, 'QTI/' . $xml_filename); } // add any dependency files: if (!$use_cc) { foreach ($dependencies as $resource => $resource_server_path) { //add this file in if it's not already in the zip package if (!in_array($resource_server_path, $test_zipped_files)) { $zipfile->add_file(@file_get_contents($resource_server_path), 'resources/' . $resource, filemtime($resource_server_path)); $test_zipped_files[] = $resource_server_path; } } } if ($zipflag) { // construct the manifest xml $savant->assign('resources', $resources); $savant->assign('dependencies', array_keys($dependencies)); $savant->assign('encoding', $course_language_charset); $savant->assign('title', $test_title); $savant->assign('xml_filename', $xml_filename); $manifest_xml = $savant->fetch('test_questions/manifest_qti_1p2.tmpl.php'); $zipfile->add_file($manifest_xml, 'imsmanifest.xml'); $zipfile->close(); $filename = str_replace(array(' ', ':'), '_', $course_title . '-' . $test_title . '-' . date('Ymd')); $zipfile->send_file($filename); exit; } $return_array[$xml_filename] = array_keys($dependencies); return $return_array; //done }