Now STAMP fiel is supported in backup & restore.

If it exists in backup-file used, else, old search-by-name is used.
When inserting new categories, stamp is filled it it doesn't exist.
Updated version to 1.1 Beta +++ !!
This commit is contained in:
stronk7 2003-08-27 17:09:01 +00:00
parent 1c4968eb7f
commit 202ba3902e
3 changed files with 144 additions and 56 deletions

View File

@ -5,6 +5,6 @@
// database (backup_version) to determine whether upgrades should // database (backup_version) to determine whether upgrades should
// be performed (see db/backup_*.php) // be performed (see db/backup_*.php)
$backup_version = 2003082700; // The current version is a date (YYYYMMDDXX) $backup_version = 2003082701; // The current version is a date (YYYYMMDDXX)
$backup_release = "1.1 Beta++"; // User-friendly version number $backup_release = "1.1 Beta +++"; // User-friendly version number

View File

@ -107,6 +107,7 @@
fwrite($bf,full_tag("NAME",4,false,$category->name)); fwrite($bf,full_tag("NAME",4,false,$category->name));
fwrite($bf,full_tag("INFO",4,false,$category->info)); fwrite($bf,full_tag("INFO",4,false,$category->info));
fwrite($bf,full_tag("PUBLISH",4,false,$category->publish)); fwrite($bf,full_tag("PUBLISH",4,false,$category->publish));
fwrite($bf,full_tag("STAMP",4,false,$category->stamp));
//Now, backup their questions //Now, backup their questions
$status = quiz_backup_question($bf,$preferences,$category->id); $status = quiz_backup_question($bf,$preferences,$category->id);
//End category //End category

View File

@ -102,6 +102,7 @@
$quiz_cat->name = backup_todb($info['QUESTION_CATEGORY']['#']['NAME']['0']['#']); $quiz_cat->name = backup_todb($info['QUESTION_CATEGORY']['#']['NAME']['0']['#']);
$quiz_cat->info = backup_todb($info['QUESTION_CATEGORY']['#']['INFO']['0']['#']); $quiz_cat->info = backup_todb($info['QUESTION_CATEGORY']['#']['INFO']['0']['#']);
$quiz_cat->publish = backup_todb($info['QUESTION_CATEGORY']['#']['PUBLISH']['0']['#']); $quiz_cat->publish = backup_todb($info['QUESTION_CATEGORY']['#']['PUBLISH']['0']['#']);
$quiz_cat->stamp = backup_todb($info['QUESTION_CATEGORY']['#']['STAMP']['0']['#']);
//Now, we are going to do some calculations to decide when to create the category or no. //Now, we are going to do some calculations to decide when to create the category or no.
//Based in the next logic: //Based in the next logic:
@ -117,70 +118,156 @@
//Eloy's NOTE: I could be done code below more compact, but I've preffered do this to allow //Eloy's NOTE: I could be done code below more compact, but I've preffered do this to allow
//easy future modifications. //easy future modifications.
//Check for categories and their properties, storing in temporary variables //If backup contains category_stamps then everythig is done by stamp (current approach from 1.1 final)
//Count categories with the same name //else, everything is done by name (old approach). This mantains backward compatibility.
$count_cat = count_records("quiz_categories","name",$quiz_cat->name); if ($quiz_cat->stamp) {
//Count categories with the same name in the same course $restored_by = "(STAMP)"; //Debug
$count_cat_same_course = count_records("quiz_categories","course",$restore->course_id,"name",$quiz_cat->name); //STAMP exists, do things using it (1.1)
//Count categories with the same name in other course
$count_cat_other_course = $count_cat - $count_cat_same_course;
//Get categories with the same name in the same course //Check for categories and their properties, storing in temporary variables
//The last record will be the oldest category //Count categories with the same stamp
if ($count_cat_same_course > 0) {
$cats_same_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c $count_cat = count_records("quiz_categories","stamp",$quiz_cat->stamp);
WHERE c.course = '$restore->course_id' AND //Count categories with the same stamp in the same course
c.name = '$quiz_cat->name' $count_cat_same_course = count_records("quiz_categories","course",$restore->course_id,"stamp",$quiz_cat->stamp);
ORDER BY c.id DESC"); //Count categories with the same stamp in other course
} else { $count_cat_other_course = $count_cat - $count_cat_same_course;
$cats_same_course = false;
} //Get categories with the same stamp in the same course
//Get categories with the same name in other course
//The last record will be the oldest category with publish=1
if ($count_cat_other_course > 0) {
$cats_other_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c
WHERE c.course != '$restore->course_id' AND
c.name = '$quiz_cat->name'
ORDER BY c.publish ASC, c.id DESC");
} else {
$cats_other_course = false;
}
if ($count_cat == 0) {
//The category doesn't exist, create it.
//The structure is equal to the db, so insert the quiz_categories
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category exist, check if it belongs to the same course
if ($count_cat_same_course > 0) { if ($count_cat_same_course > 0) {
//The category belongs to the same course, get the last record (oldest) //Eloy's NOTE: Due to this select *must* be retrive only one record, we could have used get_record(), but
foreach ($cats_same_course as $cat) { // mantain this to be as simmilar as possible with old code (comparing by name) to be
$newid = $cat->id; // able to modify both in the same manner.
} $cats_same_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c
} else if ($count_cat_other_course > 0) { WHERE c.course = '$restore->course_id' AND
//The category belongs to other course, get the last record (oldest) c.stamp = '$quiz_cat->stamp'
foreach ($cats_other_course as $cat) { ORDER BY c.id DESC");
$other_course_cat = $cat;
}
//Now check th publish field
if ($other_course_cat->publish == 0) {
//The category has its publish to No (0). Create a new local one.
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category has its publish to Yes(1). Use it.
$newid = $other_course_cat->id;
}
} else { } else {
//We must never arrive here !! $cats_same_course = false;
$status = false; }
//Get category with the same stamp in other course
//The last record will be the oldest category with publish=1
if ($count_cat_other_course > 0) {
$cats_other_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c
WHERE c.course != '$restore->course_id' AND
c.stamp = '$quiz_cat->stamp'
ORDER BY c.publish ASC, c.id DESC");
} else {
$cats_other_course = false;
}
if ($count_cat == 0) {
//The category doesn't exist, create it.
//The structure is equal to the db, so insert the quiz_categories
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category exist, check if it belongs to the same course
if ($count_cat_same_course > 0) {
//The category belongs to the same course, get the last record (oldest)
foreach ($cats_same_course as $cat) {
$newid = $cat->id;
}
} else if ($count_cat_other_course > 0) {
//The category belongs to other course, get the last record (oldest)
foreach ($cats_other_course as $cat) {
$other_course_cat = $cat;
}
//Now check the publish field
if ($other_course_cat->publish == 0) {
//The category has its publish to No (0). Create a new local one.
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category has its publish to Yes(1). Use it.
$newid = $other_course_cat->id;
}
} else {
//We must never arrive here !!
$status = false;
}
}
} else {
$restored_by = "(NAME)"; //Debug
//STAMP doesn't exists, do things by name (pre 1.1)
//and calculate and insert STAMP too !!
//Check for categories and their properties, storing in temporary variables
//Count categories with the same name
$count_cat = count_records("quiz_categories","name",$quiz_cat->name);
//Count categories with the same name in the same course
$count_cat_same_course = count_records("quiz_categories","course",$restore->course_id,"name",$quiz_cat->name);
//Count categories with the same name in other course
$count_cat_other_course = $count_cat - $count_cat_same_course;
//Get categories with the same name in the same course
//The last record will be the oldest category
if ($count_cat_same_course > 0) {
$cats_same_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c
WHERE c.course = '$restore->course_id' AND
c.name = '$quiz_cat->name'
ORDER BY c.id DESC");
} else {
$cats_same_course = false;
}
//Get categories with the same name in other course
//The last record will be the oldest category with publish=1
if ($count_cat_other_course > 0) {
$cats_other_course = get_records_sql("SELECT c.* FROM {$CFG->prefix}quiz_categories c
WHERE c.course != '$restore->course_id' AND
c.name = '$quiz_cat->name'
ORDER BY c.publish ASC, c.id DESC");
} else {
$cats_other_course = false;
}
if ($count_cat == 0) {
//The category doesn't exist, create it.
//First, calculate the STAMP field
$quiz_cat->stamp = make_unique_id_code();
//The structure is equal to the db, so insert the quiz_categories
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category exist, check if it belongs to the same course
if ($count_cat_same_course > 0) {
//The category belongs to the same course, get the last record (oldest)
foreach ($cats_same_course as $cat) {
$newid = $cat->id;
}
} else if ($count_cat_other_course > 0) {
//The category belongs to other course, get the last record (oldest)
foreach ($cats_other_course as $cat) {
$other_course_cat = $cat;
}
//Now check the publish field
if ($other_course_cat->publish == 0) {
//The category has its publish to No (0). Create a new local one.
//First, calculate the STAMP field
$quiz_cat->stamp = make_unique_id_code();
//The structure is equal to the db, so insert the quiz_categories
$newid = insert_record ("quiz_categories",$quiz_cat);
} else {
//The category has its publish to Yes(1). Use it.
$newid = $other_course_cat->id;
}
} else {
//We must never arrive here !!
$status = false;
}
} }
} }
//Do some output //Do some output
echo "<ul><li>".get_string("category")." \"".$quiz_cat->name."\"<br>"; if ($status) {
echo "<ul><li>".get_string("category")." \"".$quiz_cat->name."\"".$restored_by."<br>";
} else {
//We must never arrive here !!
echo "<ul><li>".get_string("category")." \"".$quiz_cat->name."\" Error!<br>";
}
backup_flush(300); backup_flush(300);
//Here category has been created or selected, so save results in backup_ids and start with questions
if ($newid and $status) { if ($newid and $status) {
//We have the newid, update backup_ids //We have the newid, update backup_ids
backup_putid($restore->backup_unique_code,"quiz_categories", backup_putid($restore->backup_unique_code,"quiz_categories",