From: skodak Date: Wed, 2 Aug 2006 19:40:58 +0000 (+0000) Subject: check_dir_exists() has new recursive parameter - it should help clean up the restore... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=df77b427d58ff43d947a41471e8e1c2ed5a599b7;p=moodle.git check_dir_exists() has new recursive parameter - it should help clean up the restore code a bit and could be handy elsewhere too; tested in both linux and windoze --- diff --git a/lib/moodlelib.php b/lib/moodlelib.php index ac83c37fc4..3ec58c275f 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -7053,19 +7053,46 @@ function remove_dir($dir, $content_only=false) { return rmdir($dir); } -//Function to check if a directory exists -//and, optionally, create it -function check_dir_exists($dir,$create=false) { +/** + * Function to check if a directory exists and optionally create it. + * + * @param string absolute directory path + * @param boolean create directory if does not exist + * @param boolean create directory recursively + * + * @return boolean true if directory exists or created + */ +function check_dir_exists($dir, $create=false, $recursive=false) { global $CFG; $status = true; + if(!is_dir($dir)) { if (!$create) { $status = false; } else { umask(0000); - $status = mkdir ($dir,$CFG->directorypermissions); + if ($recursive) { + // PHP 5.0 has recursive mkdir parameter, but 4.x does not :-( + $dir = str_replace('\\', '/', $dir); //windows compatibility + $dirs = explode('/', $dir); + $dir = array_shift($dirs).'/'; //skip root or drive letter + foreach ($dirs as $part) { + if ($part == '') { + continue; + } + $dir .= $part.'/'; + if (!is_dir($dir)) { + if (!mkdir($dir, $CFG->directorypermissions)) { + $status = false; + break; + } + } + } + } else { + $status = mkdir($dir, $CFG->directorypermissions); + } } } return $status;