Permalink
Browse files

restore is NOT WORKING!!! role assignment and capability overrides ar…

…e not in
  • Loading branch information...
1 parent 0a7e84c commit 3f1c7233c78f6b30bb605801babc190e02e293fd toyomoyo committed Sep 25, 2006
Showing with 149 additions and 7 deletions.
  1. +1 −1 backup/restore.php
  2. +1 −0 backup/restore_execute.html
  3. +1 −1 backup/restore_form.html
  4. +146 −5 backup/restorelib.php
View
2 backup/restore.php
@@ -150,7 +150,7 @@
include_once("restore_check.html");
//To avoid multiple restore executions...
$SESSION->cancontinue = true;
- } else if ($launch == "execute") {
+ } else if ($launch == "execute") {
//Prevent multiple restore executions...
if (empty($SESSION->cancontinue)) {
error("Multiple restore execution not allowed!");
View
1 backup/restore_execute.html
@@ -42,6 +42,7 @@
error("Site not found!");
}
$errorstr = '';
+
$status = restore_execute($restore,$info,$course_header,$errorstr);
if (!$status) {
View
2 backup/restore_form.html
@@ -39,7 +39,7 @@
//Checks for the required files/functions to restore every mod
$count = 0;
- if ($allmods = get_records("modules") ) {
+ if ($allmods = get_records("modules") ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/restorelib.php";
View
151 backup/restorelib.php
@@ -307,6 +307,13 @@ function restore_read_xml_logs ($restore,$xml_file) {
return $info;
}
+ function restore_read_xml_roles ($restore,$xml_file) {
+ //We call the main read_xml function, with todo = ROLES
+ $info = restore_read_xml ($xml_file,"ROLES",$restore);
+
+ return $info;
+ }
+
//This function prints the contents from the info parammeter passed
function restore_print_info ($info) {
@@ -3000,6 +3007,21 @@ function startElementInfo($parser, $tagName, $attrs) {
// echo $this->level.str_repeat("&nbsp;",$this->level*2)."&lt;".$tagName."&gt;<br />\n"; //Debug
}
+ //This is the startTag handler we use where we are reading the info zone (todo="INFO")
+ function startElementRoles($parser, $tagName, $attrs) {
+ //Refresh properties
+ $this->level++;
+ $this->tree[$this->level] = $tagName;
+
+ //Output something to avoid browser timeouts...
+ backup_flush();
+
+ //Check if we are into INFO zone
+ //if ($this->tree[2] == "INFO") //Debug
+ // echo $this->level.str_repeat("&nbsp;",$this->level*2)."&lt;".$tagName."&gt;<br />\n"; //Debug
+ }
+
+
//This is the startTag handler we use where we are reading the course header zone (todo="COURSE_HEADER")
function startElementCourseHeader($parser, $tagName, $attrs) {
//Refresh properties
@@ -3398,7 +3420,82 @@ function endElementInfo($parser, $tagName) {
$this->level--;
$this->content = "";
- }
+ }
+
+ function endElementRoles($parser, $tagName) {
+ //Check if we are into INFO zone
+ if ($this->tree[2] == "ROLES") {
+
+ if ($this->tree[3] == "ROLE") {
+ if ($this->level == 4) {
+ switch ($tagName) {
+ case "NAME":
+ $this->info->tempname = $this->getContents();
+
+ break;
+ case "SHORTNAME":
+ $this->info->tempshortname = $this->getContents();
+ break;
+ }
+ }
+ if ($this->level == 6) {
+ switch ($tagName) {
+ case "NAME":
+ $this->info->roles[$this->info->tempshortname]->name = $this->info->tempname;
+ $this->info->roles[$this->info->tempshortname]->shortname = $this->info->tempshortname;
+
+ $this->info->tempcapname = $this->getContents();
+ $this->info->roles[$this->info->tempshortname]->capabilities[$this->info->tempcapname]->name = $this->getContents();
+ break;
+ case "PERMISSION":
+ $this->info->roles[$this->info->tempshortname]->capabilities[$this->info->tempcapname]->permission = $this->getContents();
+ break;
+ case "TIMEMODIFIED":
+ $this->info->roles[$this->info->tempshortname]->capabilities[$this->info->tempcapname]->timemodified = $this->getContents();
+ break;
+ case "MODIFIERID":
+ $this->info->roles[$this->info->tempshortname]->capabilities[$this->info->tempcapname]->modifierid = $this->getContents();
+ break;
+ }
+ }
+ }
+ }
+
+ //Stop parsing if todo = INFO and tagName = INFO (en of the tag, of course)
+ //Speed up a lot (avoid parse all)
+ if ($tagName == "ROLES") {
+ $this->finished = true;
+ }
+
+ //Clear things
+ $this->tree[$this->level] = "";
+ $this->level--;
+ $this->content = "";
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
//This is the endTag handler we use where we are reading the course_header zone (todo="COURSE_HEADER")
function endElementCourseHeader($parser, $tagName) {
@@ -4535,6 +4632,9 @@ function restore_read_xml ($xml_file,$todo,$preferences) {
if ($todo == "INFO") {
//Define handlers to that zone
xml_set_element_handler($xml_parser, "startElementInfo", "endElementInfo");
+ } else if ($todo == "ROLES") {
+ // Define handlers to that zone
+ xml_set_element_handler($xml_parser, "startElementRoles", "endElementRoles");
} else if ($todo == "COURSE_HEADER") {
//Define handlers to that zone
xml_set_element_handler($xml_parser, "startElementCourseHeader", "endElementCourseHeader");
@@ -4864,8 +4964,10 @@ function restore_userdata_selected($restore,$modname,$modid) {
}
function restore_execute(&$restore,$info,$course_header,&$errorstr) {
+
global $CFG;
- $status = true;
+ $status = true;
+
//Checks for the required files/functions to restore every module
//and include them
if ($allmods = get_records("modules") ) {
@@ -4889,7 +4991,7 @@ function restore_execute(&$restore,$info,$course_header,&$errorstr) {
}
//Localtion of the xml file
- $xml_file = $CFG->dataroot."/temp/backup/".$restore->backup_unique_code."/moodle.xml";
+ $xml_file = $CFG->dataroot."/temp/backup/".$restore->backup_unique_code."/moodle.xml";
//If we've selected to restore into new course
//create it (course)
@@ -5371,13 +5473,21 @@ function restore_execute(&$restore,$info,$course_header,&$errorstr) {
fix_course_sortorder();
//Make the user a teacher if the course hasn't teachers (bug 2381)
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
+ /* this is not working
if (!$checktea = get_records('user_teachers','course', $restore->course_id)) {
//Add the teacher to the course
$status = add_teacher($USER->id, $restore->course_id);
- }
+ } */
}
}
+ /*******************************************************************************
+ ************* Restore of Roles and Capabilities happens here ******************
+ *******************************************************************************/
+ restore_create_roles($restore, $xml_file);
+ restore_assign_roles($restore, $xml_file);
+ restore_override_roles($restore, $xml_file);
+
//Cleanup temps (files and db)
if ($status) {
if (!defined('RESTORE_SILENTLY')) {
@@ -5434,7 +5544,7 @@ function restore_open_html($restore,$course_header) {
fwrite ($restorelog_file,"The Originating Courses Start Date was " .$date['weekday'].", ".$date['mday']." ".$date['month']." ".$date['year']."");
$startdate += $restore->course_startdateoffset;
$date = usergetdate($startdate);
- fwrite ($restorelog_file,"&nbsp;&nbsp;&nbsp;This Courses Start Date is now " .$date['weekday'].", ".$date['mday']." ".$date['month']." ".$date['year']."<br><br>");
+ fwrite ($restorelog_file,"&nbsp;&nbsp;&nbsp;This Courses Start Date is now " .$date['weekday'].", ".$date['mday']." ".$date['month']." ".$date['year']."<br><br>");
if ($status) {
return $restorelog_file;
@@ -5465,5 +5575,36 @@ function restore_close_html($restore) {
return false;
}
}
+ /* This function should check for duplicate roles first
+ It isn't now, just overwriting
+ */
+ function restore_create_roles($restore, $xmlfile) {
+ /*
+ $info = restore_read_xml_roles($restore, $xmlfile);
+
+ $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
+ foreach ($info->roles as $rolename=>$roledata) {
+ $newroleid = create_role($roledata->name.'XYZ',$roledata->shortname.'XYZ','');
+ foreach ($roledata->capabilities as $capability) {
+
+ $roleinfo = new object();
+ $roleinfo = (object)$capability;
+ $roleinfo->contextid = $sitecontext->id;
+ $roleinfo->capability = $capability->name;
+ $roleinfo->roleid = $newroleid;
+
+ insert_record('role_capabilities', $roleinfo);
+ }
+ }*/
+ }
+
+ function restore_assign_roles($restore, $xmlfile) {
+ // data pulls from course, mod, user, and blocks
+ $course = restore_read_xml_course_header($xmlfile);
+ print_object($course);
+ }
+ function restore_override_roles($restore, $xmlfile) {
+ // data pulls from course, mod, user, and blocks
+ }
?>

0 comments on commit 3f1c723

Please sign in to comment.