original_string: public static function get_restore_content_dir($backupfile = null, $shortname = null, &$errors = array()) {
          global $CFG, $DB, $USER;
  
          $cachekey = null;
          if (!empty($backupfile)) {
              $backupfile = realpath($backupfile);
              if (empty($backupfile) || !is_readable($backupfile)) {
                  $errors['cannotreadbackupfile'] = new lang_string('cannotreadbackupfile', 'tool_uploadcourse');
                  return false;
              }
              $cachekey = 'backup_path:' . $backupfile;
          } else if (!empty($shortname) || is_numeric($shortname)) {
              $cachekey = 'backup_sn:' . $shortname;
          }
  
          if (empty($cachekey)) {
              return false;
          }
  
          // If $CFG->keeptempdirectoriesonbackup is not set to true, any restore happening would
          // automatically delete the backup directory... causing the cache to return an unexisting directory.
          $usecache = !empty($CFG->keeptempdirectoriesonbackup);
          if ($usecache) {
              $cache = cache::make('tool_uploadcourse', 'helper');
          }
  
          // If we don't use the cache, or if we do and not set, or the directory doesn't exist any more.
          if (!$usecache || (($backupid = $cache->get($cachekey)) === false || !is_dir(get_backup_temp_directory($backupid)))) {
  
              // Use null instead of false because it would consider that the cache key has not been set.
              $backupid = null;
  
              if (!empty($backupfile)) {
                  // Extracting the backup file.
                  $packer = get_file_packer('application/vnd.moodle.backup');
                  $backupid = restore_controller::get_tempdir_name(SITEID, $USER->id);
                  $path = make_backup_temp_directory($backupid, false);
                  $result = $packer->extract_to_pathname($backupfile, $path);
                  if (!$result) {
                      $errors['invalidbackupfile'] = new lang_string('invalidbackupfile', 'tool_uploadcourse');
                  }
              } else if (!empty($shortname) || is_numeric($shortname)) {
                  // Creating restore from an existing course.
                  $courseid = $DB->get_field('course', 'id', array('shortname' => $shortname), IGNORE_MISSING);
                  if (!empty($courseid)) {
                      $bc = new backup_controller(backup::TYPE_1COURSE, $courseid, backup::FORMAT_MOODLE,
                          backup::INTERACTIVE_NO, backup::MODE_IMPORT, $USER->id);
                      $bc->execute_plan();
                      $backupid = $bc->get_backupid();
                      $bc->destroy();
                  } else {
                      $errors['coursetorestorefromdoesnotexist'] =
                          new lang_string('coursetorestorefromdoesnotexist', 'tool_uploadcourse');
                  }
              }
  
              if ($usecache) {
                  $cache->set($cachekey, $backupid);
              }
          }
  
          if ($backupid === null) {
              $backupid = false;
          }
          return $backupid;
      }
code: public static function get_restore_content_dir($backupfile = null, $shortname = null, &$errors = array()) {
          global $CFG, $DB, $USER;
  
          $cachekey = null;
          if (!empty($backupfile)) {
              $backupfile = realpath($backupfile);
              if (empty($backupfile) || !is_readable($backupfile)) {
                  $errors['cannotreadbackupfile'] = new lang_string('cannotreadbackupfile', 'tool_uploadcourse');
                  return false;
              }
              $cachekey = 'backup_path:' . $backupfile;
          } else if (!empty($shortname) || is_numeric($shortname)) {
              $cachekey = 'backup_sn:' . $shortname;
          }
  
          if (empty($cachekey)) {
              return false;
          }
  
          // If $CFG->keeptempdirectoriesonbackup is not set to true, any restore happening would
          // automatically delete the backup directory... causing the cache to return an unexisting directory.
          $usecache = !empty($CFG->keeptempdirectoriesonbackup);
          if ($usecache) {
              $cache = cache::make('tool_uploadcourse', 'helper');
          }
  
          // If we don't use the cache, or if we do and not set, or the directory doesn't exist any more.
          if (!$usecache || (($backupid = $cache->get($cachekey)) === false || !is_dir(get_backup_temp_directory($backupid)))) {
  
              // Use null instead of false because it would consider that the cache key has not been set.
              $backupid = null;
  
              if (!empty($backupfile)) {
                  // Extracting the backup file.
                  $packer = get_file_packer('application/vnd.moodle.backup');
                  $backupid = restore_controller::get_tempdir_name(SITEID, $USER->id);
                  $path = make_backup_temp_directory($backupid, false);
                  $result = $packer->extract_to_pathname($backupfile, $path);
                  if (!$result) {
                      $errors['invalidbackupfile'] = new lang_string('invalidbackupfile', 'tool_uploadcourse');
                  }
              } else if (!empty($shortname) || is_numeric($shortname)) {
                  // Creating restore from an existing course.
                  $courseid = $DB->get_field('course', 'id', array('shortname' => $shortname), IGNORE_MISSING);
                  if (!empty($courseid)) {
                      $bc = new backup_controller(backup::TYPE_1COURSE, $courseid, backup::FORMAT_MOODLE,
                          backup::INTERACTIVE_NO, backup::MODE_IMPORT, $USER->id);
                      $bc->execute_plan();
                      $backupid = $bc->get_backupid();
                      $bc->destroy();
                  } else {
                      $errors['coursetorestorefromdoesnotexist'] =
                          new lang_string('coursetorestorefromdoesnotexist', 'tool_uploadcourse');
                  }
              }
  
              if ($usecache) {
                  $cache->set($cachekey, $backupid);
              }
          }
  
          if ($backupid === null) {
              $backupid = false;
          }
          return $backupid;
      }
code_tokens: public static function get_restore_content_dir ( $ backupfile = null , $ shortname = null , & $ errors = array ( ) ) { global $ CFG , $ DB , $ USER ; $ cachekey = null ; if ( ! empty ( $ backupfile ) ) { $ backupfile = realpath ( $ backupfile ) ; if ( empty ( $ backupfile ) || ! is_readable ( $ backupfile ) ) { $ errors [ 'cannotreadbackupfile' ] = new lang_string ( 'cannotreadbackupfile' , 'tool_uploadcourse' ) ; return false ; } $ cachekey = 'backup_path:' . $ backupfile ; } else if ( ! empty ( $ shortname ) || is_numeric ( $ shortname ) ) { $ cachekey = 'backup_sn:' . $ shortname ; } if ( empty ( $ cachekey ) ) { return false ; } // If $CFG->keeptempdirectoriesonbackup is not set to true, any restore happening would // automatically delete the backup directory... causing the cache to return an unexisting directory. $ usecache = ! empty ( $ CFG -> keeptempdirectoriesonbackup ) ; if ( $ usecache ) { $ cache = cache :: make ( 'tool_uploadcourse' , 'helper' ) ; } // If we don't use the cache, or if we do and not set, or the directory doesn't exist any more. if ( ! $ usecache || ( ( $ backupid = $ cache -> get ( $ cachekey ) ) === false || ! is_dir ( get_backup_temp_directory ( $ backupid ) ) ) ) { // Use null instead of false because it would consider that the cache key has not been set. $ backupid = null ; if ( ! empty ( $ backupfile ) ) { // Extracting the backup file. $ packer = get_file_packer ( 'application/vnd.moodle.backup' ) ; $ backupid = restore_controller :: get_tempdir_name ( SITEID , $ USER -> id ) ; $ path = make_backup_temp_directory ( $ backupid , false ) ; $ result = $ packer -> extract_to_pathname ( $ backupfile , $ path ) ; if ( ! $ result ) { $ errors [ 'invalidbackupfile' ] = new lang_string ( 'invalidbackupfile' , 'tool_uploadcourse' ) ; } } else if ( ! empty ( $ shortname ) || is_numeric ( $ shortname ) ) { // Creating restore from an existing course. $ courseid = $ DB -> get_field ( 'course' , 'id' , array ( 'shortname' => $ shortname ) , IGNORE_MISSING ) ; if ( ! empty ( $ courseid ) ) { $ bc = new backup_controller ( backup :: TYPE_1COURSE , $ courseid , backup :: FORMAT_MOODLE , backup :: INTERACTIVE_NO , backup :: MODE_IMPORT , $ USER -> id ) ; $ bc -> execute_plan ( ) ; $ backupid = $ bc -> get_backupid ( ) ; $ bc -> destroy ( ) ; } else { $ errors [ 'coursetorestorefromdoesnotexist' ] = new lang_string ( 'coursetorestorefromdoesnotexist' , 'tool_uploadcourse' ) ; } } if ( $ usecache ) { $ cache -> set ( $ cachekey , $ backupid ) ; } } if ( $ backupid === null ) { $ backupid = false ; } return $ backupid ; }
docstring: Get the restore content tempdir.
  
  The tempdir is the sub directory in which the backup has been extracted.
  
  This caches the result for better performance, but $CFG->keeptempdirectoriesonbackup
  needs to be enabled, otherwise the cache is ignored.
  
  @param string $backupfile path to a backup file.
  @param string $shortname shortname of a course.
  @param array $errors will be populated with errors found.
  @return string|false false when the backup couldn't retrieved.
docstring_tokens: Get the restore content tempdir .