/**
  * Returns welcome message.
  * @param string $sourcecourse
  * @param string $destinationcourse
  * @param bool $excludequestionbank
  * @return string welcome message.
  */
 public static function copy_content($sourcecourse = '', $destinationcourse = '', $excludequestionbank = false)
 {
     global $DB;
     try {
         $courseid = $destinationcourse;
         $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
         // The id of the course we are importing FROM (will only be set if past first stage.
         $importcourseid = $sourcecourse;
         // The target method for the restore (adding or deleting).
         $restoretarget = backup::TARGET_EXISTING_DELETING;
         $importcourse = $DB->get_record('course', array('id' => $importcourseid), '*', MUST_EXIST);
         $bc = new backup_controller(backup::TYPE_1COURSE, $importcourse->id, backup::FORMAT_MOODLE, backup::INTERACTIVE_NO, backup::MODE_IMPORT, 2);
         $bc->get_plan()->get_setting('users')->set_status(backup_setting::LOCKED_BY_CONFIG);
         $settings = $bc->get_plan()->get_settings();
         // If excludequestionbank is set, do not backup question bank.
         if ($excludequestionbank && $bc->get_plan()->setting_exists('questionbank')) {
             $setting = $bc->get_plan()->get_setting('questionbank');
             $setting->set_value(0);
         }
         // For the initial stage we want to hide all locked settings and if there are.
         // No visible settings move to the next stage.
         foreach ($settings as $setting) {
             if ($setting->get_status() !== backup_setting::NOT_LOCKED) {
                 $setting->set_visibility(backup_setting::HIDDEN);
             }
         }
         $backupid = $bc->get_backupid();
         $bc->execute_plan();
         restore_dbops::delete_course_content($course->id);
         $rc = new restore_controller($backupid, $course->id, backup::INTERACTIVE_NO, backup::MODE_GENERAL, 2, $restoretarget);
         $rc->execute_precheck();
         // If excludequestionbank is set, do not restore quizzes.
         if ($excludequestionbank) {
             $settings = $rc->get_plan()->get_settings();
             foreach ($settings as $setting) {
                 if (preg_match('/(quiz)(_)(\\d+)(_)(included)/', $setting->get_name())) {
                     $rc->get_plan()->get_setting($setting->get_name())->set_value(0);
                 }
             }
         }
         $rc->execute_plan();
         $results = $rc->get_results();
         if (isset($results["file_missing_in_backup"])) {
             if (extension_loaded('newrelic')) {
                 newrelic_notice_error($results["file_missing_in_backup"], new Exception('Missing file in backup'));
             }
         }
         $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
         $importcourse->id = $course->id;
         $importcourse->modinfo = $course->modinfo;
         $importcourse->idnumber = $course->idnumber;
         $importcourse->fullname = $course->fullname;
         $importcourse->shortname = $course->shortname;
         $importcourse->startdate = $course->startdate;
         $importcourse->sectioncache = null;
         $sourceformat = $DB->get_field('course', 'format', array('id' => $importcourseid), MUST_EXIST);
         if (!($coursenumsections = $DB->get_field('course_format_options', 'value', array('courseid' => $importcourseid, 'name' => 'numsections', 'format' => $sourceformat)))) {
             $coursenumsections = 10;
         }
         if ($courseformatconfig = $DB->get_record('course_format_options', array('courseid' => $course->id, 'name' => 'numsections', 'format' => $sourceformat))) {
             $courseformatconfig->value = $coursenumsections;
             $DB->update_record('course_format_options', $courseformatconfig);
         } else {
             $courseformatconfig = new stdClass();
             $courseformatconfig->courseid = $course->id;
             $courseformatconfig->name = 'numsections';
             $courseformatconfig->value = $coursenumsections;
             $courseformatconfig->format = $sourceformat;
             $courseformatconfig->sectionid = 0;
             $DB->insert_record('course_format_options', $courseformatconfig);
         }
         $DB->update_record('course', $importcourse);
         return 'success';
     } catch (Exception $e) {
         if (extension_loaded('newrelic')) {
             newrelic_notice_error($e->getMessage(), $e);
         }
         return 'Exception ' . $e->getMessage();
     }
 }