/** * This function makes all the necessary calls to {@link restore_decode_content_links_worker()} * function in order to decode contents of this block from the backup * format to destination site/course in order to mantain inter-activities * working in the backup/restore process. * * This is called from {@link restore_decode_content_links()} function in the restore process. * * NOTE: There is no block instance when this method is called. * * @param object $restore Standard restore object * @return boolean **/ function decode_content_links_caller($restore) { global $CFG; if ($restored_blocks = get_records_select("backup_ids", "table_name = 'block_instance' AND backup_code = {$restore->backup_unique_code} AND new_id > 0", "", "new_id")) { $restored_blocks = implode(',', array_keys($restored_blocks)); $sql = "SELECT bi.*\n FROM {$CFG->prefix}block_instance bi\n JOIN {$CFG->prefix}block b ON b.id = bi.blockid\n WHERE b.name = 'html' AND bi.id IN ({$restored_blocks})"; if ($instances = get_records_sql($sql)) { foreach ($instances as $instance) { $blockobject = block_instance('featured', $instance); $blockobject->config->text = restore_decode_absolute_links($blockobject->config->text); $blockobject->config->text = restore_decode_content_links_worker($blockobject->config->text, $restore); $blockobject->instance_config_commit($blockobject->pinned); } } } return true; }
function backup_todb($data) { // MDL-10770 if ($data === '$@NULL@$') { return null; } else { return restore_decode_absolute_links($data); } }
function wiki_insert_page_from_wiki($wikipage, $dfwikiid, $mode, $course, $name, $oldwikiid, $groupid) { global $CFG; //search for the old wiki cm->id $modul = get_record("modules", "name", 'wiki'); $coursemodule = get_record_sql('SELECT * FROM ' . $CFG->prefix . 'course_modules WHERE module=' . $modul->id . ' AND instance=' . $dfwikiid); $page->pagename = restore_decode_absolute_links(addslashes($wikipage->pagename)); $page->version = $wikipage->version; $page->content = wiki_treat_content(restore_decode_absolute_links(addslashes($wikipage->content)), $oldwikiid); $page->author = wiki_get_username($wikipage->author); $page->created = $wikipage->created; $page->lastmodified = $wikipage->lastmodified; $pagerefs = str_replace("\n", "|", restore_decode_absolute_links(addslashes($wikipage->refs))); $page_refs = str_replace("||", "", $pagerefs); $page->refs = wiki_treat_internal_ref($page_refs); $page->hits = $wikipage->hits; $page->editable = '1'; $page->dfwiki = $dfwikiid; switch ($mode) { case '0': $page->editor = 'ewiki'; break; case '1': $page->editor = 'ewiki'; break; case '2': $page->editor = 'htmleditor'; break; default: break; } $page->groupid = $groupid; if ($page->content != '') { if (!insert_record('wiki_pages', addslashes($page))) { } backup_flush(300); } }
function backup_todb($data, $addslashes = true) { // MDL-10770 if ($data === '$@NULL@$') { return null; } else { if ($addslashes) { $data = addslashes($data); } return restore_decode_absolute_links($data); } }
function restore_decode_absolute_links_in_config(&$config) { $oldtext = $config->text; $config->text = restore_decode_absolute_links($oldtext); return $config->text != $oldtext; }
function wiki_insert_page_from_dfwiki($dfwikipage, $newwiki) { $page->pagename = restore_decode_absolute_links(addslashes($dfwikipage->pagename)); $page->version = $dfwikipage->version; $page->content = $dfwikipage->content; $page->author = $dfwikipage->author; //get the user id from the author username $user = get_record('user', 'username', addslashes($dfwikipage->author)); $page->userid = $user->id; $page->created = $dfwikipage->created; $page->lastmodified = $dfwikipage->lastmodified; $page->refs = $dfwikipage->refs; $page->hits = $dfwikipage->hits; $page->editable = $dfwikipage->editable; $page->dfwiki = $newwiki; $page->editor = $dfwikipage->editor; $page->groupid = $dfwikipage->groupid; $page->ownerid = $dfwikipage->ownerid; $page->highlight = $dfwikipage->destacar; $page->votes = $dfwikipage->votes; //insert here new added dfwiki_page table fields if (!insert_record('wiki_pages', addslashes($page))) { error('Can\'t insert page record'); } }
function wiki_read_xml_ewiki($info, $restore) { global $CFG, $COURSE; //Search the groupmode in coursemodule $wikioldid = $info["ID"]["0"]["#"]; $newcourseid = $restore->course_id; $coursemoduleid = $restore->mods['wiki']->instances[$wikioldid]->restored_as_course_module; $coursemodule = get_records_sql('SELECT * FROM ' . $CFG->prefix . 'course_modules WHERE id=' . $coursemoduleid); $groupmode = $coursemodule[$coursemoduleid]->groupmode; foreach ($info as $name => $value) { if ($name != "ENTRIES") { //Tratamos la wiki $data['wiki']['groupmode'] = $groupmode; if ($name == "NAME") { $data['wiki']['name'] = $value['0']['#']; $data['wiki']['pagename'] = $value['0']['#']; } elseif ($name == "PAGENAME") { //nothing } elseif ($name == "SUMMARY") { $data['wiki']['intro'] = $value['0']['#']; } elseif ($name == "HTMLMODE") { switch ($value['0']['#']) { case '0': $data['wiki']['editor'] = 'ewiki'; break; case '1': $data['wiki']['editor'] = 'ewiki'; break; case '2': $data['wiki']['editor'] = 'htmleditor'; break; default: break; } } elseif ($name == "TIMEMODIFIED") { $data['wiki'][strtolower($name)] = TIME(); } elseif ($name == "WTYPE") { $wtype = $value['0']['#']; if ($wtype == 'teacher') { $data['wiki']['editable'] = '0'; $data['wiki']['studentmode'] = '0'; } elseif ($wtype == 'student') { $data['wiki']['editable'] = '1'; if ($groupmode == '0') { $data['wiki']['studentmode'] = '1'; } else { $data['wiki']['studentmode'] = '2'; } } else { //$wtype = 'group' $data['wiki']['editable'] = '1'; $data['wiki']['studentmode'] = '0'; } } else { $data['wiki'][strtolower($name)] = $value['0']['#']; } } else { $dataentries = $value['0']['#']['ENTRY']; $i = 0; foreach ($dataentries as $dataentry) { $entrygroupid = $dataentry['#']['GROUPID']['0']['#']; foreach ($dataentry as $datapages) { $datapage = $datapages['PAGES']['0']['#']['PAGE']; foreach ($datapage as $ewikipage) { if ($groups = get_record_sql('SELECT * FROM ' . $CFG->prefix . 'groups g WHERE g.id=' . $entrygroupid)) { $groupname = $groups->name; } if ($groups = get_record_sql('SELECT * FROM ' . $CFG->prefix . 'groups g WHERE g.name=\'' . $groupname . '\' AND g.courseid = ' . $newcourseid)) { $groupid = $groups->id; } $entryuserid = $ewikipage['#']['USERID']['0']['#']; if ($wtype == 'student' && $entrygroupid == '0' && $groupmode != '0') { if ($user_groups = get_records_sql('SELECT gm.id as groupsmembersid, u.id, g.id as groupid FROM ' . $CFG->prefix . 'groups g, ' . $CFG->prefix . 'groups_members gm, ' . $CFG->prefix . 'user u WHERE g.courseid=\'' . $newcourseid . '\' AND u.id = \'' . $entryuserid . '\' AND g.id = gm.groupid AND u.id = gm.userid')) { foreach ($user_groups as $user_group) { $data['wiki_pages'][$i]['id'] = $ewikipage['#']['ID']['0']['#']; $data['wiki_pages'][$i]['pagename'] = $ewikipage['#']['PAGENAME']['0']['#']; $data['wiki_pages'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $data['wiki_pages'][$i]['content'] = restore_decode_absolute_links(addslashes(wiki_treat_content($ewikipage['#']['CONTENT']['0']['#']))); $data['wiki_pages'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $pagerefs = restore_decode_absolute_links(addslashes($ewikipage['#']['REFS']['0']['#'])); $pagerefs = str_replace("\$@LINEFEED@\$", "|", $pagerefs); $pagerefs = str_replace("||", "", $pagerefs); $wikipages['importfrombackup'][$i]['refs'] = wiki_treat_internal_ref($pagerefs); $data['wiki_pages'][$i]['lastmodified'] = $ewikipage['#']['LASTMODIFIED']['0']['#']; $data['wiki_pages'][$i]['oldentryid'] = $info["ENTRIES"]["0"]["#"]["ENTRY"]["0"]["#"]["ID"]["0"]["#"]; $data['wiki_pages'][$i]['oldid'] = $info["ID"]["0"]["#"]; $data['wiki_pages'][$i]['editor'] = $data['wiki']['editor']; $data['wiki_pages'][$i]['userid'] = $ewikipage['#']['USERID']['0']['#']; $data['wiki_pages'][$i]['groupid'] = $user_group->groupid; if ($wtype == 'teacher') { $data['wiki_pages'][$i]['editable'] = '0'; $data['wiki_pages'][$i]['ownerid'] = '0'; } elseif ($wtype == 'group') { $data['wiki_pages'][$i]['editable'] = '1'; $data['wiki_pages'][$i]['ownerid'] = '0'; } else { $data['wiki_pages'][$i]['editable'] = '1'; $data['wiki_pages'][$i]['ownerid'] = $entryuserid; } $i++; } } } else { $data['wiki_pages'][$i]['id'] = $ewikipage['#']['ID']['0']['#']; $data['wiki_pages'][$i]['pagename'] = $ewikipage['#']['PAGENAME']['0']['#']; $data['wiki_pages'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $data['wiki_pages'][$i]['content'] = restore_decode_absolute_links(addslashes(wiki_treat_content($ewikipage['#']['CONTENT']['0']['#']))); $data['wiki_pages'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $pagerefs = restore_decode_absolute_links(addslashes($ewikipage['#']['REFS']['0']['#'])); $pagerefs = str_replace("\$@LINEFEED@\$", "|", $pagerefs); $pagerefs = str_replace("||", "", $pagerefs); $wikipages['importfrombackup'][$i]['refs'] = wiki_treat_internal_ref($pagerefs); $data['wiki_pages'][$i]['lastmodified'] = $ewikipage['#']['LASTMODIFIED']['0']['#']; $data['wiki_pages'][$i]['oldentryid'] = $info["ENTRIES"]["0"]["#"]["ENTRY"]["0"]["#"]["ID"]["0"]["#"]; $data['wiki_pages'][$i]['oldid'] = $info["ID"]["0"]["#"]; $data['wiki_pages'][$i]['editor'] = $data['wiki']['editor']; $data['wiki_pages'][$i]['userid'] = $ewikipage['#']['USERID']['0']['#']; if ($groupmode == '0') { $data['wiki_pages'][$i]['groupid'] = '0'; } else { $data['wiki_pages'][$i]['groupid'] = $groupid; } if ($wtype == 'teacher') { $data['wiki_pages'][$i]['editable'] = '0'; $data['wiki_pages'][$i]['ownerid'] = '0'; } elseif ($wtype == 'group') { $data['wiki_pages'][$i]['editable'] = '1'; $data['wiki_pages'][$i]['ownerid'] = '0'; } else { $data['wiki_pages'][$i]['editable'] = '1'; $data['wiki_pages'][$i]['ownerid'] = $entryuserid; } $i++; } } } } } } return $data; }
function wiki_read_xml_ewiki($data) { if (isset($data['ENTRIES']['0']['#']['ENTRY'])) { $htmlmode = $data['HTMLMODE']['0']['#']; $dataentries = $data['ENTRIES']['0']['#']['ENTRY']; $i = 0; foreach ($dataentries as $dataentry) { $groupid = $dataentry['#']['GROUPID']['0']['#']; foreach ($dataentry as $datapages) { $datapage = $datapages['PAGES']['0']['#']['PAGE']; foreach ($datapage as $ewikipage) { $wikipages['importfrombackup'][$i]['id'] = $ewikipage['#']['ID']['0']['#']; $wikipages['importfrombackup'][$i]['pagename'] = $ewikipage['#']['PAGENAME']['0']['#']; $wikipages['importfrombackup'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $wikipages['importfrombackup'][$i]['content'] = restore_decode_absolute_links(addslashes(wiki_treat_content($ewikipage['#']['CONTENT']['0']['#']))); $wikipages['importfrombackup'][$i]['version'] = $ewikipage['#']['VERSION']['0']['#']; $pagerefs = restore_decode_absolute_links(addslashes($ewikipage['#']['REFS']['0']['#'])); $pagerefs = str_replace("\$@LINEFEED@\$", "|", $pagerefs); $pagerefs = str_replace("||", "", $pagerefs); $wikipages['importfrombackup'][$i]['refs'] = wiki_treat_internal_ref($pagerefs); $wikipages['importfrombackup'][$i]['lastmodified'] = $ewikipage['#']['LASTMODIFIED']['0']['#']; $wikipages['importfrombackup'][$i]['oldentryid'] = $data["ENTRIES"]["0"]["#"]["ENTRY"]["0"]["#"]["ID"]["0"]["#"]; $wikipages['importfrombackup'][$i]['oldid'] = $data["ID"]["0"]["#"]; switch ($htmlmode) { case '0': $editor = 'ewiki'; break; case '1': $editor = 'ewiki'; break; case '2': $editor = 'htmleditor'; break; default: break; } $wikipages['importfrombackup'][$i]['editor'] = $editor; $wikipages['importfrombackup'][$i]['groupid'] = $groupid; $infouser = wiki_get_username($ewikipage['#']['AUTHOR']['0']['#']); $wikipages['importfrombackup'][$i]['author'] = $infouser->username; $wikipages['importfrombackup'][$i]['userid'] = $infouser->id; $i++; } } } } else { error("Not exists wiki pages to import in the backup file."); } return $wikipages; }
function backup_todb($data) { return restore_decode_absolute_links(addslashes($data)); }
function restore_create_users($restore, $xml_file) { global $CFG, $db; $status = true; //Check it exists if (!file_exists($xml_file)) { $status = false; } //Get info from xml if ($status) { //info will contain the old_id of every user //in backup_ids->info will be the real info (serialized) $info = restore_read_xml_users($restore, $xml_file); } //Now, get evey user_id from $info and user data from $backup_ids //and create the necessary records (users, user_students, user_teachers //user_course_creators and user_admins if (!empty($info->users)) { // Grab mnethosts keyed by wwwroot, to map to id $mnethosts = get_records('mnet_host', '', '', 'wwwroot', 'wwwroot, id'); $languages = get_list_of_languages(); /// Iterate over all users loaded from xml $counter = 0; foreach ($info->users as $userid) { $rec = backup_getid($restore->backup_unique_code, "user", $userid); $user = $rec->info; foreach (array_keys(get_object_vars($user)) as $field) { if (!is_array($user->{$field})) { $user->{$field} = backup_todb($user->{$field}); if (is_null($user->{$field})) { $user->{$field} = ''; } } } //Now, recode some languages (Moodle 1.5) if ($user->lang == 'ma_nt') { $user->lang = 'mi_nt'; } //Country list updates - MDL-13060 //Any user whose country code has been deleted or modified needs to be assigned a valid one. $country_update_map = array('ZR' => 'CD', 'TP' => 'TL', 'FX' => 'FR', 'KO' => 'RS', 'CS' => 'RS', 'WA' => 'GB'); if (array_key_exists($user->country, $country_update_map)) { $user->country = $country_update_map[$user->country]; } //If language does not exist here - use site default if (!array_key_exists($user->lang, $languages)) { $user->lang = $CFG->lang; } //Check if it's admin and coursecreator $is_admin = !empty($user->roles['admin']); $is_coursecreator = !empty($user->roles['coursecreator']); //Check if it's teacher and student $is_teacher = !empty($user->roles['teacher']); $is_student = !empty($user->roles['student']); //Check if it's needed $is_needed = !empty($user->roles['needed']); //Calculate if it is a course user //Has role teacher or student or needed $is_course_user = ($is_teacher or $is_student or $is_needed); //Calculate mnethostid if (empty($user->mnethosturl) || $user->mnethosturl === $CFG->wwwroot) { $user->mnethostid = $CFG->mnet_localhost_id; } else { // fast url-to-id lookups if (isset($mnethosts[$user->mnethosturl])) { $user->mnethostid = $mnethosts[$user->mnethosturl]->id; } else { // should not happen, as we check in restore_chech.php // but handle the error if it does error("This backup file contains external Moodle Network Hosts that are not configured locally."); } } unset($user->mnethosturl); //To store new ids created $newid = null; //check if it exists (by username) and get its id $user_exists = true; $user_data = get_record("user", "username", addslashes($user->username), 'mnethostid', $user->mnethostid); if (!$user_data) { $user_exists = false; } else { $newid = $user_data->id; } //Flags to see if we have to create the user, roles and preferences $create_user = true; $create_roles = true; $create_preferences = true; //If we are restoring course users and it isn't a course user if ($restore->users == 1 and !$is_course_user) { //If only restoring course_users and user isn't a course_user, inform to $backup_ids $status = backup_putid($restore->backup_unique_code, "user", $userid, null, 'notincourse'); $create_user = false; $create_roles = false; $create_preferences = false; } if ($user_exists and $create_user) { //If user exists mark its newid in backup_ids (the same than old) $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, 'exists'); $create_user = false; } //Here, if create_user, do it if ($create_user) { //Unset the id because it's going to be inserted with a new one unset($user->id); // relink the descriptions $user->description = restore_decode_absolute_links($user->description); /// Disable pictures based on global setting of existing empty value (old backups can contain wrong empties) if (!empty($CFG->disableuserimages) || empty($user->picture)) { $user->picture = 0; } //We need to analyse the AUTH field to recode it: // - if the field isn't set, we are in a pre 1.4 backup and we'll // use manual if (empty($user->auth)) { if ($CFG->registerauth == 'email') { $user->auth = 'email'; } else { $user->auth = 'manual'; } } //We need to process the POLICYAGREED field to recalculate it: // - if the destination site is different (by wwwroot) reset it. // - if the destination site is the same (by wwwroot), leave it unmodified if ($restore->original_wwwroot != $CFG->wwwroot) { $user->policyagreed = 0; } else { //Nothing to do, we are in the same server } //Check if the theme exists in destination server $themes = get_list_of_themes(); if (!in_array($user->theme, $themes)) { $user->theme = ''; } //We are going to create the user //The structure is exactly as we need $newid = insert_record("user", addslashes_recursive($user)); //Put the new id $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, "new"); } //Here, if create_roles, do it as necessary if ($create_roles) { //Get the newid and current info from backup_ids $data = backup_getid($restore->backup_unique_code, "user", $userid); $newid = $data->new_id; $currinfo = $data->info . ","; //Now, depending of the role, create records in user_studentes and user_teacher //and/or mark it in backup_ids if ($is_admin) { //If the record (user_admins) doesn't exists //Only put status in backup_ids $currinfo = $currinfo . "admin,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); } if ($is_coursecreator) { //If the record (user_coursecreators) doesn't exists //Only put status in backup_ids $currinfo = $currinfo . "coursecreator,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); } if ($is_needed) { //Only put status in backup_ids $currinfo = $currinfo . "needed,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); } if ($is_teacher) { //If the record (teacher) doesn't exists //Put status in backup_ids $currinfo = $currinfo . "teacher,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); //Set course and user $user->roles['teacher']->course = $restore->course_id; $user->roles['teacher']->userid = $newid; //Need to analyse the enrol field // - if it isn't set, set it to $CFG->enrol // - if we are in a different server (by wwwroot), set it to $CFG->enrol // - if we are in the same server (by wwwroot), maintain it unmodified. if (empty($user->roles['teacher']->enrol)) { $user->roles['teacher']->enrol = $CFG->enrol; } else { if ($restore->original_wwwroot != $CFG->wwwroot) { $user->roles['teacher']->enrol = $CFG->enrol; } else { //Nothing to do. Leave it unmodified } } $rolesmapping = $restore->rolesmapping; $context = get_context_instance(CONTEXT_COURSE, $restore->course_id); if ($user->roles['teacher']->editall) { role_assign($rolesmapping['defaultteacheredit'], $newid, 0, $context->id, $user->roles['teacher']->timestart, $user->roles['teacher']->timeend, 0, $user->roles['teacher']->enrol); // editting teacher } else { // non editting teacher role_assign($rolesmapping['defaultteacher'], $newid, 0, $context->id, $user->roles['teacher']->timestart, $user->roles['teacher']->timeend, 0, $user->roles['teacher']->enrol); } } if ($is_student) { //Put status in backup_ids $currinfo = $currinfo . "student,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); //Set course and user $user->roles['student']->course = $restore->course_id; $user->roles['student']->userid = $newid; //Need to analyse the enrol field // - if it isn't set, set it to $CFG->enrol // - if we are in a different server (by wwwroot), set it to $CFG->enrol // - if we are in the same server (by wwwroot), maintain it unmodified. if (empty($user->roles['student']->enrol)) { $user->roles['student']->enrol = $CFG->enrol; } else { if ($restore->original_wwwroot != $CFG->wwwroot) { $user->roles['student']->enrol = $CFG->enrol; } else { //Nothing to do. Leave it unmodified } } $rolesmapping = $restore->rolesmapping; $context = get_context_instance(CONTEXT_COURSE, $restore->course_id); role_assign($rolesmapping['defaultstudent'], $newid, 0, $context->id, $user->roles['student']->timestart, $user->roles['student']->timeend, 0, $user->roles['student']->enrol); } if (!$is_course_user) { //If the record (user) doesn't exists if (!record_exists("user", "id", $newid)) { //Put status in backup_ids $currinfo = $currinfo . "user,"; $status = backup_putid($restore->backup_unique_code, "user", $userid, $newid, $currinfo); } } } //Here, if create_preferences, do it as necessary if ($create_preferences) { //echo "Checking for preferences of user ".$user->username."<br />"; //Debug //Get user new id from backup_ids $data = backup_getid($restore->backup_unique_code, "user", $userid); $newid = $data->new_id; if (isset($user->user_preferences)) { //echo "Preferences exist in backup file<br />"; //Debug foreach ($user->user_preferences as $user_preference) { //echo $user_preference->name." = ".$user_preference->value."<br />"; //Debug //We check if that user_preference exists in DB if (!record_exists("user_preferences", "userid", $newid, "name", $user_preference->name)) { //echo "Creating it<br />"; //Debug //Prepare the record and insert it $user_preference->userid = $newid; $status = insert_record("user_preferences", $user_preference); } } } } //Do some output $counter++; if ($counter % 10 == 0) { if (!defined('RESTORE_SILENTLY')) { echo "."; if ($counter % 200 == 0) { echo "<br />"; } } backup_flush(300); } } /// End of loop over all the users loaded from xml } return $status; }