Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1841798
Directory.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
5 KB
Subscribers
None
Directory.php
View Options
<?php
namespace
Sabre\DAV\FSExt
;
use
Sabre\DAV
;
use
Sabre\DAV\FS\Node
;
/**
* Directory class
*
* @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class
Directory
extends
Node
implements
DAV\ICollection
,
DAV\IQuota
,
DAV\IMoveTarget
{
/**
* Creates a new file in the directory
*
* Data will either be supplied as a stream resource, or in certain cases
* as a string. Keep in mind that you may have to support either.
*
* After successful creation of the file, you may choose to return the ETag
* of the new file here.
*
* The returned ETag must be surrounded by double-quotes (The quotes should
* be part of the actual string).
*
* If you cannot accurately determine the ETag, you should not return it.
* If you don't store the file exactly as-is (you're transforming it
* somehow) you should also not return an ETag.
*
* This means that if a subsequent GET to this new file does not exactly
* return the same contents of what was submitted here, you are strongly
* recommended to omit the ETag.
*
* @param string $name Name of the file
* @param resource|string $data Initial payload
* @return null|string
*/
function
createFile
(
$name
,
$data
=
null
)
{
// We're not allowing dots
if
(
$name
==
'.'
||
$name
==
'..'
)
throw
new
DAV\Exception\Forbidden
(
'Permission denied to . and ..'
);
$newPath
=
$this
->
path
.
'/'
.
$name
;
file_put_contents
(
$newPath
,
$data
);
clearstatcache
(
true
,
$newPath
);
return
'"'
.
sha1
(
fileinode
(
$newPath
)
.
filesize
(
$newPath
)
.
filemtime
(
$newPath
)
)
.
'"'
;
}
/**
* Creates a new subdirectory
*
* @param string $name
* @return void
*/
function
createDirectory
(
$name
)
{
// We're not allowing dots
if
(
$name
==
'.'
||
$name
==
'..'
)
throw
new
DAV\Exception\Forbidden
(
'Permission denied to . and ..'
);
$newPath
=
$this
->
path
.
'/'
.
$name
;
mkdir
(
$newPath
);
clearstatcache
(
true
,
$newPath
);
}
/**
* Returns a specific child node, referenced by its name
*
* This method must throw Sabre\DAV\Exception\NotFound if the node does not
* exist.
*
* @param string $name
* @throws DAV\Exception\NotFound
* @return DAV\INode
*/
function
getChild
(
$name
)
{
$path
=
$this
->
path
.
'/'
.
$name
;
if
(!
file_exists
(
$path
))
throw
new
DAV\Exception\NotFound
(
'File could not be located'
);
if
(
$name
==
'.'
||
$name
==
'..'
)
throw
new
DAV\Exception\Forbidden
(
'Permission denied to . and ..'
);
if
(
is_dir
(
$path
))
{
return
new
self
(
$path
);
}
else
{
return
new
File
(
$path
);
}
}
/**
* Checks if a child exists.
*
* @param string $name
* @return bool
*/
function
childExists
(
$name
)
{
if
(
$name
==
'.'
||
$name
==
'..'
)
throw
new
DAV\Exception\Forbidden
(
'Permission denied to . and ..'
);
$path
=
$this
->
path
.
'/'
.
$name
;
return
file_exists
(
$path
);
}
/**
* Returns an array with all the child nodes
*
* @return DAV\INode[]
*/
function
getChildren
()
{
$nodes
=
[];
$iterator
=
new
\FilesystemIterator
(
$this
->
path
,
\FilesystemIterator
::
CURRENT_AS_SELF
|
\FilesystemIterator
::
SKIP_DOTS
);
foreach
(
$iterator
as
$entry
)
{
$node
=
$entry
->
getFilename
();
if
(
$node
===
'.sabredav'
)
continue
;
$nodes
[]
=
$this
->
getChild
(
$node
);
}
return
$nodes
;
}
/**
* Deletes all files in this directory, and then itself
*
* @return bool
*/
function
delete
()
{
// Deleting all children
foreach
(
$this
->
getChildren
()
as
$child
)
$child
->
delete
();
// Removing resource info, if its still around
if
(
file_exists
(
$this
->
path
.
'/.sabredav'
))
unlink
(
$this
->
path
.
'/.sabredav'
);
// Removing the directory itself
rmdir
(
$this
->
path
);
return
true
;
}
/**
* Returns available diskspace information
*
* @return array
*/
function
getQuotaInfo
()
{
$total
=
disk_total_space
(
realpath
(
$this
->
path
));
$free
=
disk_free_space
(
realpath
(
$this
->
path
));
return
[
$total
-
$free
,
$free
];
}
/**
* Moves a node into this collection.
*
* It is up to the implementors to:
* 1. Create the new resource.
* 2. Remove the old resource.
* 3. Transfer any properties or other data.
*
* Generally you should make very sure that your collection can easily move
* the move.
*
* If you don't, just return false, which will trigger sabre/dav to handle
* the move itself. If you return true from this function, the assumption
* is that the move was successful.
*
* @param string $targetName New local file/collection name.
* @param string $sourcePath Full path to source node
* @param DAV\INode $sourceNode Source node itself
* @return bool
*/
function
moveInto
(
$targetName
,
$sourcePath
,
DAV\INode
$sourceNode
)
{
// We only support FSExt\Directory or FSExt\File objects, so
// anything else we want to quickly reject.
if
(!
$sourceNode
instanceof
self
&&
!
$sourceNode
instanceof
File
)
{
return
false
;
}
// PHP allows us to access protected properties from other objects, as
// long as they are defined in a class that has a shared inheritence
// with the current class.
rename
(
$sourceNode
->
path
,
$this
->
path
.
'/'
.
$targetName
);
return
true
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Jan 7, 7:00 PM (17 h, 24 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
914354
Default Alt Text
Directory.php (5 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment