diff --git a/README.md b/README.md index 0c5d924..7419e44 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,7 @@ var_dump ( ) ``` +#### Filesystem::getDirectoryPathByUri #### Filesystem::getPagePathByUri Return absolute path to stored page file @@ -148,6 +149,7 @@ var_dump ( ) ``` +#### Filesystem::getDirectoryUriByPath #### Filesystem::getPageUriByPath Return page URI in `dokuwiki:format` diff --git a/src/Dokuwiki/Filesystem.php b/src/Dokuwiki/Filesystem.php index de6db98..89940ed 100644 --- a/src/Dokuwiki/Filesystem.php +++ b/src/Dokuwiki/Filesystem.php @@ -68,7 +68,7 @@ class Filesystem '%s/pages/', $this->_path ), - null, + '', $path ); @@ -93,9 +93,68 @@ class Filesystem $path ); - return urlencode( + return $path; + } + + public function getDirectoryPathByUri(string $uri = ''): ?string + { + $path = rtrim( + sprintf( + '%s/pages/%s', + $this->_path, + str_replace( + ':', + '/', + mb_strtolower( + urldecode( + $uri + ) + ) + ) + ), + '/' + ); + + if (!isset($this->_tree[$path]) || !is_dir($path) || !is_readable($path)) + { + return null; + } + + return $path; + } + + public function getDirectoryUriByPath(string $path): ?string + { + if (!isset($this->_tree[$path]) || !is_dir($path) || !is_readable($path)) + { + return null; + } + + $path = str_replace( + sprintf( + '%s/pages/', + $this->_path + ), + '', $path ); + + $path = trim( + $path, + '/' + ); + + $path = str_replace( + [ + '/' + ], + [ + ':' + ], + $path + ); + + return $path; } private function _index(string $path): void