Skip to content
Snippets Groups Projects
Commit 28a72e0e authored by Sam Tuke's avatar Sam Tuke
Browse files

Fixed deleteAll function for deleting all old versions of files (expireAll)

Added new readdir() method to all storage classes and handlers (only working implementation in local.php)
parent f11e4d7c
No related branches found
No related tags found
No related merge requests found
......@@ -49,6 +49,7 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
OC_FakeDirStream::$dirs[$id]=$content;
return opendir('fakedir://'.$id);
}
public function readdir($path){}
public function stat($path){
$ctime=filectime($this->path);
$path=$this->stripPath($path);
......
......@@ -139,6 +139,8 @@ class OC_Filestorage_Shared extends OC_Filestorage {
}
}
public function readdir( $path ) {}
public function is_dir($path) {
if ($path == "" || $path == "/") {
return true;
......
......@@ -303,66 +303,88 @@ class Storage {
*/
public static function expireAll() {
function deleteAll($directory, $empty = false) {
function deleteAll( $directory, $empty = false ) {
if(substr($directory,-1) == "/") {
$directory = substr($directory,0,-1);
// strip leading slash
if( substr( $directory, 0, 1 ) == "/" ) {
$directory = substr( $directory, 1 );
}
// strip trailing slash
if( substr( $directory, -1) == "/" ) {
$directory = substr( $directory, 0, -1 );
}
if(!file_exists($directory) || !is_dir($directory)) {
$view = new \OC_FilesystemView('');
if ( !$view->file_exists( $directory ) || !$view->is_dir( $directory ) ) {
return false;
} elseif(!is_readable($directory)) {
} elseif( !$view->is_readable( $directory ) ) {
return false;
} else {
$directoryHandle = opendir($directory);
$foldername = \OCP\Config::getSystemValue('datadirectory') .'/' . \OCP\USER::getUser() .'/' . $directory; // have to set an absolute path for use with PHP's opendir as OC version doesn't work
$directoryHandle = opendir( $foldername );
while ($contents = readdir($directoryHandle)) {
while ( $contents = $view->readdir( $directoryHandle ) ) {
if( $contents != '.' && $contents != '..') {
if ( $contents != '.' && $contents != '..') {
$path = $directory . "/" . $contents;
if( is_dir($path) ) {
if ( $view->is_dir( $path ) ) {
deleteAll($path);
deleteAll( $path );
} else {
unlink($path);
$view->unlink( \OCP\USER::getUser() .'/' . $path ); // TODO: make unlink use same system path as is_dir
}
}
}
closedir( $directoryHandle );
//$view->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV
if( $empty == false ) {
if ( $empty == false ) {
if(!rmdir($directory)) {
if ( !$view->rmdir( $directory ) ) {
return false;
}
}
}
return true;
}
}
$dir = \OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
deleteAll( $dir, true );
// if ( deleteAll( $dir, 1 ) ) {
//
// echo "<h1>deleted ok</h1>";
//
// } else {
//
// echo "<h1>not deleted</h1>";
//
// }
/*
// FIXME: make this path dynamic
$dir = '/home/samtuke/owncloud/git/oc5/data/admin/versions';
( deleteAll( $dir, 1 ) ? return true : return false );
*/
}
......
......@@ -28,6 +28,7 @@ abstract class OC_Filestorage{
abstract public function mkdir($path);
abstract public function rmdir($path);
abstract public function opendir($path);
abstract public function readdir($path);
abstract public function is_dir($path);
abstract public function is_file($path);
abstract public function stat($path);
......
......@@ -20,6 +20,9 @@ class OC_Filestorage_Local extends OC_Filestorage{
public function opendir($path){
return opendir($this->datadir.$path);
}
public function readdir($handle){
return readdir($handle);
}
public function is_dir($path){
if(substr($path,-1)=='/'){
$path=substr($path,0,-1);
......
......@@ -399,6 +399,9 @@ class OC_Filesystem{
static public function opendir($path){
return self::$defaultInstance->opendir($path);
}
static public function readdir($path){
return self::$defaultInstance->readdir($path);
}
static public function is_dir($path){
return self::$defaultInstance->is_dir($path);
}
......
......@@ -158,6 +158,10 @@ class OC_FilesystemView {
public function opendir($path){
return $this->basicOperation('opendir',$path,array('read'));
}
public function readdir($handle){
$fsLocal= new OC_Filestorage_Local( array( 'datadir' => '/' ) );
return $fsLocal->readdir( $handle );
}
public function is_dir($path){
if($path=='/'){
return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment