/**
 * Do the main task of archiving a course.
 * 
 * @param int $course_id
 * @param string $course_code
 * @return boolean $success
 */
function doArchive($course_id, $course_code)
{
    global $webDir, $urlServer, $urlAppend, $siteName;
    if (extension_loaded('zlib')) {
        include 'include/pclzip/pclzip.lib.php';
    }
    $basedir = "{$webDir}/courses/archive/{$course_code}";
    mkpath($basedir);
    // Remove previous back-ups older than 10 minutes
    cleanup("{$webDir}/courses/archive", 600);
    $backup_date = date('Ymd-His');
    $backup_date_short = date('Ymd');
    $archivedir = $basedir . '/' . $backup_date;
    mkpath($archivedir);
    $zipfile = $basedir . "/{$course_code}-{$backup_date_short}.zip";
    // backup subsystems from main db
    $sql_course = "course_id = {$course_id}";
    $archive_conditions = array('course' => "id = {$course_id}", 'user' => "id IN (SELECT user_id FROM course_user\n                                          WHERE course_id = {$course_id})", 'course_user' => "course_id = {$course_id}", 'course_settings' => "course_id = {$course_id}", 'course_department' => "course = {$course_id}", 'course_module' => $sql_course, 'hierarchy' => "id IN (SELECT department FROM course_department\n                                          WHERE course = {$course_id})", 'announcement' => $sql_course, 'group_properties' => $sql_course, 'group' => $sql_course, 'group_members' => "group_id IN (SELECT id FROM `group`\n                                                    WHERE course_id = {$course_id})", 'document' => $sql_course, 'link_category' => $sql_course, 'link' => $sql_course, 'ebook' => $sql_course, 'ebook_section' => "ebook_id IN (SELECT id FROM ebook\n                                                    WHERE course_id = {$course_id})", 'ebook_subsection' => "section_id IN (SELECT ebook_section.id\n                                                         FROM ebook, ebook_section\n                                                         WHERE ebook.id = ebook_id AND\n                                                               course_id = {$course_id})", 'course_units' => $sql_course, 'unit_resources' => "unit_id IN (SELECT id FROM course_units\n                                                    WHERE course_id = {$course_id})", 'forum' => $sql_course, 'forum_category' => $sql_course, 'forum_topic' => "forum_id IN (SELECT id FROM forum\n                                                  WHERE course_id = {$course_id})", 'forum_post' => "topic_id IN (SELECT forum_topic.id\n                                                 FROM forum, forum_topic\n                                                 WHERE forum.id = forum_id AND\n                                                       course_id = {$course_id})", 'forum_notify' => $sql_course, 'forum_user_stats' => $sql_course, 'course_description' => $sql_course, 'glossary' => $sql_course, 'glossary_category' => $sql_course, 'video_category' => $sql_course, 'video' => $sql_course, 'videolink' => $sql_course, 'dropbox_msg' => $sql_course, 'dropbox_attachment' => "msg_id IN (SELECT id from dropbox_msg WHERE course_id = {$course_id})", 'dropbox_index' => "msg_id IN (SELECT id from dropbox_msg WHERE course_id = {$course_id})", 'lp_learnPath' => $sql_course, 'lp_module' => $sql_course, 'lp_asset' => "module_id IN (SELECT module_id FROM lp_module WHERE course_id = {$course_id})", 'lp_rel_learnPath_module' => "learnPath_id IN (SELECT learnPath_id FROM lp_learnPath WHERE course_id = {$course_id})", 'lp_user_module_progress' => "learnPath_id IN (SELECT learnPath_id FROM lp_learnPath WHERE course_id = {$course_id})", 'wiki_properties' => $sql_course, 'wiki_acls' => "wiki_id IN (SELECT id FROM wiki_properties WHERE course_id = {$course_id})", 'wiki_pages' => "wiki_id IN (SELECT id FROM wiki_properties WHERE course_id = {$course_id})", 'wiki_pages_content' => "pid IN (SELECT id FROM wiki_pages\n                                                    WHERE wiki_id IN (SELECT id FROM wiki_properties\n                                                                             WHERE course_id = {$course_id}))", 'poll' => $sql_course, 'poll_question' => "pid IN (SELECT pid FROM poll WHERE course_id = {$course_id})", 'poll_answer_record' => "pid IN (SELECT pid FROM poll WHERE course_id = {$course_id})", 'poll_question_answer' => "pqid IN (SELECT pqid FROM poll_question\n                                                       WHERE pid IN (SELECT pid FROM poll\n                                                                            WHERE course_id = {$course_id}))", 'assignment' => $sql_course, 'assignment_submit' => "assignment_id IN (SELECT id FROM assignment\n                                                             WHERE course_id = {$course_id})", 'gradebook' => $sql_course, 'gradebook_activities' => "gradebook_id IN (SELECT id FROM gradebook\n                                                             WHERE course_id = {$course_id})", 'gradebook_book' => "gradebook_activity_id IN (SELECT gradebook_activities.id FROM gradebook_activities, gradebook\n                                                             WHERE gradebook.course_id = {$course_id} AND gradebook_activities.gradebook_id = gradebook.id)", 'gradebook_users' => "gradebook_id IN (SELECT id FROM gradebook WHERE course_id = {$course_id})", 'attendance' => $sql_course, 'attendance_activities' => "attendance_id IN (SELECT id FROM attendance\n                                                             WHERE course_id = {$course_id})", 'attendance_book' => "attendance_activity_id IN (SELECT attendance_activities.id FROM attendance_activities, attendance\n                                                             WHERE attendance.course_id = {$course_id} AND attendance_activities.attendance_id = attendance.id)", 'attendance_users' => "attendance_id IN (SELECT id FROM attendance WHERE course_id = {$course_id})", 'agenda' => $sql_course, 'exercise' => $sql_course, 'exercise_question' => $sql_course, 'exercise_answer' => "question_id IN (SELECT id FROM exercise_question\n                                                         WHERE course_id = {$course_id})", 'exercise_user_record' => "eid IN (SELECT id FROM exercise WHERE course_id = {$course_id})", 'exercise_with_questions' => "question_id IN (SELECT id FROM exercise_question\n                                                                 WHERE course_id = {$course_id}) OR\n                                          exercise_id IN (SELECT id FROM exercise\n                                                                 WHERE course_id = {$course_id})", 'bbb_session' => "course_id IN (SELECT id FROM bbb_session WHERE course_id = {$course_id})", 'blog_post' => "id IN (SELECT id FROM blog_post WHERE course_id = {$course_id})", 'comments' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = {$course_id})) OR (rtype = 'course' AND rid = {$course_id})", 'rating' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = {$course_id})) OR (rtype = 'course' AND rid = {$course_id})", 'rating_cache' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = {$course_id})) OR (rtype = 'course' AND rid = {$course_id})", 'note' => "(reference_obj_course IS NOT NULL AND reference_obj_course = {$course_id})");
    foreach ($archive_conditions as $table => $condition) {
        backup_table($archivedir, $table, $condition);
    }
    file_put_contents("{$archivedir}/config_vars", serialize(array('urlServer' => $urlServer, 'urlAppend' => $urlAppend, 'siteName' => $siteName, 'version' => get_config('version'))));
    // $htmldir is not needed anywhere
    //$htmldir = $archivedir . '/html';
    // create zip file
    $zipCourse = new PclZip($zipfile);
    $result1 = $zipCourse->create($archivedir, PCLZIP_OPT_REMOVE_PATH, "{$webDir}/courses/archive");
    $result2 = $zipCourse->add("{$webDir}/courses/{$course_code}", PCLZIP_OPT_REMOVE_PATH, "{$webDir}/courses/{$course_code}", PCLZIP_OPT_ADD_PATH, "{$course_code}/{$backup_date}/html");
    $result3 = $zipCourse->add("{$webDir}/video/{$course_code}", PCLZIP_OPT_REMOVE_PATH, "{$webDir}/video/{$course_code}", PCLZIP_OPT_ADD_PATH, "{$course_code}/{$backup_date}/video_files");
    $success = true;
    if ($result1 === 0 || $result2 === 0 || $result3 === 0) {
        $success = false;
    }
    removeDir($archivedir);
    return $success;
}
Example #2
0
function export_wassup() {
global $wpdb, $table_name;
$table_name = $wpdb->prefix . "wassup";
$filename = 'wassup.' . gmdate('Y-m-d') . '.sql';

//# check for records before exporting...
$numrecords = $wpdb->get_var("SELECT COUNT(wassup_id) FROM $table_name");
if ( $numrecords > 0 ) {
	//TODO: use compressed file transfer when zlib available...
	do_action('export_wassup');
	header('Content-Description: File Transfer');
	header("Content-Disposition: attachment; filename=$filename");
	header('Content-Type: text/plain charset=' . get_option('blog_charset'), true);

	// Function is below
	backup_table($table_name);

	die(); 	//sends output and flushes buffer
} //end if numrecords > 0
} //end function export_wassup()
Example #3
0
/**
 * Archive serialized course tables
 * 
 * @param int $course_id
 * @param string $course_code
 * @param string $archivedir  Target directory
 */
function archiveTables($course_id, $course_code, $archivedir) {
    // backup subsystems from main db
    $sql_course = "course_id = $course_id";
    $archive_conditions = array(
        'course' => "id = $course_id",
        'user' => "id IN (SELECT user_id FROM course_user
                                          WHERE course_id = $course_id)",
        'course_user' => "course_id = $course_id",
        'course_settings' => "course_id = $course_id",
        'course_department' => "course = $course_id",
        'course_module' => $sql_course,
        'hierarchy' => "id IN (SELECT department FROM course_department
                                          WHERE course = $course_id)",
        'announcement' => $sql_course,
        'group_properties' => $sql_course,
        'group' => $sql_course,
        'group_members' => "group_id IN (SELECT id FROM `group`
                                                    WHERE course_id = $course_id)",
        'document' => $sql_course,
        'link_category' => $sql_course,
        'link' => $sql_course,
        'ebook' => $sql_course,
        'ebook_section' => "ebook_id IN (SELECT id FROM ebook
                                                    WHERE course_id = $course_id)",
        'ebook_subsection' => "section_id IN (SELECT ebook_section.id
                                                         FROM ebook, ebook_section
                                                         WHERE ebook.id = ebook_id AND
                                                               course_id = $course_id)",
        'course_units' => $sql_course,
        'unit_resources' => "unit_id IN (SELECT id FROM course_units
                                                    WHERE course_id = $course_id)",
        'course_weekly_view' => $sql_course,
        'course_weekly_view_activities' => "course_weekly_view_id IN (SELECT id FROM course_weekly_view 
                                                                                WHERE course_id = $course_id)",
        'forum' => $sql_course,
        'forum_category' => $sql_course,
        'forum_topic' => "forum_id IN (SELECT id FROM forum
                                                  WHERE course_id = $course_id)",
        'forum_post' => "topic_id IN (SELECT forum_topic.id
                                                 FROM forum, forum_topic
                                                 WHERE forum.id = forum_id AND
                                                       course_id = $course_id)",
        'forum_notify' => $sql_course,
        'forum_user_stats' => $sql_course,
        'course_description' => $sql_course,
        'glossary' => $sql_course,
        'glossary_category' => $sql_course,
        'video_category' => $sql_course,
        'video' => $sql_course,
        'videolink' => $sql_course,
        'dropbox_msg' => $sql_course,
        'dropbox_attachment' => "msg_id IN (SELECT id from dropbox_msg WHERE course_id = $course_id)",
        'dropbox_index' => "msg_id IN (SELECT id from dropbox_msg WHERE course_id = $course_id)",
        'lp_learnPath' => $sql_course,
        'lp_module' => $sql_course,
        'lp_asset' => "module_id IN (SELECT module_id FROM lp_module WHERE course_id = $course_id)",
        'lp_rel_learnPath_module' => "learnPath_id IN (SELECT learnPath_id FROM lp_learnPath WHERE course_id = $course_id)",
        'lp_user_module_progress' => "learnPath_id IN (SELECT learnPath_id FROM lp_learnPath WHERE course_id = $course_id)",
        'wiki_properties' => $sql_course,
        'wiki_acls' => "wiki_id IN (SELECT id FROM wiki_properties WHERE course_id = $course_id)",
        'wiki_pages' => "wiki_id IN (SELECT id FROM wiki_properties WHERE course_id = $course_id)",
        'wiki_pages_content' => "pid IN (SELECT id FROM wiki_pages
                                                    WHERE wiki_id IN (SELECT id FROM wiki_properties
                                                                             WHERE course_id = $course_id))",
        'poll' => $sql_course,
        'poll_question' => "pid IN (SELECT pid FROM poll WHERE course_id = $course_id)",
        'poll_answer_record' => "pid IN (SELECT pid FROM poll WHERE course_id = $course_id)",
        'poll_question_answer' => "pqid IN (SELECT pqid FROM poll_question
                                                       WHERE pid IN (SELECT pid FROM poll
                                                                            WHERE course_id = $course_id))",
        'assignment' => $sql_course,
        'assignment_submit' => "assignment_id IN (SELECT id FROM assignment
                                                             WHERE course_id = $course_id)",
        'gradebook' => $sql_course,
        'gradebook_activities' => "gradebook_id IN (SELECT id FROM gradebook
                                                             WHERE course_id = $course_id)",
        'gradebook_book' => "gradebook_activity_id IN (SELECT gradebook_activities.id FROM gradebook_activities, gradebook
                                                             WHERE gradebook.course_id = $course_id AND gradebook_activities.gradebook_id = gradebook.id)",
        'gradebook_users' => "gradebook_id IN (SELECT id FROM gradebook WHERE course_id = $course_id)",
        'attendance' => $sql_course,
        'attendance_activities' => "attendance_id IN (SELECT id FROM attendance
                                                             WHERE course_id = $course_id)",
        'attendance_book' => "attendance_activity_id IN (SELECT attendance_activities.id FROM attendance_activities, attendance
                                                             WHERE attendance.course_id = $course_id AND attendance_activities.attendance_id = attendance.id)",
        'attendance_users' => "attendance_id IN (SELECT id FROM attendance WHERE course_id = $course_id)",
        'agenda' => $sql_course,
        'exercise' => $sql_course,
        'exercise_question' => $sql_course,
        'exercise_answer' => "question_id IN (SELECT id FROM exercise_question
                                                         WHERE course_id = $course_id)",
        'exercise_user_record' => "eid IN (SELECT id FROM exercise WHERE course_id = $course_id)",
        'exercise_with_questions' => "question_id IN (SELECT id FROM exercise_question
                                                                 WHERE course_id = $course_id) OR
                                          exercise_id IN (SELECT id FROM exercise
                                                                 WHERE course_id = $course_id)",
        'exercise_question_cats' => $sql_course,
        'exercise_answer_record' => "question_id IN (SELECT id FROM exercise_question
                                                                WHERE course_id = $course_id)",
        'bbb_session' => "course_id IN (SELECT id FROM bbb_session WHERE course_id = $course_id)",
        'blog_post' => $sql_course,
        'comments' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = $course_id)) OR (rtype = 'course' AND rid = $course_id)",
        'rating' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = $course_id)) OR (rtype = 'course' AND rid = $course_id) OR 
                     (rtype = 'forum_post' AND rid IN (SELECT forum_post.id FROM forum_post INNER JOIN forum_topic on forum_post.topic_id = forum_topic.id INNER JOIN forum on forum_topic.forum_id = forum.id
                     WHERE forum.course_id = $course_id)) OR (rtype = 'link' AND rid IN (SELECT id FROM link WHERE course_id = $course_id))",
        'rating_cache' => "(rtype = 'blogpost' AND rid IN (SELECT id FROM blog_post WHERE course_id = $course_id)) OR (rtype = 'course' AND rid = $course_id) OR 
                     (rtype = 'forum_post' AND rid IN (SELECT forum_post.id FROM forum_post INNER JOIN forum_topic on forum_post.topic_id = forum_topic.id INNER JOIN forum on forum_topic.forum_id = forum.id
                     WHERE forum.course_id = $course_id)) OR (rtype = 'link' AND rid IN (SELECT id FROM link WHERE course_id = $course_id))",
        'abuse_report' => $sql_course,                     
        'note' => "(reference_obj_course IS NOT NULL AND reference_obj_course = $course_id)");

    foreach ($archive_conditions as $table => $condition) {
        backup_table($archivedir, $table, $condition);
    }

    file_put_contents("$archivedir/config_vars",
        serialize(array(
            'urlServer' => $GLOBALS['urlServer'],
            'urlAppend' => $GLOBALS['urlAppend'],
            'siteName' => $GLOBALS['siteName'],
            'version' => get_config('version'))));
}