public function open(\ElggFile $file, $mode)
{
$fullname = $this->getFilenameOnFilestore($file);
// Split into path and name
$ls = strrpos($fullname, "/");
if ($ls === false) {
$ls = 0;
}
$path = substr($fullname, 0, $ls);
if ($mode === 'read' && !file_exists($fullname)) {
return false;
}
// Try to create the dir for valid write modes
if ($mode == 'write' || $mode == 'append') {
try {
$this->makeDirectoryRoot($path);
} catch (Exception $e) {
_elgg_services()->logger->warn("Couldn't create directory: {$path}");
return false;
}
}
switch ($mode) {
case "read":
$mode = "rb";
break;
case "write":
$mode = "w+b";
break;
case "append":
$mode = "a+b";
break;
default:
$msg = "Unrecognized file mode '" . $mode . "'";
throw new \InvalidParameterException($msg);
}
return fopen($fullname, $mode);
}