📄 tablebackup.class.php
字号:
}
}
//---------------------------------------------------------------------
/**
* ForumsCoursesTable
* Extends AbstractTable and provides table specific methods and members.
* @access public
* @author Heidi Hazelton
* @package Backup
*/
class ForumsCoursesTable extends AbstractTable {
/**
* The ATutor database table name (w/o prefix).
* Also the CSV file name (w/o extension).
*
* @access private
* @var const string
*/
var $tableName = 'forums';
/**
* The ATutor database table primary ID field.
*
* @access private
* @var const string
*/
var $primaryIDField = 'forum_id';
/**
* Whether or not lock this table.
* This is a special case, b/c we read from the `forums` table
* but insert into the `forums_courses` table. Hence, we lock a different
* table than we actually insert into (ie. why we don't need/want a lock).
*
* @access private
* @var const boolean
*/
var $skipLock = TRUE;
// -- private methods below:
function getOldID($row) {
return FALSE;
}
function convert($row) {
return $row;
}
function generateSQL($row) {
$this->count++;
if (version_compare($this->version, '1.4.3', '<')) {
$id = $this->count;
} else {
$id = $row[0];
}
$sql = 'INSERT INTO '.TABLE_PREFIX.'forums_courses VALUES ';
$sql .= '('.$this->old_ids_to_new_ids['forums'][$id] . ','; // forum_id
$sql .= $this->course_id .")"; // course_id
return $sql;
}
}
//---------------------------------------------------------------------
class GlossaryTable extends AbstractTable {
var $tableName = 'glossary';
var $primaryIDField = 'word_id';
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'glossary VALUES ';
$sql .= '('.$row['new_id'].','; // word_id
$sql .= $this->course_id . ','; // course_id
$sql .= "'".$row[1]."',"; // word
$sql .= "'".$row[2]."',"; // definition
if ($row[3] == 0) {
$sql .= 0;
} else {
$sql .= $this->getNewID($row[3]); // related word
}
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
class ResourceCategoriesTable extends AbstractTable {
var $tableName = 'resource_categories';
var $primaryIDField = 'CatID';
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
$sql = 'INSERT INTO '.TABLE_PREFIX.'resource_categories VALUES ';
$sql .= '('.$row['new_id'].',';
$sql .= $this->course_id .',';
// CatName
$sql .= "'".$row[1]."',";
// CatParent
if ($row[2] == 0) {
$sql .= 'NULL';
} else {
$sql .= $this->getNewID($row[2]); // category parent
}
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
class ResourceLinksTable extends AbstractTable {
var $tableName = 'resource_links';
var $primaryIDField = 'LinkID';
function getOldID($row) {
return FALSE;
}
// private
function convert($row) {
// handle the white space issue as well
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'resource_links VALUES ';
$sql .= '('.$row['new_id'].', ';
$sql .= $this->old_ids_to_new_ids['resource_categories'][$row[0]] . ',';
$sql .= "'".$row[1]."',"; // URL
$sql .= "'".$row[2]."',"; // LinkName
$sql .= "'".$row[3]."',"; // Description
$sql .= $row[4].','; // Approved
$sql .= "'".$row[5]."',"; // SubmitName
$sql .= "'".$row[6]."',"; // SubmitEmail
$sql .= "'".$row[7]."',"; // SubmitDate
$sql .= $row[8]. ')';
return $sql;
}
}
//---------------------------------------------------------------------
class NewsTable extends AbstractTable {
var $tableName = 'news';
var $primaryIDField = 'news_id';
function getOldID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'news VALUES ';
$sql .= '('.$row['new_id'].',';
$sql .= $this->course_id.',';
/**
* Admin user does not possess a member_id, assign ownership to instructor of restored course
*/
if (isset($_SESSION['member_id'])) {
$sql .= $_SESSION['member_id'] . ',';
} else { // admin context
$sql .= $this->resolveBkpOwner($this->course_id) . ',';
}
$sql .= "'".$row[0]."',"; // date
$sql .= "'".$row[1]."',"; // formatting
$sql .= "'".$row[2]."',"; // title
$sql .= "'".$row[3]."')"; // body
debug($sql);
return $sql;
}
}
//---------------------------------------------------------------------
// -- tests (`tests`, `tests_questions`, `tests_categories`, `tests_questions_assoc`)
class TestsTable extends AbstractTable {
var $tableName = 'tests';
var $primaryIDField = 'test_id';
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
// handle the white space issue as well
if (version_compare($this->version, '1.4', '<')) {
$row[8] = 0;
$row[9] = 0;
$row[10] = 0;
$row[11] = 0;
}
if (version_compare($this->version, '1.4.2', '<')) {
$row[12] = 0;
$row[13] = 0;
}
if (version_compare($this->version, '1.4.3', '<')) {
$row[9] = 0;
$row[14] = 0;
}
return $row;
}
// private
function generateSQL($row) {
$sql = '';
$sql = 'INSERT INTO '.TABLE_PREFIX.'tests VALUES ';
$sql .= '('.$row['new_id'].',';
$sql .= $this->course_id.',';
$sql .= "'".$row[1]."',"; // title
$sql .= "'".$row[2]."',"; // format
$sql .= "'".$row[3]."',"; // start_date
$sql .= "'".$row[4]."',"; // end_date
$sql .= "'".$row[5]."',"; // randomize_order
$sql .= "'".$row[6]."',"; // num_questions
$sql .= "'".$row[7]."',"; // instructions
$sql .= '0,'; // content_id
$sql .= $row[9] . ','; // release_result
$sql .= $row[10] . ','; // random
$sql .= $row[11] . ','; // difficulty
$sql .= $row[12] . ','; // num_takes
$sql .= $row[13] . ','; // anonymous
$sql .= "'".$row[14]."'"; // out_of
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
class TestsQuestionsTable extends AbstractTable {
var $tableName = 'tests_questions';
var $primaryIDField = 'question_id';
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
if (version_compare($this->version, '1.4.3', '<')) {
// basically, rework the fields then recreate the `tests_questions_assoc.csv` file.
// create the tests_questions_assoc file using $row[0] as the `test_id` and $row['new_id'] as the new question ID
static $count;
$test_id = $row[0];
$order = $row[1];
$weight = $row[3];
$required = $row[4];
$count++;
$row[0] = $count; // question id
$row[1] = 0; // category id
$row[2] = $row[2]; // type
for($i = 3; $i < 27; $i++) {
$row[$i] = $row[$i+2];
}
$assoc_data = "$test_id,$count,$weight,$order,$required\n";
$fp = fopen($this->import_dir . 'tests_questions_assoc.csv', 'ab');
fwrite($fp, $assoc_data);
fclose($fp);
}
return $row;
}
// private
function generateSQL($row) {
// insert row
if (!isset($this->old_ids_to_new_ids['tests_questions_categories'][$row[1]])) {
$this->old_ids_to_new_ids['tests_questions_categories'][$row[1]] = 0;
}
$sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions VALUES ';
$sql .= '('.$row['new_id'].',' . $this->old_ids_to_new_ids['tests_questions_categories'][$row[1]] . ',';
$sql .= $this->course_id;
for ($i=2; $i <= 26; $i++) {
$sql .= ",'".$row[$i]."'";
}
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
class TestsQuestionsAssocTable extends AbstractTable {
var $tableName = 'tests_questions_assoc';
var $primaryIDField = 'question_id';
function getOldID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions_assoc VALUES ';
$sql .= '(' . $this->old_ids_to_new_ids['tests'][$row[0]].',' . $this->old_ids_to_new_ids['tests_questions'][$row[1]];
$sql .= ",'$row[2]','$row[3]','$row[4]')";
return $sql;
}
}
//---------------------------------------------------------------------
class TestsQuestionsCategoriesTable extends AbstractTable {
var $tableName = 'tests_questions_categories';
var $primaryIDField = 'category_id';
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions_categories VALUES ';
$sql .= '('.$row['new_id'].',';
$sql .= $this->course_id;
$sql .= ',"'.$row[1].'"';
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
/*
class PollsTable extends AbstractTable {
var $tableName = 'polls';
var $primaryIDField = 'poll_id';
function getOldID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'polls VALUES ';
$sql .= '('.$row['new_id'].',';
$sql .= $this->course_id.',';
$sql .= "'$row[0]',"; // question
$sql .= "'$row[1]',"; // created date
$sql .= "0,"; // total
for ($i=2; $i<=8; $i++) {
$sql .= "'".$row[$i]."',0,";
}
$sql = substr($sql, 0, -1);
$sql .= ')';
return $sql;
}
}
*/
//---------------------------------------------------------------------
class ContentTable extends AbstractTable {
var $tableName = 'content';
var $primaryIDField = 'content_id';
var $ordering;
/**
* Constructor.
*
* @param string $version The backup version.
* @param resource $db The database handler.
* @param int $course_id The ID of this course.
* @param string $import_dir The directory where the backup was unzipped to.
* @param array $old_id_to_new_id Reference to either the parent ID's or to store current ID's.
*
*/
function ContentTable($version, $db, $course_id, $import_dir, &$old_id_to_new_id) {
// special case for `content` -- we need the max ordering
$sql = 'SELECT MAX(ordering) AS ordering FROM '.TABLE_PREFIX.'content WHERE content_parent_id=0 AND course_id='.$course_id;
$result = mysql_query($sql, $db);
$ordering = mysql_fetch_assoc($result);
$this->ordering = $ordering['ordering'] +1;
parent::AbstractTable($version, $db, $course_id, $import_dir, $old_id_to_new_id);
}
function getOldID($row) {
return $row[0];
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
$sql = 'INSERT INTO '.TABLE_PREFIX.'content VALUES ';
$sql .= '('.$row['new_id'].','; // content_id
$sql .= $this->course_id .','; // course_id
if ($row[1] == 0) { // content_parent_id
$sql .= 0;
} else {
$sql .= $this->getNewID($row[1]);
}
$sql .= ',';
if ($row[1] == 0) {
// find the new ordering:
$sql .= $this->ordering . ',';
$this->ordering ++;
} else {
$sql .= $row[2].',';
}
$sql .= "'".$row[3]."',"; // last_modified
$sql .= $row[4] . ','; // revision
$sql .= $row[5] . ','; // formatting
$sql .= "'".$row[6]."',"; // release_date
$sql .= "'".$row[7]."',"; // keywords
$sql .= "'".$row[8]."',"; // content_path
$sql .= "'".$row[9]."',"; // title
$sql .= "'".$row[10]."',0)"; // text
return $sql;
}
}
//---------------------------------------------------------------------
class RelatedContentTable extends AbstractTable {
var $tableName = 'related_content';
var $primaryIDField = 'content_id';
function getOldID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
$sql = 'INSERT INTO '.TABLE_PREFIX.'related_content VALUES ';
$sql .= '('.$this->old_ids_to_new_ids['content'][$row['0']].','. $this->old_ids_to_new_ids['content'][$row[1]].')';
return $sql;
}
}
//---------------------------------------------------------------------
class CourseStatsTable extends AbstractTable {
var $tableName = 'course_stats';
var $primaryIDField = 'login_date'; // never actually used
function getOldID($row) {
return FALSE;
}
function getParentID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'course_stats VALUES ';
$sql .= '('.$this->course_id.",";
$sql .= "'".$row[0]."',"; // login_date
$sql .= "'".$row[1]."',"; // guests
$sql .= "'".$row[2]."'"; // members
$sql .= ')';
return $sql;
}
}
//---------------------------------------------------------------------
class GroupsTable extends AbstractTable {
var $tableName = 'groups';
var $primaryIDField = 'group_id';
function getOldID($row) {
return FALSE;
}
function getParentID($row) {
return FALSE;
}
// private
function convert($row) {
return $row;
}
// private
function generateSQL($row) {
// insert row
$sql = 'INSERT INTO '.TABLE_PREFIX.'groups VALUES ';
$sql .= '('.$row['new_id'] . ',' . $this->course_id.",";
$sql .= "'".$row[0]."'"; // title
$sql .= ')';
return $sql;
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -