original_string: public function create_directory($contextid, $component, $filearea, $itemid, $filepath, $userid = null) {
          global $DB;
  
          // validate all parameters, we do not want any rubbish stored in database, right?
          if (!is_number($contextid) or $contextid < 1) {
              throw new file_exception('storedfileproblem', 'Invalid contextid');
          }
  
          $component = clean_param($component, PARAM_COMPONENT);
          if (empty($component)) {
              throw new file_exception('storedfileproblem', 'Invalid component');
          }
  
          $filearea = clean_param($filearea, PARAM_AREA);
          if (empty($filearea)) {
              throw new file_exception('storedfileproblem', 'Invalid filearea');
          }
  
          if (!is_number($itemid) or $itemid < 0) {
              throw new file_exception('storedfileproblem', 'Invalid itemid');
          }
  
          $filepath = clean_param($filepath, PARAM_PATH);
          if (strpos($filepath, '/') !== 0 or strrpos($filepath, '/') !== strlen($filepath)-1) {
              // path must start and end with '/'
              throw new file_exception('storedfileproblem', 'Invalid file path');
          }
  
          $pathnamehash = $this->get_pathname_hash($contextid, $component, $filearea, $itemid, $filepath, '.');
  
          if ($dir_info = $this->get_file_by_hash($pathnamehash)) {
              return $dir_info;
          }
  
          static $contenthash = null;
          if (!$contenthash) {
              $this->add_string_to_pool('');
              $contenthash = self::hash_from_string('');
          }
  
          $now = time();
  
          $dir_record = new stdClass();
          $dir_record->contextid = $contextid;
          $dir_record->component = $component;
          $dir_record->filearea  = $filearea;
          $dir_record->itemid    = $itemid;
          $dir_record->filepath  = $filepath;
          $dir_record->filename  = '.';
          $dir_record->contenthash  = $contenthash;
          $dir_record->filesize  = 0;
  
          $dir_record->timecreated  = $now;
          $dir_record->timemodified = $now;
          $dir_record->mimetype     = null;
          $dir_record->userid       = $userid;
  
          $dir_record->pathnamehash = $pathnamehash;
  
          $DB->insert_record('files', $dir_record);
          $dir_info = $this->get_file_by_hash($pathnamehash);
  
          if ($filepath !== '/') {
              //recurse to parent dirs
              $filepath = trim($filepath, '/');
              $filepath = explode('/', $filepath);
              array_pop($filepath);
              $filepath = implode('/', $filepath);
              $filepath = ($filepath === '') ? '/' : "/$filepath/";
              $this->create_directory($contextid, $component, $filearea, $itemid, $filepath, $userid);
          }
  
          return $dir_info;
      }
code: public function create_directory($contextid, $component, $filearea, $itemid, $filepath, $userid = null) {
          global $DB;
  
          // validate all parameters, we do not want any rubbish stored in database, right?
          if (!is_number($contextid) or $contextid < 1) {
              throw new file_exception('storedfileproblem', 'Invalid contextid');
          }
  
          $component = clean_param($component, PARAM_COMPONENT);
          if (empty($component)) {
              throw new file_exception('storedfileproblem', 'Invalid component');
          }
  
          $filearea = clean_param($filearea, PARAM_AREA);
          if (empty($filearea)) {
              throw new file_exception('storedfileproblem', 'Invalid filearea');
          }
  
          if (!is_number($itemid) or $itemid < 0) {
              throw new file_exception('storedfileproblem', 'Invalid itemid');
          }
  
          $filepath = clean_param($filepath, PARAM_PATH);
          if (strpos($filepath, '/') !== 0 or strrpos($filepath, '/') !== strlen($filepath)-1) {
              // path must start and end with '/'
              throw new file_exception('storedfileproblem', 'Invalid file path');
          }
  
          $pathnamehash = $this->get_pathname_hash($contextid, $component, $filearea, $itemid, $filepath, '.');
  
          if ($dir_info = $this->get_file_by_hash($pathnamehash)) {
              return $dir_info;
          }
  
          static $contenthash = null;
          if (!$contenthash) {
              $this->add_string_to_pool('');
              $contenthash = self::hash_from_string('');
          }
  
          $now = time();
  
          $dir_record = new stdClass();
          $dir_record->contextid = $contextid;
          $dir_record->component = $component;
          $dir_record->filearea  = $filearea;
          $dir_record->itemid    = $itemid;
          $dir_record->filepath  = $filepath;
          $dir_record->filename  = '.';
          $dir_record->contenthash  = $contenthash;
          $dir_record->filesize  = 0;
  
          $dir_record->timecreated  = $now;
          $dir_record->timemodified = $now;
          $dir_record->mimetype     = null;
          $dir_record->userid       = $userid;
  
          $dir_record->pathnamehash = $pathnamehash;
  
          $DB->insert_record('files', $dir_record);
          $dir_info = $this->get_file_by_hash($pathnamehash);
  
          if ($filepath !== '/') {
              //recurse to parent dirs
              $filepath = trim($filepath, '/');
              $filepath = explode('/', $filepath);
              array_pop($filepath);
              $filepath = implode('/', $filepath);
              $filepath = ($filepath === '') ? '/' : "/$filepath/";
              $this->create_directory($contextid, $component, $filearea, $itemid, $filepath, $userid);
          }
  
          return $dir_info;
      }
code_tokens: public function create_directory ( $ contextid , $ component , $ filearea , $ itemid , $ filepath , $ userid = null ) { global $ DB ; // validate all parameters, we do not want any rubbish stored in database, right? if ( ! is_number ( $ contextid ) or $ contextid < 1 ) { throw new file_exception ( 'storedfileproblem' , 'Invalid contextid' ) ; } $ component = clean_param ( $ component , PARAM_COMPONENT ) ; if ( empty ( $ component ) ) { throw new file_exception ( 'storedfileproblem' , 'Invalid component' ) ; } $ filearea = clean_param ( $ filearea , PARAM_AREA ) ; if ( empty ( $ filearea ) ) { throw new file_exception ( 'storedfileproblem' , 'Invalid filearea' ) ; } if ( ! is_number ( $ itemid ) or $ itemid < 0 ) { throw new file_exception ( 'storedfileproblem' , 'Invalid itemid' ) ; } $ filepath = clean_param ( $ filepath , PARAM_PATH ) ; if ( strpos ( $ filepath , '/' ) !== 0 or strrpos ( $ filepath , '/' ) !== strlen ( $ filepath ) - 1 ) { // path must start and end with '/' throw new file_exception ( 'storedfileproblem' , 'Invalid file path' ) ; } $ pathnamehash = $ this -> get_pathname_hash ( $ contextid , $ component , $ filearea , $ itemid , $ filepath , '.' ) ; if ( $ dir_info = $ this -> get_file_by_hash ( $ pathnamehash ) ) { return $ dir_info ; } static $ contenthash = null ; if ( ! $ contenthash ) { $ this -> add_string_to_pool ( '' ) ; $ contenthash = self :: hash_from_string ( '' ) ; } $ now = time ( ) ; $ dir_record = new stdClass ( ) ; $ dir_record -> contextid = $ contextid ; $ dir_record -> component = $ component ; $ dir_record -> filearea = $ filearea ; $ dir_record -> itemid = $ itemid ; $ dir_record -> filepath = $ filepath ; $ dir_record -> filename = '.' ; $ dir_record -> contenthash = $ contenthash ; $ dir_record -> filesize = 0 ; $ dir_record -> timecreated = $ now ; $ dir_record -> timemodified = $ now ; $ dir_record -> mimetype = null ; $ dir_record -> userid = $ userid ; $ dir_record -> pathnamehash = $ pathnamehash ; $ DB -> insert_record ( 'files' , $ dir_record ) ; $ dir_info = $ this -> get_file_by_hash ( $ pathnamehash ) ; if ( $ filepath !== '/' ) { //recurse to parent dirs $ filepath = trim ( $ filepath , '/' ) ; $ filepath = explode ( '/' , $ filepath ) ; array_pop ( $ filepath ) ; $ filepath = implode ( '/' , $ filepath ) ; $ filepath = ( $ filepath === '' ) ? '/' : "/$filepath/" ; $ this -> create_directory ( $ contextid , $ component , $ filearea , $ itemid , $ filepath , $ userid ) ; } return $ dir_info ; }
docstring: Recursively creates directory.
  
  @param int $contextid context ID
  @param string $component component
  @param string $filearea file area
  @param int $itemid item ID
  @param string $filepath file path
  @param int $userid the user ID
  @return bool success
docstring_tokens: Recursively creates directory .