⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tablebackup.class.php

📁 ATutor是一个学习管理系统(LCMS/LMS), 为教师和学生建立一个网络教学平台。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
	}
}
//---------------------------------------------------------------------
/**
* 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 + -