diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php index 575b8c8d9e..da7e9d6b2a 100644 --- a/apps/files/ajax/delete.php +++ b/apps/files/ajax/delete.php @@ -12,10 +12,12 @@ $files = isset($_POST["file"]) ? stripslashes($_POST["file"]) : stripslashes($_P $files = json_decode($files); $filesWithError = ''; + $success = true; + //Now delete foreach ($files as $file) { - if (!OC_Files::delete($dir, $file)) { + if (($dir === '' && $file === 'Shared') || !\OC\Files\Filesystem::unlink($dir . '/' . $file)) { $filesWithError .= $file . "\n"; $success = false; } diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index cade7e872b..878e4cb215 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -32,7 +32,7 @@ if($doBreadcrumb) { // make filelist $files = array(); -foreach( OC_Files::getdirectorycontent( $dir ) as $i ) { +foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) { $i["date"] = OCP\Util::formatDate($i["mtime"] ); $files[] = $i; } diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php index 4ebc3f42d9..99e43ed23b 100644 --- a/apps/files/ajax/move.php +++ b/apps/files/ajax/move.php @@ -7,19 +7,23 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); // Get data -$dir = stripslashes($_GET["dir"]); -$file = stripslashes($_GET["file"]); -$target = stripslashes(rawurldecode($_GET["target"])); +$dir = stripslashes($_POST["dir"]); +$file = stripslashes($_POST["file"]); +$target = stripslashes(rawurldecode($_POST["target"])); -$l=OC_L10N::get('files'); - -if(OC_Filesystem::file_exists($target . '/' . $file)) { - OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s - File with this name already exists", array($file)) ))); +if(\OC\Files\Filesystem::file_exists($target . '/' . $file)) { + OCP\JSON::error(array("data" => array( "message" => "Could not move $file - File with this name already exists" ))); exit; } -if(OC_Files::move($dir, $file, $target, $file)) { - OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file ))); -} else { - OCP\JSON::error(array("data" => array( "message" => $l->t("Could not move %s", array($file)) ))); +if ($dir != '' || $file != 'Shared') { + $targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file); + $sourceFile = \OC\Files\Filesystem::normalizePath($target . '/' . $file); + if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) { + OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file ))); + } else { + OCP\JSON::error(array("data" => array( "message" => "Could not move $file" ))); + } +}else{ + OCP\JSON::error(array("data" => array( "message" => "Could not move $file" ))); } diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 2bac9bb20b..38714f34a6 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -63,13 +63,12 @@ if($source) { $ctx = stream_context_create(null, array('notification' =>'progress')); $sourceStream=fopen($source, 'rb', false, $ctx); $target=$dir.'/'.$filename; - $result=OC_Filesystem::file_put_contents($target, $sourceStream); + $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream); if($result) { - $target = OC_Filesystem::normalizePath($target); - $meta = OC_FileCache::get($target); + $meta = \OC\Files\Filesystem::getFileInfo($target); $mime=$meta['mimetype']; - $id = OC_FileCache::getId($target); - $eventSource->send('success', array('mime'=>$mime, 'size'=>OC_Filesystem::filesize($target), 'id' => $id)); + $id = $meta['fileid']; + $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id)); } else { $eventSource->send('error', "Error while downloading ".$source. ' to '.$target); } @@ -77,15 +76,15 @@ if($source) { exit(); } else { if($content) { - if(OC_Filesystem::file_put_contents($dir.'/'.$filename, $content)) { - $meta = OC_FileCache::get($dir.'/'.$filename); - $id = OC_FileCache::getId($dir.'/'.$filename); + if(\OC\Files\Filesystem::file_put_contents($dir.'/'.$filename, $content)) { + $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename); + $id = $meta['fileid']; OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id))); exit(); } - }elseif(OC_Files::newFile($dir, $filename, 'file')) { - $meta = OC_FileCache::get($dir.'/'.$filename); - $id = OC_FileCache::getId($dir.'/'.$filename); + }elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) { + $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename); + $id = $meta['fileid']; OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id))); exit(); } diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php index 0f1f2f14eb..e26e1238bc 100644 --- a/apps/files/ajax/newfolder.php +++ b/apps/files/ajax/newfolder.php @@ -19,13 +19,14 @@ if(strpos($foldername, '/')!==false) { exit(); } -if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) { +if(\OC\Files\Filesystem::mkdir($dir . '/' . stripslashes($foldername))) { if ( $dir != '/') { $path = $dir.'/'.$foldername; } else { $path = '/'.$foldername; } - $id = OC_FileCache::getId($path); + $meta = \OC\Files\Filesystem::getFileInfo($path); + $id = $meta['fileid']; OCP\JSON::success(array("data" => array('id'=>$id))); exit(); } diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php index e0aa0bdac5..1cd2944483 100644 --- a/apps/files/ajax/rawlist.php +++ b/apps/files/ajax/rawlist.php @@ -15,7 +15,7 @@ $mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : ''; // make filelist $files = array(); -foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ) { +foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $i ) { $i["date"] = OCP\Util::formatDate($i["mtime"] ); $i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']); $files[] = $i; diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php index 89b4d4bba7..970aaa638d 100644 --- a/apps/files/ajax/rename.php +++ b/apps/files/ajax/rename.php @@ -11,10 +11,14 @@ $dir = stripslashes($_GET["dir"]); $file = stripslashes($_GET["file"]); $newname = stripslashes($_GET["newname"]); -// Delete -if( $newname !== '.' and OC_Files::move( $dir, $file, $dir, $newname )) { - OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname ))); -} else { - $l=OC_L10N::get('files'); - OCP\JSON::error(array("data" => array( "message" => $l->t("Unable to rename file") ))); +if ( $newname !== '.' and ($dir != '' || $file != 'Shared') and $newname !== '.') { + $targetFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname); + $sourceFile = \OC\Files\Filesystem::normalizePath($dir . '/' . $file); + if(\OC\Files\Filesystem::rename($sourceFile, $targetFile)) { + OCP\JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname ))); + } else { + OCP\JSON::error(array("data" => array( "message" => "Unable to rename file" ))); + } +}else{ + OCP\JSON::error(array("data" => array( "message" => "Unable to rename file" ))); } diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php index a819578e30..391b98608b 100644 --- a/apps/files/ajax/scan.php +++ b/apps/files/ajax/scan.php @@ -1,44 +1,71 @@ getAbsolutePath($dir); + +$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath); +$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath); +$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir + +foreach ($mountPoints as $mountPoint) { + $storage = \OC\Files\Filesystem::getStorage($mountPoint); + if ($storage) { + ScanListener::$mountPoints[$storage->getId()] = $mountPoint; + $scanner = $storage->getScanner(); + if ($force) { + $scanner->scan(''); + } else { + $scanner->backgroundScan(); } - - OC_FileCache::scan($dir, $eventSource); - OC_FileCache::clean(); - OCP\DB::commit(); - $eventSource->send('success', true); - } else { - OCP\JSON::success(array('data'=>array('done'=>true))); - exit; - } -} else { - if($checkOnly) { - OCP\JSON::success(array('data'=>array('done'=>false))); - exit; - } - if(isset($eventSource)) { - $eventSource->send('success', false); - } else { - exit; } } + +$eventSource->send('done', ScanListener::$fileCount); $eventSource->close(); + +class ScanListener { + + static public $fileCount = 0; + static public $lastCount = 0; + + /** + * @var \OC\Files\View $view + */ + static public $view; + + /** + * @var array $mountPoints map storage ids to mountpoints + */ + static public $mountPoints = array(); + + /** + * @var \OC_EventSource event source to pass events to + */ + static public $eventSource; + + static function folder($params) { + $internalPath = $params['path']; + $mountPoint = self::$mountPoints[$params['storage']]; + $path = self::$view->getRelativePath($mountPoint . $internalPath); + self::$eventSource->send('folder', $path); + } + + static function file() { + self::$fileCount++; + if (self::$fileCount > self::$lastCount + 20) { //send a count update every 20 files + self::$lastCount = self::$fileCount; + self::$eventSource->send('count', self::$fileCount); + } + } +} diff --git a/apps/files/ajax/upgrade.php b/apps/files/ajax/upgrade.php new file mode 100644 index 0000000000..7237b02c0b --- /dev/null +++ b/apps/files/ajax/upgrade.php @@ -0,0 +1,44 @@ +hasItems()) { + OC_Hook::connect('\OC\Files\Cache\Upgrade', 'migrate_path', $listener, 'upgradePath'); + + OC_DB::beginTransaction(); + $upgrade = new \OC\Files\Cache\Upgrade($legacy); + $count = $legacy->getCount(); + $eventSource->send('total', $count); + $upgrade->upgradePath('/' . $user . '/files'); + OC_DB::commit(); +} +\OC\Files\Cache\Upgrade::upgradeDone($user); +$eventSource->send('done', true); +$eventSource->close(); + +class UpgradeListener { + /** + * @var OC_EventSource $eventSource + */ + private $eventSource; + + private $count = 0; + private $lastSend = 0; + + public function __construct($eventSource) { + $this->eventSource = $eventSource; + } + + public function upgradePath($path) { + $this->count++; + if ($this->count > ($this->lastSend + 5)) { + $this->lastSend = $this->count; + $this->eventSource->send('count', $this->count); + } + } +} diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 415524be62..9ecc1a6c2f 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -21,13 +21,13 @@ if (!isset($_FILES['files'])) { foreach ($_FILES['files']['error'] as $error) { if ($error != 0) { $errors = array( - UPLOAD_ERR_OK => $l->t('There is no error, the file uploaded with success'), - UPLOAD_ERR_INI_SIZE => $l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ') + UPLOAD_ERR_OK => $l->t('There is no error, the file uploaded with success'), + UPLOAD_ERR_INI_SIZE => $l->t('The uploaded file exceeds the upload_max_filesize directive in php.ini: ') . ini_get('upload_max_filesize'), - UPLOAD_ERR_FORM_SIZE => $l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified' + UPLOAD_ERR_FORM_SIZE => $l->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified' . ' in the HTML form'), - UPLOAD_ERR_PARTIAL => $l->t('The uploaded file was only partially uploaded'), - UPLOAD_ERR_NO_FILE => $l->t('No file was uploaded'), + UPLOAD_ERR_PARTIAL => $l->t('The uploaded file was only partially uploaded'), + UPLOAD_ERR_NO_FILE => $l->t('No file was uploaded'), UPLOAD_ERR_NO_TMP_DIR => $l->t('Missing a temporary folder'), UPLOAD_ERR_CANT_WRITE => $l->t('Failed to write to disk'), ); @@ -40,12 +40,17 @@ $files = $_FILES['files']; $dir = $_POST['dir']; $error = ''; +$maxUploadFilesize = OCP\Util::maxUploadFilesize($dir); +$maxHumanFilesize = OCP\Util::humanFileSize($maxUploadFilesize); + $totalSize = 0; foreach ($files['size'] as $size) { $totalSize += $size; } -if ($totalSize > OC_Filesystem::free_space($dir)) { - OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Not enough storage available')), $storageStats))); +if ($totalSize > \OC\Files\Filesystem::free_space($dir)) { + OCP\JSON::error(array('data' => array('message' => $l->t('Not enough space available'), + 'uploadMaxFilesize' => $maxUploadFilesize, + 'maxHumanFilesize' => $maxHumanFilesize))); exit(); } @@ -55,19 +60,19 @@ if (strpos($dir, '..') === false) { for ($i = 0; $i < $fileCount; $i++) { $target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]); // $path needs to be normalized - this failed within drag'n'drop upload to a sub-folder - $target = OC_Filesystem::normalizePath($target); - if (is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { - $meta = OC_FileCache::get($target); - $id = OC_FileCache::getId($target); - + $target = \OC\Files\Filesystem::normalizePath($target); + if (is_uploaded_file($files['tmp_name'][$i]) and \OC\Files\Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { + $meta = \OC\Files\Filesystem::getFileInfo($target); // updated max file size after upload $storageStats = \OCA\files\lib\Helper::buildFileStorageStatistics($dir); - $result[] = array_merge(array('status' => 'success', - 'mime' => $meta['mimetype'], - 'size' => $meta['size'], - 'id' => $id, - 'name' => basename($target)), $storageStats + $result[] = array('status' => 'success', + 'mime' => $meta['mimetype'], + 'size' => $meta['size'], + 'id' => $meta['fileid'], + 'name' => basename($target), + 'uploadMaxFilesize' => $maxUploadFilesize, + 'maxHumanFilesize' => $maxHumanFilesize ); } } diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index dfab94b15e..da17a7f2cc 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -1,5 +1,5 @@ basename($file), ); diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index 0a1b196b06..7c82c839da 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -5,7 +5,7 @@ File Management AGPL Robin Appelman - 4.9 + 4.91 true diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version index 0664a8fd29..2bf1ca5f54 100644 --- a/apps/files/appinfo/version +++ b/apps/files/appinfo/version @@ -1 +1 @@ -1.1.6 +1.1.7 diff --git a/apps/files/css/files.css b/apps/files/css/files.css index a361fe5160..661a2e827a 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -23,7 +23,9 @@ #new>ul>li>p { cursor:pointer; } #new>ul>li>form>input { padding:0.3em; margin:-0.3em; } -#upload { +#trash { height:17px; margin:0 0 0 1em; z-index:1010; position:absolute; right:13.5em; } + +#upload { height:27px; padding:0; margin-left:0.2em; overflow:hidden; } #upload a { @@ -109,6 +111,7 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; } } #fileList .fileactions a.action img { position:relative; top:.2em; } #fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; } +#fileList img.move2trash { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; float:right; } a.action.delete { float:right; } a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } .selectedActions { display:none; float:right; } @@ -119,3 +122,22 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } #scanning-message{ top:40%; left:40%; position:absolute; display:none; } div.crumb a{ padding:0.9em 0 0.7em 0; } + +table.dragshadow { + width:auto; +} +table.dragshadow td.filename { + padding-left:36px; + padding-right:16px; +} +table.dragshadow td.size { + padding-right:8px; +} +#upgrade { + width: 400px; + position: absolute; + top: 200px; + left: 50%; + text-align: center; + margin-left: -200px; +} diff --git a/apps/files/download.php b/apps/files/download.php index 1b70b1e38f..e3fe24e45d 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -26,7 +26,7 @@ OCP\User::checkLoggedIn(); $filename = $_GET["file"]; -if(!OC_Filesystem::file_exists($filename)) { +if(!\OC\Files\Filesystem::file_exists($filename)) { header("HTTP/1.0 404 Not Found"); $tmpl = new OCP\Template( '', '404', 'guest' ); $tmpl->assign('file', $filename); @@ -34,7 +34,7 @@ if(!OC_Filesystem::file_exists($filename)) { exit; } -$ftype=OC_Filesystem::getMimeType( $filename ); +$ftype=\OC\Files\Filesystem::getMimeType( $filename ); header('Content-Type:'.$ftype); if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { @@ -44,7 +44,7 @@ if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { . '; filename="' . rawurlencode( basename($filename) ) . '"' ); } OCP\Response::disableCaching(); -header('Content-Length: '.OC_Filesystem::filesize($filename)); +header('Content-Length: '.\OC\Files\Filesystem::filesize($filename)); OC_Util::obEnd(); -OC_Filesystem::readfile( $filename ); +\OC\Files\Filesystem::readfile( $filename ); diff --git a/apps/files/index.php b/apps/files/index.php index e3197b9e3c..7e767cc8a4 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -29,22 +29,39 @@ OCP\Util::addStyle('files', 'files'); OCP\Util::addscript('files', 'jquery.iframe-transport'); OCP\Util::addscript('files', 'jquery.fileupload'); OCP\Util::addscript('files', 'jquery-visibility'); -OCP\Util::addscript('files', 'files'); OCP\Util::addscript('files', 'filelist'); -OCP\Util::addscript('files', 'fileactions'); -OCP\Util::addscript('files', 'keyboardshortcuts'); OCP\App::setActiveNavigationEntry('files_index'); // Load the files $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; // Redirect if directory does not exist -if (!OC_Filesystem::is_dir($dir . '/')) { +if (!\OC\Files\Filesystem::is_dir($dir . '/')) { header('Location: ' . $_SERVER['SCRIPT_NAME'] . ''); exit(); } +function fileCmp($a, $b) { + if ($a['type'] == 'dir' and $b['type'] != 'dir') { + return -1; + } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') { + return 1; + } else { + return strnatcasecmp($a['name'], $b['name']); + } +} + $files = array(); -foreach (OC_Files::getdirectorycontent($dir) as $i) { +$user = OC_User::getUser(); +if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we need to upgrade the cache + $content = array(); + $needUpgrade = true; + $freeSpace = 0; +} else { + $content = \OC\Files\Filesystem::getDirectoryContent($dir); + $freeSpace = \OC\Files\Filesystem::free_space($dir); + $needUpgrade = false; +} +foreach ($content as $i) { $i['date'] = OCP\Util::formatDate($i['mtime']); if ($i['type'] == 'file') { $fileinfo = pathinfo($i['name']); @@ -55,12 +72,12 @@ foreach (OC_Files::getdirectorycontent($dir) as $i) { $i['extension'] = ''; } } - if ($i['directory'] == '/') { - $i['directory'] = ''; - } + $i['directory'] = $dir; $files[] = $i; } +usort($files, "fileCmp"); + // Make breadcrumb $breadcrumb = array(); $pathtohere = ''; @@ -81,34 +98,43 @@ $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false); -$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir); - $permissions = OCP\PERMISSION_READ; -if (OC_Filesystem::isCreatable($dir . '/')) { +if (\OC\Files\Filesystem::isCreatable($dir . '/')) { $permissions |= OCP\PERMISSION_CREATE; } -if (OC_Filesystem::isUpdatable($dir . '/')) { +if (\OC\Files\Filesystem::isUpdatable($dir . '/')) { $permissions |= OCP\PERMISSION_UPDATE; } -if (OC_Filesystem::isDeletable($dir . '/')) { +if (\OC\Files\Filesystem::isDeletable($dir . '/')) { $permissions |= OCP\PERMISSION_DELETE; } -if (OC_Filesystem::isSharable($dir . '/')) { +if (\OC\Files\Filesystem::isSharable($dir . '/')) { $permissions |= OCP\PERMISSION_SHARE; } -// information about storage capacities -$storageInfo=OC_Helper::getStorageInfo(); +if ($needUpgrade) { + OCP\Util::addscript('files', 'upgrade'); + $tmpl = new OCP\Template('files', 'upgrade', 'user'); + $tmpl->printPage(); +} else { + // information about storage capacities + $storageInfo=OC_Helper::getStorageInfo(); + $maxUploadFilesize=OCP\Util::maxUploadFilesize($dir); -$tmpl = new OCP\Template('files', 'index', 'user'); -$tmpl->assign('fileList', $list->fetchPage(), false); -$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); -$tmpl->assign('dir', OC_Filesystem::normalizePath($dir)); -$tmpl->assign('isCreatable', OC_Filesystem::isCreatable($dir . '/')); -$tmpl->assign('permissions', $permissions); -$tmpl->assign('files', $files); -$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); -$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); -$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); -$tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']); -$tmpl->printPage(); + OCP\Util::addscript('files', 'fileactions'); + OCP\Util::addscript('files', 'files'); + OCP\Util::addscript('files', 'keyboardshortcuts'); + $tmpl = new OCP\Template('files', 'index', 'user'); + $tmpl->assign('fileList', $list->fetchPage(), false); + $tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); + $tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir)); + $tmpl->assign('isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/')); + $tmpl->assign('permissions', $permissions); + $tmpl->assign('files', $files); + $tmpl->assign('trash', \OCP\App::isEnabled('files_trashbin')); + $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); + $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); + $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + $tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']); + $tmpl->printPage(); +} \ No newline at end of file diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index f5ee363a4c..c30f1bcddd 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -147,15 +147,19 @@ $(document).ready(function () { } else { var downloadScope = 'file'; } - FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () { - return OC.imagePath('core', 'actions/download'); - }, function (filename) { - window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val()); - }); - + + if (typeof disableDownloadActions == 'undefined' || !disableDownloadActions) { + FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () { + return OC.imagePath('core', 'actions/download'); + }, function (filename) { + window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val()); + }); + } + $('#fileList tr').each(function(){ FileActions.display($(this).children('td.filename')); }); + }); FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () { @@ -185,6 +189,7 @@ FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () { FileList.rename(filename); }); + FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) { window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent($('#dir').val()).replace(/%2F/g, '/') + '/' + encodeURIComponent(filename); }); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 04b7d92e2c..d0810f7014 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -271,65 +271,39 @@ var FileList={ } }, do_delete:function(files){ + if(files.substr){ + files=[files]; + } + for (var i in files) { + var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date").children(".action.delete"); + var oldHTML = deleteAction[0].outerHTML; + var newHTML = ''; + deleteAction[0].outerHTML = newHTML; + } // Finish any existing actions if (FileList.lastAction) { FileList.lastAction(); } - FileList.prepareDeletion(files); - - if (!FileList.useUndo) { - FileList.lastAction(); - } else { - // NOTE: Temporary fix to change the text to unshared for files in root of Shared folder - if ($('#dir').val() == '/Shared') { - OC.Notification.showHtml(t('files', 'unshared {files}', {'files': escapeHTML(files)})+''+t('files', 'undo')+''); - } else { - OC.Notification.showHtml(t('files', 'deleted {files}', {'files': escapeHTML(files)})+''+t('files', 'undo')+''); - } - } - }, - finishDelete:function(ready,sync){ - if(!FileList.deleteCanceled && FileList.deleteFiles){ - var fileNames=JSON.stringify(FileList.deleteFiles); - $.ajax({ - url: OC.filePath('files', 'ajax', 'delete.php'), - async:!sync, - type:'post', - data: {dir:$('#dir').val(),files:fileNames}, - complete: function(data){ - boolOperationFinished(data, function(){ - OC.Notification.hide(); - $.each(FileList.deleteFiles,function(index,file){ - FileList.remove(file); + var fileNames = JSON.stringify(files); + $.post(OC.filePath('files', 'ajax', 'delete.php'), + {dir:$('#dir').val(),files:fileNames}, + function(result){ + if (result.status == 'success') { + $.each(files,function(index,file){ + var files = $('tr').filterAttr('data-file',file); + files.hide(); + files.find('input[type="checkbox"]').removeAttr('checked'); + files.removeClass('selected'); }); - FileList.deleteCanceled=true; - FileList.deleteFiles=null; - FileList.lastAction = null; - if(ready){ - ready(); - } - }); - } - }); - } - }, - prepareDeletion:function(files){ - if(files.substr){ - files=[files]; - } - $.each(files,function(index,file){ - var files = $('tr').filterAttr('data-file',file); - files.hide(); - files.find('input[type="checkbox"]').removeAttr('checked'); - files.removeClass('selected'); - }); - procesSelection(); - FileList.deleteCanceled=false; - FileList.deleteFiles=files; - FileList.lastAction = function() { - FileList.finishDelete(null, true); - }; + procesSelection(); + } else { + $.each(files,function(index,file) { + var deleteAction = $('tr').filterAttr('data-file',file).children("td.date").children(".move2trash"); + deleteAction[0].outerHTML = oldHTML; + }); + } + }); } }; diff --git a/apps/files/js/files.js b/apps/files/js/files.js index c817d8431e..3d09d6aa2b 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -114,6 +114,11 @@ $(document).ready(function() { $(this).parent().children('#file_upload_start').trigger('click'); return false; }); + + // Show trash bin + $('#trash a').live('click', function() { + window.location=OC.filePath('files_trashbin', '', 'index.php'); + }); var lastChecked; @@ -670,12 +675,8 @@ $(document).ready(function() { }); }); - //check if we need to scan the filesystem - $.get(OC.filePath('files','ajax','scan.php'),{checkonly:'true'}, function(response) { - if(response.data.done){ - scanFiles(); - } - }, "json"); + //do a background scan if needed + scanFiles(); var lastWidth = 0; var breadcrumbs = []; @@ -774,27 +775,23 @@ $(document).ready(function() { } }); -function scanFiles(force,dir){ +function scanFiles(force, dir){ if(!dir){ - dir=''; + dir = ''; } - force=!!force; //cast to bool - scanFiles.scanning=true; - $('#scanning-message').show(); - $('#fileList').remove(); - var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); - scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource); - scannerEventSource.listen('scanning',function(data){ - $('#scan-count').text(t('files', '{count} files scanned', {count: data.count})); - $('#scan-current').text(data.file+'/'); + force = !!force; //cast to bool + scanFiles.scanning = true; + var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); + scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource); + scannerEventSource.listen('count',function(count){ + console.log(count + 'files scanned') }); - scannerEventSource.listen('success',function(success){ + scannerEventSource.listen('folder',function(path){ + console.log('now scanning ' + path) + }); + scannerEventSource.listen('done',function(count){ scanFiles.scanning=false; - if(success){ - window.location.reload(); - }else{ - alert(t('files', 'error while scanning')); - } + console.log('done after ' + count + 'files'); }); } scanFiles.scanning=false; @@ -813,32 +810,101 @@ function updateBreadcrumb(breadcrumbHtml) { $('p.nav').empty().html(breadcrumbHtml); } -//options for file drag/dropp +var createDragShadow = function(event){ + //select dragged file + var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked'); + if (!isDragSelected) { + //select dragged file + $(event.target).parents('tr').find('td input:first').prop('checked',true); + } + + var selectedFiles = getSelectedFiles(); + + if (!isDragSelected && selectedFiles.length == 1) { + //revert the selection + $(event.target).parents('tr').find('td input:first').prop('checked',false); + } + + //also update class when we dragged more than one file + if (selectedFiles.length > 1) { + $(event.target).parents('tr').addClass('selected'); + } + + // build dragshadow + var dragshadow = $('
'); + var tbody = $(''); + dragshadow.append(tbody); + + var dir=$('#dir').val(); + + $(selectedFiles).each(function(i,elem){ + var newtr = $('' + +''+elem.name+''+humanFileSize(elem.size)+'' + +''); + tbody.append(newtr); + if (elem.type === 'dir') { + newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')'); + } else { + getMimeIcon(elem.mime,function(path){ + newtr.find('td.filename').attr('style','background-image:url('+path+')'); + }); + } + }); + + return dragshadow; +} + +//options for file drag/drop var dragOptions={ - distance: 20, revert: 'invalid', opacity: 0.7, helper: 'clone', + revert: 'invalid', revertDuration: 300, + opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 }, + helper: createDragShadow, cursor: 'move', stop: function(event, ui) { $('#fileList tr td.filename').addClass('ui-draggable'); } -}; +} + var folderDropOptions={ drop: function( event, ui ) { - var file=ui.draggable.parent().data('file'); - var target=$(this).find('.nametext').text().trim(); - var dir=$('#dir').val(); - $.ajax({ - url: OC.filePath('files', 'ajax', 'move.php'), - data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(dir)+'/'+encodeURIComponent(target), - complete: function(data){boolOperationFinished(data, function(){ - var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename'); - el.draggable('destroy'); - FileList.remove(file); - });} + //don't allow moving a file into a selected folder + if ($(event.target).parents('tr').find('td input:first').prop('checked') === true) { + return false; + } + + var target=$.trim($(this).find('.nametext').text()); + + var files = ui.helper.find('tr'); + $(files).each(function(i,row){ + var dir = $(row).data('dir'); + var file = $(row).data('filename'); + $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) { + if (result) { + if (result.status === 'success') { + //recalculate folder size + var oldSize = $('#fileList tr').filterAttr('data-file',target).data('size'); + var newSize = oldSize + $('#fileList tr').filterAttr('data-file',file).data('size'); + $('#fileList tr').filterAttr('data-file',target).data('size', newSize); + $('#fileList tr').filterAttr('data-file',target).find('td.filesize').text(humanFileSize(newSize)); + + FileList.remove(file); + procesSelection(); + $('#notification').hide(); + } else { + $('#notification').hide(); + $('#notification').text(result.data.message); + $('#notification').fadeIn(); + } + } else { + OC.dialogs.alert(t('Error moving file')); + } + }); }); - } + }, + tolerance: 'pointer' } + var crumbDropOptions={ drop: function( event, ui ) { - var file=ui.draggable.parent().data('file'); var target=$(this).data('dir'); var dir=$('#dir').val(); while(dir.substr(0,1)=='/'){//remove extra leading /'s @@ -851,12 +917,25 @@ var crumbDropOptions={ if(target==dir || target+'/'==dir){ return; } - $.ajax({ - url: OC.filePath('files', 'ajax', 'move.php'), - data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(target), - complete: function(data){boolOperationFinished(data, function(){ - FileList.remove(file); - });} + var files = ui.helper.find('tr'); + $(files).each(function(i,row){ + var dir = $(row).data('dir'); + var file = $(row).data('filename'); + $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { + if (result) { + if (result.status === 'success') { + FileList.remove(file); + procesSelection(); + $('#notification').hide(); + } else { + $('#notification').hide(); + $('#notification').text(result.data.message); + $('#notification').fadeIn(); + } + } else { + OC.dialogs.alert(t('Error moving file')); + } + }); }); }, tolerance: 'pointer' @@ -963,7 +1042,7 @@ function getUniqueName(name){ num=parseInt(numMatch[numMatch.length-1])+1; base=base.split('(') base.pop(); - base=base.join('(').trim(); + base=$.trim(base.join('(')); } name=base+' ('+num+')'; if (extension) { diff --git a/apps/files/js/upgrade.js b/apps/files/js/upgrade.js new file mode 100644 index 0000000000..02d57fc9e6 --- /dev/null +++ b/apps/files/js/upgrade.js @@ -0,0 +1,17 @@ +$(document).ready(function () { + var eventSource, total, bar = $('#progressbar'); + console.log('start'); + bar.progressbar({value: 0}); + eventSource = new OC.EventSource(OC.filePath('files', 'ajax', 'upgrade.php')); + eventSource.listen('total', function (count) { + total = count; + console.log(count + ' files needed to be migrated'); + }); + eventSource.listen('count', function (count) { + bar.progressbar({value: (count / total) * 100}); + console.log(count); + }); + eventSource.listen('done', function () { + document.location.reload(); + }); +}); diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php index d59463bb7a..986d92f85f 100644 --- a/apps/files/l10n/bn_BD.php +++ b/apps/files/l10n/bn_BD.php @@ -1,7 +1,4 @@ "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান", -"Could not move %s" => "%s কে স্থানান্তর করা সম্ভব হলো না", -"Unable to rename file" => "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না", "No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমস্যা অজ্ঞাত।", "There is no error, the file uploaded with success" => "কোন সমস্যা নেই, ফাইল আপলোড সুসম্পন্ন হয়েছে", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "আপলোড করা ফাইলটি php.ini তে বর্ণিত upload_max_filesize নির্দেশিত আয়তন অতিক্রম করছেঃ", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।", "URL cannot be empty." => "URL ফাঁকা রাখা যাবে না।", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud এর জন্য সংরক্ষিত।", -"{count} files scanned" => "{count} টি ফাইল স্ক্যান করা হয়েছে", -"error while scanning" => "স্ক্যান করার সময় সমস্যা দেখা দিয়েছে", "Name" => "নাম", "Size" => "আকার", "Modified" => "পরিবর্তিত", diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php index ceec026478..5c8d5626d1 100644 --- a/apps/files/l10n/ca.php +++ b/apps/files/l10n/ca.php @@ -1,7 +1,4 @@ "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom", -"Could not move %s" => " No s'ha pogut moure %s", -"Unable to rename file" => "No es pot canviar el nom del fitxer", "No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut", "There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "El fitxer no s'ha pujat", "Missing a temporary folder" => "S'ha perdut un fitxer temporal", "Failed to write to disk" => "Ha fallat en escriure al disc", -"Not enough storage available" => "No hi ha prou espai disponible", "Invalid directory." => "Directori no vàlid.", "Files" => "Fitxers", "Unshare" => "Deixa de compartir", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", "URL cannot be empty." => "La URL no pot ser buida", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud", -"{count} files scanned" => "{count} fitxers escannejats", -"error while scanning" => "error durant l'escaneig", "Name" => "Nom", "Size" => "Mida", "Modified" => "Modificat", diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php index 86b254ca8c..b231e70809 100644 --- a/apps/files/l10n/cs_CZ.php +++ b/apps/files/l10n/cs_CZ.php @@ -1,7 +1,4 @@ "Nelze přesunout %s - existuje soubor se stejným názvem", -"Could not move %s" => "Nelze přesunout %s", -"Unable to rename file" => "Nelze přejmenovat soubor", "No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba", "There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Žádný soubor nebyl odeslán", "Missing a temporary folder" => "Chybí adresář pro dočasné soubory", "Failed to write to disk" => "Zápis na disk selhal", -"Not enough storage available" => "Nedostatek dostupného úložného prostoru", "Invalid directory." => "Neplatný adresář", "Files" => "Soubory", "Unshare" => "Zrušit sdílení", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání.", "URL cannot be empty." => "URL nemůže být prázdná", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud", -"{count} files scanned" => "prozkoumáno {count} souborů", -"error while scanning" => "chyba při prohledávání", "Name" => "Název", "Size" => "Velikost", "Modified" => "Změněno", diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 2f9ae8fbb8..051bb40a8e 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -1,7 +1,4 @@ "Kunne ikke flytte %s - der findes allerede en fil med dette navn", -"Could not move %s" => "Kunne ikke flytte %s", -"Unable to rename file" => "Kunne ikke omdøbe fil", "No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.", "There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini", @@ -10,7 +7,6 @@ "No file was uploaded" => "Ingen fil blev uploadet", "Missing a temporary folder" => "Mangler en midlertidig mappe", "Failed to write to disk" => "Fejl ved skrivning til disk.", -"Not enough storage available" => "Der er ikke nok plads til rådlighed", "Invalid directory." => "Ugyldig mappe.", "Files" => "Filer", "Unshare" => "Fjern deling", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", "URL cannot be empty." => "URLen kan ikke være tom.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud", -"{count} files scanned" => "{count} filer skannet", -"error while scanning" => "fejl under scanning", "Name" => "Navn", "Size" => "Størrelse", "Modified" => "Ændret", diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php index db2476865f..072d155ab1 100644 --- a/apps/files/l10n/de.php +++ b/apps/files/l10n/de.php @@ -1,7 +1,4 @@ "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.", -"Could not move %s" => "Konnte %s nicht verschieben", -"Unable to rename file" => "Konnte Datei nicht umbenennen", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -10,7 +7,6 @@ "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Temporärer Ordner fehlt.", "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte", -"Not enough storage available" => "Nicht genug Speicherplatz verfügbar", "Invalid directory." => "Ungültiges Verzeichnis", "Files" => "Dateien", "Unshare" => "Nicht mehr freigeben", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", "URL cannot be empty." => "Die URL darf nicht leer sein", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten.", -"{count} files scanned" => "{count} Dateien wurden gescannt", -"error while scanning" => "Fehler beim Scannen", "Name" => "Name", "Size" => "Größe", "Modified" => "Bearbeitet", diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php index 72751a7fb6..f7275c6e58 100644 --- a/apps/files/l10n/de_DE.php +++ b/apps/files/l10n/de_DE.php @@ -1,7 +1,4 @@ "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits", -"Could not move %s" => "Konnte %s nicht verschieben", -"Unable to rename file" => "Konnte Datei nicht umbenennen", "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -10,7 +7,6 @@ "No file was uploaded" => "Es wurde keine Datei hochgeladen.", "Missing a temporary folder" => "Der temporäre Ordner fehlt.", "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte", -"Not enough storage available" => "Nicht genug Speicher vorhanden.", "Invalid directory." => "Ungültiges Verzeichnis.", "Files" => "Dateien", "Unshare" => "Nicht mehr freigeben", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", "URL cannot be empty." => "Die URL darf nicht leer sein.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten", -"{count} files scanned" => "{count} Dateien wurden gescannt", -"error while scanning" => "Fehler beim Scannen", "Name" => "Name", "Size" => "Größe", "Modified" => "Bearbeitet", diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 196831b985..b8bb487203 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -1,7 +1,4 @@ "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα", -"Could not move %s" => "Αδυναμία μετακίνησης του %s", -"Unable to rename file" => "Αδυναμία μετονομασίας αρχείου", "No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα", "There is no error, the file uploaded with success" => "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Το απεσταλμένο αρχείο ξεπερνά την οδηγία upload_max_filesize στο php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε", "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος", "Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο", -"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος", "Invalid directory." => "Μη έγκυρος φάκελος.", "Files" => "Αρχεία", "Unshare" => "Διακοπή κοινής χρήσης", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", "URL cannot be empty." => "Η URL δεν πρέπει να είναι κενή.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από ο Owncloud", -"{count} files scanned" => "{count} αρχεία ανιχνεύτηκαν", -"error while scanning" => "σφάλμα κατά την ανίχνευση", "Name" => "Όνομα", "Size" => "Μέγεθος", "Modified" => "Τροποποιήθηκε", diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php index fc4367c55a..f885bef5cd 100644 --- a/apps/files/l10n/eo.php +++ b/apps/files/l10n/eo.php @@ -1,7 +1,4 @@ "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas", -"Could not move %s" => "Ne eblis movi %s", -"Unable to rename file" => "Ne eblis alinomigi dosieron", "No file was uploaded. Unknown error" => "Neniu dosiero alŝutiĝis. Nekonata eraro.", "There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alŝutiĝis sukcese", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini: ", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", "URL cannot be empty." => "URL ne povas esti malplena.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nevalida dosierujnomo. Uzo de “Shared” rezervatas de Owncloud.", -"{count} files scanned" => "{count} dosieroj skaniĝis", -"error while scanning" => "eraro dum skano", "Name" => "Nomo", "Size" => "Grando", "Modified" => "Modifita", diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php index 1620208559..260ecd42e4 100644 --- a/apps/files/l10n/es.php +++ b/apps/files/l10n/es.php @@ -1,7 +1,4 @@ "No se puede mover %s - Ya existe un archivo con ese nombre", -"Could not move %s" => "No se puede mover %s", -"Unable to rename file" => "No se puede renombrar el archivo", "No file was uploaded. Unknown error" => "Fallo no se subió el fichero", "There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida.", "URL cannot be empty." => "La URL no puede estar vacía.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud", -"{count} files scanned" => "{count} archivos escaneados", -"error while scanning" => "error escaneando", "Name" => "Nombre", "Size" => "Tamaño", "Modified" => "Modificado", diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php index cd8347a14a..32219b4304 100644 --- a/apps/files/l10n/es_AR.php +++ b/apps/files/l10n/es_AR.php @@ -1,7 +1,4 @@ "No se pudo mover %s - Un archivo con este nombre ya existe", -"Could not move %s" => "No se pudo mover %s ", -"Unable to rename file" => "No fue posible cambiar el nombre al archivo", "No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido", "There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:", @@ -27,6 +24,8 @@ "'.' is an invalid file name." => "'.' es un nombre de archivo inválido.", "File name cannot be empty." => "El nombre del archivo no puede quedar vacío.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.", +"Your storage is full, files can not be updated or synced anymore!" => "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando", +"Your storage is almost full ({usedSpacePercent}%)" => "El almacenamiento está casi lleno ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Tu descarga esta siendo preparada. Esto puede tardar algun tiempo si los archivos son muy grandes.", "Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes", "Upload Error" => "Error al subir el archivo", @@ -38,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", "URL cannot be empty." => "La URL no puede estar vacía", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud", -"{count} files scanned" => "{count} archivos escaneados", -"error while scanning" => "error mientras se escaneaba", "Name" => "Nombre", "Size" => "Tamaño", "Modified" => "Modificado", diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php index 1df237baa8..dd183ff935 100644 --- a/apps/files/l10n/et_EE.php +++ b/apps/files/l10n/et_EE.php @@ -29,8 +29,6 @@ "Upload cancelled." => "Üleslaadimine tühistati.", "File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", "URL cannot be empty." => "URL ei saa olla tühi.", -"{count} files scanned" => "{count} faili skännitud", -"error while scanning" => "viga skännimisel", "Name" => "Nimi", "Size" => "Suurus", "Modified" => "Muudetud", diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php index 8b8f6d2bd1..4227c16543 100644 --- a/apps/files/l10n/eu.php +++ b/apps/files/l10n/eu.php @@ -1,7 +1,4 @@ "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da", -"Could not move %s" => "Ezin dira fitxategiak mugitu %s", -"Unable to rename file" => "Ezin izan da fitxategia berrizendatu", "No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna", "There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Ez da fitxategirik igo", "Missing a temporary folder" => "Aldi baterako karpeta falta da", "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan", -"Not enough storage available" => "Ez dago behar aina leku erabilgarri,", "Invalid directory." => "Baliogabeko karpeta.", "Files" => "Fitxategiak", "Unshare" => "Ez elkarbanatu", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", "URL cannot be empty." => "URLa ezin da hutsik egon.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du", -"{count} files scanned" => "{count} fitxategi eskaneatuta", -"error while scanning" => "errore bat egon da eskaneatzen zen bitartean", "Name" => "Izena", "Size" => "Tamaina", "Modified" => "Aldatuta", diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php index 3d3bfad1f9..41eab2a60a 100644 --- a/apps/files/l10n/fa.php +++ b/apps/files/l10n/fa.php @@ -1,7 +1,4 @@ "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ", -"Could not move %s" => "%s نمی تواند حرکت کند ", -"Unable to rename file" => "قادر به تغییر نام پرونده نیست.", "No file was uploaded. Unknown error" => "هیچ فایلی آپلود نشد.خطای ناشناس", "There is no error, the file uploaded with success" => "هیچ خطایی وجود ندارد فایل با موفقیت بار گذاری شد", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "پرونده آپلود شده بیش ازدستور ماکزیمم_حجم فایل_برای آپلود در php.ini استفاده کرده است.", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ", "URL cannot be empty." => "URL نمی تواند خالی باشد.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "نام پوشه نامعتبر است. استفاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است.", -"{count} files scanned" => "{ شمار } فایل های اسکن شده", -"error while scanning" => "خطا در حال انجام اسکن ", "Name" => "نام", "Size" => "اندازه", "Modified" => "تغییر یافته", diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php index 999bd7884d..aa0393af32 100644 --- a/apps/files/l10n/fi_FI.php +++ b/apps/files/l10n/fi_FI.php @@ -1,7 +1,4 @@ "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa", -"Could not move %s" => "Kohteen %s siirto ei onnistunut", -"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut", "No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe", "There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan", @@ -9,7 +6,6 @@ "No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty", "Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa", "Failed to write to disk" => "Levylle kirjoitus epäonnistui", -"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä", "Invalid directory." => "Virheellinen kansio.", "Files" => "Tiedostot", "Unshare" => "Peru jakaminen", diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php index ce8ef959d0..d0459f644f 100644 --- a/apps/files/l10n/fr.php +++ b/apps/files/l10n/fr.php @@ -1,7 +1,4 @@ "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà", -"Could not move %s" => "Impossible de déplacer %s", -"Unable to rename file" => "Impossible de renommer le fichier", "No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue", "There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Aucun fichier n'a été téléversé", "Missing a temporary folder" => "Il manque un répertoire temporaire", "Failed to write to disk" => "Erreur d'écriture sur le disque", -"Not enough storage available" => "Plus assez d'espace de stockage disponible", "Invalid directory." => "Dossier invalide.", "Files" => "Fichiers", "Unshare" => "Ne plus partager", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", "URL cannot be empty." => "L'URL ne peut-être vide", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud", -"{count} files scanned" => "{count} fichiers indexés", -"error while scanning" => "erreur lors de l'indexation", "Name" => "Nom", "Size" => "Taille", "Modified" => "Modifié", diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php index 3bac12b351..271945890c 100644 --- a/apps/files/l10n/gl.php +++ b/apps/files/l10n/gl.php @@ -1,7 +1,4 @@ "Non se moveu %s - Xa existe un ficheiro con ese nome.", -"Could not move %s" => "Non se puido mover %s", -"Unable to rename file" => "Non se pode renomear o ficheiro", "No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.", "There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida.", "URL cannot be empty." => "URL non pode quedar baleiro.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud", -"{count} files scanned" => "{count} ficheiros escaneados", -"error while scanning" => "erro mentres analizaba", "Name" => "Nome", "Size" => "Tamaño", "Modified" => "Modificado", diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php index 62b397e129..26090f6d69 100644 --- a/apps/files/l10n/he.php +++ b/apps/files/l10n/he.php @@ -30,8 +30,6 @@ "Upload cancelled." => "ההעלאה בוטלה.", "File upload is in progress. Leaving the page now will cancel the upload." => "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.", "URL cannot be empty." => "קישור אינו יכול להיות ריק.", -"{count} files scanned" => "{count} קבצים נסרקו", -"error while scanning" => "אירעה שגיאה במהלך הסריקה", "Name" => "שם", "Size" => "גודל", "Modified" => "זמן שינוי", diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php index 7000caf0d1..4f4546aaf0 100644 --- a/apps/files/l10n/hr.php +++ b/apps/files/l10n/hr.php @@ -20,7 +20,6 @@ "1 file uploading" => "1 datoteka se učitava", "Upload cancelled." => "Slanje poništeno.", "File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.", -"error while scanning" => "grečka prilikom skeniranja", "Name" => "Naziv", "Size" => "Veličina", "Modified" => "Zadnja promjena", diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php index be3dd1b9c3..3b74026485 100644 --- a/apps/files/l10n/hu_HU.php +++ b/apps/files/l10n/hu_HU.php @@ -1,7 +1,4 @@ "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel", -"Could not move %s" => "Nem sikerült %s áthelyezése", -"Unable to rename file" => "Nem lehet átnevezni a fájlt", "No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba", "There is no error, the file uploaded with success" => "A fájlt sikerült feltölteni", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét.", @@ -10,7 +7,6 @@ "No file was uploaded" => "Nem töltődött fel semmi", "Missing a temporary folder" => "Hiányzik egy ideiglenes mappa", "Failed to write to disk" => "Nem sikerült a lemezre történő írás", -"Not enough storage available" => "Nincs elég szabad hely.", "Invalid directory." => "Érvénytelen mappa.", "Files" => "Fájlok", "Unshare" => "Megosztás visszavonása", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", "URL cannot be empty." => "Az URL nem lehet semmi.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges.", -"{count} files scanned" => "{count} fájlt találtunk", -"error while scanning" => "Hiba a fájllista-ellenőrzés során", "Name" => "Név", "Size" => "Méret", "Modified" => "Módosítva", diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php index 297853c816..3f379a621b 100644 --- a/apps/files/l10n/is.php +++ b/apps/files/l10n/is.php @@ -1,7 +1,4 @@ "Gat ekki fært %s - Skrá með þessu nafni er þegar til", -"Could not move %s" => "Gat ekki fært %s", -"Unable to rename file" => "Gat ekki endurskýrt skrá", "No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.", "There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.", "URL cannot be empty." => "Vefslóð má ekki vera tóm.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud", -"{count} files scanned" => "{count} skrár skimaðar", -"error while scanning" => "villa við skimun", "Name" => "Nafn", "Size" => "Stærð", "Modified" => "Breytt", diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php index 63bc71d672..8a9060b310 100644 --- a/apps/files/l10n/it.php +++ b/apps/files/l10n/it.php @@ -1,7 +1,4 @@ "Impossibile spostare %s - un file con questo nome esiste già", -"Could not move %s" => "Impossibile spostare %s", -"Unable to rename file" => "Impossibile rinominare il file", "No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto", "There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Nessun file è stato caricato", "Missing a temporary folder" => "Cartella temporanea mancante", "Failed to write to disk" => "Scrittura su disco non riuscita", -"Not enough storage available" => "Spazio di archiviazione insufficiente", "Invalid directory." => "Cartella non valida.", "Files" => "File", "Unshare" => "Rimuovi condivisione", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", "URL cannot be empty." => "L'URL non può essere vuoto.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud", -"{count} files scanned" => "{count} file analizzati", -"error while scanning" => "errore durante la scansione", "Name" => "Nome", "Size" => "Dimensione", "Modified" => "Modificato", diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php index 4a36e8aa42..ccb4eb04dc 100644 --- a/apps/files/l10n/ja_JP.php +++ b/apps/files/l10n/ja_JP.php @@ -1,7 +1,4 @@ "%s を移動できませんでした ― この名前のファイルはすでに存在します", -"Could not move %s" => "%s を移動できませんでした", -"Unable to rename file" => "ファイル名の変更ができません", "No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー", "There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:", @@ -10,7 +7,6 @@ "No file was uploaded" => "ファイルはアップロードされませんでした", "Missing a temporary folder" => "テンポラリフォルダが見つかりません", "Failed to write to disk" => "ディスクへの書き込みに失敗しました", -"Not enough storage available" => "ストレージに十分な空き容量がありません", "Invalid directory." => "無効なディレクトリです。", "Files" => "ファイル", "Unshare" => "共有しない", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", "URL cannot be empty." => "URLは空にできません。", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無効なフォルダ名です。'Shared' の利用は ownCloud が予約済みです。", -"{count} files scanned" => "{count} ファイルをスキャン", -"error while scanning" => "スキャン中のエラー", "Name" => "名前", "Size" => "サイズ", "Modified" => "更新日時", diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php index 08225c114d..72051c3ea9 100644 --- a/apps/files/l10n/ka_GE.php +++ b/apps/files/l10n/ka_GE.php @@ -26,8 +26,6 @@ "{count} files uploading" => "{count} ფაილი იტვირთება", "Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.", "File upload is in progress. Leaving the page now will cancel the upload." => "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას", -"{count} files scanned" => "{count} ფაილი სკანირებულია", -"error while scanning" => "შეცდომა სკანირებისას", "Name" => "სახელი", "Size" => "ზომა", "Modified" => "შეცვლილია", diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php index cd95d61e4d..b9b4ff1a76 100644 --- a/apps/files/l10n/ko.php +++ b/apps/files/l10n/ko.php @@ -1,7 +1,4 @@ "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함", -"Could not move %s" => "%s 항목을 이딩시키지 못하였음", -"Unable to rename file" => "파일 이름바꾸기 할 수 없음", "No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다", "There is no error, the file uploaded with success" => "업로드에 성공하였습니다.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", "URL cannot be empty." => "URL을 입력해야 합니다.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "폴더 이름이 유효하지 않습니다. ", -"{count} files scanned" => "파일 {count}개 검색됨", -"error while scanning" => "검색 중 오류 발생", "Name" => "이름", "Size" => "크기", "Modified" => "수정됨", diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php index da209619e2..5172964658 100644 --- a/apps/files/l10n/lt_LT.php +++ b/apps/files/l10n/lt_LT.php @@ -26,8 +26,6 @@ "{count} files uploading" => "{count} įkeliami failai", "Upload cancelled." => "Įkėlimas atšauktas.", "File upload is in progress. Leaving the page now will cancel the upload." => "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", -"{count} files scanned" => "{count} praskanuoti failai", -"error while scanning" => "klaida skanuojant", "Name" => "Pavadinimas", "Size" => "Dydis", "Modified" => "Pakeista", diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php index 0ca08d6bc6..1b828d1be1 100644 --- a/apps/files/l10n/mk.php +++ b/apps/files/l10n/mk.php @@ -30,8 +30,6 @@ "Upload cancelled." => "Преземањето е прекинато.", "File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", "URL cannot be empty." => "Адресата неможе да биде празна.", -"{count} files scanned" => "{count} датотеки скенирани", -"error while scanning" => "грешка при скенирање", "Name" => "Име", "Size" => "Големина", "Modified" => "Променето", diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php index 8bb7cfb2f9..3a500b4fb3 100644 --- a/apps/files/l10n/nb_NO.php +++ b/apps/files/l10n/nb_NO.php @@ -28,8 +28,6 @@ "Upload cancelled." => "Opplasting avbrutt.", "File upload is in progress. Leaving the page now will cancel the upload." => "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", "URL cannot be empty." => "URL-en kan ikke være tom.", -"{count} files scanned" => "{count} filer lest inn", -"error while scanning" => "feil under skanning", "Name" => "Navn", "Size" => "Størrelse", "Modified" => "Endret", diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php index c78ac346d1..f99cdaa2c1 100644 --- a/apps/files/l10n/nl.php +++ b/apps/files/l10n/nl.php @@ -1,7 +1,4 @@ "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam", -"Could not move %s" => "Kon %s niet verplaatsen", -"Unable to rename file" => "Kan bestand niet hernoemen", "No file was uploaded. Unknown error" => "Er was geen bestand geladen. Onbekende fout", "There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", "URL cannot be empty." => "URL kan niet leeg zijn.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud", -"{count} files scanned" => "{count} bestanden gescanned", -"error while scanning" => "Fout tijdens het scannen", "Name" => "Naam", "Size" => "Bestandsgrootte", "Modified" => "Laatst aangepast", diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php index 76c8d6b655..78045b299e 100644 --- a/apps/files/l10n/oc.php +++ b/apps/files/l10n/oc.php @@ -19,7 +19,6 @@ "1 file uploading" => "1 fichièr al amontcargar", "Upload cancelled." => "Amontcargar anullat.", "File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ", -"error while scanning" => "error pendant l'exploracion", "Name" => "Nom", "Size" => "Talha", "Modified" => "Modificat", diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php index 477e14491f..badcacc29d 100644 --- a/apps/files/l10n/pl.php +++ b/apps/files/l10n/pl.php @@ -1,7 +1,4 @@ "Nie można było przenieść %s - Plik o takiej nazwie już istnieje", -"Could not move %s" => "Nie można było przenieść %s", -"Unable to rename file" => "Nie można zmienić nazwy pliku", "No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd", "There is no error, the file uploaded with success" => "Przesłano plik", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane.", "URL cannot be empty." => "URL nie może być pusty.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud", -"{count} files scanned" => "{count} pliki skanowane", -"error while scanning" => "Wystąpił błąd podczas skanowania", "Name" => "Nazwa", "Size" => "Rozmiar", "Modified" => "Czas modyfikacji", diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 33014297ee..dd684db26a 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -7,6 +7,7 @@ "No file was uploaded" => "Nenhum arquivo foi transferido", "Missing a temporary folder" => "Pasta temporária não encontrada", "Failed to write to disk" => "Falha ao escrever no disco", +"Invalid directory." => "Diretório inválido.", "Files" => "Arquivos", "Unshare" => "Descompartilhar", "Delete" => "Excluir", @@ -20,7 +21,10 @@ "replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ", "unshared {files}" => "{files} não compartilhados", "deleted {files}" => "{files} apagados", +"'.' is an invalid file name." => "'.' é um nome de arquivo inválido.", +"File name cannot be empty." => "O nome do arquivo não pode estar vazio.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", +"Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.", "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.", "Upload Error" => "Erro de envio", "Close" => "Fechar", @@ -30,8 +34,7 @@ "Upload cancelled." => "Envio cancelado.", "File upload is in progress. Leaving the page now will cancel the upload." => "Upload em andamento. Sair da página agora resultará no cancelamento do envio.", "URL cannot be empty." => "URL não pode ficar em branco", -"{count} files scanned" => "{count} arquivos scaneados", -"error while scanning" => "erro durante verificação", +"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud", "Name" => "Nome", "Size" => "Tamanho", "Modified" => "Modificado", diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php index 6cee8d9d88..38f914b960 100644 --- a/apps/files/l10n/pt_PT.php +++ b/apps/files/l10n/pt_PT.php @@ -1,7 +1,4 @@ "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome", -"Could not move %s" => "Não foi possível move o ficheiro %s", -"Unable to rename file" => "Não foi possível renomear o ficheiro", "No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido", "There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize", @@ -10,7 +7,6 @@ "No file was uploaded" => "Não foi enviado nenhum ficheiro", "Missing a temporary folder" => "Falta uma pasta temporária", "Failed to write to disk" => "Falhou a escrita no disco", -"Not enough storage available" => "Não há espaço suficiente em disco", "Invalid directory." => "Directório Inválido", "Files" => "Ficheiros", "Unshare" => "Deixar de partilhar", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora.", "URL cannot be empty." => "O URL não pode estar vazio.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud", -"{count} files scanned" => "{count} ficheiros analisados", -"error while scanning" => "erro ao analisar", "Name" => "Nome", "Size" => "Tamanho", "Modified" => "Modificado", diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php index 424450e920..a06a7c1638 100644 --- a/apps/files/l10n/ro.php +++ b/apps/files/l10n/ro.php @@ -1,7 +1,4 @@ "Nu se poate de mutat %s - Fișier cu acest nume deja există", -"Could not move %s" => "Nu s-a putut muta %s", -"Unable to rename file" => "Nu s-a putut redenumi fișierul", "No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută", "There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", "URL cannot be empty." => "Adresa URL nu poate fi goală.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Ownclou", -"{count} files scanned" => "{count} fisiere scanate", -"error while scanning" => "eroare la scanarea", "Name" => "Nume", "Size" => "Dimensiune", "Modified" => "Modificat", diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php index ae103a9e81..f953d78ad4 100644 --- a/apps/files/l10n/ru.php +++ b/apps/files/l10n/ru.php @@ -1,7 +1,4 @@ "Невозможно переместить %s - файл с таким именем уже существует", -"Could not move %s" => "Невозможно переместить %s", -"Unable to rename file" => "Невозможно переименовать файл", "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка", "There is no error, the file uploaded with success" => "Файл успешно загружен", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Файл превышает размер установленный upload_max_filesize в php.ini:", @@ -37,8 +34,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.", "URL cannot be empty." => "Ссылка не может быть пустой.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Неправильное имя каталога. Имя 'Shared' зарезервировано.", -"{count} files scanned" => "{count} файлов просканировано", -"error while scanning" => "ошибка во время санирования", "Name" => "Название", "Size" => "Размер", "Modified" => "Изменён", diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index 60a7fd0f71..be7cf6c4d8 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -30,8 +30,6 @@ "Upload cancelled." => "Загрузка отменена", "File upload is in progress. Leaving the page now will cancel the upload." => "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена.", "URL cannot be empty." => "URL не должен быть пустым.", -"{count} files scanned" => "{количество} файлов отсканировано", -"error while scanning" => "ошибка при сканировании", "Name" => "Имя", "Size" => "Размер", "Modified" => "Изменен", diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php index 133737cb57..316470d839 100644 --- a/apps/files/l10n/si_LK.php +++ b/apps/files/l10n/si_LK.php @@ -20,7 +20,6 @@ "Upload cancelled." => "උඩුගත කිරීම අත් හරින්න ලදී", "File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත", "URL cannot be empty." => "යොමුව හිස් විය නොහැක", -"error while scanning" => "පරීක්ෂා කිරීමේදී දෝෂයක්", "Name" => "නම", "Size" => "ප්‍රමාණය", "Modified" => "වෙනස් කළ", diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php index bae5670d06..d9a65a92a6 100644 --- a/apps/files/l10n/sk_SK.php +++ b/apps/files/l10n/sk_SK.php @@ -1,7 +1,4 @@ "Nie je možné presunúť %s - súbor s týmto menom už existuje", -"Could not move %s" => "Nie je možné presunúť %s", -"Unable to rename file" => "Nemožno premenovať súbor", "No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba", "There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor predčil konfiguračnú direktívu upload_max_filesize v súbore php.ini:", @@ -27,6 +24,8 @@ "'.' is an invalid file name." => "'.' je neplatné meno súboru.", "File name cannot be empty." => "Meno súboru nemôže byť prázdne", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.", +"Your storage is full, files can not be updated or synced anymore!" => "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", +"Your storage is almost full ({usedSpacePercent}%)" => "Vaše úložisko je takmer plné ({usedSpacePercent}%)", "Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.", "Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov.", "Upload Error" => "Chyba odosielania", @@ -38,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", "URL cannot be empty." => "URL nemôže byť prázdne", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud", -"{count} files scanned" => "{count} súborov prehľadaných", -"error while scanning" => "chyba počas kontroly", "Name" => "Meno", "Size" => "Veľkosť", "Modified" => "Upravené", diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php index fbc6ab83b8..4c0345d16d 100644 --- a/apps/files/l10n/sl.php +++ b/apps/files/l10n/sl.php @@ -30,8 +30,6 @@ "Upload cancelled." => "Pošiljanje je preklicano.", "File upload is in progress. Leaving the page now will cancel the upload." => "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", "URL cannot be empty." => "Naslov URL ne sme biti prazen.", -"{count} files scanned" => "{count} files scanned", -"error while scanning" => "napaka med pregledovanjem datotek", "Name" => "Ime", "Size" => "Velikost", "Modified" => "Spremenjeno", diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php index 71da2da4d1..32addaff40 100644 --- a/apps/files/l10n/sr.php +++ b/apps/files/l10n/sr.php @@ -28,8 +28,6 @@ "{count} files uploading" => "Отпремам {count} датотеке/а", "Upload cancelled." => "Отпремање је прекинуто.", "File upload is in progress. Leaving the page now will cancel the upload." => "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.", -"{count} files scanned" => "Скенирано датотека: {count}", -"error while scanning" => "грешка при скенирању", "Name" => "Назив", "Size" => "Величина", "Modified" => "Измењено", diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index ebcb4626fc..42b82628d4 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -1,7 +1,4 @@ "Kunde inte flytta %s - Det finns redan en fil med detta namn", -"Could not move %s" => "Kan inte flytta %s", -"Unable to rename file" => "Kan inte byta namn på filen", "No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel", "There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:", @@ -10,7 +7,6 @@ "No file was uploaded" => "Ingen fil blev uppladdad", "Missing a temporary folder" => "Saknar en tillfällig mapp", "Failed to write to disk" => "Misslyckades spara till disk", -"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt", "Invalid directory." => "Felaktig mapp.", "Files" => "Filer", "Unshare" => "Sluta dela", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", "URL cannot be empty." => "URL kan inte vara tom.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud", -"{count} files scanned" => "{count} filer skannade", -"error while scanning" => "fel vid skanning", "Name" => "Namn", "Size" => "Storlek", "Modified" => "Ändrad", diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php index 52916fed77..83843b8781 100644 --- a/apps/files/l10n/ta_LK.php +++ b/apps/files/l10n/ta_LK.php @@ -29,8 +29,6 @@ "Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது", "File upload is in progress. Leaving the page now will cancel the upload." => "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.", "URL cannot be empty." => "URL வெறுமையாக இருக்கமுடியாது.", -"{count} files scanned" => "{எண்ணிக்கை} கோப்புகள் வருடப்பட்டது", -"error while scanning" => "வருடும் போதான வழு", "Name" => "பெயர்", "Size" => "அளவு", "Modified" => "மாற்றப்பட்டது", diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index d7fcd82a9d..f31321694b 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -1,7 +1,4 @@ "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", -"Could not move %s" => "ไม่สามารถย้าย %s ได้", -"Unable to rename file" => "ไม่สามารถเปลี่ยนชื่อไฟล์ได้", "No file was uploaded. Unknown error" => "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ", "There is no error, the file uploaded with success" => "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini", @@ -10,7 +7,6 @@ "No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด", "Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย", "Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว", -"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน", "Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง", "Files" => "ไฟล์", "Unshare" => "ยกเลิกการแชร์ข้อมูล", @@ -41,8 +37,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", "URL cannot be empty." => "URL ไม่สามารถเว้นว่างได้", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "ชื่อโฟลเดอร์ไม่ถูกต้อง การใช้งาน 'แชร์' สงวนไว้สำหรับ Owncloud เท่านั้น", -"{count} files scanned" => "สแกนไฟล์แล้ว {count} ไฟล์", -"error while scanning" => "พบข้อผิดพลาดในระหว่างการสแกนไฟล์", "Name" => "ชื่อ", "Size" => "ขนาด", "Modified" => "ปรับปรุงล่าสุด", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index 2eba20fd0a..7552379468 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -1,7 +1,4 @@ "%s taşınamadı. Bu isimde dosya zaten var.", -"Could not move %s" => "%s taşınamadı", -"Unable to rename file" => "Dosya adı değiştirilemedi", "No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata", "There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı.", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur.", "URL cannot be empty." => "URL boş olamaz.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir.", -"{count} files scanned" => "{count} dosya tarandı", -"error while scanning" => "tararamada hata oluşdu", "Name" => "Ad", "Size" => "Boyut", "Modified" => "Değiştirilme", diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php index aafa035ea0..894505e4e9 100644 --- a/apps/files/l10n/uk.php +++ b/apps/files/l10n/uk.php @@ -30,8 +30,6 @@ "Upload cancelled." => "Завантаження перервано.", "File upload is in progress. Leaving the page now will cancel the upload." => "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.", "URL cannot be empty." => "URL не може бути пустим.", -"{count} files scanned" => "{count} файлів проскановано", -"error while scanning" => "помилка при скануванні", "Name" => "Ім'я", "Size" => "Розмір", "Modified" => "Змінено", diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php index ce4f3a7973..1d97973469 100644 --- a/apps/files/l10n/vi.php +++ b/apps/files/l10n/vi.php @@ -29,8 +29,6 @@ "Upload cancelled." => "Hủy tải lên", "File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", "URL cannot be empty." => "URL không được để trống.", -"{count} files scanned" => "{count} tập tin đã được quét", -"error while scanning" => "lỗi trong khi quét", "Name" => "Tên", "Size" => "Kích cỡ", "Modified" => "Thay đổi", diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php index ae1b603369..810bce353b 100644 --- a/apps/files/l10n/zh_CN.GB2312.php +++ b/apps/files/l10n/zh_CN.GB2312.php @@ -28,8 +28,6 @@ "Upload cancelled." => "上传取消了", "File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传。关闭页面会取消上传。", "URL cannot be empty." => "网址不能为空。", -"{count} files scanned" => "{count} 个文件已扫描", -"error while scanning" => "扫描出错", "Name" => "名字", "Size" => "大小", "Modified" => "修改日期", diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php index 2e0f938dcd..2d7a140f52 100644 --- a/apps/files/l10n/zh_CN.php +++ b/apps/files/l10n/zh_CN.php @@ -1,7 +1,4 @@ "无法移动 %s - 同名文件已存在", -"Could not move %s" => "无法移动 %s", -"Unable to rename file" => "无法重命名文件", "No file was uploaded. Unknown error" => "没有文件被上传。未知错误", "There is no error, the file uploaded with success" => "没有发生错误,文件上传成功。", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上传文件大小已超过php.ini中upload_max_filesize所规定的值", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。", "URL cannot be empty." => "URL不能为空", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "无效文件夹名。'共享' 是 Owncloud 预留的文件夹名。", -"{count} files scanned" => "{count} 个文件已扫描。", -"error while scanning" => "扫描时出错", "Name" => "名称", "Size" => "大小", "Modified" => "修改日期", diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php index 8d41a92735..67516bf015 100644 --- a/apps/files/l10n/zh_TW.php +++ b/apps/files/l10n/zh_TW.php @@ -1,7 +1,4 @@ "無法移動 %s - 同名的檔案已經存在", -"Could not move %s" => "無法移動 %s", -"Unable to rename file" => "無法重新命名檔案", "No file was uploaded. Unknown error" => "沒有檔案被上傳。未知的錯誤。", "There is no error, the file uploaded with success" => "無錯誤,檔案上傳成功", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上傳的檔案大小超過 php.ini 當中 upload_max_filesize 參數的設定:", @@ -38,8 +35,6 @@ "File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中。離開此頁面將會取消上傳。", "URL cannot be empty." => "URL 不能為空白.", "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留", -"{count} files scanned" => "{count} 個檔案已掃描", -"error while scanning" => "掃描時發生錯誤", "Name" => "名稱", "Size" => "大小", "Modified" => "修改", diff --git a/apps/files/settings.php b/apps/files/settings.php index ea730a5a72..8687f01313 100644 --- a/apps/files/settings.php +++ b/apps/files/settings.php @@ -32,7 +32,7 @@ OCP\Util::addscript( "files", "files" ); $dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; $files = array(); -foreach( OC_Files::getdirectorycontent( $dir ) as $i ) { +foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) { $i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] ); $files[] = $i; } diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index b66b523ae3..2d4ed9ab2d 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -35,6 +35,11 @@ + + +
-
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php index f3f06d61d6..5c39dda85f 100644 --- a/apps/files/templates/part.list.php +++ b/apps/files/templates/part.list.php @@ -13,7 +13,7 @@ $name = str_replace('%2F', '/', $name); $directory = str_replace('+', '%20', urlencode($file['directory'])); $directory = str_replace('%2F', '/', $directory); ?> - - + @@ -61,4 +61,4 @@ - + t('Upgrading filesystem cache...');?> +
+
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php index 6a6f5510db..2c6b650960 100644 --- a/apps/files_encryption/l10n/es.php +++ b/apps/files_encryption/l10n/es.php @@ -1,9 +1,15 @@ "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión.", -"switched to client side encryption" => "Cambiar a encriptación en lado cliente", -"Change encryption password to login password" => "Cambie la clave de cifrado para ingresar su contraseña", +"switched to client side encryption" => "Cambiar a cifrado del lado del cliente", +"Change encryption password to login password" => "Cambie la clave de cifrado para su contraseña de inicio de sesión", "Please check your passwords and try again." => "Por favor revise su contraseña e intentelo de nuevo.", -"Choose encryption mode:" => "Elegir el modo de encriptado:", +"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión", +"Choose encryption mode:" => "Elegir el modo de cifrado:", +"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Cifrado del lado del Cliente ( es el más seguro, pero hace que sea imposible acceder a sus datos desde la interfaz web)", +"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Cifrado del lado del Servidor (le permite acceder a sus archivos desde la interfaz web y el cliente de escritorio)", +"None (no encryption at all)" => "Ninguno (ningún cifrado en absoluto)", +"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Una vez que haya seleccionado un modo de cifrado no existe forma de cambiarlo de nuevo", +"User specific (let the user decide)" => "Específico del usuario (dejar que el usuario decida)", "Encryption" => "Cifrado", "Exclude the following file types from encryption" => "Excluir del cifrado los siguientes tipos de archivo", "None" => "Ninguno" diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php index 31898f50fd..5cf0b8e4ad 100644 --- a/apps/files_encryption/l10n/es_AR.php +++ b/apps/files_encryption/l10n/es_AR.php @@ -1,4 +1,15 @@ "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión.", +"switched to client side encryption" => "Cambiado a encriptación por parte del cliente", +"Change encryption password to login password" => "Cambiá la clave de encriptado para tu contraseña de inicio de sesión", +"Please check your passwords and try again." => "Por favor, revisá tu contraseña e intentalo de nuevo.", +"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión", +"Choose encryption mode:" => "Elegir el modo de encriptación:", +"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Encriptación por parte del cliente (es el modo más seguro, pero hace que sea imposible acceder a tus datos desde la interfaz web)", +"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Encriptación por parte del servidor (te permite acceder a tus archivos desde la interfaz web y desde el cliente de escritorio)", +"None (no encryption at all)" => "Ninguno (ninguna encriptación en absoluto)", +"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Una vez que haya seleccionado un modo de encriptación, no existe forma de cambiarlo nuevamente", +"User specific (let the user decide)" => "Específico por usuario (deja que el usuario decida)", "Encryption" => "Encriptación", "Exclude the following file types from encryption" => "Exceptuar de la encriptación los siguientes tipos de archivo", "None" => "Ninguno" diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php index 086d073cf5..8bd6492a8f 100644 --- a/apps/files_encryption/l10n/pt_BR.php +++ b/apps/files_encryption/l10n/pt_BR.php @@ -1,4 +1,15 @@ "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão.", +"switched to client side encryption" => "alterado para criptografia por parte do cliente", +"Change encryption password to login password" => "Mudar senha de criptografia para senha de login", +"Please check your passwords and try again." => "Por favor, verifique suas senhas e tente novamente.", +"Could not change your file encryption password to your login password" => "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login", +"Choose encryption mode:" => "Escolha o modo de criptografia:", +"Client side encryption (most secure but makes it impossible to access your data from the web interface)" => "Criptografia por parte do cliente (mais segura, mas torna impossível acessar seus dados a partir da interface web)", +"Server side encryption (allows you to access your files from the web interface and the desktop client)" => "Criptografia por parte do servidor (permite que você acesse seus arquivos da interface web e do cliente desktop)", +"None (no encryption at all)" => "Nenhuma (sem qualquer criptografia)", +"Important: Once you selected an encryption mode there is no way to change it back" => "Importante: Uma vez que tiver escolhido um modo de criptografia, não há um meio de voltar atrás", +"User specific (let the user decide)" => "Específico por usuário (deixa o usuário decidir)", "Encryption" => "Criptografia", "Exclude the following file types from encryption" => "Excluir os seguintes tipos de arquivo da criptografia", "None" => "Nenhuma" diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php index be60b415e1..2f67e801b2 100644 --- a/apps/files_external/ajax/addRootCertificate.php +++ b/apps/files_external/ajax/addRootCertificate.php @@ -12,8 +12,10 @@ $data = fread($fh, filesize($_FILES['rootcert_import']['tmp_name'])); fclose($fh); $filename = $_FILES['rootcert_import']['name']; -$view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/files_external/uploads'); -if ( ! $view->file_exists('')) $view->mkdir(''); +$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads'); +if (!$view->file_exists('')){ + $view->mkdir(''); +} $isValid = openssl_pkey_get_public($data); diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index 837d35c9c6..c58cfcd0f5 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -6,14 +6,14 @@ * See the COPYING-README file. */ -OC::$CLASSPATH['OC_FileStorage_StreamWrapper']='apps/files_external/lib/streamwrapper.php'; -OC::$CLASSPATH['OC_Filestorage_FTP']='apps/files_external/lib/ftp.php'; -OC::$CLASSPATH['OC_Filestorage_DAV']='apps/files_external/lib/webdav.php'; -OC::$CLASSPATH['OC_Filestorage_Google']='apps/files_external/lib/google.php'; -OC::$CLASSPATH['OC_Filestorage_SWIFT']='apps/files_external/lib/swift.php'; -OC::$CLASSPATH['OC_Filestorage_SMB']='apps/files_external/lib/smb.php'; -OC::$CLASSPATH['OC_Filestorage_AmazonS3']='apps/files_external/lib/amazons3.php'; -OC::$CLASSPATH['OC_Filestorage_Dropbox']='apps/files_external/lib/dropbox.php'; +OC::$CLASSPATH['OC\Files\Storage\StreamWrapper']='apps/files_external/lib/streamwrapper.php'; +OC::$CLASSPATH['OC\Files\Storage\FTP']='apps/files_external/lib/ftp.php'; +OC::$CLASSPATH['OC\Files\Storage\DAV']='apps/files_external/lib/webdav.php'; +OC::$CLASSPATH['OC\Files\Storage\Google']='apps/files_external/lib/google.php'; +OC::$CLASSPATH['OC\Files\Storage\SWIFT']='apps/files_external/lib/swift.php'; +OC::$CLASSPATH['OC\Files\Storage\SMB']='apps/files_external/lib/smb.php'; +OC::$CLASSPATH['OC\Files\Storage\AmazonS3']='apps/files_external/lib/amazons3.php'; +OC::$CLASSPATH['OC\Files\Storage\Dropbox']='apps/files_external/lib/dropbox.php'; OC::$CLASSPATH['OC_Mount_Config']='apps/files_external/lib/config.php'; OCP\App::registerAdmin('files_external', 'settings'); diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index 3da1913c5f..2c04216a9f 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -5,7 +5,7 @@ Mount external storage sources AGPL Robin Appelman, Michael Gapczynski - 4.9 + 4.91 true diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index c1e3864070..a9a3155e67 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -1,6 +1,6 @@ $(document).ready(function() { - $('#externalStorage tbody tr.OC_Filestorage_Dropbox').each(function() { + $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Dropbox').each(function() { var configured = $(this).find('[data-parameter="configured"]'); if ($(configured).val() == 'true') { $(this).find('.configuration input').attr('disabled', 'disabled'); @@ -38,7 +38,7 @@ $(document).ready(function() { $('#externalStorage tbody tr input').live('keyup', function() { var tr = $(this).parent().parent(); - if ($(tr).hasClass('OC_Filestorage_Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') { + if ($(tr).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') { var config = $(tr).find('.configuration'); if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') { if ($(tr).find('.dropbox').length == 0) { diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js index 0b3c314eb5..7d759d13da 100644 --- a/apps/files_external/js/google.js +++ b/apps/files_external/js/google.js @@ -1,6 +1,6 @@ $(document).ready(function() { - $('#externalStorage tbody tr.OC_Filestorage_Google').each(function() { + $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google').each(function() { var configured = $(this).find('[data-parameter="configured"]'); if ($(configured).val() == 'true') { $(this).find('.configuration') @@ -34,7 +34,8 @@ $(document).ready(function() { }); $('#externalStorage tbody tr').live('change', function() { - if ($(this).hasClass('OC_Filestorage_Google') && $(this).find('[data-parameter="configured"]').val() != 'true') { + console.log('hello'); + if ($(this).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Google') && $(this).find('[data-parameter="configured"]').val() != 'true') { if ($(this).find('.mountPoint input').val() != '') { if ($(this).find('.google').length == 0) { $(this).find('.configuration').append('
'+t('files_external', 'Grant access')+''); @@ -45,7 +46,7 @@ $(document).ready(function() { $('#externalStorage tbody tr .mountPoint input').live('keyup', function() { var tr = $(this).parent().parent(); - if ($(tr).hasClass('OC_Filestorage_Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) { + if ($(tr).hasClass('\\\\OC\\\\Files\\\\Storage\\\\Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) { if ($(this).val() != '') { $(tr).find('.google').show(); } else { diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 0dc983ca8a..6cbc218008 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -100,7 +100,7 @@ $(document).ready(function() { td.append(''); } }); - if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass).length == 1) { + if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length == 1) { OC.addScript('files_external', parameters['custom']); } return false; diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php index 26e927a423..8539395488 100644 --- a/apps/files_external/l10n/pt_BR.php +++ b/apps/files_external/l10n/pt_BR.php @@ -5,6 +5,8 @@ "Fill out all required fields" => "Preencha todos os campos obrigatórios", "Please provide a valid Dropbox app key and secret." => "Por favor forneça um app key e secret válido do Dropbox", "Error configuring Google Drive storage" => "Erro ao configurar armazenamento do Google Drive", +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Aviso: \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo.", +"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Aviso: O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo.", "External Storage" => "Armazenamento Externo", "Mount point" => "Ponto de montagem", "Backend" => "Backend", diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php index 04d5e3c7ee..0b6878a542 100644 --- a/apps/files_external/l10n/sk_SK.php +++ b/apps/files_external/l10n/sk_SK.php @@ -5,6 +5,8 @@ "Fill out all required fields" => "Vyplňte všetky vyžadované kolónky", "Please provide a valid Dropbox app key and secret." => "Zadajte platný kľúč aplikácie a heslo Dropbox", "Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska Google drive", +"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje.", +"Warning: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "Upozornenie: Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje.", "External Storage" => "Externé úložisko", "Mount point" => "Prípojný bod", "Backend" => "Backend", diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index e5ef4eb097..494885a1dd 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -1,39 +1,43 @@ . -*/ + * ownCloud + * + * @author Michael Gapczynski + * @copyright 2012 Michael Gapczynski mtgap@owncloud.com + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + */ + +namespace OC\Files\Storage; require_once 'aws-sdk/sdk.class.php'; -class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { +class AmazonS3 extends \OC\Files\Storage\Common { private $s3; private $bucket; private $objects = array(); + private $id; private static $tempFiles = array(); // TODO options: storage class, encryption server side, encrypt before upload? public function __construct($params) { - $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret'])); + $this->id = 'amazon::' . $params['key'] . md5($params['secret']); + $this->s3 = new \AmazonS3(array('key' => $params['key'], 'secret' => $params['secret'])); $this->bucket = $params['bucket']; } @@ -47,7 +51,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { return $response; // This object could be a folder, a '/' must be at the end of the path } else if (substr($path, -1) != '/') { - $response = $this->s3->get_object_metadata($this->bucket, $path.'/'); + $response = $this->s3->get_object_metadata($this->bucket, $path . '/'); if ($response) { $this->objects[$path] = $response; return $response; @@ -57,6 +61,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { return false; } + public function getId() { + return $this->id; + } + public function mkdir($path) { // Folders in Amazon S3 are 0 byte objects with a '/' at the end of the name if (substr($path, -1) != '/') { @@ -96,8 +104,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { foreach ($response->body->CommonPrefixes as $object) { $files[] = basename($object->Prefix); } - OC_FakeDirStream::$dirs['amazons3'.$path] = $files; - return opendir('fakedir://amazons3'.$path); + \OC\Files\Stream\Dir::register('amazons3' . $path, $files); + return opendir('fakedir://amazons3' . $path); } return false; } @@ -107,15 +115,10 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { $stat['size'] = $this->s3->get_bucket_filesize($this->bucket); $stat['atime'] = time(); $stat['mtime'] = $stat['atime']; - $stat['ctime'] = $stat['atime']; - } else { - $object = $this->getObject($path); - if ($object) { - $stat['size'] = $object['Size']; - $stat['atime'] = time(); - $stat['mtime'] = strtotime($object['LastModified']); - $stat['ctime'] = $stat['mtime']; - } + } else if ($object = $this->getObject($path)) { + $stat['size'] = $object['Size']; + $stat['atime'] = time(); + $stat['mtime'] = strtotime($object['LastModified']); } if (isset($stat)) { return $stat; @@ -166,7 +169,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { switch ($mode) { case 'r': case 'rb': - $tmpFile = OC_Helper::tmpFile(); + $tmpFile = \OC_Helper::tmpFile(); $handle = fopen($tmpFile, 'w'); $response = $this->s3->get_object($this->bucket, $path, array('fileDownload' => $handle)); if ($response->isOK()) { @@ -190,14 +193,14 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { } else { $ext = ''; } - $tmpFile = OC_Helper::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack'); + $tmpFile = \OC_Helper::tmpFile($ext); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $source = $this->fopen($path, 'r'); file_put_contents($tmpFile, $source); } self::$tempFiles[$tmpFile] = $path; - return fopen('close://'.$tmpFile, $mode); + return fopen('close://' . $tmpFile, $mode); } return false; } @@ -206,8 +209,8 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common { if (isset(self::$tempFiles[$tmpFile])) { $handle = fopen($tmpFile, 'r'); $response = $this->s3->create_object($this->bucket, - self::$tempFiles[$tmpFile], - array('fileUpload' => $handle)); + self::$tempFiles[$tmpFile], + array('fileUpload' => $handle)); if ($response->isOK()) { unlink($tmpFile); } diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index fd3dc2ca0d..6b0df21461 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -38,20 +38,20 @@ class OC_Mount_Config { * @return array */ public static function getBackends() { - - $backends['OC_Filestorage_Local']=array( + + $backends['\OC\Files\Storage\Local']=array( 'backend' => 'Local', 'configuration' => array( 'datadir' => 'Location')); - $backends['OC_Filestorage_AmazonS3']=array( + $backends['\OC\Files\Storage\AmazonS3']=array( 'backend' => 'Amazon S3', 'configuration' => array( 'key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')); - $backends['OC_Filestorage_Dropbox']=array( + $backends['\OC\Files\Storage\Dropbox']=array( 'backend' => 'Dropbox', 'configuration' => array( 'configured' => '#configured', @@ -61,7 +61,7 @@ class OC_Mount_Config { 'token_secret' => '#token_secret'), 'custom' => 'dropbox'); - if(OC_Mount_Config::checkphpftp()) $backends['OC_Filestorage_FTP']=array( + if(OC_Mount_Config::checkphpftp()) $backends['\OC\Files\Storage\FTP']=array( 'backend' => 'FTP', 'configuration' => array( 'host' => 'URL', @@ -70,15 +70,15 @@ class OC_Mount_Config { 'root' => '&Root', 'secure' => '!Secure ftps://')); - $backends['OC_Filestorage_Google']=array( + $backends['\OC\Files\Storage\Google']=array( 'backend' => 'Google Drive', 'configuration' => array( 'configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'); - - $backends['OC_Filestorage_SWIFT']=array( + + $backends['\OC\Files\Storage\SWIFT']=array( 'backend' => 'OpenStack Swift', 'configuration' => array( 'host' => 'URL', @@ -86,8 +86,8 @@ class OC_Mount_Config { 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')); - - if(OC_Mount_Config::checksmbclient()) $backends['OC_Filestorage_SMB']=array( + + if(OC_Mount_Config::checksmbclient()) $backends['\OC\Files\Storage\SMB']=array( 'backend' => 'SMB / CIFS', 'configuration' => array( 'host' => 'URL', @@ -95,8 +95,8 @@ class OC_Mount_Config { 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')); - - $backends['OC_Filestorage_DAV']=array( + + $backends['\OC\Files\Storage\DAV']=array( 'backend' => 'ownCloud / WebDAV', 'configuration' => array( 'host' => 'URL', @@ -120,6 +120,10 @@ class OC_Mount_Config { if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) { foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) { foreach ($mounts as $mountPoint => $mount) { + // Update old classes to new namespace + if (strpos($mount['class'], 'OC_Filestorage_') !== false) { + $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15); + } // Remove '/$user/files/' from mount point $mountPoint = substr($mountPoint, 13); // Merge the mount point into the current mount points @@ -139,6 +143,10 @@ class OC_Mount_Config { if (isset($mountPoints[self::MOUNT_TYPE_USER])) { foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) { foreach ($mounts as $mountPoint => $mount) { + // Update old classes to new namespace + if (strpos($mount['class'], 'OC_Filestorage_') !== false) { + $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15); + } // Remove '/$user/files/' from mount point $mountPoint = substr($mountPoint, 13); // Merge the mount point into the current mount points @@ -169,6 +177,10 @@ class OC_Mount_Config { $personal = array(); if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) { foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) { + // Update old classes to new namespace + if (strpos($mount['class'], 'OC_Filestorage_') !== false) { + $mount['class'] = '\OC\Files\Storage\\'.substr($mount['class'], 15); + } // Remove '/uid/files/' from mount point $personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], @@ -178,22 +190,6 @@ class OC_Mount_Config { return $personal; } - /** - * Add directory for mount point to the filesystem - * @param OC_Fileview instance $view - * @param string path to mount point - */ - private static function addMountPointDirectory($view, $path) { - $dir = ''; - foreach ( explode('/', $path) as $pathPart) { - $dir = $dir.'/'.$pathPart; - if ( !$view->file_exists($dir)) { - $view->mkdir($dir); - } - } - } - - /** * Add a mount point to the filesystem * @param string Mount point @@ -213,36 +209,11 @@ class OC_Mount_Config { if ($isPersonal) { // Verify that the mount point applies for the current user // Prevent non-admin users from mounting local storage - if ($applicable != OCP\User::getUser() || $class == 'OC_Filestorage_Local') { + if ($applicable != OCP\User::getUser() || $class == '\OC\Files\Storage\Local') { return false; } - $view = new OC_FilesystemView('/'.OCP\User::getUser().'/files'); - self::addMountPointDirectory($view, ltrim($mountPoint, '/')); $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/'); } else { - $view = new OC_FilesystemView('/'); - switch ($mountType) { - case 'user': - if ($applicable == "all") { - $users = OCP\User::getUsers(); - foreach ( $users as $user ) { - $path = $user.'/files/'.ltrim($mountPoint, '/'); - self::addMountPointDirectory($view, $path); - } - } else { - $path = $applicable.'/files/'.ltrim($mountPoint, '/'); - self::addMountPointDirectory($view, $path); - } - break; - case 'group' : - $groupMembers = OC_Group::usersInGroups(array($applicable)); - foreach ( $groupMembers as $user ) { - $path = $user.'/files/'.ltrim($mountPoint, '/'); - self::addMountPointDirectory($view, $path); - } - break; - } - $mountPoint = '/$user/files/'.ltrim($mountPoint, '/'); } $mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions))); diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index 33ca14cab1..11644e4a2c 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -20,12 +20,15 @@ * License along with this library. If not, see . */ +namespace OC\Files\Storage; + require_once 'Dropbox/autoload.php'; -class OC_Filestorage_Dropbox extends OC_Filestorage_Common { +class Dropbox extends \OC\Files\Storage\Common { private $dropbox; private $root; + private $id; private $metaData = array(); private static $tempFiles = array(); @@ -37,13 +40,14 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { && isset($params['token']) && isset($params['token_secret']) ) { + $this->id = 'dropbox::'.$params['app_key'] . $params['token']. '/' . $params['root']; $this->root=isset($params['root'])?$params['root']:''; - $oauth = new Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']); + $oauth = new \Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']); $oauth->setToken($params['token'], $params['token_secret']); - $this->dropbox = new Dropbox_API($oauth, 'dropbox'); + $this->dropbox = new \Dropbox_API($oauth, 'dropbox'); $this->mkdir(''); } else { - throw new Exception('Creating OC_Filestorage_Dropbox storage failed'); + throw new \Exception('Creating \OC\Files\Storage\Dropbox storage failed'); } } @@ -55,8 +59,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { if ($list) { try { $response = $this->dropbox->getMetaData($path); - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } if ($response && isset($response['contents'])) { @@ -76,21 +80,25 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { $response = $this->dropbox->getMetaData($path, 'false'); $this->metaData[$path] = $response; return $response; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } } } + public function getId(){ + return $this->id; + } + public function mkdir($path) { $path = $this->root.$path; try { $this->dropbox->createFolder($path); return true; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } @@ -106,7 +114,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { foreach ($contents as $file) { $files[] = basename($file['path']); } - OC_FakeDirStream::$dirs['dropbox'.$path] = $files; + \OC\Files\Stream\Dir::register('dropbox'.$path, $files); return opendir('fakedir://dropbox'.$path); } return false; @@ -118,7 +126,6 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { $stat['size'] = $metaData['bytes']; $stat['atime'] = time(); $stat['mtime'] = (isset($metaData['modified'])) ? strtotime($metaData['modified']) : time(); - $stat['ctime'] = $stat['mtime']; return $stat; } return false; @@ -163,8 +170,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { try { $this->dropbox->delete($path); return true; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } @@ -175,8 +182,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { try { $this->dropbox->move($path1, $path2); return true; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } @@ -187,8 +194,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { try { $this->dropbox->copy($path1, $path2); return true; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } @@ -198,13 +205,13 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { switch ($mode) { case 'r': case 'rb': - $tmpFile = OC_Helper::tmpFile(); + $tmpFile = \OC_Helper::tmpFile(); try { $data = $this->dropbox->getFile($path); file_put_contents($tmpFile, $data); return fopen($tmpFile, 'r'); - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } case 'w': @@ -224,8 +231,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } else { $ext = ''; } - $tmpFile = OC_Helper::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack'); + $tmpFile = \OC_Helper::tmpFile($ext); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $source = $this->fopen($path, 'r'); file_put_contents($tmpFile, $source); @@ -242,8 +249,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { try { $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle); unlink($tmpFile); - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); } } } @@ -264,8 +271,8 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { try { $info = $this->dropbox->getAccountInfo(); return $info['quota_info']['quota'] - $info['quota_info']['normal']; - } catch (Exception $exception) { - OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR); + } catch (\Exception $exception) { + \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR); return false; } } diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index e796ae446b..9a27b63323 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -6,7 +6,9 @@ * See the COPYING-README file. */ -class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ +namespace OC\Files\Storage; + +class FTP extends \OC\Files\Storage\StreamWrapper{ private $password; private $user; private $host; @@ -38,9 +40,13 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ } } + public function getId(){ + return 'ftp::' . $this->user . '@' . $this->host . '/' . $this->root; + } + /** * construct the ftp url - * @param string path + * @param string $path * @return string */ public function constructUrl($path) { @@ -51,7 +57,8 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ $url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path; return $url; } - public function fopen($path, $mode) { + public function fopen($path,$mode) { + $this->init(); switch($mode) { case 'r': case 'rb': @@ -61,7 +68,7 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ case 'ab': //these are supported by the wrapper $context = stream_context_create(array('ftp' => array('overwrite' => true))); - return fopen($this->constructUrl($path), $mode, false, $context); + return fopen($this->constructUrl($path),$mode, false,$context); case 'r+': case 'w+': case 'wb+': @@ -77,16 +84,18 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{ $ext=''; } $tmpFile=OCP\Files::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $this->getFile($path, $tmpFile); } self::$tempFiles[$tmpFile]=$path; - return fopen('close://'.$tmpFile, $mode); + return fopen('close://'.$tmpFile,$mode); } + return false; } public function writeBack($tmpFile) { + $this->init(); if (isset(self::$tempFiles[$tmpFile])) { $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]); unlink($tmpFile); diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index c836a5a07c..7396c7e3f2 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -20,14 +20,17 @@ * License along with this library. If not, see . */ +namespace OC\Files\Storage; + require_once 'Google/common.inc.php'; -class OC_Filestorage_Google extends OC_Filestorage_Common { +class Google extends \OC\Files\Storage\Common { private $consumer; private $oauth_token; private $sig_method; private $entries; + private $id; private static $tempFiles = array(); @@ -38,12 +41,13 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { ) { $consumer_key = isset($params['consumer_key']) ? $params['consumer_key'] : 'anonymous'; $consumer_secret = isset($params['consumer_secret']) ? $params['consumer_secret'] : 'anonymous'; - $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); - $this->oauth_token = new OAuthToken($params['token'], $params['token_secret']); - $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->id = 'google::' . $params['token']; + $this->consumer = new \OAuthConsumer($consumer_key, $consumer_secret); + $this->oauth_token = new \OAuthToken($params['token'], $params['token_secret']); + $this->sig_method = new \OAuthSignatureMethod_HMAC_SHA1(); $this->entries = array(); } else { - throw new Exception('Creating OC_Filestorage_Google storage failed'); + throw new \Exception('Creating \OC\Files\Storage\Google storage failed'); } } @@ -68,7 +72,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { $tempStr .= '&' . urlencode($key) . '=' . urlencode($value); } $uri = preg_replace('/&/', '?', $tempStr, 1); - $request = OAuthRequest::from_consumer_and_token($this->consumer, + $request = \OAuthRequest::from_consumer_and_token($this->consumer, $this->oauth_token, $httpMethod, $uri, @@ -110,7 +114,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } if ($isDownload) { - $tmpFile = OC_Helper::tmpFile(); + $tmpFile = \OC_Helper::tmpFile(); $handle = fopen($tmpFile, 'w'); curl_setopt($curl, CURLOPT_FILE, $handle); } @@ -139,7 +143,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { private function getFeed($feedUri, $httpMethod, $postData = null) { $result = $this->sendRequest($feedUri, $httpMethod, $postData); if ($result) { - $dom = new DOMDocument(); + $dom = new \DOMDocument(); $dom->loadXML($result); return $dom; } @@ -194,6 +198,9 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { } } + public function getId(){ + return $this->id; + } public function mkdir($path) { $collection = dirname($path); @@ -266,7 +273,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { $this->entries[$name] = $entry; } } - OC_FakeDirStream::$dirs['google'.$path] = $files; + \OC\Files\Stream\Dir::register('google'.$path, $files); return opendir('fakedir://google'.$path); } @@ -287,7 +294,6 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { //$stat['atime'] = strtotime($entry->getElementsByTagNameNS('http://schemas.google.com/g/2005', // 'lastViewed')->item(0)->nodeValue); $stat['mtime'] = strtotime($entry->getElementsByTagName('updated')->item(0)->nodeValue); - $stat['ctime'] = strtotime($entry->getElementsByTagName('published')->item(0)->nodeValue); } } if (isset($stat)) { @@ -443,8 +449,8 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { } else { $ext = ''; } - $tmpFile = OC_Helper::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile] = array($this, 'writeBack'); + $tmpFile = \OC_Helper::tmpFile($ext); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $source = $this->fopen($path, 'r'); file_put_contents($tmpFile, $source); @@ -482,7 +488,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { } if (isset($uploadUri) && $handle = fopen($path, 'r')) { $uploadUri .= '?convert=false'; - $mimetype = OC_Helper::getMimeType($path); + $mimetype = \OC_Helper::getMimeType($path); $size = filesize($path); $headers = array('X-Upload-Content-Type: ' => $mimetype, 'X-Upload-Content-Length: ' => $size); $postData = ''; @@ -590,4 +596,4 @@ class OC_Filestorage_Google extends OC_Filestorage_Common { } -} \ No newline at end of file +} diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 071a9cd5f9..96778b0b2e 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -6,9 +6,11 @@ * See the COPYING-README file. */ +namespace OC\Files\Storage; + require_once 'smb4php/smb.php'; -class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ +class SMB extends \OC\Files\Storage\StreamWrapper{ private $password; private $user; private $host; @@ -30,14 +32,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ if ( ! $this->share || $this->share[0]!='/') { $this->share='/'.$this->share; } - if (substr($this->share, -1, 1)=='/') { - $this->share=substr($this->share, 0, -1); + if(substr($this->share, -1, 1)=='/') { + $this->share = substr($this->share,0,-1); } + } - //create the root folder if necesary - if ( ! $this->is_dir('')) { - $this->mkdir(''); - } + public function getId(){ + return 'smb::' . $this->user . '@' . $this->host . '/' . $this->share . '/' . $this->root; } public function constructUrl($path) { @@ -65,11 +66,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ /** * check if a file or folder has been updated since $time + * @param string $path * @param int $time * @return bool */ - public function hasUpdated($path, $time) { - if ( ! $path and $this->root=='/') { + public function hasUpdated($path,$time) { + $this->init(); + if(!$path and $this->root=='/') { // mtime doesn't work for shares, but giving the nature of the backend, // doing a full update is still just fast enough return true; diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php index a386e33399..7c3ddcf8a2 100644 --- a/apps/files_external/lib/streamwrapper.php +++ b/apps/files_external/lib/streamwrapper.php @@ -6,16 +6,33 @@ * See the COPYING-README file. */ +namespace OC\Files\Storage; + +abstract class StreamWrapper extends \OC\Files\Storage\Common{ + private $ready = false; + + protected function init(){ + if($this->ready){ + return; + } + $this->ready = true; + + //create the root folder if necesary + if(!$this->is_dir('')) { + $this->mkdir(''); + } + } -abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ abstract public function constructUrl($path); public function mkdir($path) { + $this->init(); return mkdir($this->constructUrl($path)); } public function rmdir($path) { - if ($this->file_exists($path)) { + $this->init(); + if($this->file_exists($path)) { $succes = rmdir($this->constructUrl($path)); clearstatcache(); return $succes; @@ -25,10 +42,12 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ } public function opendir($path) { + $this->init(); return opendir($this->constructUrl($path)); } public function filetype($path) { + $this->init(); return filetype($this->constructUrl($path)); } @@ -41,46 +60,54 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{ } public function file_exists($path) { + $this->init(); return file_exists($this->constructUrl($path)); } public function unlink($path) { + $this->init(); $succes = unlink($this->constructUrl($path)); clearstatcache(); return $succes; } - public function fopen($path, $mode) { - return fopen($this->constructUrl($path), $mode); + public function fopen($path,$mode) { + $this->init(); + return fopen($this->constructUrl($path),$mode); } public function free_space($path) { return 0; } - public function touch($path, $mtime = null) { - if (is_null($mtime)) { - $fh = $this->fopen($path, 'a'); - fwrite($fh, ''); + public function touch($path,$mtime=null) { + $this->init(); + if(is_null($mtime)) { + $fh = $this->fopen($path,'a'); + fwrite($fh,''); fclose($fh); } else { return false;//not supported } } - public function getFile($path, $target) { - return copy($this->constructUrl($path), $target); + public function getFile($path,$target) { + $this->init(); + return copy($this->constructUrl($path),$target); } - public function uploadFile($path, $target) { - return copy($path, $this->constructUrl($target)); + public function uploadFile($path,$target) { + $this->init(); + return copy($path,$this->constructUrl($target)); } - public function rename($path1, $path2) { - return rename($this->constructUrl($path1), $this->constructUrl($path2)); + public function rename($path1,$path2) { + $this->init(); + return rename($this->constructUrl($path1),$this->constructUrl($path2)); } public function stat($path) { + $this->init(); return stat($this->constructUrl($path)); } diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index a071dfdbb0..cbf2007052 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -6,24 +6,28 @@ * See the COPYING-README file. */ +namespace OC\Files\Storage; + require_once 'php-cloudfiles/cloudfiles.php'; -class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ +class SWIFT extends \OC\Files\Storage\Common{ + private $id; private $host; private $root; private $user; private $token; private $secure; + private $ready = false; /** - * @var CF_Authentication auth + * @var \CF_Authentication auth */ private $auth; /** - * @var CF_Connection conn + * @var \CF_Connection conn */ private $conn; /** - * @var CF_Container rootContainer + * @var \CF_Container rootContainer */ private $rootContainer; @@ -35,18 +39,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * translate directory path to container name - * @param string path + * @param string $path * @return string */ private function getContainerName($path) { - $path=trim(trim($this->root, '/')."/".$path, '/.'); + $path=trim(trim($this->root, '/') . "/".$path, '/.'); return str_replace('/', '\\', $path); } /** * get container by path - * @param string path - * @return CF_Container + * @param string $path + * @return \CF_Container */ private function getContainer($path) { if ($path=='' or $path=='/') { @@ -59,15 +63,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ $container=$this->conn->get_container($this->getContainerName($path)); $this->containers[$path]=$container; return $container; - } catch(NoSuchContainerException $e) { + } catch(\NoSuchContainerException $e) { return null; } } /** * create container - * @param string path - * @return CF_Container + * @param string $path + * @return \CF_Container */ private function createContainer($path) { if ($path=='' or $path=='/' or $path=='.') { @@ -89,8 +93,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * get object by path - * @param string path - * @return CF_Object + * @param string $path + * @return \CF_Object */ private function getObject($path) { if (isset($this->objects[$path])) { @@ -107,7 +111,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ $obj=$container->get_object(basename($path)); $this->objects[$path]=$obj; return $obj; - } catch(NoSuchObjectException $e) { + } catch(\NoSuchObjectException $e) { return null; } } @@ -132,8 +136,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * create object - * @param string path - * @return CF_Object + * @param string $path + * @return \CF_Object */ private function createObject($path) { $container=$this->getContainer(dirname($path)); @@ -154,7 +158,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * check if container for path exists - * @param string path + * @param string $path * @return bool */ private function containerExists($path) { @@ -163,15 +167,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * get the list of emulated sub containers - * @param CF_Container container + * @param \CF_Container $container * @return array */ private function getSubContainers($container) { - $tmpFile=OCP\Files::tmpFile(); + $tmpFile=\OCP\Files::tmpFile(); $obj=$this->getSubContainerFile($container); try { $obj->save_to_filename($tmpFile); - } catch(Exception $e) { + } catch(\Exception $e) { return array(); } $obj->save_to_filename($tmpFile); @@ -185,15 +189,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * add an emulated sub container - * @param CF_Container container - * @param string name + * @param \CF_Container $container + * @param string $name * @return bool */ private function addSubContainer($container, $name) { if ( ! $name) { return false; } - $tmpFile=OCP\Files::tmpFile(); + $tmpFile=\OCP\Files::tmpFile(); $obj=$this->getSubContainerFile($container); try { $obj->save_to_filename($tmpFile); @@ -201,16 +205,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ foreach ($containers as &$sub) { $sub=trim($sub); } - if (array_search($name, $containers)!==false) { + if(array_search($name, $containers) !== false) { unlink($tmpFile); return false; } else { $fh=fopen($tmpFile, 'a'); - fwrite($fh, $name."\n"); + fwrite($fh,$name . "\n"); } - } catch(Exception $e) { - $containers=array(); - file_put_contents($tmpFile, $name."\n"); + } catch(\Exception $e) { + file_put_contents($tmpFile, $name . "\n"); } $obj->load_from_filename($tmpFile); @@ -220,20 +223,20 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * remove an emulated sub container - * @param CF_Container container - * @param string name + * @param \CF_Container $container + * @param string $name * @return bool */ private function removeSubContainer($container, $name) { if ( ! $name) { return false; } - $tmpFile=OCP\Files::tmpFile(); + $tmpFile=\OCP\Files::tmpFile(); $obj=$this->getSubContainerFile($container); try { $obj->save_to_filename($tmpFile); $containers=file($tmpFile); - } catch (Exception $e) { + } catch (\Exception $e) { return false; } foreach ($containers as &$sub) { @@ -255,8 +258,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * ensure a subcontainer file exists and return it's object - * @param CF_Container container - * @return CF_Object + * @param \CF_Container $container + * @return \CF_Object */ private function getSubContainerFile($container) { try { @@ -283,10 +286,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ if ( ! $this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } - $this->auth = new CF_Authentication($this->user, $this->token, null, $this->host); + + } + + private function init(){ + if($this->ready){ + return; + } + $this->ready = true; + + $this->auth = new \CF_Authentication($this->user, $this->token, null, $this->host); $this->auth->authenticate(); - $this->conn = new CF_Connection($this->auth); + $this->conn = new \CF_Connection($this->auth); if ( ! $this->containerExists('/')) { $this->rootContainer=$this->createContainer('/'); @@ -295,8 +307,13 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } } + public function getId(){ + return $this->id; + } + public function mkdir($path) { + $this->init(); if ($this->containerExists($path)) { return false; } else { @@ -306,7 +323,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function rmdir($path) { - if ( ! $this->containerExists($path)) { + $this->init(); + if (!$this->containerExists($path)) { return false; } else { $this->emptyContainer($path); @@ -343,6 +361,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function opendir($path) { + $this->init(); $container=$this->getContainer($path); $files=$this->getObjects($container); $i=array_search(self::SUBCONTAINER_FILE, $files); @@ -352,11 +371,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ $subContainers=$this->getSubContainers($container); $files=array_merge($files, $subContainers); $id=$this->getContainerName($path); - OC_FakeDirStream::$dirs[$id]=$files; + \OC\Files\Stream\Dir::register($id, $files); return opendir('fakedir://'.$id); } public function filetype($path) { + $this->init(); if ($this->containerExists($path)) { return 'dir'; } else { @@ -373,6 +393,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function file_exists($path) { + $this->init(); if ($this->is_dir($path)) { return true; } else { @@ -381,6 +402,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function file_get_contents($path) { + $this->init(); $obj=$this->getObject($path); if (is_null($obj)) { return false; @@ -389,6 +411,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function file_put_contents($path, $content) { + $this->init(); $obj=$this->getObject($path); if (is_null($obj)) { $container=$this->getContainer(dirname($path)); @@ -402,6 +425,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function unlink($path) { + $this->init(); if ($this->containerExists($path)) { return $this->rmdir($path); } @@ -415,6 +439,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function fopen($path, $mode) { + $this->init(); switch($mode) { case 'r': case 'rb': @@ -440,7 +465,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ case 'c': case 'c+': $tmpFile=$this->getTmpFile($path); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); self::$tempFiles[$tmpFile]=$path; return fopen('close://'.$tmpFile, $mode); } @@ -458,6 +483,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function touch($path, $mtime=null) { + $this->init(); $obj=$this->getObject($path); if (is_null($obj)) { return false; @@ -472,6 +498,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function rename($path1, $path2) { + $this->init(); $sourceContainer=$this->getContainer(dirname($path1)); $targetContainer=$this->getContainer(dirname($path2)); $result=$sourceContainer->move_object_to(basename($path1), $targetContainer, basename($path2)); @@ -484,6 +511,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function copy($path1, $path2) { + $this->init(); $sourceContainer=$this->getContainer(dirname($path1)); $targetContainer=$this->getContainer(dirname($path2)); $result=$sourceContainer->copy_object_to(basename($path1), $targetContainer, basename($path2)); @@ -495,6 +523,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } public function stat($path) { + $this->init(); $container=$this->getContainer($path); if ( ! is_null($container)) { return array( @@ -523,17 +552,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ } private function getTmpFile($path) { + $this->init(); $obj=$this->getObject($path); if ( ! is_null($obj)) { - $tmpFile=OCP\Files::tmpFile(); + $tmpFile=\OCP\Files::tmpFile(); $obj->save_to_filename($tmpFile); return $tmpFile; } else { - return OCP\Files::tmpFile(); + return \OCP\Files::tmpFile(); } } private function fromTmpFile($tmpFile, $path) { + $this->init(); $obj=$this->getObject($path); if (is_null($obj)) { $obj=$this->createObject($path); @@ -544,7 +575,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{ /** * remove custom mtime metadata - * @param CF_Object obj + * @param \CF_Object $obj */ private function resetMTime($obj) { if (isset($obj->metadata['Mtime'])) { diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 920aefc12d..2a953ac63f 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -6,14 +6,17 @@ * See the COPYING-README file. */ -class OC_FileStorage_DAV extends OC_Filestorage_Common{ +namespace OC\Files\Storage; + +class DAV extends \OC\Files\Storage\Common{ private $password; private $user; private $host; private $secure; private $root; + private $ready; /** - * @var Sabre_DAV_Client + * @var \Sabre_DAV_Client */ private $client; @@ -43,6 +46,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ if (substr($this->root, -1, 1)!='/') { $this->root.='/'; } + } + + private function init(){ + if($this->ready){ + return; + } + $this->ready = true; $settings = array( 'baseUri' => $this->createBaseUri(), @@ -50,7 +60,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ 'password' => $this->password, ); - $this->client = new Sabre_DAV_Client($settings); + $this->client = new \Sabre_DAV_Client($settings); $caview = \OCP\Files::getStorage('files_external'); if ($caview) { @@ -63,6 +73,10 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ $this->mkdir(''); } + public function getId(){ + return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root; + } + private function createBaseUri() { $baseUri='http'; if ($this->secure) { @@ -73,40 +87,45 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } public function mkdir($path) { + $this->init(); $path=$this->cleanPath($path); return $this->simpleResponse('MKCOL', $path, null, 201); } public function rmdir($path) { + $this->init(); $path=$this->cleanPath($path); return $this->simpleResponse('DELETE', $path, null, 204); } public function opendir($path) { + $this->init(); $path=$this->cleanPath($path); try { $response=$this->client->propfind($path, array(), 1); $id=md5('webdav'.$this->root.$path); - OC_FakeDirStream::$dirs[$id]=array(); + $content = array(); $files=array_keys($response); array_shift($files);//the first entry is the current directory foreach ($files as $file) { $file = urldecode(basename($file)); - OC_FakeDirStream::$dirs[$id][]=$file; + $content[]=$file; } + \OC\Files\Stream\Dir::register($id, $content); return opendir('fakedir://'.$id); - } catch(Exception $e) { + } catch(\Exception $e) { return false; } } public function filetype($path) { + $this->init(); $path=$this->cleanPath($path); try { $response=$this->client->propfind($path, array('{DAV:}resourcetype')); $responseType=$response["{DAV:}resourcetype"]->resourceType; return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file'; - } catch(Exception $e) { + } catch(\Exception $e) { error_log($e->getMessage()); \OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR); return false; @@ -122,20 +141,23 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } public function file_exists($path) { + $this->init(); $path=$this->cleanPath($path); try { $this->client->propfind($path, array('{DAV:}resourcetype')); return true;//no 404 exception - } catch(Exception $e) { + } catch(\Exception $e) { return false; } } public function unlink($path) { - return $this->simpleResponse('DELETE', $path, null, 204); + $this->init(); + return $this->simpleResponse('DELETE', $path, null ,204); } - public function fopen($path, $mode) { + public function fopen($path,$mode) { + $this->init(); $path=$this->cleanPath($path); switch($mode) { case 'r': @@ -172,9 +194,9 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } else { $ext=''; } - $tmpFile=OCP\Files::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); - if ($this->file_exists($path)) { + $tmpFile = \OCP\Files::tmpFile($ext); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); + if($this->file_exists($path)) { $this->getFile($path, $tmpFile); } self::$tempFiles[$tmpFile]=$path; @@ -190,6 +212,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } public function free_space($path) { + $this->init(); $path=$this->cleanPath($path); try { $response=$this->client->propfind($path, array('{DAV:}quota-available-bytes')); @@ -198,12 +221,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } else { return 0; } - } catch(Exception $e) { + } catch(\Exception $e) { return 0; } } public function touch($path, $mtime=null) { + $this->init(); if (is_null($mtime)) { $mtime=time(); } @@ -211,12 +235,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime)); } - public function getFile($path, $target) { - $source=$this->fopen($path, 'r'); - file_put_contents($target, $source); + public function getFile($path,$target) { + $this->init(); + $source=$this->fopen($path,'r'); + file_put_contents($target,$source); } - public function uploadFile($path, $target) { + public function uploadFile($path,$target) { + $this->init(); $source=fopen($path, 'r'); $curl = curl_init(); @@ -230,47 +256,46 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ curl_close ($curl); } - public function rename($path1, $path2) { + public function rename($path1,$path2) { + $this->init(); $path1=$this->cleanPath($path1); $path2=$this->root.$this->cleanPath($path2); try { $this->client->request('MOVE', $path1, null, array('Destination'=>$path2)); return true; - } catch(Exception $e) { - echo $e; - echo 'fail'; + } catch(\Exception $e) { return false; } } - public function copy($path1, $path2) { + public function copy($path1,$path2) { + $this->init(); $path1=$this->cleanPath($path1); $path2=$this->root.$this->cleanPath($path2); try { $this->client->request('COPY', $path1, null, array('Destination'=>$path2)); return true; - } catch(Exception $e) { - echo $e; - echo 'fail'; + } catch(\Exception $e) { return false; } } public function stat($path) { + $this->init(); $path=$this->cleanPath($path); try { $response=$this->client->propfind($path, array('{DAV:}getlastmodified', '{DAV:}getcontentlength')); return array( 'mtime'=>strtotime($response['{DAV:}getlastmodified']), 'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0, - 'ctime'=>-1, ); - } catch(Exception $e) { + } catch(\Exception $e) { return array(); } } public function getMimeType($path) { + $this->init(); $path=$this->cleanPath($path); try { $response=$this->client->propfind($path, array('{DAV:}getcontenttype', '{DAV:}resourcetype')); @@ -283,7 +308,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } else { return false; } - } catch(Exception $e) { + } catch(\Exception $e) { return false; } } @@ -296,12 +321,12 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{ } } - private function simpleResponse($method, $path, $body, $expected) { + private function simpleResponse($method,$path,$body,$expected) { $path=$this->cleanPath($path); try { $response=$this->client->request($method, $path, $body); return $response['statusCode']==$expected; - } catch(Exception $e) { + } catch(\Exception $e) { return false; } } diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php index 4215b28787..268d188023 100755 --- a/apps/files_external/personal.php +++ b/apps/files_external/personal.php @@ -24,7 +24,7 @@ OCP\Util::addScript('files_external', 'settings'); OCP\Util::addStyle('files_external', 'settings'); $backends = OC_Mount_Config::getBackends(); // Remove local storage -unset($backends['OC_Filestorage_Local']); +unset($backends['\OC\Files\Storage\Local']); $tmpl = new OCP\Template('files_external', 'settings'); $tmpl->assign('isAdminPage', false, false); $tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints()); diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/amazons3.php index 39f96fe8e5..6b3a942b5b 100644 --- a/apps/files_external/tests/amazons3.php +++ b/apps/files_external/tests/amazons3.php @@ -20,7 +20,9 @@ * License along with this library. If not, see . */ -class Test_Filestorage_AmazonS3 extends Test_FileStorage { +namespace Test\Files\Storage; + +class AmazonS3 extends Storage { private $config; private $id; @@ -32,12 +34,12 @@ class Test_Filestorage_AmazonS3 extends Test_FileStorage { $this->markTestSkipped('AmazonS3 backend not configured'); } $this->config['amazons3']['bucket'] = $id; // Make sure we have a new empty bucket to work in - $this->instance = new OC_Filestorage_AmazonS3($this->config['amazons3']); + $this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']); } public function tearDown() { if ($this->instance) { - $s3 = new AmazonS3(array('key' => $this->config['amazons3']['key'], + $s3 = new \AmazonS3(array('key' => $this->config['amazons3']['key'], 'secret' => $this->config['amazons3']['secret'])); if ($s3->delete_all_objects($this->id)) { $s3->delete_bucket($this->id); diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php index ff16b1c1d8..65127175ad 100644 --- a/apps/files_external/tests/config.php +++ b/apps/files_external/tests/config.php @@ -8,7 +8,7 @@ return array( 'root'=>'/test', ), 'webdav'=>array( - 'run'=>false, + 'run'=>true, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', @@ -30,7 +30,7 @@ return array( 'root'=>'/', ), 'smb'=>array( - 'run'=>false, + 'run'=>true, 'user'=>'test', 'password'=>'test', 'host'=>'localhost', diff --git a/apps/files_external/tests/dropbox.php b/apps/files_external/tests/dropbox.php index 304cb3ca38..e4e598b06b 100644 --- a/apps/files_external/tests/dropbox.php +++ b/apps/files_external/tests/dropbox.php @@ -6,7 +6,9 @@ * See the COPYING-README file. */ -class Test_Filestorage_Dropbox extends Test_FileStorage { +namespace Test\Files\Storage; + +class Dropbox extends Storage { private $config; public function setUp() { @@ -16,7 +18,7 @@ class Test_Filestorage_Dropbox extends Test_FileStorage { $this->markTestSkipped('Dropbox backend not configured'); } $this->config['dropbox']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_Dropbox($this->config['dropbox']); + $this->instance = new \OC\Files\Storage\Dropbox($this->config['dropbox']); } public function tearDown() { diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php index 91e4589ed1..923b5e3968 100644 --- a/apps/files_external/tests/ftp.php +++ b/apps/files_external/tests/ftp.php @@ -6,7 +6,9 @@ * See the COPYING-README file. */ -class Test_Filestorage_FTP extends Test_FileStorage { +namespace Test\Files\Storage; + +class FTP extends Storage { private $config; public function setUp() { @@ -16,12 +18,12 @@ class Test_Filestorage_FTP extends Test_FileStorage { $this->markTestSkipped('FTP backend not configured'); } $this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_FTP($this->config['ftp']); + $this->instance = new \OC\Files\Storage\FTP($this->config['ftp']); } public function tearDown() { if ($this->instance) { - OCP\Files::rmdirr($this->instance->constructUrl('')); + \OCP\Files::rmdirr($this->instance->constructUrl('')); } } diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php index 379bf992ff..f344163a8b 100644 --- a/apps/files_external/tests/google.php +++ b/apps/files_external/tests/google.php @@ -20,8 +20,9 @@ * License along with this library. If not, see . */ -class Test_Filestorage_Google extends Test_FileStorage { +namespace Test\Files\Storage; +class Google extends Storage { private $config; public function setUp() { @@ -31,7 +32,7 @@ class Test_Filestorage_Google extends Test_FileStorage { $this->markTestSkipped('Google backend not configured'); } $this->config['google']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_Google($this->config['google']); + $this->instance = new \OC\Files\Storage\Google($this->config['google']); } public function tearDown() { diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php index 2d6268ef26..be3ea5a830 100644 --- a/apps/files_external/tests/smb.php +++ b/apps/files_external/tests/smb.php @@ -6,7 +6,10 @@ * See the COPYING-README file. */ -class Test_Filestorage_SMB extends Test_FileStorage { +namespace Test\Files\Storage; + +class SMB extends Storage { + private $config; public function setUp() { @@ -16,12 +19,12 @@ class Test_Filestorage_SMB extends Test_FileStorage { $this->markTestSkipped('Samba backend not configured'); } $this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_SMB($this->config['smb']); + $this->instance = new \OC\Files\Storage\SMB($this->config['smb']); } public function tearDown() { if ($this->instance) { - OCP\Files::rmdirr($this->instance->constructUrl('')); + \OCP\Files::rmdirr($this->instance->constructUrl('')); } } } diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php index 8b25db5099..5c78284024 100644 --- a/apps/files_external/tests/swift.php +++ b/apps/files_external/tests/swift.php @@ -6,7 +6,9 @@ * See the COPYING-README file. */ -class Test_Filestorage_SWIFT extends Test_FileStorage { +namespace Test\Files\Storage; + +class SWIFT extends Storage { private $config; public function setUp() { @@ -16,7 +18,7 @@ class Test_Filestorage_SWIFT extends Test_FileStorage { $this->markTestSkipped('OpenStack SWIFT backend not configured'); } $this->config['swift']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_SWIFT($this->config['swift']); + $this->instance = new \OC\Files\Storage\SWIFT($this->config['swift']); } diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php index dd938a0c93..1702898045 100644 --- a/apps/files_external/tests/webdav.php +++ b/apps/files_external/tests/webdav.php @@ -6,7 +6,10 @@ * See the COPYING-README file. */ -class Test_Filestorage_DAV extends Test_FileStorage { +namespace Test\Files\Storage; + +class DAV extends Storage { + private $config; public function setUp() { @@ -16,7 +19,7 @@ class Test_Filestorage_DAV extends Test_FileStorage { $this->markTestSkipped('WebDAV backend not configured'); } $this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new OC_Filestorage_DAV($this->config['webdav']); + $this->instance = new \OC\Files\Storage\DAV($this->config['webdav']); } public function tearDown() { diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 0104d0d017..d3e05cc62d 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -2,8 +2,11 @@ OC::$CLASSPATH['OC_Share_Backend_File'] = "apps/files_sharing/lib/share/file.php"; OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'apps/files_sharing/lib/share/folder.php'; -OC::$CLASSPATH['OC_Filestorage_Shared'] = "apps/files_sharing/lib/sharedstorage.php"; -OCP\Util::connectHook('OC_Filesystem', 'setup', 'OC_Filestorage_Shared', 'setup'); +OC::$CLASSPATH['OC\Files\Storage\Shared'] = "apps/files_sharing/lib/sharedstorage.php"; +OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'apps/files_sharing/lib/cache.php'; +OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'apps/files_sharing/lib/permissions.php'; +OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'apps/files_sharing/lib/watcher.php'; +OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); -OCP\Util::addScript('files_sharing', 'share'); \ No newline at end of file +OCP\Util::addScript('files_sharing', 'share'); diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml index a44d0338bb..1f24a4dde8 100644 --- a/apps/files_sharing/appinfo/info.xml +++ b/apps/files_sharing/appinfo/info.xml @@ -5,7 +5,7 @@ File sharing between users AGPL Michael Gapczynski - 4.9 + 4.91 true diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index e998626f4a..1d22b32b50 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -9,10 +9,12 @@ if (version_compare($installedVersion, '0.3', '<')) { OC_User::useBackend(new OC_User_Database()); OC_Group::useBackend(new OC_Group_Database()); OC_App::loadApps(array('authentication')); + $rootView = new \OC\Files\View(''); while ($row = $result->fetchRow()) { - $itemSource = OC_FileCache::getId($row['source'], ''); + $meta = $rootView->getFileInfo($$row['source']); + $itemSource = $meta['fileid']; if ($itemSource != -1) { - $file = OC_FileCache::get($row['source'], ''); + $file = $meta; if ($file['mimetype'] == 'httpd/unix-directory') { $itemType = 'folder'; } else { @@ -68,6 +70,6 @@ if (version_compare($installedVersion, '0.3.3', '<')) { OC_App::loadApps(array('authentication')); $users = OC_User::getUsers(); foreach ($users as $user) { - OC_FileCache::delete('Shared', '/'.$user.'/files/'); +// OC_FileCache::delete('Shared', '/'.$user.'/files/'); } -} \ No newline at end of file +} diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php new file mode 100644 index 0000000000..9655e44787 --- /dev/null +++ b/apps/files_sharing/lib/cache.php @@ -0,0 +1,258 @@ +. + */ + +namespace OC\Files\Cache; + +/** + * Metadata cache for shared files + * + * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead + */ +class Shared_Cache extends Cache { + + private $files = array(); + + public function __construct($storage) { + + } + + /** + * @brief Get the source cache of a shared file or folder + * @param string $target Shared target file path + * @return \OC\Files\Cache\Cache + */ + private function getSourceCache($target) { + $source = \OC_Share_Backend_File::getSource($target); + if (isset($source['path'])) { + $source['path'] = '/' . $source['uid_owner'] . '/' . $source['path']; + \OC\Files\Filesystem::initMountPoints($source['uid_owner']); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source['path']); + if ($storage) { + $this->files[$target] = $internalPath; + $cache = $storage->getCache(); + $this->storageId = $storage->getId(); + $this->numericId = $cache->getNumericStorageId(); + return $cache; + } + } + return false; + } + + /** + * get the stored metadata of a file or folder + * + * @param string/int $file + * @return array + */ + public function get($file) { + if ($file == '') { + return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT); + } else if (is_string($file)) { + if ($cache = $this->getSourceCache($file)) { + return $cache->get($this->files[$file]); + } + } else { + $query = \OC_DB::prepare( + 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` + FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + $result = $query->execute(array($file)); + $data = $result->fetchRow(); + $data['fileid'] = (int)$data['fileid']; + $data['size'] = (int)$data['size']; + $data['mtime'] = (int)$data['mtime']; + $data['encrypted'] = (bool)$data['encrypted']; + $data['mimetype'] = $this->getMimetype($data['mimetype']); + $data['mimepart'] = $this->getMimetype($data['mimepart']); + return $data; + } + return false; + } + + /** + * get the metadata of all files stored in $folder + * + * @param string $folder + * @return array + */ + public function getFolderContents($folder) { + if ($folder == '') { + $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS); + foreach ($files as &$file) { + $file['mimetype'] = $this->getMimetype($file['mimetype']); + $file['mimepart'] = $this->getMimetype($file['mimepart']); + } + return $files; + } else { + if ($cache = $this->getSourceCache($folder)) { + return $cache->getFolderContents($this->files[$folder]); + } + } + return false; + } + + /** + * store meta data for a file or folder + * + * @param string $file + * @param array $data + * + * @return int file id + */ + public function put($file, array $data) { + if ($cache = $this->getSourceCache($file)) { + return $cache->put($this->files[$file], $data); + } + return false; + } + + /** + * get the file id for a file + * + * @param string $file + * @return int + */ + public function getId($file) { + if ($cache = $this->getSourceCache($file)) { + return $cache->getId($this->files[$file]); + } + return -1; + } + + /** + * check if a file is available in the cache + * + * @param string $file + * @return bool + */ + public function inCache($file) { + if ($file == '') { + return true; + } + return parent::inCache($file); + } + + /** + * remove a file or folder from the cache + * + * @param string $file + */ + public function remove($file) { + if ($cache = $this->getSourceCache($file)) { + $cache->remove($this->files[$file]); + } + } + + /** + * Move a file or folder in the cache + * + * @param string $source + * @param string $target + */ + public function move($source, $target) { + if ($cache = $this->getSourceCache($source)) { + $targetPath = \OC_Share_Backend_File::getSourcePath(dirname($target)); + if ($targetPath) { + $targetPath .= '/' . basename($target); + $cache->move($this->files[$source], $targetPath); + } + + } + } + + /** + * remove all entries for files that are stored on the storage from the cache + */ + public function clear() { + // Not a valid action for Shared Cache + } + + /** + * @param string $file + * + * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE + */ + public function getStatus($file) { + if ($file == '') { + return self::COMPLETE; + } + if ($cache = $this->getSourceCache($file)) { + return $cache->getStatus($this->files[$file]); + } + return self::NOT_FOUND; + } + + /** + * search for files matching $pattern + * + * @param string $pattern + * @return array of file data + */ + public function search($pattern) { + // TODO + } + + /** + * search for files by mimetype + * + * @param string $part1 + * @param string $part2 + * @return array + */ + public function searchByMime($mimetype) { + if (strpos($mimetype, '/')) { + $where = '`mimetype` = ?'; + } else { + $where = '`mimepart` = ?'; + } + $mimetype = $this->getMimetypeId($mimetype); + $ids = $this->getAll(); + $placeholders = join(',', array_fill(0, count($ids), '?')); + $query = \OC_DB::prepare(' + SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` + FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')' + ); + $result = $query->execute(array_merge(array($mimetype), $ids)); + return $result->fetchAll(); + } + + /** + * get the size of a folder and set it in the cache + * + * @param string $path + * @return int + */ + public function calculateFolderSize($path) { + if ($cache = $this->getSourceCache($path)) { + return $cache->calculateFolderSize($this->files[$path]); + } + return 0; + } + + /** + * get all file ids on the files on the storage + * + * @return int[] + */ + public function getAll() { + return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL); + } + +} diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php new file mode 100644 index 0000000000..2b068ff935 --- /dev/null +++ b/apps/files_sharing/lib/permissions.php @@ -0,0 +1,85 @@ +. +*/ +namespace OC\Files\Cache; + +class Shared_Permissions extends Permissions { + + /** + * get the permissions for a single file + * + * @param int $fileId + * @param string $user + * @return int (-1 if file no permissions set) + */ + public function get($fileId, $user) { + if ($fileId == -1) { + return \OCP\PERMISSION_READ; + } + $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE, null, true); + if ($source) { + return $source['permissions']; + } else { + return -1; + } + } + + /** + * set the permissions of a file + * + * @param int $fileId + * @param string $user + * @param int $permissions + */ + public function set($fileId, $user, $permissions) { + // Not a valid action for Shared Permissions + } + + /** + * get the permissions of multiply files + * + * @param int[] $fileIds + * @param string $user + * @return int[] + */ + public function getMultiple($fileIds, $user) { + if (count($fileIds) === 0) { + return array(); + } + foreach ($fileIds as $fileId) { + $filePermissions[$fileId] = self::get($fileId, $user); + } + return $filePermissions; + } + + /** + * remove the permissions for a file + * + * @param int $fileId + * @param string $user + */ + public function remove($fileId, $user) { + // Not a valid action for Shared Permissions + } + + public function removeMultiple($fileIds, $user) { + // Not a valid action for Shared Permissions + } +} diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php index ac58523683..6d3c55a008 100644 --- a/apps/files_sharing/lib/share/file.php +++ b/apps/files_sharing/lib/share/file.php @@ -22,16 +22,18 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { const FORMAT_SHARED_STORAGE = 0; - const FORMAT_FILE_APP = 1; + const FORMAT_GET_FOLDER_CONTENTS = 1; const FORMAT_FILE_APP_ROOT = 2; const FORMAT_OPENDIR = 3; + const FORMAT_GET_ALL = 4; private $path; public function isValidSource($itemSource, $uidOwner) { - $path = OC_FileCache::getPath($itemSource, $uidOwner); - if ($path) { - $this->path = $path; + $query = \OC_DB::prepare('SELECT `name` FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + $result = $query->execute(array($itemSource)); + if ($row = $result->fetchRow()) { + $this->path = $row['name']; return true; } return false; @@ -70,37 +72,21 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { public function formatItems($items, $format, $parameters = null) { if ($format == self::FORMAT_SHARED_STORAGE) { // Only 1 item should come through for this format call - return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']); - } else if ($format == self::FORMAT_FILE_APP) { - if (isset($parameters['mimetype_filter']) && $parameters['mimetype_filter']) { - $mimetype_filter = $parameters['mimetype_filter']; - } + return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions'], 'uid_owner' => $items[key($items)]['uid_owner']); + } else if ($format == self::FORMAT_GET_FOLDER_CONTENTS) { $files = array(); foreach ($items as $item) { - if (isset($mimetype_filter) - && strpos($item['mimetype'], $mimetype_filter) !== 0 - && $item['mimetype'] != 'httpd/unix-directory') { - continue; - } $file = array(); - $file['id'] = $item['file_source']; + $file['fileid'] = $item['file_source']; + $file['storage'] = $item['storage']; $file['path'] = $item['file_target']; + $file['parent'] = $item['file_parent']; $file['name'] = basename($item['file_target']); - $file['ctime'] = $item['ctime']; - $file['mtime'] = $item['mtime']; $file['mimetype'] = $item['mimetype']; + $file['mimepart'] = $item['mimepart']; $file['size'] = $item['size']; + $file['mtime'] = $item['mtime']; $file['encrypted'] = $item['encrypted']; - $file['versioned'] = $item['versioned']; - $file['directory'] = $parameters['folder']; - $file['type'] = ($item['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file'; - $file['permissions'] = $item['permissions']; - if ($file['type'] == 'file') { - // Remove Create permission if type is file - $file['permissions'] &= ~OCP\PERMISSION_CREATE; - } - // NOTE: Temporary fix to allow unsharing of files in root of Shared directory - $file['permissions'] |= OCP\PERMISSION_DELETE; $files[] = $file; } return $files; @@ -111,17 +97,48 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { if ($item['mtime'] > $mtime) { $mtime = $item['mtime']; } - $size += $item['size']; + $size += (int)$item['size']; } - return array(0 => array('id' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\PERMISSION_READ)); + return array('fileid' => -1, 'name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size); } else if ($format == self::FORMAT_OPENDIR) { $files = array(); foreach ($items as $item) { $files[] = basename($item['file_target']); } return $files; + } else if ($format == self::FORMAT_GET_ALL) { + $ids = array(); + foreach ($items as $item) { + $ids[] = $item['file_source']; + } + return $ids; } return array(); } + public static function getSource($target) { + if ($target == '') { + return false; + } + $target = '/'.$target; + $target = rtrim($target, '/'); + $pos = strpos($target, '/', 1); + // Get shared folder name + if ($pos !== false) { + $folder = substr($target, 0, $pos); + $source = \OCP\Share::getItemSharedWith('folder', $folder, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE); + if ($source) { + $source['path'] = $source['path'].substr($target, strlen($folder)); + return $source; + } + } else { + $source = \OCP\Share::getItemSharedWith('file', $target, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE); + if ($source) { + return $source; + } + } + \OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, \OCP\Util::ERROR); + return false; + } + } diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php index d414fcf10f..11c8c6b1e8 100644 --- a/apps/files_sharing/lib/share/folder.php +++ b/apps/files_sharing/lib/share/folder.php @@ -21,47 +21,26 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share_Backend_Collection { - public function formatItems($items, $format, $parameters = null) { - if ($format == self::FORMAT_SHARED_STORAGE) { - // Only 1 item should come through for this format call - return array('path' => $items[key($items)]['path'], 'permissions' => $items[key($items)]['permissions']); - } else if ($format == self::FORMAT_FILE_APP && isset($parameters['folder'])) { - // Only 1 item should come through for this format call - $folder = $items[key($items)]; - if (isset($parameters['mimetype_filter'])) { - $mimetype_filter = $parameters['mimetype_filter']; - } else { - $mimetype_filter = ''; - } - $path = $folder['path'].substr($parameters['folder'], 7 + strlen($folder['file_target'])); - $files = OC_FileCache::getFolderContent($path, '', $mimetype_filter); - foreach ($files as &$file) { - $file['directory'] = $parameters['folder']; - $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file'; - $file['permissions'] = $folder['permissions']; - if ($file['type'] == 'file') { - // Remove Create permission if type is file - $file['permissions'] &= ~OCP\PERMISSION_CREATE; - } - } - return $files; - } - return array(); - } - public function getChildren($itemSource) { $children = array(); $parents = array($itemSource); + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?'); + $result = $query->execute(array('httpd/unix-directory')); + if ($row = $result->fetchRow()) { + $mimetype = $row['id']; + } else { + $mimetype = -1; + } while (!empty($parents)) { $parents = "'".implode("','", $parents)."'"; - $query = OC_DB::prepare('SELECT `id`, `name`, `mimetype` FROM `*PREFIX*fscache` WHERE `parent` IN ('.$parents.')'); + $query = OC_DB::prepare('SELECT `fileid`, `name`, `mimetype` FROM `*PREFIX*filecache` WHERE `parent` IN ('.$parents.')'); $result = $query->execute(); $parents = array(); while ($file = $result->fetchRow()) { - $children[] = array('source' => $file['id'], 'file_path' => $file['name']); + $children[] = array('source' => $file['fileid'], 'file_path' => $file['name']); // If a child folder is found look inside it - if ($file['mimetype'] == 'httpd/unix-directory') { - $parents[] = $file['id']; + if ($file['mimetype'] == $mimetype) { + $parents[] = $file['fileid']; } } } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 50db9166fe..ea28ca69b9 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -20,10 +20,12 @@ * */ +namespace OC\Files\Storage; + /** * Convert target path to source path and pass the function call to the correct storage provider */ -class OC_Filestorage_Shared extends OC_Filestorage_Common { +class Shared extends \OC\Files\Storage\Common { private $sharedFolder; private $files = array(); @@ -32,54 +34,36 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { $this->sharedFolder = $arguments['sharedFolder']; } + public function getId(){ + return 'shared::' . $this->sharedFolder; + } + /** - * @brief Get the source file path and the permissions granted for a shared file + * @brief Get the source file path, permissions, and owner for a shared file * @param string Shared target file path - * @return Returns array with the keys path and permissions or false if not found + * @return Returns array with the keys path, permissions, and owner or false if not found */ private function getFile($target) { - $target = '/'.$target; - $target = rtrim($target, '/'); - if (isset($this->files[$target])) { - return $this->files[$target]; - } else { - $pos = strpos($target, '/', 1); - // Get shared folder name - if ($pos !== false) { - $folder = substr($target, 0, $pos); - if (isset($this->files[$folder])) { - $file = $this->files[$folder]; - } else { - $file = OCP\Share::getItemSharedWith('folder', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE); - } - if ($file) { - $this->files[$target]['path'] = $file['path'].substr($target, strlen($folder)); - $this->files[$target]['permissions'] = $file['permissions']; - return $this->files[$target]; - } - } else { - $file = OCP\Share::getItemSharedWith('file', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE); - if ($file) { - $this->files[$target] = $file; - return $this->files[$target]; - } + if (!isset($this->files[$target])) { + $source = \OC_Share_Backend_File::getSource($target); + if ($source) { + $source['path'] = '/'.$source['uid_owner'].'/'.$source['path']; } - OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, OCP\Util::ERROR); - return false; + $this->files[$target] = $source; } + return $this->files[$target]; } /** * @brief Get the source file path for a shared file * @param string Shared target file path - * @return Returns source file path or false if not found + * @return string source file path or false if not found */ private function getSourcePath($target) { - $file = $this->getFile($target); - if (isset($file['path'])) { - $uid = substr($file['path'], 1, strpos($file['path'], '/', 1) - 1); - OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => OC_User::getHome($uid)), $uid); - return $file['path']; + $source = $this->getFile($target); + if ($source) { + \OC\Files\Filesystem::initMountPoints($source['uid_owner']); + return $source['path']; } return false; } @@ -87,61 +71,42 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { /** * @brief Get the permissions granted for a shared file * @param string Shared target file path - * @return Returns CRUDS permissions granted or false if not found + * @return int CRUDS permissions granted or false if not found */ - private function getPermissions($target) { - $file = $this->getFile($target); - if (isset($file['permissions'])) { - return $file['permissions']; + public function getPermissions($target) { + $source = $this->getFile($target); + if ($source) { + return $source['permissions']; } return false; } - /** - * @brief Get the internal path to pass to the storage filesystem call - * @param string Source file path - * @return Source file path with mount point stripped out - */ - private function getInternalPath($path) { - $mountPoint = OC_Filesystem::getMountPoint($path); - $internalPath = substr($path, strlen($mountPoint)); - return $internalPath; - } - - public function getOwner($target) { - $shared_item = OCP\Share::getItemSharedWith('folder', $target, OC_Share_Backend_File::FORMAT_SHARED_STORAGE); - if ($shared_item) { - return $shared_item[0]["uid_owner"]; - } - return null; - } - public function mkdir($path) { if ($path == '' || $path == '/' || !$this->isCreatable(dirname($path))) { return false; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->mkdir($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->mkdir($internalPath); } return false; } public function rmdir($path) { if (($source = $this->getSourcePath($path)) && $this->isDeletable($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->rmdir($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->rmdir($internalPath); } return false; } public function opendir($path) { if ($path == '' || $path == '/') { - $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_Folder::FORMAT_OPENDIR); - OC_FakeDirStream::$dirs['shared'] = $files; + $files = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_Folder::FORMAT_OPENDIR); + \OC\Files\Stream\Dir::register('shared', $files); return opendir('fakedir://shared'); } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->opendir($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->opendir($internalPath); } return false; } @@ -150,16 +115,16 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '' || $path == '/') { return true; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->is_dir($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->is_dir($internalPath); } return false; } public function is_file($path) { if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->is_file($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->is_file($internalPath); } return false; } @@ -168,11 +133,10 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '' || $path == '/') { $stat['size'] = $this->filesize($path); $stat['mtime'] = $this->filemtime($path); - $stat['ctime'] = $this->filectime($path); return $stat; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->stat($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->stat($internalPath); } return false; } @@ -181,8 +145,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '' || $path == '/') { return 'dir'; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->filetype($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->filetype($internalPath); } return false; } @@ -191,8 +155,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '' || $path == '/' || $this->is_dir($path)) { return 0; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->filesize($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->filesize($internalPath); } return false; } @@ -201,7 +165,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '') { return false; } - return ($this->getPermissions($path) & OCP\PERMISSION_CREATE); + return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE); } public function isReadable($path) { @@ -212,54 +176,33 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($path == '') { return false; } - return ($this->getPermissions($path) & OCP\PERMISSION_UPDATE); + return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE); } public function isDeletable($path) { if ($path == '') { return true; } - return ($this->getPermissions($path) & OCP\PERMISSION_DELETE); + return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE); } public function isSharable($path) { if ($path == '') { return false; } - return ($this->getPermissions($path) & OCP\PERMISSION_SHARE); + return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE); } public function file_exists($path) { if ($path == '' || $path == '/') { return true; } else if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->file_exists($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->file_exists($internalPath); } return false; } - public function filectime($path) { - if ($path == '' || $path == '/') { - $ctime = 0; - if ($dh = $this->opendir($path)) { - while (($filename = readdir($dh)) !== false) { - $tempctime = $this->filectime($filename); - if ($tempctime < $ctime) { - $ctime = $tempctime; - } - } - } - return $ctime; - } else { - $source = $this->getSourcePath($path); - if ($source) { - $storage = OC_Filesystem::getStorage($source); - return $storage->filectime($this->getInternalPath($source)); - } - } - } - public function filemtime($path) { if ($path == '' || $path == '/') { $mtime = 0; @@ -275,8 +218,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { } else { $source = $this->getSourcePath($path); if ($source) { - $storage = OC_Filesystem::getStorage($source); - return $storage->filemtime($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->filemtime($internalPath); } } } @@ -288,9 +231,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { 'target' => $this->sharedFolder.$path, 'source' => $source, ); - OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info); - $storage = OC_Filesystem::getStorage($source); - return $storage->file_get_contents($this->getInternalPath($source)); + \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_get_contents', $info); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->file_get_contents($internalPath); } } @@ -304,9 +247,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { 'target' => $this->sharedFolder.$path, 'source' => $source, ); - OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info); - $storage = OC_Filesystem::getStorage($source); - $result = $storage->file_put_contents($this->getInternalPath($source), $data); + \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_put_contents', $info); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + $result = $storage->file_put_contents($internalPath, $data); return $result; } return false; @@ -316,8 +259,8 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { // Delete the file if DELETE permission is granted if ($source = $this->getSourcePath($path)) { if ($this->isDeletable($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->unlink($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->unlink($internalPath); } else if (dirname($path) == '/' || dirname($path) == '.') { // Unshare the file from the user if in the root of the Shared folder if ($this->is_dir($path)) { @@ -325,7 +268,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { } else { $itemType = 'file'; } - return OCP\Share::unshareFromSelf($itemType, $path); + return \OCP\Share::unshareFromSelf($itemType, $path); } } return false; @@ -340,8 +283,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if (dirname($path1) == dirname($path2)) { // Rename the file if UPDATE permission is granted if ($this->isUpdatable($path1)) { - $storage = OC_Filesystem::getStorage($oldSource); - return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource)); + list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource); + list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource); + return $storage->rename($oldInternalPath, $newInternalPath); } } else { // Move the file if DELETE and CREATE permissions are granted @@ -355,8 +299,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { return $this->unlink($path1); } } else { - $storage = OC_Filesystem::getStorage($oldSource); - return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource)); + list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource); + list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource); + return $storage->rename($oldInternalPath, $newInternalPath); } } } @@ -369,7 +314,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { if ($this->isCreatable(dirname($path2))) { $source = $this->fopen($path1, 'r'); $target = $this->fopen($path2, 'w'); - return OC_Helper::streamCopy($source, $target); + return \OC_Helper::streamCopy($source, $target); } return false; } @@ -400,9 +345,9 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { 'source' => $source, 'mode' => $mode, ); - OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info); - $storage = OC_Filesystem::getStorage($source); - return $storage->fopen($this->getInternalPath($source), $mode); + \OCP\Util::emitHook('\OC\Files\Storage\Shared', 'fopen', $info); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->fopen($internalPath, $mode); } return false; } @@ -412,47 +357,88 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common { return 'httpd/unix-directory'; } if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->getMimeType($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->getMimeType($internalPath); } return false; } public function free_space($path) { + if ($path == '') { + return -1; + } $source = $this->getSourcePath($path); if ($source) { - $storage = OC_Filesystem::getStorage($source); - return $storage->free_space($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->free_space($internalPath); } } public function getLocalFile($path) { if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->getLocalFile($this->getInternalPath($source)); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->getLocalFile($internalPath); } return false; } public function touch($path, $mtime = null) { if ($source = $this->getSourcePath($path)) { - $storage = OC_Filesystem::getStorage($source); - return $storage->touch($this->getInternalPath($source), $mtime); + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->touch($internalPath, $mtime); } return false; } public static function setup($options) { - $user_dir = $options['user_dir']; - OC_Filesystem::mount('OC_Filestorage_Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/'); + if (\OCP\Share::getItemsSharedWith('file')) { + $user_dir = $options['user_dir']; + \OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/'); + } } - /** - * check if a file or folder has been updated since $time - * @param int $time - * @return bool - */ public function hasUpdated($path, $time) { - //TODO + if ($path == '') { + return false; + } + return $this->filemtime($path) > $time; + } + + public function getCache($path = '') { + return new \OC\Files\Cache\Shared_Cache($this); + } + + public function getScanner($path = '') { + return new \OC\Files\Cache\Scanner($this); + } + + public function getPermissionsCache($path = '') { + return new \OC\Files\Cache\Shared_Permissions($this); + } + + public function getWatcher($path = '') { + return new \OC\Files\Cache\Shared_Watcher($this); + } + + public function getOwner($path) { + if ($path == '') { + return false; + } + $source = $this->getFile($path); + if ($source) { + return $source['uid_owner']; + } return false; } + + public function getETag($path) { + if ($path == '') { + return parent::getETag($path); + } + if ($source = $this->getSourcePath($path)) { + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); + return $storage->getETag($internalPath); + } + return null; + } + } diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php new file mode 100644 index 0000000000..e67d1ee908 --- /dev/null +++ b/apps/files_sharing/lib/watcher.php @@ -0,0 +1,51 @@ +. +*/ + +namespace OC\Files\Cache; + +/** + * check the storage backends for updates and change the cache accordingly + */ +class Shared_Watcher extends Watcher { + + /** + * check $path for updates + * + * @param string $path + */ + public function checkUpdate($path) { + if ($path != '') { + parent::checkUpdate($path); + } + } + + /** + * remove deleted files in $path from the cache + * + * @param string $path + */ + public function cleanFolder($path) { + if ($path != '') { + parent::cleanFolder($path); + } + } + +} \ No newline at end of file diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index 5672c78dc3..9cf45e56fb 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -9,9 +9,10 @@ if (isset($_GET['token'])) { unset($_GET['file']); $qry = \OC_DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ?', 1); $filepath = $qry->execute(array($_GET['token']))->fetchOne(); - if(isset($filepath)) { - $info = OC_FileCache_Cached::get($filepath, ''); - if(strtolower($info['mimetype']) == 'httpd/unix-directory') { + if (isset($filepath)) { + $rootView = new \OC\Files\View(''); + $info = $rootView->getFileInfo($filepath, ''); + if (strtolower($info['mimetype']) == 'httpd/unix-directory') { $_GET['dir'] = $filepath; } else { $_GET['file'] = $filepath; @@ -25,7 +26,7 @@ if (isset($_GET['token'])) { function getID($path) { // use the share table from the db to find the item source if the file was reshared because shared files //are not stored in the file cache. - if (substr(OC_Filesystem::getMountPoint($path), -7, 6) == "Shared") { + if (substr(\OC\Files\Filesystem::getMountPoint($path), -7, 6) == "Shared") { $path_parts = explode('/', $path, 5); $user = $path_parts[1]; $intPath = '/'.$path_parts[4]; @@ -37,16 +38,19 @@ function getID($path) { $row = $result->fetchRow(); $fileSource = $row['item_source']; } else { - $fileSource = OC_Filecache::getId($path, ''); + $rootView = new \OC\Files\View(''); + $meta = $rootView->getFileInfo($path); + $fileSource = $meta['fileid']; } return $fileSource; } + // Enf of backward compatibility /** * lookup file path and owner by fetching it from the fscache - * needed becaus OC_FileCache::getPath($id, $user) already requires the user + * needed because OC_FileCache::getPath($id, $user) already requires the user * @param int $id * @return array */ @@ -86,41 +90,43 @@ if (isset($_GET['t'])) { OC_Util::setupFS($fileOwner); } } -} else if (isset($_GET['file']) || isset($_GET['dir'])) { - OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG); - if (isset($_GET['dir'])) { - $type = 'folder'; - $path = $_GET['dir']; - if(strlen($path)>1 and substr($path, -1, 1)==='/') { - $path=substr($path, 0, -1); +} else { + if (isset($_GET['file']) || isset($_GET['dir'])) { + OCP\Util::writeLog('share', 'Missing token, trying fallback file/dir links', \OCP\Util::DEBUG); + if (isset($_GET['dir'])) { + $type = 'folder'; + $path = $_GET['dir']; + if (strlen($path) > 1 and substr($path, -1, 1) === '/') { + $path = substr($path, 0, -1); + } + $baseDir = $path; + $dir = $baseDir; + } else { + $type = 'file'; + $path = $_GET['file']; + if (strlen($path) > 1 and substr($path, -1, 1) === '/') { + $path = substr($path, 0, -1); + } } - $baseDir = $path; - $dir = $baseDir; - } else { - $type = 'file'; - $path = $_GET['file']; - if(strlen($path)>1 and substr($path, -1, 1)==='/') { - $path=substr($path, 0, -1); - } - } - $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1); + $shareOwner = substr($path, 1, strpos($path, '/', 1) - 1); - if (OCP\User::userExists($shareOwner)) { - OC_Util::setupFS($shareOwner); - $fileSource = getId($path); - if ($fileSource != -1 ) { - $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner); - $pathAndUser['path'] = $path; - $path_parts = explode('/', $path, 5); - $pathAndUser['user'] = $path_parts[1]; - $fileOwner = $path_parts[1]; + if (OCP\User::userExists($shareOwner)) { + OC_Util::setupFS($shareOwner); + $fileSource = getId($path); + if ($fileSource != -1) { + $linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $shareOwner); + $pathAndUser['path'] = $path; + $path_parts = explode('/', $path, 5); + $pathAndUser['user'] = $path_parts[1]; + $fileOwner = $path_parts[1]; + } } } } if ($linkItem) { if (!isset($linkItem['item_type'])) { - OCP\Util::writeLog('share', 'No item type set for share id: '.$linkItem['id'], \OCP\Util::ERROR); + OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR); header('HTTP/1.0 404 Not Found'); $tmpl = new OCP\Template('', '404', 'guest'); $tmpl->printPage(); @@ -128,11 +134,13 @@ if ($linkItem) { } if (isset($linkItem['share_with'])) { // Authenticate share_with - $url = OCP\Util::linkToPublic('files').'&t='.$token; + $url = OCP\Util::linkToPublic('files') . '&t=' . $token; if (isset($_GET['file'])) { - $url .= '&file='.urlencode($_GET['file']); - } else if (isset($_GET['dir'])) { - $url .= '&dir='.urlencode($_GET['dir']); + $url .= '&file=' . urlencode($_GET['file']); + } else { + if (isset($_GET['dir'])) { + $url .= '&dir=' . urlencode($_GET['dir']); + } } if (isset($_POST['password'])) { $password = $_POST['password']; @@ -173,13 +181,13 @@ if ($linkItem) { } } } - $basePath = substr($pathAndUser['path'], strlen('/'.$fileOwner.'/files')); + $basePath = substr($pathAndUser['path'], strlen('/' . $fileOwner . '/files')); $path = $basePath; if (isset($_GET['path'])) { $path .= $_GET['path']; } - if (!$path || !OC_Filesystem::isValidPath($path) || !OC_Filesystem::file_exists($path)) { - OCP\Util::writeLog('share', 'Invalid path '.$path.' for share id '.$linkItem['id'], \OCP\Util::ERROR); + if (!$path || !\OC\Files\Filesystem::isValidPath($path) || !\OC\Files\Filesystem::file_exists($path)) { + OCP\Util::writeLog('share', 'Invalid path ' . $path . ' for share id ' . $linkItem['id'], \OCP\Util::ERROR); header('HTTP/1.0 404 Not Found'); $tmpl = new OCP\Template('', '404', 'guest'); $tmpl->printPage(); @@ -189,13 +197,15 @@ if ($linkItem) { $file = basename($path); // Download the file if (isset($_GET['download'])) { - if (isset($_GET['path']) && $_GET['path'] !== '' ) { - if ( isset($_GET['files']) ) { // download selected files + if (isset($_GET['path']) && $_GET['path'] !== '') { + if (isset($_GET['files'])) { // download selected files OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); - } else if (isset($_GET['path']) && $_GET['path'] != '' ) { // download a file from a shared directory - OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); - } else { // download the whole shared directory - OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); + } else { + if (isset($_GET['path']) && $_GET['path'] != '') { // download a file from a shared directory + OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); + } else { // download the whole shared directory + OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); + } } } else { // download a single shared file OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false); @@ -210,7 +220,7 @@ if ($linkItem) { $tmpl->assign('displayName', \OCP\User::getDisplayName($shareOwner)); $tmpl->assign('dir', $dir); $tmpl->assign('filename', $file); - $tmpl->assign('mimetype', OC_Filesystem::getMimeType($path)); + $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); if (isset($_GET['path'])) { $getPath = $_GET['path']; } else { @@ -221,7 +231,7 @@ if ($linkItem) { .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'') .(isset($_GET['file'])?'&file='.$_GET['file']:''); // Show file list - if (OC_Filesystem::is_dir($path)) { + if (\OC\Files\Filesystem::is_dir($path)) { OCP\Util::addStyle('files', 'files'); OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); @@ -232,9 +242,9 @@ if ($linkItem) { if ($i['type'] == 'file') { $fileinfo = pathinfo($i['name']); $i['basename'] = $fileinfo['filename']; - $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : ''; + $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : ''; } - $i['directory'] = '/'.substr($i['directory'], $rootLength); + $i['directory'] = '/' . substr($i['directory'], $rootLength); if ($i['directory'] == '/') { $i['directory'] = ''; } @@ -251,9 +261,137 @@ if ($linkItem) { //add subdir breadcrumbs foreach (explode('/', urldecode($getPath)) as $i) { if ($i != '') { - $pathtohere .= '/'.$i; + $pathtohere .= '/' . $i; $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i); + $path = $linkItem['path']; + if (isset($_GET['path'])) { + $path .= $_GET['path']; + $dir .= $_GET['path']; + if (!\OC\Files\Filesystem::file_exists($path)) { + header('HTTP/1.0 404 Not Found'); + $tmpl = new OCP\Template('', '404', 'guest'); + $tmpl->printPage(); + exit(); + } + } + + $list = new OCP\Template('files', 'part.list', ''); + $list->assign('files', $files, false); + $list->assign('publicListView', true); + $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); + $list->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=', false); + $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); + $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); + $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=', false); + $folder = new OCP\Template('files', 'index', ''); + $folder->assign('fileList', $list->fetchPage(), false); + $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); + $folder->assign('isCreatable', false); + $folder->assign('permissions', 0); + $folder->assign('files', $files); + $folder->assign('uploadMaxFilesize', 0); + $folder->assign('uploadMaxHumanFilesize', 0); + $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + $tmpl->assign('folder', $folder->fetchPage(), false); + $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); + } else { + // Show file preview if viewer is available + if ($type == 'file') { + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download'); + } else { + OCP\Util::addStyle('files_sharing', 'public'); + OCP\Util::addScript('files_sharing', 'public'); + OCP\Util::addScript('files', 'fileactions'); + $tmpl = new OCP\Template('files_sharing', 'public', 'base'); + $tmpl->assign('owner', $uidOwner); + // Show file list + if (\OC\Files\Filesystem::is_dir($path)) { + OCP\Util::addStyle('files', 'files'); + OCP\Util::addScript('files', 'files'); + OCP\Util::addScript('files', 'filelist'); + $files = array(); + $rootLength = strlen($baseDir) + 1; + foreach (OC_Files::getDirectoryContent($path) as $i) { + $i['date'] = OCP\Util::formatDate($i['mtime']); + if ($i['type'] == 'file') { + $fileinfo = pathinfo($i['name']); + $i['basename'] = $fileinfo['filename']; + $i['extension'] = isset($fileinfo['extension']) ? ('.' . $fileinfo['extension']) : ''; + } + $i['directory'] = '/' . substr('/' . $uidOwner . '/files' . $i['directory'], $rootLength); + if ($i['directory'] == '/') { + $i['directory'] = ''; + } + $i['permissions'] = OCP\PERMISSION_READ; + $files[] = $i; + } + // Make breadcrumb + $breadcrumb = array(); + $pathtohere = ''; + $count = 1; + foreach (explode('/', $dir) as $i) { + if ($i != '') { + if ($i != $baseDir) { + $pathtohere .= '/' . $i; + } + if (strlen($pathtohere) < strlen($_GET['dir'])) { + continue; + } + $breadcrumb[] = array('dir' => str_replace($_GET['dir'], "", $pathtohere, $count), 'name' => $i); + } + } + $list = new OCP\Template('files', 'part.list', ''); + $list->assign('files', $files, false); + $list->assign('publicListView', true); + $list->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false); + $list->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=', false); + $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); + $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); + $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . '&dir=' . urlencode($_GET['dir']) . '&path=', false); + $folder = new OCP\Template('files', 'index', ''); + $folder->assign('fileList', $list->fetchPage(), false); + $folder->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); + $folder->assign('dir', basename($dir)); + $folder->assign('isCreatable', false); + $folder->assign('permissions', 0); + $folder->assign('files', $files); + $folder->assign('uploadMaxFilesize', 0); + $folder->assign('uploadMaxHumanFilesize', 0); + $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + $tmpl->assign('folder', $folder->fetchPage(), false); + $tmpl->assign('uidOwner', $uidOwner); + $tmpl->assign('dir', basename($dir)); + $tmpl->assign('filename', basename($path)); + $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); + $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); + if (isset($_GET['path'])) { + $getPath = $_GET['path']; + } else { + $getPath = ''; + } + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false); + } else { + // Show file preview if viewer is available + $tmpl->assign('uidOwner', $uidOwner); + $tmpl->assign('dir', dirname($path)); + $tmpl->assign('filename', basename($path)); + $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); + if ($type == 'file') { + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&file=' . urlencode($_GET['file']) . '&download', false); + } else { + if (isset($_GET['path'])) { + $getPath = $_GET['path']; + } else { + $getPath = ''; + } + $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . '&download&dir=' . urlencode($_GET['dir']) . '&path=' . urlencode($getPath), false); + } + } + $tmpl->printPage(); + } } + $tmpl->printPage(); } $list = new OCP\Template('files', 'part.list', ''); @@ -279,21 +417,11 @@ if ($linkItem) { $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') .$urlLinkIdentifiers.'&download&path='.urlencode($getPath)); } else { - // Show file preview if viewer is available - if ($type == 'file') { - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') - .$urlLinkIdentifiers.'&download'); - } else { - $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') - .$urlLinkIdentifiers.'&download&path='.urlencode($getPath)); - } + OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG); } - $tmpl->printPage(); } - exit(); -} else { - OCP\Util::writeLog('share', 'could not resolve linkItem', \OCP\Util::DEBUG); } header('HTTP/1.0 404 Not Found'); $tmpl = new OCP\Template('', '404', 'guest'); $tmpl->printPage(); + diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php new file mode 100644 index 0000000000..a7bb5b9de2 --- /dev/null +++ b/apps/files_trashbin/ajax/undelete.php @@ -0,0 +1,45 @@ + array("message" => "Couldn't restore ".rtrim($filelist,', '), "success" => $success, "error" => $error))); +} else { + OCP\JSON::success(array("data" => array("success" => $success))); +} + diff --git a/apps/files_trashbin/appinfo/app.php b/apps/files_trashbin/appinfo/app.php new file mode 100644 index 0000000000..3741d42c78 --- /dev/null +++ b/apps/files_trashbin/appinfo/app.php @@ -0,0 +1,7 @@ + + + + *dbname* + true + false + + utf8 + + + + *dbprefix*files_trash + + + + + id + text + + true + 50 + + + + user + text + + true + 50 + + + + timestamp + text + + true + 12 + + + + location + text + + true + 200 + + + + type + text + + true + 4 + + + + mime + text + + true + 30 + + + + id_index + + id + ascending + + + + + timestamp_index + + timestamp + ascending + + + + + user_index + + user + ascending + + + + + +
+ +
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml new file mode 100644 index 0000000000..9b48612636 --- /dev/null +++ b/apps/files_trashbin/appinfo/info.xml @@ -0,0 +1,14 @@ + + + files_trashbin + Trash + Trash bin + AGPL + Bjoern Schiessle + true + 4.9 + + + + + diff --git a/apps/files_trashbin/appinfo/version b/apps/files_trashbin/appinfo/version new file mode 100644 index 0000000000..49d59571fb --- /dev/null +++ b/apps/files_trashbin/appinfo/version @@ -0,0 +1 @@ +0.1 diff --git a/apps/files_trashbin/download.php b/apps/files_trashbin/download.php new file mode 100644 index 0000000000..665697dca5 --- /dev/null +++ b/apps/files_trashbin/download.php @@ -0,0 +1,51 @@ +. +* +*/ + +// Check if we are a user +OCP\User::checkLoggedIn(); + +$filename = $_GET["file"]; + +$view = new OC_FilesystemView('/'.\OCP\User::getUser().'/files_trashbin'); + +if(!$view->file_exists($filename)) { + header("HTTP/1.0 404 Not Found"); + $tmpl = new OCP\Template( '', '404', 'guest' ); + $tmpl->assign('file', $filename); + $tmpl->printPage(); + exit; +} + +$ftype=$view->getMimeType( $filename ); + +header('Content-Type:'.$ftype);if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { + header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); +} else { + header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) + . '; filename="' . rawurlencode( basename($filename) ) . '"' ); +} +OCP\Response::disableCaching(); +header('Content-Length: '. $view->filesize($filename)); + +OC_Util::obEnd(); +$view->readfile( $filename ); diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php new file mode 100644 index 0000000000..46a601cfdd --- /dev/null +++ b/apps/files_trashbin/index.php @@ -0,0 +1,100 @@ +getAbsolutePath($dir); + $dirContent = opendir($fullpath); + $i = 0; + while($entryName = readdir($dirContent)) { + if ( $entryName != '.' && $entryName != '..' ) { + $pos = strpos($dir.'/', '/', 1); + $tmp = substr($dir, 0, $pos); + $pos = strrpos($tmp, '.d'); + $timestamp = substr($tmp,$pos+2); + $result[] = array( + 'id' => $entryName, + 'timestamp' => $timestamp, + 'mime' => $view->getMimeType($dir.'/'.$entryName), + 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file', + 'location' => $dir, + ); + } + } + closedir($fullpath); + +} else { + $dirlisting = false; + $query = \OC_DB::prepare('SELECT id,location,timestamp,type,mime FROM *PREFIX*files_trash WHERE user=?'); + $result = $query->execute(array($user))->fetchAll(); +} + +$files = array(); +foreach ($result as $r) { + $i = array(); + $i['name'] = $r['id']; + $i['date'] = OCP\Util::formatDate($r['timestamp']); + $i['timestamp'] = $r['timestamp']; + $i['mimetype'] = $r['mime']; + $i['type'] = $r['type']; + if ($i['type'] == 'file') { + $fileinfo = pathinfo($r['id']); + $i['basename'] = $fileinfo['filename']; + $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : ''; + } + $i['directory'] = $r['location']; + if ($i['directory'] == '/') { + $i['directory'] = ''; + } + $i['permissions'] = OCP\PERMISSION_READ; + $files[] = $i; +} + +// Make breadcrumb +$breadcrumb = array(array('dir' => '', 'name' => 'Trash')); +$pathtohere = ''; +foreach (explode('/', $dir) as $i) { + if ($i != '') { + if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) { + $name = $match[1]; + } else { + $name = $i; + } + $pathtohere .= '/' . $i; + $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name); + } +} + +$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); +$breadcrumbNav->assign('breadcrumb', $breadcrumb, false); +$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=', false); + +$list = new OCP\Template('files_trashbin', 'part.list', ''); +$list->assign('files', $files, false); +$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$dir, false); +$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$dir, false); +$list->assign('disableSharing', true); +$list->assign('dirlisting', $dirlisting); +$list->assign('disableDownloadActions', true); +$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage(), false); +$tmpl->assign('fileList', $list->fetchPage(), false); +$tmpl->assign('files', $files); +$tmpl->assign('dir', OC_Filesystem::normalizePath($view->getAbsolutePath())); + +$tmpl->printPage(); diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js new file mode 100644 index 0000000000..56b95407dd --- /dev/null +++ b/apps/files_trashbin/js/disableDefaultActions.js @@ -0,0 +1,3 @@ +/* disable download and sharing actions */ +var disableDownloadActions = true; +var disableSharing = true; diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js new file mode 100644 index 0000000000..3ad0ab04fb --- /dev/null +++ b/apps/files_trashbin/js/trash.js @@ -0,0 +1,158 @@ + +$(document).ready(function() { + + if (typeof FileActions !== 'undefined') { + FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/undelete.png'), function(filename) { + var tr=$('tr').filterAttr('data-file', filename); + var spinner = ''; + var undeleteAction = $('tr').filterAttr('data-file',filename).children("td.date"); + undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner; + $.post(OC.filePath('files_trashbin','ajax','undelete.php'), + {files:tr.attr('data-file'), dirlisting:tr.attr('data-dirlisting') }, + function(result){ + for (var i = 0; i < result.data.success.length; i++) { + var row = document.getElementById(result.data.success[i].filename); + row.parentNode.removeChild(row); + } + if (result.status != 'success') { + OC.dialogs.alert(result.data.message, 'Error'); + } + }); + + }); + }; + + // Sets the select_all checkbox behaviour : + $('#select_all').click(function() { + if($(this).attr('checked')){ + // Check all + $('td.filename input:checkbox').attr('checked', true); + $('td.filename input:checkbox').parent().parent().addClass('selected'); + }else{ + // Uncheck all + $('td.filename input:checkbox').attr('checked', false); + $('td.filename input:checkbox').parent().parent().removeClass('selected'); + } + processSelection(); + }); + + $('td.filename input:checkbox').live('change',function(event) { + if (event.shiftKey) { + var last = $(lastChecked).parent().parent().prevAll().length; + var first = $(this).parent().parent().prevAll().length; + var start = Math.min(first, last); + var end = Math.max(first, last); + var rows = $(this).parent().parent().parent().children('tr'); + for (var i = start; i < end; i++) { + $(rows).each(function(index) { + if (index == i) { + var checkbox = $(this).children().children('input:checkbox'); + $(checkbox).attr('checked', 'checked'); + $(checkbox).parent().parent().addClass('selected'); + } + }); + } + } + var selectedCount=$('td.filename input:checkbox:checked').length; + $(this).parent().parent().toggleClass('selected'); + if(!$(this).attr('checked')){ + $('#select_all').attr('checked',false); + }else{ + if(selectedCount==$('td.filename input:checkbox').length){ + $('#select_all').attr('checked',true); + } + } + processSelection(); + }); + + $('.undelete').click('click',function(event) { + var spinner = ''; + var files=getSelectedFiles('file'); + var fileslist=files.join(';'); + var dirlisting=getSelectedFiles('dirlisting')[0]; + + for (var i in files) { + var undeleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date"); + undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner; + } + + $.post(OC.filePath('files_trashbin','ajax','undelete.php'), + {files:fileslist, dirlisting:dirlisting}, + function(result){ + for (var i = 0; i < result.data.success.length; i++) { + var row = document.getElementById(result.data.success[i].filename); + row.parentNode.removeChild(row); + } + if (result.status != 'success') { + OC.dialogs.alert(result.data.message, 'Error'); + } + }); + }); + + +}); + +function processSelection(){ + var selected=getSelectedFiles(); + var selectedFiles=selected.filter(function(el){return el.type=='file'}); + var selectedFolders=selected.filter(function(el){return el.type=='dir'}); + if(selectedFiles.length==0 && selectedFolders.length==0) { + $('#headerName>span.name').text(t('files','Name')); + $('#modified').text(t('files','Deleted')); + $('table').removeClass('multiselect'); + $('.selectedActions').hide(); + } + else { + $('.selectedActions').show(); + var selection=''; + if(selectedFolders.length>0){ + if(selectedFolders.length==1){ + selection+=t('files','1 folder'); + }else{ + selection+=t('files','{count} folders',{count: selectedFolders.length}); + } + if(selectedFiles.length>0){ + selection+=' & '; + } + } + if(selectedFiles.length>0){ + if(selectedFiles.length==1){ + selection+=t('files','1 file'); + }else{ + selection+=t('files','{count} files',{count: selectedFiles.length}); + } + } + $('#headerName>span.name').text(selection); + $('#modified').text(''); + $('table').addClass('multiselect'); + } +} + +/** + * @brief get a list of selected files + * @param string property (option) the property of the file requested + * @return array + * + * possible values for property: name, mime, size and type + * if property is set, an array with that property for each file is returnd + * if it's ommited an array of objects with all properties is returned + */ +function getSelectedFiles(property){ + var elements=$('td.filename input:checkbox:checked').parent().parent(); + var files=[]; + elements.each(function(i,element){ + var file={ + name:$(element).attr('data-filename'), + file:$(element).attr('data-file'), + timestamp:$(element).attr('data-timestamp'), + type:$(element).attr('data-type'), + dirlisting:$(element).attr('data-dirlisting') + }; + if(property){ + files.push(file[property]); + }else{ + files.push(file); + } + }); + return files; +} \ No newline at end of file diff --git a/apps/files_trashbin/lib/hooks.php b/apps/files_trashbin/lib/hooks.php new file mode 100644 index 0000000000..d3bee105b5 --- /dev/null +++ b/apps/files_trashbin/lib/hooks.php @@ -0,0 +1,45 @@ +. + * + */ + +/** + * This class contains all hooks. + */ + +namespace OCA_Trash; + +class Hooks { + + /** + * @brief Copy files to trash bin + * @param array + * + * This function is connected to the delete signal of OC_Filesystem + * to copy the file to the trash bin + */ + public static function remove_hook($params) { + + if ( \OCP\App::isEnabled('files_trashbin') ) { + $path = $params['path']; + Trashbin::move2trash($path); + } + } +} diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php new file mode 100644 index 0000000000..a7eff3d44e --- /dev/null +++ b/apps/files_trashbin/lib/trash.php @@ -0,0 +1,264 @@ +. + * + */ + +namespace OCA_Trash; + +class Trashbin { + + const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) + /** + * move file to the trash bin + * + * @param $file_path path to the deleted file/directory relative to the files root directory + */ + public static function move2trash($file_path) { + $user = \OCP\User::getUser(); + $view = new \OC_FilesystemView('/'. $user); + if (!$view->is_dir('files_trashbin')) { + $view->mkdir('files_trashbin'); + $view->mkdir("versions_trashbin"); + } + + $path_parts = pathinfo($file_path); + + $deleted = $path_parts['basename']; + $location = $path_parts['dirname']; + $timestamp = time(); + $mime = $view->getMimeType('files'.$file_path); + + if ( $view->is_dir('files'.$file_path) ) { + $type = 'dir'; + } else { + $type = 'file'; + } + + self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view); + + if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) { + $query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)"); + $result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user)); + if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin. + $view->deleteAll('files_trashbin/'.$deleted.'.d'.$timestamp); + \OC_Log::write('files_trashbin', 'trash bin database couldn\'t be updated', \OC_log::ERROR); + return; + } + + if ( \OCP\App::isEnabled('files_versions') ) { + if ( $view->is_dir('files_versions'.$file_path) ) { + $view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp); + } else if ( $versions = \OCA_Versions\Storage::getVersions($file_path) ) { + foreach ($versions as $v) { + $view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp); + } + } + } + } else { + \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR); + } + + self::expire(); + } + + + /** + * restore files from trash bin + * @param $file path to the deleted file + * @param $filename name of the file + * @param $timestamp time when the file was deleted + */ + public static function restore($file, $filename, $timestamp) { + + $user = \OCP\User::getUser(); + $view = new \OC_FilesystemView('/'.$user); + + if ( $timestamp ) { + $query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $result = $query->execute(array($user,$filename,$timestamp))->fetchAll(); + if ( count($result) != 1 ) { + \OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR); + return false; + } + + // if location no longer exists, restore file in the root directory + $location = $result[0]['location']; + if ( $result[0]['location'] != '/' && + (!$view->is_dir('files'.$result[0]['location']) || + !$view->isUpdatable('files'.$result[0]['location'])) ) { + $location = ''; + } + } else { + $path_parts = pathinfo($filename); + $result[] = array( + 'location' => $path_parts['dirname'], + 'type' => $view->is_dir('/files_trashbin/'.$file) ? 'dir' : 'files', + ); + $location = ''; + } + + $source = \OC_Filesystem::normalizePath('files_trashbin/'.$file); + $target = \OC_Filesystem::normalizePath('files/'.$location.'/'.$filename); + + // we need a extension in case a file/dir with the same name already exists + $ext = self::getUniqueExtension($location, $filename, $view); + $mtime = $view->filemtime($source); + if( $view->rename($source, $target.$ext) ) { + $view->touch($target.$ext, $mtime); + // if versioning app is enabled, copy versions from the trash bin back to the original location + if ( \OCP\App::isEnabled('files_versions') ) { + if ( $result[0]['type'] == 'dir' ) { + $view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext)); + } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { + foreach ($versions as $v) { + if ($timestamp ) { + $view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + } else { + $view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v); + } + } + } + } + + if ( $timestamp ) { + $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $query->execute(array($user,$filename,$timestamp)); + } + + return true; + } else { + \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR); + } + + return false; + } + + /** + * clean up the trash bin + */ + private static function expire() { + + $view = new \OC_FilesystemView('/'.\OCP\User::getUser()); + $user = \OCP\User::getUser(); + + $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?'); + $result = $query->execute(array($user))->fetchAll(); + + $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION); + + $limit = time() - ($retention_obligation * 86400); + + foreach ( $result as $r ) { + $timestamp = $r['timestamp']; + $filename = $r['id']; + if ( $r['timestamp'] < $limit ) { + $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp); + if ($r['type'] == 'dir') { + $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp); + } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) { + foreach ($versions as $v) { + $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + } + } + } + } + + $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestampexecute(array($user,$limit)); + } + + /** + * recursive copy to copy a whole directory + * + * @param $source source path, relative to the users files directory + * @param $destination destination path relative to the users root directoy + * @param $view file view for the users root directory + */ + private static function copy_recursive( $source, $destination, $view ) { + if ( $view->is_dir( 'files'.$source ) ) { + $view->mkdir( $destination ); + $view->touch($destination, $view->filemtime('files'.$source)); + foreach ( \OC_Files::getDirectoryContent($source) as $i ) { + $pathDir = $source.'/'.$i['name']; + if ( $view->is_dir('files'.$pathDir) ) { + self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view); + } else { + $view->copy( 'files'.$pathDir, $destination . '/' . $i['name'] ); + $view->touch($destination . '/' . $i['name'], $view->filemtime('files'.$pathDir)); + } + } + } else { + $view->copy( 'files'.$source, $destination ); + $view->touch($destination, $view->filemtime('files'.$source)); + } + } + + /** + * find all versions which belong to the file we want to restore + * @param $filename name of the file which should be restored + * @param $timestamp timestamp when the file was deleted + */ + private static function getVersionsFromTrash($filename, $timestamp) { + $view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin'); + $versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename); + $versions = array(); + + if ($timestamp ) { + // fetch for old versions + $matches = glob( $versionsName.'.v*.d'.$timestamp ); + $offset = -strlen($timestamp)-2; + } else { + $matches = glob( $versionsName.'.v*' ); + } + + foreach( $matches as $ma ) { + if ( $timestamp ) { + $parts = explode( '.v', substr($ma, 0, $offset) ); + $versions[] = ( end( $parts ) ); + } else { + $parts = explode( '.v', $ma ); + $versions[] = ( end( $parts ) ); + } + } + return $versions; + } + + /** + * find unique extension for restored file if a file with the same name already exists + * @param $location where the file should be restored + * @param $filename name of the file + * @param $view filesystem view relative to users root directory + * @return string with unique extension + */ + private static function getUniqueExtension($location, $filename, $view) { + $ext = ''; + if ( $view->file_exists('files'.$location.'/'.$filename) ) { + $tmpext = '.restored'; + $ext = $tmpext; + $i = 1; + while ( $view->file_exists('files'.$location.'/'.$filename.$ext) ) { + $ext = $tmpext.$i; + $i++; + } + } + return $ext; + } + +} diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php new file mode 100644 index 0000000000..c3e51b4bec --- /dev/null +++ b/apps/files_trashbin/templates/index.php @@ -0,0 +1,34 @@ + +
+ +
+
+
+ + +
t('Nothing in here. Your trash bin is empty!')?>
+ + + + + + + + + + + + +
+ + t( 'Name' ); ?> + + + <?php echo $l->t( 'Restore' ); ?>" /> + t('Restore')?> + + + + t( 'Deleted' ); ?> +
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php new file mode 100644 index 0000000000..fe8a71f44e --- /dev/null +++ b/apps/files_trashbin/templates/part.list.php @@ -0,0 +1,76 @@ + +200) $relative_date_color = 200; + $name = str_replace('+', '%20', urlencode($file['name'])); + $name = str_replace('%2F', '/', $name); + $directory = str_replace('+', '%20', urlencode($file['directory'])); + $directory = str_replace('%2F', '/', $directory); ?> + ' + + id="" + data-file="" + data-timestamp='' + data-dirlisting=1 + + id="" + data-file="" + data-timestamp='' + data-dirlisting=0 + > + + style="background-image:url()" + + style="background-image:url()" + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Versions AGPL Frank Karlitschek - 4.9 + 4.91 true Versioning of files diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php index 5fb9dc3c3c..5cefc53289 100644 --- a/apps/files_versions/lib/hooks.php +++ b/apps/files_versions/lib/hooks.php @@ -21,9 +21,9 @@ class Hooks { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - $versions = new Storage( new \OC_FilesystemView('') ); + $versions = new Storage( new \OC\Files\View('') ); - $path = $params[\OC_Filesystem::signal_param_path]; + $path = $params[\OC\Files\Filesystem::signal_param_path]; if($path<>'') $versions->store( $path ); @@ -39,15 +39,15 @@ class Hooks { * cleanup the versions directory if the actual file gets deleted */ public static function remove_hook($params) { - if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versions = new Storage( new \OC_FilesystemView('') ); - - $path = $params[\OC_Filesystem::signal_param_path]; - - if($path<>'') $versions->delete( $path ); - - } + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + + $versions = new Storage( new \OC_FilesystemView('') ); + + $path = $params[\OC\Files\Filesystem::signal_param_path]; + + if($path<>'') $versions->delete( $path ); + + } } /** @@ -58,15 +58,15 @@ class Hooks { * of the stored versions along the actual file */ public static function rename_hook($params) { - if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versions = new Storage( new \OC_FilesystemView('') ); - + if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + + $versions = new Storage( new \OC_FilesystemView('') ); + $oldpath = $params['oldpath']; - $newpath = $params['newpath']; - - if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath ); - + $newpath = $params['newpath']; + + if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath ); + } } diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index 48be5e223a..003d548d2b 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -23,15 +23,15 @@ class Storage { private static $max_versions_per_interval = array( 1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec 'step' => 2), - 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec + 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec 'step' => 10), 3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute 'step' => 60), 4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour 'step' => 3600), - 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day + 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day 'step' => 86400), - 6 => array('intervalEndsAfter' => -1, //until the end one version per week + 6 => array('intervalEndsAfter' => -1, //until the end one version per week 'step' => 604800), ); @@ -58,8 +58,8 @@ class Storage { public function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $files_view = new \OC_FilesystemView('/'.$uid .'/files'); - $users_view = new \OC_FilesystemView('/'.$uid); + $files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files'); + $users_view = new \OC\Files\View('/'.\OCP\User::getUser()); //check if source file already exist as version to avoid recursions. // todo does this check work? @@ -86,8 +86,8 @@ class Storage { // store a new version of a file $result = $users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename)); - if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { - $versionsSize = self::calculateSize($uid); + if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { + $versionsSize = self::calculateSize($uid); } $versionsSize += $users_view->filesize('files'.$filename); @@ -105,42 +105,42 @@ class Storage { * Delete versions of a file */ public static function delete($filename) { - list($uid, $filename) = self::getUidAndFilename($filename); + list($uid, $filename) = self::getUidAndFilename($filename); $versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions'); - - $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v'; - if( ($versions = self::getVersions($filename)) ) { - if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { - $versionsSize = self::calculateSize($uid); - } - foreach ($versions as $v) { - unlink($abs_path . $v['version']); - $versionsSize -= $v['size']; - } - \OCP\Config::setAppValue('files_versions', 'size', $versionsSize); + + $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v'; + if( ($versions = self::getVersions($filename)) ) { + if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) { + $versionsSize = self::calculateSize($uid); + } + foreach ($versions as $v) { + unlink($abs_path . $v['version']); + $versionsSize -= $v['size']; + } + \OCP\Config::setAppValue('files_versions', 'size', $versionsSize); } } - /** - * rename versions of a file - */ - public static function rename($oldpath, $newpath) { + /** + * rename versions of a file + */ + public static function rename($oldpath, $newpath) { list($uid, $oldpath) = self::getUidAndFilename($oldpath); - list($uidn, $newpath) = self::getUidAndFilename($newpath); + list($uidn, $newpath) = self::getUidAndFilename($newpath); $versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions'); $files_view = new \OC_FilesystemView('/'.$uid .'/files'); - $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath; - + $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath; + if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) { $versions_view->rename($oldpath, $newpath); - } else if ( ($versions = Storage::getVersions($oldpath)) ) { - $info=pathinfo($abs_newpath); - if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true); - $versions = Storage::getVersions($oldpath); + } else if ( ($versions = Storage::getVersions($oldpath)) ) { + $info=pathinfo($abs_newpath); + if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true); + $versions = Storage::getVersions($oldpath); foreach ($versions as $v) { - $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']); - } - } + $versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']); + } + } } /** @@ -150,7 +150,7 @@ class Storage { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { list($uid, $filename) = self::getUidAndFilename($filename); - $users_view = new \OC_FilesystemView('/'.$uid); + $users_view = new \OC\Files\View('/'.$uid); $versionCreated = false; //first create a new version @@ -184,7 +184,7 @@ class Storage { public static function getVersions( $filename, $count = 0 ) { if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { list($uid, $filename) = self::getUidAndFilename($filename); - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions'); $versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename); $versions = array(); @@ -202,7 +202,7 @@ class Storage { $key = $version.'#'.$filename; $versions[$key]['cur'] = 0; $versions[$key]['version'] = $version; - $versions[$key]['path'] = $filename; + $versions[$key]['path'] = $filename; $versions[$key]['size'] = $versions_fileview->filesize($filename.'.v'.$version); // if file with modified date exists, flag it in array as currently enabled version @@ -236,29 +236,29 @@ class Storage { } - /** - * @brief get the size of all stored versions from a given user - * @param $uid id from the user - * @return size of vesions - */ - private static function calculateSize($uid) { - if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { - $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); - $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); - - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); - + /** + * @brief get the size of all stored versions from a given user + * @param $uid id from the user + * @return size of vesions + */ + private static function calculateSize($uid) { + if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { + $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); + $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); + + $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); + $size = 0; - - foreach ($iterator as $path) { - if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) { + + foreach ($iterator as $path) { + if ( preg_match('/^.+\.v(\d+)$/', $path, $match) ) { $relpath = substr($path, strlen($versionsRoot)-1); - $size += $versions_fileview->filesize($relpath); - } + $size += $versions_fileview->filesize($relpath); + } } - return $size; - } + return $size; + } } /** @@ -267,11 +267,11 @@ class Storage { * @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename */ private static function getAllVersions($uid) { - if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { + if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) { $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions'); $versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath(''); - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); + $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST); $versions = array(); @@ -280,7 +280,7 @@ class Storage { $relpath = substr($path, strlen($versionsRoot)-1); $versions[$match[1].'#'.$relpath] = array('path' => $relpath, 'timestamp' => $match[1]); } - } + } ksort($versions); @@ -288,20 +288,20 @@ class Storage { $result = array(); - foreach( $versions as $key => $value ) { + foreach( $versions as $key => $value ) { $i++; $size = $versions_fileview->filesize($value['path']); $filename = substr($value['path'], 0, -strlen($value['timestamp'])-2); - + $result['all'][$key]['version'] = $value['timestamp']; - $result['all'][$key]['path'] = $filename; + $result['all'][$key]['path'] = $filename; $result['all'][$key]['size'] = $size; $filename = substr($value['path'], 0, -strlen($value['timestamp'])-2); $result['by_file'][$filename][$key]['version'] = $value['timestamp']; - $result['by_file'][$filename][$key]['path'] = $filename; + $result['by_file'][$filename][$key]['path'] = $filename; $result['by_file'][$filename][$key]['size'] = $size; - + } return $result; @@ -322,7 +322,7 @@ class Storage { $quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota')); } if ( $quota == null ) { - $quota = \OC_Filesystem::free_space('/'); + $quota = \OC\Files\Filesystem::free_space('/'); } // make sure that we have the current size of the version history @@ -332,7 +332,7 @@ class Storage { } } - // calculate available space for version history + // calculate available space for version history $rootInfo = \OC_FileCache::get('', '/'. $uid . '/files'); $free = $quota-$rootInfo['size']; // remaining free space for user if ( $free > 0 ) { @@ -394,7 +394,7 @@ class Storage { $nextVersion = $prevTimestamp - $step; if ( Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1 ) { $nextInterval = -1; - } else { + } else { $nextInterval = $time - Storage::$max_versions_per_interval[$interval]['intervalEndsAfter']; } $newInterval = true; // we changed the interval -> check same version with new interval diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml index a760577527..53269edfb3 100644 --- a/apps/user_ldap/appinfo/info.xml +++ b/apps/user_ldap/appinfo/info.xml @@ -7,7 +7,7 @@ This app is not compatible to the WebDAV user backend. AGPL Dominik Schmidt and Arthur Schiwon - 4.9 + 4.91 true diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php index 331bf8699f..5d42ea9443 100644 --- a/apps/user_ldap/l10n/es_AR.php +++ b/apps/user_ldap/l10n/es_AR.php @@ -1,8 +1,10 @@ Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Advertencia: Los Apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al administrador del sistema para desactivar uno de ellos.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Atención: El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale.", "Host" => "Servidor", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Podés omitir el protocolo, excepto si SSL es requerido. En ese caso, empezá con ldaps://", "Base DN" => "DN base", +"One Base DN per line" => "Una DN base por línea", "You can specify Base DN for users and groups in the Advanced tab" => "Podés especificar el DN base para usuarios y grupos en la pestaña \"Avanzado\"", "User DN" => "DN usuario", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, dejá DN y contraseña vacíos.", @@ -19,7 +21,9 @@ "without any placeholder, e.g. \"objectClass=posixGroup\"." => "Sin ninguna plantilla, p. ej.: \"objectClass=posixGroup\".", "Port" => "Puerto", "Base User Tree" => "Árbol base de usuario", +"One User Base DN per line" => "Una DN base de usuario por línea", "Base Group Tree" => "Árbol base de grupo", +"One Group Base DN per line" => "Una DN base de grupo por línea", "Group-Member association" => "Asociación Grupo-Miembro", "Use TLS" => "Usar TLS", "Do not use it for SSL connections, it will fail." => "No usarlo para SSL, dará error.", diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php index 2b340c8573..9268c9f147 100644 --- a/apps/user_ldap/l10n/sk_SK.php +++ b/apps/user_ldap/l10n/sk_SK.php @@ -1,7 +1,10 @@ Warning: Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them." => "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal.", +"Warning: The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval.", "Host" => "Hostiteľ", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Môžete vynechať protokol, s výnimkou požadovania SSL. Vtedy začnite s ldaps://", "Base DN" => "Základné DN", +"One Base DN per line" => "Jedno základné DN na riadok", "You can specify Base DN for users and groups in the Advanced tab" => "V rozšírenom nastavení môžete zadať základné DN pre používateľov a skupiny", "User DN" => "Používateľské DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN klientského používateľa, ku ktorému tvoríte väzbu, napr. uid=agent,dc=example,dc=com. Pre anonymný prístup ponechajte údaje DN a Heslo prázdne.", @@ -18,7 +21,9 @@ "without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez zástupných znakov, napr. \"objectClass=posixGroup\"", "Port" => "Port", "Base User Tree" => "Základný používateľský strom", +"One User Base DN per line" => "Jedna používateľská základná DN na riadok", "Base Group Tree" => "Základný skupinový strom", +"One Group Base DN per line" => "Jedna skupinová základná DN na riadok", "Group-Member association" => "Asociácia člena skupiny", "Use TLS" => "Použi TLS", "Do not use it for SSL connections, it will fail." => "Nepoužívajte pre pripojenie SSL, pripojenie zlyhá.", diff --git a/apps/user_webdavauth/appinfo/info.xml b/apps/user_webdavauth/appinfo/info.xml index e51f2e9ec4..f62f03577e 100755 --- a/apps/user_webdavauth/appinfo/info.xml +++ b/apps/user_webdavauth/appinfo/info.xml @@ -7,7 +7,7 @@ This app is not compatible to the LDAP user and group backend. AGPL Frank Karlitschek - 4.9 + 4.91 true diff --git a/apps/user_webdavauth/l10n/es_AR.php b/apps/user_webdavauth/l10n/es_AR.php index 245a510134..103c3738e2 100644 --- a/apps/user_webdavauth/l10n/es_AR.php +++ b/apps/user_webdavauth/l10n/es_AR.php @@ -1,3 +1,5 @@ "URL: http://" +"WebDAV Authentication" => "Autenticación de WevDAV", +"URL: http://" => "URL: http://", +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas." ); diff --git a/apps/user_webdavauth/l10n/pt_BR.php b/apps/user_webdavauth/l10n/pt_BR.php index 991c746a22..6ddd00ccc3 100644 --- a/apps/user_webdavauth/l10n/pt_BR.php +++ b/apps/user_webdavauth/l10n/pt_BR.php @@ -1,3 +1,5 @@ "URL do WebDAV: http://" +"WebDAV Authentication" => "Autenticação WebDAV", +"URL: http://" => "URL: http://", +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas." ); diff --git a/apps/user_webdavauth/l10n/ru_RU.php b/apps/user_webdavauth/l10n/ru_RU.php index 245a510134..46f74cb972 100644 --- a/apps/user_webdavauth/l10n/ru_RU.php +++ b/apps/user_webdavauth/l10n/ru_RU.php @@ -1,3 +1,4 @@ "WebDAV аутентификация", "URL: http://" => "URL: http://" ); diff --git a/apps/user_webdavauth/l10n/sk_SK.php b/apps/user_webdavauth/l10n/sk_SK.php index 27f84a24f8..c4e6dfddc7 100644 --- a/apps/user_webdavauth/l10n/sk_SK.php +++ b/apps/user_webdavauth/l10n/sk_SK.php @@ -1,5 +1,5 @@ "WebDAV overenie", "URL: http://" => "URL: http://", -"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odošle používateľské údajena zadanú URL. Plugin skontroluje odpoveď a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a všetky ostatné hodnoty ako platné prihlasovacie údaje." +"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud odošle používateľské údaje na zadanú URL. Plugin skontroluje odpoveď a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a všetky ostatné hodnoty ako platné prihlasovacie údaje." ); diff --git a/config/config.sample.php b/config/config.sample.php index 78d513c7f2..05663a09a4 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -102,6 +102,9 @@ $CONFIG = array( /* Password to use for sendmail mail, depends on mail_smtpauth if this is used */ "mail_smtppassword" => "", +/* How long should ownCloud keep deleted files in the trash bin, default value: 180 days */ +'trashbin_retention_obligation' => 180, + /* Check 3rdparty apps for malicious code fragments */ "appcodechecker" => "", diff --git a/core/img/actions/undelete.png b/core/img/actions/undelete.png new file mode 100644 index 0000000000..d712527ef6 Binary files /dev/null and b/core/img/actions/undelete.png differ diff --git a/core/l10n/ar.php b/core/l10n/ar.php index 495bfbd0ea..218eeed072 100644 --- a/core/l10n/ar.php +++ b/core/l10n/ar.php @@ -32,6 +32,7 @@ "Yes" => "نعم", "Ok" => "موافق", "Error" => "خطأ", +"Share" => "شارك", "Error while sharing" => "حصل خطأ عند عملية المشاركة", "Error while unsharing" => "حصل خطأ عند عملية إزالة المشاركة", "Error while changing permissions" => "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل", diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php index 9a2716277a..587991499a 100644 --- a/core/l10n/bg_BG.php +++ b/core/l10n/bg_BG.php @@ -9,6 +9,7 @@ "last year" => "последната година", "years ago" => "последните години", "Error" => "Грешка", +"Share" => "Споделяне", "Password" => "Парола", "Personal" => "Лични", "Users" => "Потребители", diff --git a/core/l10n/bn_BD.php b/core/l10n/bn_BD.php index 2f13a49794..d698f47015 100644 --- a/core/l10n/bn_BD.php +++ b/core/l10n/bn_BD.php @@ -53,6 +53,7 @@ "Error" => "সমস্যা", "The app name is not specified." => "অ্যাপের নামটি সুনির্দিষ্ট নয়।", "The required file {file} is not installed!" => "আবশ্যিক {file} টি সংস্থাপিত নেই !", +"Share" => "ভাগাভাগি কর", "Error while sharing" => "ভাগাভাগি করতে সমস্যা দেখা দিয়েছে ", "Error while unsharing" => "ভাগাভাগি বাতিল করতে সমস্যা দেখা দিয়েছে", "Error while changing permissions" => "অনুমতিসমূহ পরিবর্তন করতে সমস্যা দেখা দিয়েছে", diff --git a/core/l10n/ca.php b/core/l10n/ca.php index c737f9aa42..780366aaf0 100644 --- a/core/l10n/ca.php +++ b/core/l10n/ca.php @@ -53,6 +53,8 @@ "Error" => "Error", "The app name is not specified." => "No s'ha especificat el nom de l'aplicació.", "The required file {file} is not installed!" => "El fitxer requerit {file} no està instal·lat!", +"Share" => "Comparteix", +"Shared" => "Compartit", "Error while sharing" => "Error en compartir", "Error while unsharing" => "Error en deixar de compartir", "Error while changing permissions" => "Error en canviar els permisos", diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php index 848415d6ea..a8fa035711 100644 --- a/core/l10n/cs_CZ.php +++ b/core/l10n/cs_CZ.php @@ -53,6 +53,8 @@ "Error" => "Chyba", "The app name is not specified." => "Není určen název aplikace.", "The required file {file} is not installed!" => "Požadovaný soubor {file} není nainstalován.", +"Share" => "Sdílet", +"Shared" => "Sdílené", "Error while sharing" => "Chyba při sdílení", "Error while unsharing" => "Chyba při rušení sdílení", "Error while changing permissions" => "Chyba při změně oprávnění", diff --git a/core/l10n/da.php b/core/l10n/da.php index 3252dcf495..ca23b62228 100644 --- a/core/l10n/da.php +++ b/core/l10n/da.php @@ -53,6 +53,7 @@ "Error" => "Fejl", "The app name is not specified." => "Den app navn er ikke angivet.", "The required file {file} is not installed!" => "Den krævede fil {file} er ikke installeret!", +"Share" => "Del", "Error while sharing" => "Fejl under deling", "Error while unsharing" => "Fejl under annullering af deling", "Error while changing permissions" => "Fejl under justering af rettigheder", diff --git a/core/l10n/de.php b/core/l10n/de.php index b67234189f..358e8e3e75 100644 --- a/core/l10n/de.php +++ b/core/l10n/de.php @@ -53,6 +53,7 @@ "Error" => "Fehler", "The app name is not specified." => "Der App-Name ist nicht angegeben.", "The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.", +"Share" => "Freigeben", "Error while sharing" => "Fehler beim Freigeben", "Error while unsharing" => "Fehler beim Aufheben der Freigabe", "Error while changing permissions" => "Fehler beim Ändern der Rechte", diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php index 59b05bbe7c..ca5b843a83 100644 --- a/core/l10n/de_DE.php +++ b/core/l10n/de_DE.php @@ -53,6 +53,8 @@ "Error" => "Fehler", "The app name is not specified." => "Der App-Name ist nicht angegeben.", "The required file {file} is not installed!" => "Die benötigte Datei {file} ist nicht installiert.", +"Share" => "Freigeben", +"Shared" => "Freigegeben", "Error while sharing" => "Fehler bei der Freigabe", "Error while unsharing" => "Fehler bei der Aufhebung der Freigabe", "Error while changing permissions" => "Fehler bei der Änderung der Rechte", diff --git a/core/l10n/el.php b/core/l10n/el.php index 79cffb0685..74ec378b9d 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -53,6 +53,7 @@ "Error" => "Σφάλμα", "The app name is not specified." => "Δεν καθορίστηκε το όνομα της εφαρμογής.", "The required file {file} is not installed!" => "Το απαιτούμενο αρχείο {file} δεν εγκαταστάθηκε!", +"Share" => "Διαμοιρασμός", "Error while sharing" => "Σφάλμα κατά τον διαμοιρασμό", "Error while unsharing" => "Σφάλμα κατά το σταμάτημα του διαμοιρασμού", "Error while changing permissions" => "Σφάλμα κατά την αλλαγή των δικαιωμάτων", diff --git a/core/l10n/eo.php b/core/l10n/eo.php index 0839cfe9f6..7c0e65f4e0 100644 --- a/core/l10n/eo.php +++ b/core/l10n/eo.php @@ -53,6 +53,7 @@ "Error" => "Eraro", "The app name is not specified." => "Ne indikiĝis nomo de la aplikaĵo.", "The required file {file} is not installed!" => "La necesa dosiero {file} ne instaliĝis!", +"Share" => "Kunhavigi", "Error while sharing" => "Eraro dum kunhavigo", "Error while unsharing" => "Eraro dum malkunhavigo", "Error while changing permissions" => "Eraro dum ŝanĝo de permesoj", diff --git a/core/l10n/es.php b/core/l10n/es.php index 4bdbcac0e9..e046e3bf7a 100644 --- a/core/l10n/es.php +++ b/core/l10n/es.php @@ -53,6 +53,8 @@ "Error" => "Fallo", "The app name is not specified." => "El nombre de la app no se ha especificado.", "The required file {file} is not installed!" => "El fichero {file} requerido, no está instalado.", +"Share" => "Compartir", +"Shared" => "Compartido", "Error while sharing" => "Error compartiendo", "Error while unsharing" => "Error descompartiendo", "Error while changing permissions" => "Error cambiando permisos", @@ -82,6 +84,8 @@ "Error setting expiration date" => "Error estableciendo fecha de caducidad", "Sending ..." => "Enviando...", "Email sent" => "Correo electrónico enviado", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "La actualización ha fracasado. Por favor, informe este problema a la Comunidad de ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora.", "ownCloud password reset" => "Reiniciar contraseña de ownCloud", "Use the following link to reset your password: {link}" => "Utiliza el siguiente enlace para restablecer tu contraseña: {link}", "You will receive a link to reset your password via Email." => "Recibirás un enlace por correo electrónico para restablecer tu contraseña", diff --git a/core/l10n/es_AR.php b/core/l10n/es_AR.php index d588ac950c..1ce26416f6 100644 --- a/core/l10n/es_AR.php +++ b/core/l10n/es_AR.php @@ -53,6 +53,8 @@ "Error" => "Error", "The app name is not specified." => "El nombre de la aplicación no esta especificado.", "The required file {file} is not installed!" => "¡El archivo requerido {file} no está instalado!", +"Share" => "Compartir", +"Shared" => "Compartido", "Error while sharing" => "Error al compartir", "Error while unsharing" => "Error en el procedimiento de ", "Error while changing permissions" => "Error al cambiar permisos", @@ -82,6 +84,8 @@ "Error setting expiration date" => "Error al asignar fecha de vencimiento", "Sending ..." => "Enviando...", "Email sent" => "Email enviado", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "La actualización fue exitosa. Estás siendo redirigido a ownCloud.", "ownCloud password reset" => "Restablecer contraseña de ownCloud", "Use the following link to reset your password: {link}" => "Usá este enlace para restablecer tu contraseña: {link}", "You will receive a link to reset your password via Email." => "Vas a recibir un enlace por e-mail para restablecer tu contraseña", diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php index 4e3c003c9f..f4328de990 100644 --- a/core/l10n/et_EE.php +++ b/core/l10n/et_EE.php @@ -38,6 +38,7 @@ "Yes" => "Jah", "Ok" => "Ok", "Error" => "Viga", +"Share" => "Jaga", "Error while sharing" => "Viga jagamisel", "Error while unsharing" => "Viga jagamise lõpetamisel", "Error while changing permissions" => "Viga õiguste muutmisel", diff --git a/core/l10n/eu.php b/core/l10n/eu.php index da6aad7338..ed919d64d9 100644 --- a/core/l10n/eu.php +++ b/core/l10n/eu.php @@ -53,6 +53,8 @@ "Error" => "Errorea", "The app name is not specified." => "App izena ez dago zehaztuta.", "The required file {file} is not installed!" => "Beharrezkoa den {file} fitxategia ez dago instalatuta!", +"Share" => "Elkarbanatu", +"Shared" => "Elkarbanatuta", "Error while sharing" => "Errore bat egon da elkarbanatzean", "Error while unsharing" => "Errore bat egon da elkarbanaketa desegitean", "Error while changing permissions" => "Errore bat egon da baimenak aldatzean", diff --git a/core/l10n/fa.php b/core/l10n/fa.php index 7ed2831d82..6f1f65bd34 100644 --- a/core/l10n/fa.php +++ b/core/l10n/fa.php @@ -53,6 +53,7 @@ "Error" => "خطا", "The app name is not specified." => "نام برنامه تعیین نشده است.", "The required file {file} is not installed!" => "پرونده { پرونده} درخواست شده نصب نشده است !", +"Share" => "اشتراک‌گزاری", "Error while sharing" => "خطا درحال به اشتراک گذاشتن", "Error while unsharing" => "خطا درحال لغو اشتراک", "Error while changing permissions" => "خطا در حال تغییر مجوز", diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php index 6b5a833f36..1f2568f951 100644 --- a/core/l10n/fi_FI.php +++ b/core/l10n/fi_FI.php @@ -49,6 +49,7 @@ "Error" => "Virhe", "The app name is not specified." => "Sovelluksen nimeä ei ole määritelty.", "The required file {file} is not installed!" => "Vaadittua tiedostoa {file} ei ole asennettu!", +"Share" => "Jaa", "Error while sharing" => "Virhe jaettaessa", "Error while unsharing" => "Virhe jakoa peruttaessa", "Error while changing permissions" => "Virhe oikeuksia muuttaessa", @@ -77,6 +78,8 @@ "Error setting expiration date" => "Virhe päättymispäivää asettaessa", "Sending ..." => "Lähetetään...", "Email sent" => "Sähköposti lähetetty", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "Päivitys epäonnistui. Ilmoita ongelmasta ownCloud-yhteisölle.", +"The update was successful. Redirecting you to ownCloud now." => "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.", "ownCloud password reset" => "ownCloud-salasanan nollaus", "Use the following link to reset your password: {link}" => "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}", "You will receive a link to reset your password via Email." => "Saat sähköpostitse linkin nollataksesi salasanan.", diff --git a/core/l10n/fr.php b/core/l10n/fr.php index 46aac990bd..202203753d 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -53,6 +53,7 @@ "Error" => "Erreur", "The app name is not specified." => "Le nom de l'application n'est pas spécifié.", "The required file {file} is not installed!" => "Le fichier requis {file} n'est pas installé !", +"Share" => "Partager", "Error while sharing" => "Erreur lors de la mise en partage", "Error while unsharing" => "Erreur lors de l'annulation du partage", "Error while changing permissions" => "Erreur lors du changement des permissions", diff --git a/core/l10n/gl.php b/core/l10n/gl.php index a45d45d908..e96d6962c9 100644 --- a/core/l10n/gl.php +++ b/core/l10n/gl.php @@ -53,6 +53,7 @@ "Error" => "Erro", "The app name is not specified." => "Non se especificou o nome do aplicativo.", "The required file {file} is not installed!" => "Non está instalado o ficheiro {file} que se precisa", +"Share" => "Compartir", "Error while sharing" => "Produciuse un erro ao compartir", "Error while unsharing" => "Produciuse un erro ao deixar de compartir", "Error while changing permissions" => "Produciuse un erro ao cambiar os permisos", diff --git a/core/l10n/he.php b/core/l10n/he.php index 88da2e8dde..b7292c6ede 100644 --- a/core/l10n/he.php +++ b/core/l10n/he.php @@ -53,6 +53,7 @@ "Error" => "שגיאה", "The app name is not specified." => "שם היישום לא צוין.", "The required file {file} is not installed!" => "הקובץ הנדרש {file} אינו מותקן!", +"Share" => "שתף", "Error while sharing" => "שגיאה במהלך השיתוף", "Error while unsharing" => "שגיאה במהלך ביטול השיתוף", "Error while changing permissions" => "שגיאה במהלך שינוי ההגדרות", diff --git a/core/l10n/hr.php b/core/l10n/hr.php index 32e3779ee4..78b767305a 100644 --- a/core/l10n/hr.php +++ b/core/l10n/hr.php @@ -35,6 +35,7 @@ "Yes" => "Da", "Ok" => "U redu", "Error" => "Pogreška", +"Share" => "Podijeli", "Error while sharing" => "Greška prilikom djeljenja", "Error while unsharing" => "Greška prilikom isključivanja djeljenja", "Error while changing permissions" => "Greška prilikom promjena prava", diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php index e03c6af27f..30ddc7b867 100644 --- a/core/l10n/hu_HU.php +++ b/core/l10n/hu_HU.php @@ -53,6 +53,7 @@ "Error" => "Hiba", "The app name is not specified." => "Az alkalmazás neve nincs megadva.", "The required file {file} is not installed!" => "A szükséges fájl: {file} nincs telepítve!", +"Share" => "Megosztás", "Error while sharing" => "Nem sikerült létrehozni a megosztást", "Error while unsharing" => "Nem sikerült visszavonni a megosztást", "Error while changing permissions" => "Nem sikerült módosítani a jogosultságokat", diff --git a/core/l10n/ia.php b/core/l10n/ia.php index 08f283450f..7f2eac1736 100644 --- a/core/l10n/ia.php +++ b/core/l10n/ia.php @@ -21,6 +21,7 @@ "December" => "Decembre", "Settings" => "Configurationes", "Cancel" => "Cancellar", +"Share" => "Compartir", "Password" => "Contrasigno", "ownCloud password reset" => "Reinitialisation del contrasigno de ownCLoud", "Username" => "Nomine de usator", diff --git a/core/l10n/id.php b/core/l10n/id.php index 2c66ea8ce3..896d444e83 100644 --- a/core/l10n/id.php +++ b/core/l10n/id.php @@ -36,6 +36,7 @@ "Yes" => "Ya", "Ok" => "Oke", "Error" => "gagal", +"Share" => "berbagi", "Error while sharing" => "gagal ketika membagikan", "Error while unsharing" => "gagal ketika membatalkan pembagian", "Error while changing permissions" => "gagal ketika merubah perijinan", diff --git a/core/l10n/is.php b/core/l10n/is.php index 6df2573100..98766efc2c 100644 --- a/core/l10n/is.php +++ b/core/l10n/is.php @@ -53,6 +53,7 @@ "Error" => "Villa", "The app name is not specified." => "Nafn forrits ekki tilgreint", "The required file {file} is not installed!" => "Umbeðina skráin {file} ekki tiltæk!", +"Share" => "Deila", "Error while sharing" => "Villa við deilingu", "Error while unsharing" => "Villa við að hætta deilingu", "Error while changing permissions" => "Villa við að breyta aðgangsheimildum", diff --git a/core/l10n/it.php b/core/l10n/it.php index 88749320d5..82451e955e 100644 --- a/core/l10n/it.php +++ b/core/l10n/it.php @@ -53,6 +53,8 @@ "Error" => "Errore", "The app name is not specified." => "Il nome dell'applicazione non è specificato.", "The required file {file} is not installed!" => "Il file richiesto {file} non è installato!", +"Share" => "Condividi", +"Shared" => "Condivisi", "Error while sharing" => "Errore durante la condivisione", "Error while unsharing" => "Errore durante la rimozione della condivisione", "Error while changing permissions" => "Errore durante la modifica dei permessi", diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php index 7995147f06..155c201d9b 100644 --- a/core/l10n/ja_JP.php +++ b/core/l10n/ja_JP.php @@ -53,6 +53,8 @@ "Error" => "エラー", "The app name is not specified." => "アプリ名がしていされていません。", "The required file {file} is not installed!" => "必要なファイル {file} がインストールされていません!", +"Share" => "共有", +"Shared" => "共有中", "Error while sharing" => "共有でエラー発生", "Error while unsharing" => "共有解除でエラー発生", "Error while changing permissions" => "権限変更でエラー発生", diff --git a/core/l10n/ka_GE.php b/core/l10n/ka_GE.php index 58771e080b..ab4045601f 100644 --- a/core/l10n/ka_GE.php +++ b/core/l10n/ka_GE.php @@ -38,6 +38,7 @@ "Yes" => "კი", "Ok" => "დიახ", "Error" => "შეცდომა", +"Share" => "გაზიარება", "Error while sharing" => "შეცდომა გაზიარების დროს", "Error while unsharing" => "შეცდომა გაზიარების გაუქმების დროს", "Error while changing permissions" => "შეცდომა დაშვების ცვლილების დროს", diff --git a/core/l10n/ko.php b/core/l10n/ko.php index 5897b890ec..cc999d0ac1 100644 --- a/core/l10n/ko.php +++ b/core/l10n/ko.php @@ -53,6 +53,7 @@ "Error" => "오류", "The app name is not specified." => "앱 이름이 지정되지 않았습니다.", "The required file {file} is not installed!" => "필요한 파일 {file}이(가) 설치되지 않았습니다!", +"Share" => "공유", "Error while sharing" => "공유하는 중 오류 발생", "Error while unsharing" => "공유 해제하는 중 오류 발생", "Error while changing permissions" => "권한 변경하는 중 오류 발생", diff --git a/core/l10n/lb.php b/core/l10n/lb.php index 85d83d1f95..4069a77836 100644 --- a/core/l10n/lb.php +++ b/core/l10n/lb.php @@ -35,6 +35,7 @@ "Yes" => "Jo", "Ok" => "OK", "Error" => "Fehler", +"Share" => "Deelen", "Password" => "Passwuert", "Unshare" => "Net méi deelen", "create" => "erstellen", diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php index 040a5a7f7f..c2dc47c826 100644 --- a/core/l10n/lt_LT.php +++ b/core/l10n/lt_LT.php @@ -38,6 +38,7 @@ "Yes" => "Taip", "Ok" => "Gerai", "Error" => "Klaida", +"Share" => "Dalintis", "Error while sharing" => "Klaida, dalijimosi metu", "Error while unsharing" => "Klaida, kai atšaukiamas dalijimasis", "Error while changing permissions" => "Klaida, keičiant privilegijas", diff --git a/core/l10n/lv.php b/core/l10n/lv.php index 66866249e7..dd63ab6c90 100644 --- a/core/l10n/lv.php +++ b/core/l10n/lv.php @@ -21,6 +21,7 @@ "Settings" => "Iestatījumi", "Cancel" => "Atcelt", "Error" => "Kļūme", +"Share" => "Līdzdalīt", "Password" => "Parole", "Unshare" => "Pārtraukt līdzdalīšanu", "Use the following link to reset your password: {link}" => "Izmantojiet šo linku lai mainītu paroli", diff --git a/core/l10n/mk.php b/core/l10n/mk.php index 3a8991437b..0b202fa666 100644 --- a/core/l10n/mk.php +++ b/core/l10n/mk.php @@ -53,6 +53,7 @@ "Error" => "Грешка", "The app name is not specified." => "Името на апликацијата не е специфицирано.", "The required file {file} is not installed!" => "Задолжителната датотека {file} не е инсталирана!", +"Share" => "Сподели", "Error while sharing" => "Грешка при споделување", "Error while unsharing" => "Грешка при прекин на споделување", "Error while changing permissions" => "Грешка при промена на привилегии", diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php index 3eff044ac5..477e82ea9f 100644 --- a/core/l10n/ms_MY.php +++ b/core/l10n/ms_MY.php @@ -27,6 +27,7 @@ "Yes" => "Ya", "Ok" => "Ok", "Error" => "Ralat", +"Share" => "Kongsi", "Password" => "Kata laluan", "ownCloud password reset" => "Set semula kata lalaun ownCloud", "Use the following link to reset your password: {link}" => "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}", diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php index a39e5d44bc..65d6ea00cc 100644 --- a/core/l10n/nb_NO.php +++ b/core/l10n/nb_NO.php @@ -41,6 +41,7 @@ "Yes" => "Ja", "Ok" => "Ok", "Error" => "Feil", +"Share" => "Del", "Error while sharing" => "Feil under deling", "Share with" => "Del med", "Share with link" => "Del med link", diff --git a/core/l10n/nl.php b/core/l10n/nl.php index 27d32cfcc5..91ab7827fd 100644 --- a/core/l10n/nl.php +++ b/core/l10n/nl.php @@ -53,6 +53,7 @@ "Error" => "Fout", "The app name is not specified." => "De app naam is niet gespecificeerd.", "The required file {file} is not installed!" => "Het vereiste bestand {file} is niet geïnstalleerd!", +"Share" => "Delen", "Error while sharing" => "Fout tijdens het delen", "Error while unsharing" => "Fout tijdens het stoppen met delen", "Error while changing permissions" => "Fout tijdens het veranderen van permissies", diff --git a/core/l10n/oc.php b/core/l10n/oc.php index 3443f9d501..5b399dd826 100644 --- a/core/l10n/oc.php +++ b/core/l10n/oc.php @@ -36,6 +36,7 @@ "Yes" => "Òc", "Ok" => "D'accòrdi", "Error" => "Error", +"Share" => "Parteja", "Error while sharing" => "Error al partejar", "Error while unsharing" => "Error al non partejar", "Error while changing permissions" => "Error al cambiar permissions", diff --git a/core/l10n/pl.php b/core/l10n/pl.php index 142593930d..1376fa1359 100644 --- a/core/l10n/pl.php +++ b/core/l10n/pl.php @@ -53,6 +53,8 @@ "Error" => "Błąd", "The app name is not specified." => "Nazwa aplikacji nie jest określona.", "The required file {file} is not installed!" => "Żądany plik {file} nie jest zainstalowany!", +"Share" => "Udostępnij", +"Shared" => "Udostępniono", "Error while sharing" => "Błąd podczas współdzielenia", "Error while unsharing" => "Błąd podczas zatrzymywania współdzielenia", "Error while changing permissions" => "Błąd przy zmianie uprawnień", diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php index 8ca2dd4fd0..929f298c4c 100644 --- a/core/l10n/pt_BR.php +++ b/core/l10n/pt_BR.php @@ -1,4 +1,8 @@ "O usuário %s compartilhou um arquivo com você", +"User %s shared a folder with you" => "O usuário %s compartilhou uma pasta com você", +"User %s shared the file \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s", +"User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s", "Category type not provided." => "Tipo de categoria não fornecido.", "No category to add?" => "Nenhuma categoria adicionada?", "This category already exists: " => "Essa categoria já existe", @@ -49,6 +53,8 @@ "Error" => "Erro", "The app name is not specified." => "O nome do app não foi especificado.", "The required file {file} is not installed!" => "O arquivo {file} necessário não está instalado!", +"Share" => "Compartilhar", +"Shared" => "Compartilhados", "Error while sharing" => "Erro ao compartilhar", "Error while unsharing" => "Erro ao descompartilhar", "Error while changing permissions" => "Erro ao mudar permissões", @@ -58,6 +64,8 @@ "Share with link" => "Compartilhar com link", "Password protect" => "Proteger com senha", "Password" => "Senha", +"Email link to person" => "Enviar link por e-mail", +"Send" => "Enviar", "Set expiration date" => "Definir data de expiração", "Expiration date" => "Data de expiração", "Share via email:" => "Compartilhar via e-mail:", @@ -74,6 +82,10 @@ "Password protected" => "Protegido com senha", "Error unsetting expiration date" => "Erro ao remover data de expiração", "Error setting expiration date" => "Erro ao definir data de expiração", +"Sending ..." => "Enviando ...", +"Email sent" => "E-mail enviado", +"The update was unsuccessful. Please report this issue to the ownCloud community." => "A atualização falhou. Por favor, relate este problema para a comunidade ownCloud.", +"The update was successful. Redirecting you to ownCloud now." => "A atualização teve êxito. Você será redirecionado ao ownCloud agora.", "ownCloud password reset" => "Redefinir senha ownCloud", "Use the following link to reset your password: {link}" => "Use o seguinte link para redefinir sua senha: {link}", "You will receive a link to reset your password via Email." => "Você receberá um link para redefinir sua senha via e-mail.", @@ -118,5 +130,6 @@ "remember" => "lembrete", "Log in" => "Log in", "prev" => "anterior", -"next" => "próximo" +"next" => "próximo", +"Updating ownCloud to version %s, this may take a while." => "Atualizando ownCloud para a versão %s, isto pode levar algum tempo." ); diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php index 4f60bf2694..2189a7e811 100644 --- a/core/l10n/pt_PT.php +++ b/core/l10n/pt_PT.php @@ -53,6 +53,8 @@ "Error" => "Erro", "The app name is not specified." => "O nome da aplicação não foi especificado", "The required file {file} is not installed!" => "O ficheiro necessário {file} não está instalado!", +"Share" => "Partilhar", +"Shared" => "Partilhado", "Error while sharing" => "Erro ao partilhar", "Error while unsharing" => "Erro ao deixar de partilhar", "Error while changing permissions" => "Erro ao mudar permissões", diff --git a/core/l10n/ro.php b/core/l10n/ro.php index 3e389bfab0..83587fa4a7 100644 --- a/core/l10n/ro.php +++ b/core/l10n/ro.php @@ -53,6 +53,7 @@ "Error" => "Eroare", "The app name is not specified." => "Numele aplicației nu a fost specificat", "The required file {file} is not installed!" => "Fișierul obligatoriu {file} nu este instalat!", +"Share" => "Partajează", "Error while sharing" => "Eroare la partajare", "Error while unsharing" => "Eroare la anularea partajării", "Error while changing permissions" => "Eroare la modificarea permisiunilor", diff --git a/core/l10n/ru.php b/core/l10n/ru.php index fd6a7c6094..7b11ea43a4 100644 --- a/core/l10n/ru.php +++ b/core/l10n/ru.php @@ -53,6 +53,7 @@ "Error" => "Ошибка", "The app name is not specified." => "Имя приложения не указано", "The required file {file} is not installed!" => "Необходимый файл {file} не установлен!", +"Share" => "Открыть доступ", "Error while sharing" => "Ошибка при открытии доступа", "Error while unsharing" => "Ошибка при закрытии доступа", "Error while changing permissions" => "Ошибка при смене разрешений", diff --git a/core/l10n/ru_RU.php b/core/l10n/ru_RU.php index c706d1c6a1..53a3b9b0d5 100644 --- a/core/l10n/ru_RU.php +++ b/core/l10n/ru_RU.php @@ -53,6 +53,8 @@ "Error" => "Ошибка", "The app name is not specified." => "Имя приложения не указано.", "The required file {file} is not installed!" => "Требуемый файл {файл} не установлен!", +"Share" => "Сделать общим", +"Shared" => "Опубликовано", "Error while sharing" => "Ошибка создания общего доступа", "Error while unsharing" => "Ошибка отключения общего доступа", "Error while changing permissions" => "Ошибка при изменении прав доступа", diff --git a/core/l10n/si_LK.php b/core/l10n/si_LK.php index 3c4e69e89b..eab1ba1001 100644 --- a/core/l10n/si_LK.php +++ b/core/l10n/si_LK.php @@ -34,6 +34,7 @@ "Yes" => "ඔව්", "Ok" => "හරි", "Error" => "දෝෂයක්", +"Share" => "බෙදා හදා ගන්න", "Share with" => "බෙදාගන්න", "Share with link" => "යොමුවක් මඟින් බෙදාගන්න", "Password protect" => "මුර පදයකින් ආරක්ශාකරන්න", diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php index ba488532f5..ad5ae0ea37 100644 --- a/core/l10n/sk_SK.php +++ b/core/l10n/sk_SK.php @@ -53,6 +53,8 @@ "Error" => "Chyba", "The app name is not specified." => "Nešpecifikované meno aplikácie.", "The required file {file} is not installed!" => "Požadovaný súbor {file} nie je inštalovaný!", +"Share" => "Zdieľaj", +"Shared" => "Zdieľané", "Error while sharing" => "Chyba počas zdieľania", "Error while unsharing" => "Chyba počas ukončenia zdieľania", "Error while changing permissions" => "Chyba počas zmeny oprávnení", diff --git a/core/l10n/sl.php b/core/l10n/sl.php index 413a46ffc7..54cf817a7a 100644 --- a/core/l10n/sl.php +++ b/core/l10n/sl.php @@ -53,6 +53,7 @@ "Error" => "Napaka", "The app name is not specified." => "Ime aplikacije ni podano.", "The required file {file} is not installed!" => "Zahtevana datoteka {file} ni nameščena!", +"Share" => "Souporaba", "Error while sharing" => "Napaka med souporabo", "Error while unsharing" => "Napaka med odstranjevanjem souporabe", "Error while changing permissions" => "Napaka med spreminjanjem dovoljenj", diff --git a/core/l10n/sr.php b/core/l10n/sr.php index e8547c58ac..ecd316b7cf 100644 --- a/core/l10n/sr.php +++ b/core/l10n/sr.php @@ -51,6 +51,7 @@ "Error" => "Грешка", "The app name is not specified." => "Име програма није унето.", "The required file {file} is not installed!" => "Потребна датотека {file} није инсталирана.", +"Share" => "Дељење", "Error while sharing" => "Грешка у дељењу", "Error while unsharing" => "Грешка код искључења дељења", "Error while changing permissions" => "Грешка код промене дозвола", diff --git a/core/l10n/sv.php b/core/l10n/sv.php index 1e461282c0..a0dde65269 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -53,6 +53,8 @@ "Error" => "Fel", "The app name is not specified." => " Namnet på appen är inte specificerad.", "The required file {file} is not installed!" => "Den nödvändiga filen {file} är inte installerad!", +"Share" => "Dela", +"Shared" => "Delad", "Error while sharing" => "Fel vid delning", "Error while unsharing" => "Fel när delning skulle avslutas", "Error while changing permissions" => "Fel vid ändring av rättigheter", diff --git a/core/l10n/ta_LK.php b/core/l10n/ta_LK.php index f4f204968f..2b8829c717 100644 --- a/core/l10n/ta_LK.php +++ b/core/l10n/ta_LK.php @@ -49,6 +49,7 @@ "Error" => "வழு", "The app name is not specified." => "செயலி பெயர் குறிப்பிடப்படவில்லை.", "The required file {file} is not installed!" => "தேவைப்பட்ட கோப்பு {கோப்பு} நிறுவப்படவில்லை!", +"Share" => "பகிர்வு", "Error while sharing" => "பகிரும் போதான வழு", "Error while unsharing" => "பகிராமல் உள்ளப்போதான வழு", "Error while changing permissions" => "அனுமதிகள் மாறும்போதான வழு", diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php index 9b491d24ea..7e00ac6e2d 100644 --- a/core/l10n/th_TH.php +++ b/core/l10n/th_TH.php @@ -53,6 +53,7 @@ "Error" => "พบข้อผิดพลาด", "The app name is not specified." => "ชื่อของแอปยังไม่ได้รับการระบุชื่อ", "The required file {file} is not installed!" => "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำเป็นต้องได้รับการติดตั้งไว้ก่อน ยังไม่ได้ถูกติดตั้ง", +"Share" => "แชร์", "Error while sharing" => "เกิดข้อผิดพลาดในระหว่างการแชร์ข้อมูล", "Error while unsharing" => "เกิดข้อผิดพลาดในการยกเลิกการแชร์ข้อมูล", "Error while changing permissions" => "เกิดข้อผิดพลาดในการเปลี่ยนสิทธิ์การเข้าใช้งาน", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index f64ecbedd5..624887674d 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -53,6 +53,7 @@ "Error" => "Hata", "The app name is not specified." => "uygulama adı belirtilmedi.", "The required file {file} is not installed!" => "İhtiyaç duyulan {file} dosyası kurulu değil.", +"Share" => "Paylaş", "Error while sharing" => "Paylaşım sırasında hata ", "Error while unsharing" => "Paylaşım iptal ediliyorken hata", "Error while changing permissions" => "İzinleri değiştirirken hata oluştu", diff --git a/core/l10n/uk.php b/core/l10n/uk.php index 34387cc914..fa8150e7c9 100644 --- a/core/l10n/uk.php +++ b/core/l10n/uk.php @@ -53,6 +53,7 @@ "Error" => "Помилка", "The app name is not specified." => "Не визначено ім'я програми.", "The required file {file} is not installed!" => "Необхідний файл {file} не встановлено!", +"Share" => "Поділитися", "Error while sharing" => "Помилка під час публікації", "Error while unsharing" => "Помилка під час відміни публікації", "Error while changing permissions" => "Помилка при зміні повноважень", diff --git a/core/l10n/vi.php b/core/l10n/vi.php index 1d538e99db..078cfa8dd8 100644 --- a/core/l10n/vi.php +++ b/core/l10n/vi.php @@ -53,6 +53,7 @@ "Error" => "Lỗi", "The app name is not specified." => "Tên ứng dụng không được chỉ định.", "The required file {file} is not installed!" => "Tập tin cần thiết {file} không được cài đặt!", +"Share" => "Chia sẻ", "Error while sharing" => "Lỗi trong quá trình chia sẻ", "Error while unsharing" => "Lỗi trong quá trình gỡ chia sẻ", "Error while changing permissions" => "Lỗi trong quá trình phân quyền", diff --git a/core/l10n/zh_CN.GB2312.php b/core/l10n/zh_CN.GB2312.php index a76c3a6c79..9617d7260d 100644 --- a/core/l10n/zh_CN.GB2312.php +++ b/core/l10n/zh_CN.GB2312.php @@ -38,6 +38,7 @@ "Yes" => "是", "Ok" => "好的", "Error" => "错误", +"Share" => "分享", "Error while sharing" => "分享出错", "Error while unsharing" => "取消分享出错", "Error while changing permissions" => "变更权限出错", diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php index 3918cd165d..f18fd6b357 100644 --- a/core/l10n/zh_CN.php +++ b/core/l10n/zh_CN.php @@ -53,6 +53,8 @@ "Error" => "错误", "The app name is not specified." => "未指定App名称。", "The required file {file} is not installed!" => "所需文件{file}未安装!", +"Share" => "共享", +"Shared" => "已共享", "Error while sharing" => "共享时出错", "Error while unsharing" => "取消共享时出错", "Error while changing permissions" => "修改权限时出错", diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php index 78a069a63d..74cb3b34d0 100644 --- a/core/l10n/zh_TW.php +++ b/core/l10n/zh_TW.php @@ -53,6 +53,7 @@ "Error" => "錯誤", "The app name is not specified." => "沒有指定 app 名稱。", "The required file {file} is not installed!" => "沒有安裝所需的檔案 {file} !", +"Share" => "分享", "Error while sharing" => "分享時發生錯誤", "Error while unsharing" => "取消分享時發生錯誤", "Error while changing permissions" => "修改權限時發生錯誤", diff --git a/db_structure.xml b/db_structure.xml index e878eac769..f4111bfabd 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -60,16 +60,96 @@ - *dbprefix*fscache + *dbprefix*storages id - 1 + text + + true + 64 + + + + numeric_id integer 0 true + 1 + 4 + + + + storages_id_index + true + + id + ascending + + + + + +
+ + + + *dbprefix*mimetypes + + + + + id + integer + 0 + true + 1 + 4 + + + + mimetype + text + + true + 255 + + + + mimetype_id_index + true + + mimetype + ascending + + + + + +
+ + + + *dbprefix*filecache + + + + + fileid + integer + 0 + true + 1 + 4 + + + + storage + integer + + true 4 @@ -92,9 +172,9 @@ parent integer - 0 + true - 8 + 4 @@ -102,7 +182,122 @@ text true - 300 + 250 + + + + mimetype + integer + + true + 4 + + + + mimepart + integer + + true + 4 + + + + size + integer + + true + 4 + + + + mtime + integer + + true + 4 + + + + encrypted + integer + 0 + true + 4 + + + + etag + text + + true + 40 + + + + fs_storage_path_hash + true + + storage + ascending + + + path_hash + ascending + + + + + fs_parent_name_hash + + parent + ascending + + + name + ascending + + + + + fs_storage_mimetype + + storage + ascending + + + mimetype + ascending + + + + + fs_storage_mimepart + + storage + ascending + + + mimepart + ascending + + + + + +
+ + + + *dbprefix*permissions + + + + + fileid + integer + 0 + true + 4 @@ -114,101 +309,22 @@ - size + permissions integer 0 true - 8 - - - - ctime - integer - 0 - true - 8 - - - - mtime - integer - 0 - true - 8 - - - - mimetype - text - - true - 96 - - - - mimepart - text - - true - 32 - - - - encrypted - integer - 0 - true - 1 - - - - versioned - integer - 0 - true - 1 - - - - writable - integer - 0 - true - 1 + 4 - fscache_path_hash_index + id_user_index + true - path_hash - ascending - - - - - parent_index - - parent - ascending - - - - - name_index - - name - ascending - - - - - parent_name_index - - parent + fileid ascending - name + user ascending diff --git a/l10n/ar/core.po b/l10n/ar/core.po index 0ce541f850..7d50e0187b 100644 --- a/l10n/ar/core.po +++ b/l10n/ar/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "شارك" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ar/files.po b/l10n/ar/files.po index 7063715d2f..0abddeffe1 100644 --- a/l10n/ar/files.po +++ b/l10n/ar/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -67,11 +53,11 @@ msgstr "المجلد المؤقت غير موجود" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "الاسم" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "حجم" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "معدل" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -313,3 +291,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po index a2178a82e0..0b638eea20 100644 --- a/l10n/ar/settings.po +++ b/l10n/ar/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "مدير المجموعة" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po index 1e66831c05..e4d55a9b58 100644 --- a/l10n/bg_BG/core.po +++ b/l10n/bg_BG/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:50+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Споделяне" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po index 2de8fabb14..dc6db939da 100644 --- a/l10n/bg_BG/files.po +++ b/l10n/bg_BG/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: bg_BG\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -68,11 +54,11 @@ msgstr "Липсва временна папка" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Качването е спряно." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Име" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Размер" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Променено" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -314,3 +292,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po index 71667fa12a..3ed0f6d3fd 100644 --- a/l10n/bg_BG/settings.po +++ b/l10n/bg_BG/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/bn_BD/core.po b/l10n/bn_BD/core.po index dcaa8094dc..1f57723dad 100644 --- a/l10n/bn_BD/core.po +++ b/l10n/bn_BD/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:50+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "আবশ্যিক {file} টি সংস্থাপিত নে #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "ভাগাভাগি কর" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po index 5d15b8d5ba..2530bf9e73 100644 --- a/l10n/bn_BD/files.po +++ b/l10n/bn_BD/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "%s কে স্থানান্তর করা সম্ভব হলো না" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "কোন ফাইল আপলোড করা হয় নি। সমস্যা অজ্ঞাত।" @@ -67,11 +53,11 @@ msgstr "অস্থায়ী ফোল্ডার খোয়া গিয়েছ msgid "Failed to write to disk" msgstr "ডিস্কে লিখতে ব্যর্থ" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "ভুল ডিরেক্টরি" @@ -183,52 +169,44 @@ msgstr "{count} টি ফাইল আপলোড করা হচ্ছে" msgid "Upload cancelled." msgstr "আপলোড বাতিল করা হয়েছে।" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL ফাঁকা রাখা যাবে না।" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud এর জন্য সংরক্ষিত।" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} টি ফাইল স্ক্যান করা হয়েছে" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "স্ক্যান করার সময় সমস্যা দেখা দিয়েছে" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "নাম" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "আকার" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "পরিবর্তিত" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "১টি ফোল্ডার" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} টি ফোল্ডার" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "১টি ফাইল" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} টি ফাইল" @@ -313,3 +291,7 @@ msgstr "ফাইলগুলো স্ক্যান করা হচ্ছে #: templates/index.php:111 msgid "Current scanning" msgstr "বর্তমান স্ক্যানিং" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po index 681984d8be..c9bf33feef 100644 --- a/l10n/bn_BD/settings.po +++ b/l10n/bn_BD/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "গোষ্ঠী প্রশাসক" msgid "Storage" msgstr "সংরক্ষণাগার" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "পূর্বনির্ধারিত" diff --git a/l10n/ca/core.po b/l10n/ca/core.po index 3fe5703a2f..1e3785c556 100644 --- a/l10n/ca/core.po +++ b/l10n/ca/core.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" +"Last-Translator: rogerc \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -255,11 +255,11 @@ msgstr "El fitxer requerit {file} no està instal·lat!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Comparteix" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Compartit" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/ca/files.po b/l10n/ca/files.po index fef5f92725..bffe388f4d 100644 --- a/l10n/ca/files.po +++ b/l10n/ca/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-28 00:04+0100\n" -"PO-Revision-Date: 2013-01-27 15:24+0000\n" -"Last-Translator: rogerc \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,20 +24,6 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr " No s'ha pogut moure %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "No es pot canviar el nom del fitxer" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "No s'ha carregat cap fitxer. Error desconegut" @@ -73,11 +59,11 @@ msgstr "S'ha perdut un fitxer temporal" msgid "Failed to write to disk" msgstr "Ha fallat en escriure al disc" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "No hi ha prou espai disponible" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Directori no vàlid." @@ -189,52 +175,44 @@ msgstr "{count} fitxers en pujada" msgid "Upload cancelled." msgstr "La pujada s'ha cancel·lat." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "La URL no pot ser buida" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} fitxers escannejats" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "error durant l'escaneig" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nom" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Mida" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificat" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} carpetes" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fitxer" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} fitxers" @@ -319,3 +297,7 @@ msgstr "S'estan escanejant els fitxers, espereu" #: templates/index.php:111 msgid "Current scanning" msgstr "Actualment escanejant" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po index 1efd6df00e..7005160e05 100644 --- a/l10n/ca/settings.po +++ b/l10n/ca/settings.po @@ -7,13 +7,14 @@ # , 2012. # , 2012. # Josep Tomàs , 2012. +# , 2013. # , 2011-2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n" "MIME-Version: 1.0\n" @@ -233,7 +234,7 @@ msgstr "Desenvolupat per la \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" +"Last-Translator: Tomáš Chvátal \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -256,11 +256,11 @@ msgstr "Požadovaný soubor {file} není nainstalován." #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Sdílet" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Sdílené" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po index de2fbc8415..705061c1f4 100644 --- a/l10n/cs_CZ/files.po +++ b/l10n/cs_CZ/files.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 07:07+0000\n" -"Last-Translator: Tomáš Chvátal \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,20 +20,6 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Nelze přesunout %s - existuje soubor se stejným názvem" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Nelze přesunout %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Nelze přejmenovat soubor" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Soubor nebyl odeslán. Neznámá chyba" @@ -69,11 +55,11 @@ msgstr "Chybí adresář pro dočasné soubory" msgid "Failed to write to disk" msgstr "Zápis na disk selhal" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Nedostatek dostupného úložného prostoru" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Neplatný adresář" @@ -185,52 +171,44 @@ msgstr "odesílám {count} souborů" msgid "Upload cancelled." msgstr "Odesílání zrušeno." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL nemůže být prázdná" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "prozkoumáno {count} souborů" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "chyba při prohledávání" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Název" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Velikost" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Změněno" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 složka" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} složky" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 soubor" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} soubory" @@ -315,3 +293,7 @@ msgstr "Soubory se prohledávají, prosím čekejte." #: templates/index.php:111 msgid "Current scanning" msgstr "Aktuální prohledávání" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po index 4157e0094b..cfe7ffb495 100644 --- a/l10n/cs_CZ/settings.po +++ b/l10n/cs_CZ/settings.po @@ -8,13 +8,13 @@ # Martin , 2011-2012. # Michal Hrušecký , 2012. # , 2012. -# Tomáš Chvátal , 2012. +# Tomáš Chvátal , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n" "MIME-Version: 1.0\n" @@ -234,7 +234,7 @@ msgstr "Vyvinuto komun #: templates/users.php:21 templates/users.php:79 msgid "Login Name" -msgstr "" +msgstr "Přihlašovací jméno" #: templates/users.php:26 templates/users.php:82 templates/users.php:107 msgid "Groups" @@ -258,7 +258,7 @@ msgstr "Jiná" #: templates/users.php:80 msgid "Display Name" -msgstr "" +msgstr "Zobrazované jméno" #: templates/users.php:84 templates/users.php:121 msgid "Group Admin" @@ -268,6 +268,14 @@ msgstr "Správa skupiny" msgid "Storage" msgstr "Úložiště" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Výchozí" diff --git a/l10n/da/core.po b/l10n/da/core.po index 4f1fdd3523..6bbc9024b4 100644 --- a/l10n/da/core.po +++ b/l10n/da/core.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -261,7 +261,7 @@ msgstr "Den krævede fil {file} er ikke installeret!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Del" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/da/files.po b/l10n/da/files.po index 2654e4e323..8456788fff 100644 --- a/l10n/da/files.po +++ b/l10n/da/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 11:55+0000\n" -"Last-Translator: Morten Juhl-Johansen Zölde-Fejér \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,20 +25,6 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Kunne ikke flytte %s - der findes allerede en fil med dette navn" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Kunne ikke flytte %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Kunne ikke omdøbe fil" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ingen fil blev uploadet. Ukendt fejl." @@ -74,11 +60,11 @@ msgstr "Mangler en midlertidig mappe" msgid "Failed to write to disk" msgstr "Fejl ved skrivning til disk." -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Der er ikke nok plads til rådlighed" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Ugyldig mappe." @@ -190,52 +176,44 @@ msgstr "{count} filer uploades" msgid "Upload cancelled." msgstr "Upload afbrudt." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URLen kan ikke være tom." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} filer skannet" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "fejl under scanning" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Navn" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Størrelse" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Ændret" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mappe" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} mapper" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fil" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} filer" @@ -320,3 +298,7 @@ msgstr "Filerne bliver indlæst, vent venligst." #: templates/index.php:111 msgid "Current scanning" msgstr "Indlæser" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/da/settings.po b/l10n/da/settings.po index 6df46a3c46..41dabd7ce4 100644 --- a/l10n/da/settings.po +++ b/l10n/da/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n" "MIME-Version: 1.0\n" @@ -272,6 +272,14 @@ msgstr "Gruppe Administrator" msgid "Storage" msgstr "Opbevaring" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Standard" diff --git a/l10n/de/core.po b/l10n/de/core.po index b9615f97a4..9e08918d71 100644 --- a/l10n/de/core.po +++ b/l10n/de/core.po @@ -23,8 +23,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -268,7 +268,7 @@ msgstr "Die benötigte Datei {file} ist nicht installiert." #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Freigeben" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/de/files.po b/l10n/de/files.po index 15ecd3bc99..2f2ff6e3ee 100644 --- a/l10n/de/files.po +++ b/l10n/de/files.po @@ -27,9 +27,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:01+0000\n" -"Last-Translator: Marcel Kühlhorn \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,20 +37,6 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits." - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Konnte %s nicht verschieben" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Konnte Datei nicht umbenennen" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Keine Datei hochgeladen. Unbekannter Fehler" @@ -86,11 +72,11 @@ msgstr "Temporärer Ordner fehlt." msgid "Failed to write to disk" msgstr "Fehler beim Schreiben auf die Festplatte" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Nicht genug Speicherplatz verfügbar" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Ungültiges Verzeichnis" @@ -202,52 +188,44 @@ msgstr "{count} Dateien werden hochgeladen" msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} Dateien wurden gescannt" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "Fehler beim Scannen" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Name" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Größe" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 Datei" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} Dateien" @@ -332,3 +310,7 @@ msgstr "Dateien werden gescannt, bitte warten." #: templates/index.php:111 msgid "Current scanning" msgstr "Scanne" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po index 934dce6d11..2407e4ec91 100644 --- a/l10n/de/files_encryption.po +++ b/l10n/de/files_encryption.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:15+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/de/settings.po b/l10n/de/settings.po index c26bb84c09..018f7ab726 100644 --- a/l10n/de/settings.po +++ b/l10n/de/settings.po @@ -25,8 +25,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" @@ -280,6 +280,14 @@ msgstr "Gruppenadministrator" msgid "Storage" msgstr "Speicher" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Standard" diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po index 95aabcd2e6..e003a2e24b 100644 --- a/l10n/de/user_ldap.po +++ b/l10n/de/user_ldap.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:08+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/de_DE/core.po b/l10n/de_DE/core.po index 0d1dcf3448..274621ffd7 100644 --- a/l10n/de_DE/core.po +++ b/l10n/de_DE/core.po @@ -24,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -269,11 +269,11 @@ msgstr "Die benötigte Datei {file} ist nicht installiert." #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Freigeben" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Freigegeben" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po index d81df74a94..a452edb4ac 100644 --- a/l10n/de_DE/files.po +++ b/l10n/de_DE/files.po @@ -28,9 +28,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 21:38+0000\n" -"Last-Translator: a.tangemann \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,20 +38,6 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Konnte %s nicht verschieben" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Konnte Datei nicht umbenennen" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Keine Datei hochgeladen. Unbekannter Fehler" @@ -87,11 +73,11 @@ msgstr "Der temporäre Ordner fehlt." msgid "Failed to write to disk" msgstr "Fehler beim Schreiben auf die Festplatte" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Nicht genug Speicher vorhanden." +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Ungültiges Verzeichnis." @@ -203,52 +189,44 @@ msgstr "{count} Dateien wurden hochgeladen" msgid "Upload cancelled." msgstr "Upload abgebrochen." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Die URL darf nicht leer sein." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} Dateien wurden gescannt" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "Fehler beim Scannen" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Name" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Größe" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Bearbeitet" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 Ordner" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} Ordner" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 Datei" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} Dateien" @@ -333,3 +311,7 @@ msgstr "Dateien werden gescannt, bitte warten." #: templates/index.php:111 msgid "Current scanning" msgstr "Scanne" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po index 7521754abf..daeb5466e5 100644 --- a/l10n/de_DE/files_encryption.po +++ b/l10n/de_DE/files_encryption.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:14+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po index 0c99f26562..008ed72b96 100644 --- a/l10n/de_DE/settings.po +++ b/l10n/de_DE/settings.po @@ -25,8 +25,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -280,6 +280,14 @@ msgstr "Gruppenadministrator" msgid "Storage" msgstr "Speicher" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Standard" diff --git a/l10n/de_DE/user_ldap.po b/l10n/de_DE/user_ldap.po index e1d07152a6..a48677b16c 100644 --- a/l10n/de_DE/user_ldap.po +++ b/l10n/de_DE/user_ldap.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:08+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:47+0000\n" "Last-Translator: Marcel Kühlhorn \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/el/core.po b/l10n/el/core.po index 6ad17c2deb..6bb746ef12 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -260,7 +260,7 @@ msgstr "Το απαιτούμενο αρχείο {file} δεν εγκαταστ #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Διαμοιρασμός" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/el/files.po b/l10n/el/files.po index d756e7d0b9..23dc33a5a2 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 02:25+0000\n" -"Last-Translator: Efstathios Iosifidis \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,20 +25,6 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Αδυναμία μετακίνησης του %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Αδυναμία μετονομασίας αρχείου" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα" @@ -74,11 +60,11 @@ msgstr "Λείπει ο προσωρινός φάκελος" msgid "Failed to write to disk" msgstr "Αποτυχία εγγραφής στο δίσκο" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Μη έγκυρος φάκελος." @@ -190,52 +176,44 @@ msgstr "{count} αρχεία ανεβαίνουν" msgid "Upload cancelled." msgstr "Η αποστολή ακυρώθηκε." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Η URL δεν πρέπει να είναι κενή." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από ο Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} αρχεία ανιχνεύτηκαν" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "σφάλμα κατά την ανίχνευση" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Όνομα" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Μέγεθος" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Τροποποιήθηκε" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 φάκελος" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} φάκελοι" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 αρχείο" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} αρχεία" @@ -320,3 +298,7 @@ msgstr "Τα αρχεία σαρώνονται, παρακαλώ περιμέν #: templates/index.php:111 msgid "Current scanning" msgstr "Τρέχουσα αναζήτηση " + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 4e99eae3d5..7f0a4b9c6c 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" @@ -274,6 +274,14 @@ msgstr "Ομάδα Διαχειριστών" msgid "Storage" msgstr "Αποθήκευση" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Προκαθορισμένο" diff --git a/l10n/eo/core.po b/l10n/eo/core.po index 01b8ff631d..87f8a4fe77 100644 --- a/l10n/eo/core.po +++ b/l10n/eo/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "La necesa dosiero {file} ne instaliĝis!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Kunhavigi" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/eo/files.po b/l10n/eo/files.po index 024dea90b0..1feb4c9d82 100644 --- a/l10n/eo/files.po +++ b/l10n/eo/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Ne eblis movi %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Ne eblis alinomigi dosieron" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Neniu dosiero alŝutiĝis. Nekonata eraro." @@ -69,11 +55,11 @@ msgstr "Mankas tempa dosierujo" msgid "Failed to write to disk" msgstr "Malsukcesis skribo al disko" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Nevalida dosierujo." @@ -185,52 +171,44 @@ msgstr "{count} dosieroj alŝutatas" msgid "Upload cancelled." msgstr "La alŝuto nuliĝis." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL ne povas esti malplena." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nevalida dosierujnomo. Uzo de “Shared” rezervatas de Owncloud." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} dosieroj skaniĝis" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "eraro dum skano" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nomo" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Grando" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modifita" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 dosierujo" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} dosierujoj" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 dosiero" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} dosierujoj" @@ -315,3 +293,7 @@ msgstr "Dosieroj estas skanataj, bonvolu atendi." #: templates/index.php:111 msgid "Current scanning" msgstr "Nuna skano" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po index 4c842f018f..41af121efe 100644 --- a/l10n/eo/settings.po +++ b/l10n/eo/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Grupadministranto" msgid "Storage" msgstr "Konservejo" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Defaŭlta" diff --git a/l10n/es/core.po b/l10n/es/core.po index 03aade72af..a15a24305d 100644 --- a/l10n/es/core.po +++ b/l10n/es/core.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Felix Liberio , 2013. # , 2012. # Javier Llorente , 2012. # , 2011-2013. @@ -18,9 +19,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:30+0000\n" +"Last-Translator: felix.liberio \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -263,11 +264,11 @@ msgstr "El fichero {file} requerido, no está instalado." #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Compartir" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Compartido" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" @@ -390,11 +391,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "La actualización ha fracasado. Por favor, informe este problema a la Comunidad de ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "La actualización se ha realizado correctamente. Redireccionando a ownCloud ahora." #: lostpassword/controller.php:47 msgid "ownCloud password reset" diff --git a/l10n/es/files.po b/l10n/es/files.po index db49dbe66b..e5f52a7217 100644 --- a/l10n/es/files.po +++ b/l10n/es/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -26,20 +26,6 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "No se puede mover %s - Ya existe un archivo con ese nombre" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "No se puede mover %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "No se puede renombrar el archivo" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Fallo no se subió el fichero" @@ -75,11 +61,11 @@ msgstr "Falta un directorio temporal" msgid "Failed to write to disk" msgstr "La escritura en disco ha fallado" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Directorio invalido." @@ -191,52 +177,44 @@ msgstr "Subiendo {count} archivos" msgid "Upload cancelled." msgstr "Subida cancelada." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "La URL no puede estar vacía." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} archivos escaneados" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "error escaneando" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nombre" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamaño" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificado" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 carpeta" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} carpetas" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 archivo" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} archivos" @@ -321,3 +299,7 @@ msgstr "Se están escaneando los archivos, por favor espere." #: templates/index.php:111 msgid "Current scanning" msgstr "Ahora escaneando" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po index 14b030edb0..fa6fcc6a7b 100644 --- a/l10n/es/files_encryption.po +++ b/l10n/es/files_encryption.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 22:40+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 14:50+0000\n" "Last-Translator: felix.liberio \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -28,11 +28,11 @@ msgstr "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado pa #: js/settings-personal.js:17 msgid "switched to client side encryption" -msgstr "Cambiar a encriptación en lado cliente" +msgstr "Cambiar a cifrado del lado del cliente" #: js/settings-personal.js:21 msgid "Change encryption password to login password" -msgstr "Cambie la clave de cifrado para ingresar su contraseña" +msgstr "Cambie la clave de cifrado para su contraseña de inicio de sesión" #: js/settings-personal.js:25 msgid "Please check your passwords and try again." @@ -40,37 +40,37 @@ msgstr "Por favor revise su contraseña e intentelo de nuevo." #: js/settings-personal.js:25 msgid "Could not change your file encryption password to your login password" -msgstr "" +msgstr "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión" #: templates/settings-personal.php:3 templates/settings.php:5 msgid "Choose encryption mode:" -msgstr "Elegir el modo de encriptado:" +msgstr "Elegir el modo de cifrado:" #: templates/settings-personal.php:20 templates/settings.php:24 msgid "" "Client side encryption (most secure but makes it impossible to access your " "data from the web interface)" -msgstr "" +msgstr "Cifrado del lado del Cliente ( es el más seguro, pero hace que sea imposible acceder a sus datos desde la interfaz web)" #: templates/settings-personal.php:30 templates/settings.php:36 msgid "" "Server side encryption (allows you to access your files from the web " "interface and the desktop client)" -msgstr "" +msgstr "Cifrado del lado del Servidor (le permite acceder a sus archivos desde la interfaz web y el cliente de escritorio)" #: templates/settings-personal.php:41 templates/settings.php:60 msgid "None (no encryption at all)" -msgstr "" +msgstr "Ninguno (ningún cifrado en absoluto)" #: templates/settings.php:10 msgid "" "Important: Once you selected an encryption mode there is no way to change it" " back" -msgstr "" +msgstr "Importante: Una vez que haya seleccionado un modo de cifrado no existe forma de cambiarlo de nuevo" #: templates/settings.php:48 msgid "User specific (let the user decide)" -msgstr "" +msgstr "Específico del usuario (dejar que el usuario decida)" #: templates/settings.php:65 msgid "Encryption" diff --git a/l10n/es/settings.po b/l10n/es/settings.po index d650521c6f..310b9e21f5 100644 --- a/l10n/es/settings.po +++ b/l10n/es/settings.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" @@ -274,6 +274,14 @@ msgstr "Grupo admin" msgid "Storage" msgstr "Alamacenamiento" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Predeterminado" diff --git a/l10n/es_AR/core.po b/l10n/es_AR/core.po index 6548740840..3b362910e2 100644 --- a/l10n/es_AR/core.po +++ b/l10n/es_AR/core.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# CJTess , 2013. # , 2012-2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:00+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -254,11 +255,11 @@ msgstr "¡El archivo requerido {file} no está instalado!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Compartir" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Compartido" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" @@ -381,11 +382,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "La actualización fue exitosa. Estás siendo redirigido a ownCloud." #: lostpassword/controller.php:47 msgid "ownCloud password reset" diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po index 7de3e1c837..b736273d87 100644 --- a/l10n/es_AR/files.po +++ b/l10n/es_AR/files.po @@ -4,13 +4,14 @@ # # Translators: # Agustin Ferrario , 2012-2013. +# CJTess , 2013. # , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -19,20 +20,6 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "No se pudo mover %s - Un archivo con este nombre ya existe" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "No se pudo mover %s " - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "No fue posible cambiar el nombre al archivo" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "El archivo no fue subido. Error desconocido" @@ -68,11 +55,11 @@ msgstr "Falta un directorio temporal" msgid "Failed to write to disk" msgstr "Error al escribir en el disco" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Directorio invalido." @@ -144,11 +131,11 @@ msgstr "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no está #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando" #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "El almacenamiento está casi lleno ({usedSpacePercent}%)" #: js/files.js:219 msgid "" @@ -184,52 +171,44 @@ msgstr "Subiendo {count} archivos" msgid "Upload cancelled." msgstr "La subida fue cancelada" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "La URL no puede estar vacía" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} archivos escaneados" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "error mientras se escaneaba" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nombre" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamaño" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificado" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 directorio" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} directorios" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 archivo" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} archivos" @@ -314,3 +293,7 @@ msgstr "Se están escaneando los archivos, por favor esperá." #: templates/index.php:111 msgid "Current scanning" msgstr "Escaneo actual" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/es_AR/files_encryption.po b/l10n/es_AR/files_encryption.po index 63c4ec0058..11ac9c0c6d 100644 --- a/l10n/es_AR/files_encryption.po +++ b/l10n/es_AR/files_encryption.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# CJTess , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-22 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:11+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,53 +23,53 @@ msgstr "" msgid "" "Please switch to your ownCloud client and change your encryption password to" " complete the conversion." -msgstr "" +msgstr "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión." #: js/settings-personal.js:17 msgid "switched to client side encryption" -msgstr "" +msgstr "Cambiado a encriptación por parte del cliente" #: js/settings-personal.js:21 msgid "Change encryption password to login password" -msgstr "" +msgstr "Cambiá la clave de encriptado para tu contraseña de inicio de sesión" #: js/settings-personal.js:25 msgid "Please check your passwords and try again." -msgstr "" +msgstr "Por favor, revisá tu contraseña e intentalo de nuevo." #: js/settings-personal.js:25 msgid "Could not change your file encryption password to your login password" -msgstr "" +msgstr "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión" #: templates/settings-personal.php:3 templates/settings.php:5 msgid "Choose encryption mode:" -msgstr "" +msgstr "Elegir el modo de encriptación:" #: templates/settings-personal.php:20 templates/settings.php:24 msgid "" "Client side encryption (most secure but makes it impossible to access your " "data from the web interface)" -msgstr "" +msgstr "Encriptación por parte del cliente (es el modo más seguro, pero hace que sea imposible acceder a tus datos desde la interfaz web)" #: templates/settings-personal.php:30 templates/settings.php:36 msgid "" "Server side encryption (allows you to access your files from the web " "interface and the desktop client)" -msgstr "" +msgstr "Encriptación por parte del servidor (te permite acceder a tus archivos desde la interfaz web y desde el cliente de escritorio)" #: templates/settings-personal.php:41 templates/settings.php:60 msgid "None (no encryption at all)" -msgstr "" +msgstr "Ninguno (ninguna encriptación en absoluto)" #: templates/settings.php:10 msgid "" "Important: Once you selected an encryption mode there is no way to change it" " back" -msgstr "" +msgstr "Importante: Una vez que haya seleccionado un modo de encriptación, no existe forma de cambiarlo nuevamente" #: templates/settings.php:48 msgid "User specific (let the user decide)" -msgstr "" +msgstr "Específico por usuario (deja que el usuario decida)" #: templates/settings.php:65 msgid "Encryption" diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po index e5e3ae2bc0..d9b6327b4d 100644 --- a/l10n/es_AR/settings.po +++ b/l10n/es_AR/settings.po @@ -4,13 +4,14 @@ # # Translators: # Agustin Ferrario , 2012. +# CJTess , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" @@ -123,7 +124,7 @@ msgstr "Documentación de Administrador" #: templates/help.php:6 msgid "Online Documentation" -msgstr "Documentación en linea" +msgstr "Documentación en línea" #: templates/help.php:7 msgid "Forum" @@ -230,7 +231,7 @@ msgstr "Desarrollado por la , 2013. +# CJTess , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-16 00:19+0100\n" -"PO-Revision-Date: 2013-01-15 23:20+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:22+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,7 +31,7 @@ msgstr "Advertencia: Los Apps user_ldap y user_webdavauth son incompatibl msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "" +msgstr "Atención: El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale." #: templates/settings.php:15 msgid "Host" @@ -47,7 +48,7 @@ msgstr "DN base" #: templates/settings.php:16 msgid "One Base DN per line" -msgstr "" +msgstr "Una DN base por línea" #: templates/settings.php:16 msgid "You can specify Base DN for users and groups in the Advanced tab" @@ -122,7 +123,7 @@ msgstr "Árbol base de usuario" #: templates/settings.php:25 msgid "One User Base DN per line" -msgstr "" +msgstr "Una DN base de usuario por línea" #: templates/settings.php:26 msgid "Base Group Tree" @@ -130,7 +131,7 @@ msgstr "Árbol base de grupo" #: templates/settings.php:26 msgid "One Group Base DN per line" -msgstr "" +msgstr "Una DN base de grupo por línea" #: templates/settings.php:27 msgid "Group-Member association" diff --git a/l10n/es_AR/user_webdavauth.po b/l10n/es_AR/user_webdavauth.po index 429680ee8c..6c88cac3fd 100644 --- a/l10n/es_AR/user_webdavauth.po +++ b/l10n/es_AR/user_webdavauth.po @@ -4,14 +4,15 @@ # # Translators: # Agustin Ferrario , 2012. +# CJTess , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:22+0000\n" +"Last-Translator: cjtess \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,7 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "Autenticación de WevDAV" #: templates/settings.php:4 msgid "URL: http://" @@ -32,4 +33,4 @@ msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "" +msgstr "onwCloud enviará las credenciales de usuario a esta URL. Este complemento verifica la respuesta e interpretará los códigos de respuesta HTTP 401 y 403 como credenciales inválidas y todas las otras respuestas como credenciales válidas." diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po index 62f3fd7015..279a9737cd 100644 --- a/l10n/et_EE/core.po +++ b/l10n/et_EE/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Jaga" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po index ad6acde581..220476a877 100644 --- a/l10n/et_EE/files.po +++ b/l10n/et_EE/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: et_EE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ühtegi faili ei laetud üles. Tundmatu viga" @@ -68,11 +54,11 @@ msgstr "Ajutiste failide kaust puudub" msgid "Failed to write to disk" msgstr "Kettale kirjutamine ebaõnnestus" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "{count} faili üleslaadimist" msgid "Upload cancelled." msgstr "Üleslaadimine tühistati." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL ei saa olla tühi." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} faili skännitud" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "viga skännimisel" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nimi" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Suurus" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Muudetud" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 kaust" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} kausta" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fail" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} faili" @@ -314,3 +292,7 @@ msgstr "Faile skannitakse, palun oota" #: templates/index.php:111 msgid "Current scanning" msgstr "Praegune skannimine" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po index 3f55c73885..3be449a7d2 100644 --- a/l10n/et_EE/settings.po +++ b/l10n/et_EE/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "Grupi admin" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/eu/core.po b/l10n/eu/core.po index 7bc85012c5..2bbe9c7c6a 100644 --- a/l10n/eu/core.po +++ b/l10n/eu/core.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 22:50+0000\n" +"Last-Translator: asieriko \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -256,11 +256,11 @@ msgstr "Beharrezkoa den {file} fitxategia ez dago instalatuta!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Elkarbanatu" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Elkarbanatuta" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/eu/files.po b/l10n/eu/files.po index a769d2ce3c..aadd0656f8 100644 --- a/l10n/eu/files.po +++ b/l10n/eu/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-28 00:04+0100\n" -"PO-Revision-Date: 2013-01-27 15:41+0000\n" -"Last-Translator: Piarres Beobide \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,20 +21,6 @@ msgstr "" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Ezin dira fitxategiak mugitu %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Ezin izan da fitxategia berrizendatu" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ez da fitxategirik igo. Errore ezezaguna" @@ -70,11 +56,11 @@ msgstr "Aldi baterako karpeta falta da" msgid "Failed to write to disk" msgstr "Errore bat izan da diskoan idazterakoan" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Ez dago behar aina leku erabilgarri," +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Baliogabeko karpeta." @@ -186,52 +172,44 @@ msgstr "{count} fitxategi igotzen" msgid "Upload cancelled." msgstr "Igoera ezeztatuta" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URLa ezin da hutsik egon." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} fitxategi eskaneatuta" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "errore bat egon da eskaneatzen zen bitartean" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Izena" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamaina" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Aldatuta" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "karpeta bat" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} karpeta" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "fitxategi bat" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} fitxategi" @@ -316,3 +294,7 @@ msgstr "Fitxategiak eskaneatzen ari da, itxoin mezedez." #: templates/index.php:111 msgid "Current scanning" msgstr "Orain eskaneatzen ari da" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po index 9ff185b18f..e29eaae12e 100644 --- a/l10n/eu/settings.po +++ b/l10n/eu/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n" "MIME-Version: 1.0\n" @@ -232,7 +232,7 @@ msgstr "ownCloud komun #: templates/users.php:21 templates/users.php:79 msgid "Login Name" -msgstr "" +msgstr "Sarrera Izena" #: templates/users.php:26 templates/users.php:82 templates/users.php:107 msgid "Groups" @@ -256,7 +256,7 @@ msgstr "Besteak" #: templates/users.php:80 msgid "Display Name" -msgstr "" +msgstr "Bistaratze Izena" #: templates/users.php:84 templates/users.php:121 msgid "Group Admin" @@ -266,6 +266,14 @@ msgstr "Talde administradorea" msgid "Storage" msgstr "Biltegiratzea" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Lehenetsia" diff --git a/l10n/fa/core.po b/l10n/fa/core.po index b14c7903db..217e58d5bd 100644 --- a/l10n/fa/core.po +++ b/l10n/fa/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "پرونده { پرونده} درخواست شده نصب نشده اس #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "اشتراک‌گزاری" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/fa/files.po b/l10n/fa/files.po index b153a65abb..e0b92b3f69 100644 --- a/l10n/fa/files.po +++ b/l10n/fa/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -21,20 +21,6 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. " - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "%s نمی تواند حرکت کند " - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "قادر به تغییر نام پرونده نیست." - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "هیچ فایلی آپلود نشد.خطای ناشناس" @@ -70,11 +56,11 @@ msgstr "یک پوشه موقت گم شده است" msgid "Failed to write to disk" msgstr "نوشتن بر روی دیسک سخت ناموفق بود" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "فهرست راهنما نامعتبر می باشد." @@ -186,52 +172,44 @@ msgstr "{ شمار } فایل های در حال آپلود" msgid "Upload cancelled." msgstr "بار گذاری لغو شد" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. " -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL نمی تواند خالی باشد." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "نام پوشه نامعتبر است. استفاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{ شمار } فایل های اسکن شده" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "خطا در حال انجام اسکن " - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "نام" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "اندازه" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "تغییر یافته" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 پوشه" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{ شمار} پوشه ها" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 پرونده" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{ شمار } فایل ها" @@ -316,3 +294,7 @@ msgstr "پرونده ها در حال بازرسی هستند لطفا صبر ک #: templates/index.php:111 msgid "Current scanning" msgstr "بازرسی کنونی" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po index 05c6505630..758c6c4152 100644 --- a/l10n/fa/settings.po +++ b/l10n/fa/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po index 74a6747f32..3ff113a54d 100644 --- a/l10n/fi_FI/core.po +++ b/l10n/fi_FI/core.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:30+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -259,7 +259,7 @@ msgstr "Vaadittua tiedostoa {file} ei ole asennettu!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Jaa" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" @@ -386,11 +386,11 @@ msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "Päivitys epäonnistui. Ilmoita ongelmasta ownCloud-yhteisölle." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi." #: lostpassword/controller.php:47 msgid "ownCloud password reset" diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po index 16c19a658a..b13a9ab58b 100644 --- a/l10n/fi_FI/files.po +++ b/l10n/fi_FI/files.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 18:44+0000\n" -"Last-Translator: Jiri Grönroos \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,20 +22,6 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Kohteen %s siirto ei onnistunut" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Tiedoston nimeäminen uudelleen ei onnistunut" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Tiedostoa ei lähetetty. Tuntematon virhe" @@ -71,11 +57,11 @@ msgstr "Väliaikaiskansiota ei ole olemassa" msgid "Failed to write to disk" msgstr "Levylle kirjoitus epäonnistui" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Tallennustilaa ei ole riittävästi käytettävissä" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Virheellinen kansio." @@ -187,52 +173,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Lähetys peruttu." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Verkko-osoite ei voi olla tyhjä" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nimi" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Koko" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Muutettu" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 kansio" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} kansiota" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 tiedosto" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} tiedostoa" @@ -317,3 +295,7 @@ msgstr "Tiedostoja tarkistetaan, odota hetki." #: templates/index.php:111 msgid "Current scanning" msgstr "Tämänhetkinen tutkinta" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po index c662e17898..7596a23421 100644 --- a/l10n/fi_FI/settings.po +++ b/l10n/fi_FI/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" @@ -231,7 +231,7 @@ msgstr "Kehityksestä on vastannut \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" @@ -264,7 +264,7 @@ msgstr "Le fichier requis {file} n'est pas installé !" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Partager" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/fr/files.po b/l10n/fr/files.po index dd7d5c2635..103a5bd308 100644 --- a/l10n/fr/files.po +++ b/l10n/fr/files.po @@ -20,9 +20,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 09:26+0000\n" -"Last-Translator: dbasquin \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" +"Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,20 +30,6 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Impossible de déplacer %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Impossible de renommer le fichier" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Aucun fichier n'a été chargé. Erreur inconnue" @@ -79,11 +65,11 @@ msgstr "Il manque un répertoire temporaire" msgid "Failed to write to disk" msgstr "Erreur d'écriture sur le disque" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Plus assez d'espace de stockage disponible" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Dossier invalide." @@ -195,52 +181,44 @@ msgstr "{count} fichiers téléversés" msgid "Upload cancelled." msgstr "Chargement annulé." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "L'URL ne peut-être vide" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} fichiers indexés" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "erreur lors de l'indexation" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nom" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Taille" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modifié" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 dossier" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} dossiers" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fichier" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} fichiers" @@ -325,3 +303,7 @@ msgstr "Les fichiers sont en cours d'analyse, veuillez patienter." #: templates/index.php:111 msgid "Current scanning" msgstr "Analyse en cours" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index c2827253a3..320184d415 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" @@ -277,6 +277,14 @@ msgstr "Groupe Admin" msgid "Storage" msgstr "Support de stockage" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Défaut" diff --git a/l10n/gl/core.po b/l10n/gl/core.po index e2701a3713..3ae2a9276e 100644 --- a/l10n/gl/core.po +++ b/l10n/gl/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "Non está instalado o ficheiro {file} que se precisa" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Compartir" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/gl/files.po b/l10n/gl/files.po index a303b10579..ac9f8a4b62 100644 --- a/l10n/gl/files.po +++ b/l10n/gl/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome." - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Non se puido mover %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Non se pode renomear o ficheiro" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Non se subiu ningún ficheiro. Erro descoñecido." @@ -68,11 +54,11 @@ msgstr "Falta un cartafol temporal" msgid "Failed to write to disk" msgstr "Erro ao escribir no disco" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "O directorio é incorrecto." @@ -184,52 +170,44 @@ msgstr "{count} ficheiros subíndose" msgid "Upload cancelled." msgstr "Subida cancelada." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL non pode quedar baleiro." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} ficheiros escaneados" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "erro mentres analizaba" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nome" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamaño" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificado" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 cartafol" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} cartafoles" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} ficheiros" @@ -314,3 +292,7 @@ msgstr "Estanse analizando os ficheiros. Agarda." #: templates/index.php:111 msgid "Current scanning" msgstr "Análise actual" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po index d5af9d142a..957989c610 100644 --- a/l10n/gl/settings.po +++ b/l10n/gl/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Grupo Admin" msgid "Storage" msgstr "Almacenamento" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Predeterminado" diff --git a/l10n/he/core.po b/l10n/he/core.po index c3ae441a83..77438c94d3 100644 --- a/l10n/he/core.po +++ b/l10n/he/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -257,7 +257,7 @@ msgstr "הקובץ הנדרש {file} אינו מותקן!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "שתף" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/he/files.po b/l10n/he/files.po index 60b53f30b7..9b769f346b 100644 --- a/l10n/he/files.po +++ b/l10n/he/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -21,20 +21,6 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "לא הועלה קובץ. טעות בלתי מזוהה." @@ -70,11 +56,11 @@ msgstr "תיקייה זמנית חסרה" msgid "Failed to write to disk" msgstr "הכתיבה לכונן נכשלה" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -186,52 +172,44 @@ msgstr "{count} קבצים נשלחים" msgid "Upload cancelled." msgstr "ההעלאה בוטלה." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "קישור אינו יכול להיות ריק." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} קבצים נסרקו" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "אירעה שגיאה במהלך הסריקה" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "שם" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "גודל" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "זמן שינוי" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "תיקייה אחת" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} תיקיות" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "קובץ אחד" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} קבצים" @@ -316,3 +294,7 @@ msgstr "הקבצים נסרקים, נא להמתין." #: templates/index.php:111 msgid "Current scanning" msgstr "הסריקה הנוכחית" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/he/settings.po b/l10n/he/settings.po index 53f1026fb7..2fb85237b0 100644 --- a/l10n/he/settings.po +++ b/l10n/he/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "מנהל הקבוצה" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/hi/files.po b/l10n/hi/files.po index 0c74c7074f..699615e59c 100644 --- a/l10n/hi/files.po +++ b/l10n/hi/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -17,20 +17,6 @@ msgstr "" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -66,11 +52,11 @@ msgstr "" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -182,52 +168,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -312,3 +290,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po index 9af2a15148..d03f926766 100644 --- a/l10n/hi/settings.po +++ b/l10n/hi/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n" "MIME-Version: 1.0\n" @@ -262,6 +262,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/hr/core.po b/l10n/hr/core.po index 2959d09753..398e7e7728 100644 --- a/l10n/hr/core.po +++ b/l10n/hr/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Podijeli" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/hr/files.po b/l10n/hr/files.po index edf64baef1..856858711e 100644 --- a/l10n/hr/files.po +++ b/l10n/hr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -69,11 +55,11 @@ msgstr "Nedostaje privremena mapa" msgid "Failed to write to disk" msgstr "Neuspjelo pisanje na disk" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Slanje poništeno." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "grečka prilikom skeniranja" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Naziv" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Veličina" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Zadnja promjena" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -315,3 +293,7 @@ msgstr "Datoteke se skeniraju, molimo pričekajte." #: templates/index.php:111 msgid "Current scanning" msgstr "Trenutno skeniranje" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po index a8be98c5af..247ce35fc2 100644 --- a/l10n/hr/settings.po +++ b/l10n/hr/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Grupa Admin" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po index 4a9be1afdf..78c4bb1314 100644 --- a/l10n/hu_HU/core.po +++ b/l10n/hu_HU/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -257,7 +257,7 @@ msgstr "A szükséges fájl: {file} nincs telepítve!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Megosztás" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po index d5983f6394..2b869524e8 100644 --- a/l10n/hu_HU/files.po +++ b/l10n/hu_HU/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 08:37+0000\n" -"Last-Translator: akoscomp \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,20 +24,6 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Nem sikerült %s áthelyezése" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Nem lehet átnevezni a fájlt" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nem történt feltöltés. Ismeretlen hiba" @@ -73,11 +59,11 @@ msgstr "Hiányzik egy ideiglenes mappa" msgid "Failed to write to disk" msgstr "Nem sikerült a lemezre történő írás" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Nincs elég szabad hely." +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Érvénytelen mappa." @@ -189,52 +175,44 @@ msgstr "{count} fájl töltődik föl" msgid "Upload cancelled." msgstr "A feltöltést megszakítottuk." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Az URL nem lehet semmi." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} fájlt találtunk" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "Hiba a fájllista-ellenőrzés során" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Név" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Méret" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Módosítva" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mappa" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} mappa" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fájl" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} fájl" @@ -319,3 +297,7 @@ msgstr "A fájllista ellenőrzése zajlik, kis türelmet!" #: templates/index.php:111 msgid "Current scanning" msgstr "Ellenőrzés alatt" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po index 5aa7fcfb01..0e85339b48 100644 --- a/l10n/hu_HU/settings.po +++ b/l10n/hu_HU/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Csoportadminisztrátor" msgid "Storage" msgstr "Tárhely" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Alapértelmezett" diff --git a/l10n/ia/core.po b/l10n/ia/core.po index 0c74f32770..7d3302b48f 100644 --- a/l10n/ia/core.po +++ b/l10n/ia/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Compartir" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ia/files.po b/l10n/ia/files.po index b1a67c8377..185bc455a7 100644 --- a/l10n/ia/files.po +++ b/l10n/ia/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: ia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -68,11 +54,11 @@ msgstr "Manca un dossier temporari" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nomine" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Dimension" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificate" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -314,3 +292,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po index 8a5f778dd9..78f954d583 100644 --- a/l10n/ia/settings.po +++ b/l10n/ia/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/id/core.po b/l10n/id/core.po index e3dcf88b98..9a0840fe9d 100644 --- a/l10n/id/core.po +++ b/l10n/id/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "berbagi" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/id/files.po b/l10n/id/files.po index 5011361471..b163ba8eb7 100644 --- a/l10n/id/files.po +++ b/l10n/id/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -69,11 +55,11 @@ msgstr "Kehilangan folder temporer" msgid "Failed to write to disk" msgstr "Gagal menulis ke disk" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Pengunggahan dibatalkan." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "tautan tidak boleh kosong" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nama" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Ukuran" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Dimodifikasi" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -315,3 +293,7 @@ msgstr "Berkas sedang dipindai, silahkan tunggu." #: templates/index.php:111 msgid "Current scanning" msgstr "Sedang memindai" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/id/settings.po b/l10n/id/settings.po index bcaf1c7afe..a594ba52ad 100644 --- a/l10n/id/settings.po +++ b/l10n/id/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "Admin Grup" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/is/core.po b/l10n/is/core.po index 4916011fc4..beaf3bce1c 100644 --- a/l10n/is/core.po +++ b/l10n/is/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "Umbeðina skráin {file} ekki tiltæk!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Deila" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/is/files.po b/l10n/is/files.po index bd387e20c3..1d7feca142 100644 --- a/l10n/is/files.po +++ b/l10n/is/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Gat ekki fært %s - Skrá með þessu nafni er þegar til" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Gat ekki fært %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Gat ekki endurskýrt skrá" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Engin skrá var send inn. Óþekkt villa." @@ -67,11 +53,11 @@ msgstr "Vantar bráðabirgðamöppu" msgid "Failed to write to disk" msgstr "Tókst ekki að skrifa á disk" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Ógild mappa." @@ -183,52 +169,44 @@ msgstr "{count} skrár innsendar" msgid "Upload cancelled." msgstr "Hætt við innsendingu." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Vefslóð má ekki vera tóm." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} skrár skimaðar" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "villa við skimun" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nafn" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Stærð" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Breytt" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mappa" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} möppur" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 skrá" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} skrár" @@ -313,3 +291,7 @@ msgstr "Verið er að skima skrár, vinsamlegast hinkraðu." #: templates/index.php:111 msgid "Current scanning" msgstr "Er að skima" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/is/settings.po b/l10n/is/settings.po index 15f488a9b2..1037019806 100644 --- a/l10n/is/settings.po +++ b/l10n/is/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "Hópstjóri" msgid "Storage" msgstr "gagnapláss" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Sjálfgefið" diff --git a/l10n/it/core.po b/l10n/it/core.po index 77ec770b0d..9e752cc43e 100644 --- a/l10n/it/core.po +++ b/l10n/it/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" @@ -257,11 +257,11 @@ msgstr "Il file richiesto {file} non è installato!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Condividi" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Condivisi" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/it/files.po b/l10n/it/files.po index 0a161d8c6e..866f39981d 100644 --- a/l10n/it/files.po +++ b/l10n/it/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-28 00:04+0100\n" -"PO-Revision-Date: 2013-01-27 00:03+0000\n" -"Last-Translator: Vincenzo Reale \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:27+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,20 +21,6 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Impossibile spostare %s - un file con questo nome esiste già" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Impossibile spostare %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Impossibile rinominare il file" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nessun file è stato inviato. Errore sconosciuto" @@ -70,11 +56,11 @@ msgstr "Cartella temporanea mancante" msgid "Failed to write to disk" msgstr "Scrittura su disco non riuscita" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Spazio di archiviazione insufficiente" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Cartella non valida." @@ -186,52 +172,44 @@ msgstr "{count} file in fase di caricamentoe" msgid "Upload cancelled." msgstr "Invio annullato" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "L'URL non può essere vuoto." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} file analizzati" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "errore durante la scansione" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nome" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Dimensione" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificato" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 cartella" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} cartelle" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 file" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} file" @@ -316,3 +294,7 @@ msgstr "Scansione dei file in corso, attendi" #: templates/index.php:111 msgid "Current scanning" msgstr "Scansione corrente" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/it/settings.po b/l10n/it/settings.po index 6f1b11dd3f..1536b204ae 100644 --- a/l10n/it/settings.po +++ b/l10n/it/settings.po @@ -9,13 +9,13 @@ # Jan-Christoph Borchardt , 2011. # , 2011-2013. # , 2011. -# Vincenzo Reale , 2012. +# Vincenzo Reale , 2012-2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" @@ -235,7 +235,7 @@ msgstr "Sviluppato dalla \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -255,11 +255,11 @@ msgstr "必要なファイル {file} がインストールされていません #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "共有" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "共有中" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po index 5a4b882085..eeb900bd96 100644 --- a/l10n/ja_JP/files.po +++ b/l10n/ja_JP/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 01:10+0000\n" -"Last-Translator: Daisuke Deguchi \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,20 +21,6 @@ msgstr "" "Language: ja_JP\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s を移動できませんでした ― この名前のファイルはすでに存在します" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "%s を移動できませんでした" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "ファイル名の変更ができません" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "ファイルは何もアップロードされていません。不明なエラー" @@ -70,11 +56,11 @@ msgstr "テンポラリフォルダが見つかりません" msgid "Failed to write to disk" msgstr "ディスクへの書き込みに失敗しました" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "ストレージに十分な空き容量がありません" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "無効なディレクトリです。" @@ -186,52 +172,44 @@ msgstr "{count} ファイルをアップロード中" msgid "Upload cancelled." msgstr "アップロードはキャンセルされました。" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URLは空にできません。" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "無効なフォルダ名です。'Shared' の利用は ownCloud が予約済みです。" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} ファイルをスキャン" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "スキャン中のエラー" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "名前" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "サイズ" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "更新日時" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 フォルダ" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} フォルダ" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ファイル" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} ファイル" @@ -316,3 +294,7 @@ msgstr "ファイルをスキャンしています、しばらくお待ちくだ #: templates/index.php:111 msgid "Current scanning" msgstr "スキャン中" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po index 4871013dbf..5219c67a40 100644 --- a/l10n/ja_JP/settings.po +++ b/l10n/ja_JP/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "グループ管理者" msgid "Storage" msgstr "ストレージ" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "デフォルト" diff --git a/l10n/ka_GE/core.po b/l10n/ka_GE/core.po index 87ed1f83cd..c9cd6befe2 100644 --- a/l10n/ka_GE/core.po +++ b/l10n/ka_GE/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "გაზიარება" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po index 55891c6815..dd92548115 100644 --- a/l10n/ka_GE/files.po +++ b/l10n/ka_GE/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: ka_GE\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -67,11 +53,11 @@ msgstr "დროებითი საქაღალდე არ არსე msgid "Failed to write to disk" msgstr "შეცდომა დისკზე ჩაწერისას" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "{count} ფაილი იტვირთება" msgid "Upload cancelled." msgstr "ატვირთვა შეჩერებულ იქნა." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} ფაილი სკანირებულია" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "შეცდომა სკანირებისას" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "სახელი" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "ზომა" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "შეცვლილია" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 საქაღალდე" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} საქაღალდე" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ფაილი" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} ფაილი" @@ -313,3 +291,7 @@ msgstr "მიმდინარეობს ფაილების სკა #: templates/index.php:111 msgid "Current scanning" msgstr "მიმდინარე სკანირება" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po index 3f35403cfa..e81a43d654 100644 --- a/l10n/ka_GE/settings.po +++ b/l10n/ka_GE/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "ჯგუფის ადმინისტრატორი" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/ko/core.po b/l10n/ko/core.po index 8ba96b125b..98f2ffca7f 100644 --- a/l10n/ko/core.po +++ b/l10n/ko/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "필요한 파일 {file}이(가) 설치되지 않았습니다!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "공유" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ko/files.po b/l10n/ko/files.po index 86f4240c0a..c9998ab40f 100644 --- a/l10n/ko/files.po +++ b/l10n/ko/files.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -22,20 +22,6 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "%s 항목을 이딩시키지 못하였음" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "파일 이름바꾸기 할 수 없음" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다" @@ -71,11 +57,11 @@ msgstr "임시 폴더가 사라짐" msgid "Failed to write to disk" msgstr "디스크에 쓰지 못했습니다" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "올바르지 않은 디렉토리입니다." @@ -187,52 +173,44 @@ msgstr "파일 {count}개 업로드 중" msgid "Upload cancelled." msgstr "업로드가 취소되었습니다." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL을 입력해야 합니다." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "폴더 이름이 유효하지 않습니다. " -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "파일 {count}개 검색됨" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "검색 중 오류 발생" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "이름" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "크기" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "수정됨" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "폴더 1개" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "폴더 {count}개" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "파일 1개" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "파일 {count}개" @@ -317,3 +295,7 @@ msgstr "파일을 검색하고 있습니다. 기다려 주십시오." #: templates/index.php:111 msgid "Current scanning" msgstr "현재 검색" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po index 2236af6d9c..b1e3a45522 100644 --- a/l10n/ko/settings.po +++ b/l10n/ko/settings.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n" "MIME-Version: 1.0\n" @@ -267,6 +267,14 @@ msgstr "그룹 관리자" msgid "Storage" msgstr "저장소" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "기본값" diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po index b3b16e0bc7..980d6c02db 100644 --- a/l10n/ku_IQ/files.po +++ b/l10n/ku_IQ/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -17,20 +17,6 @@ msgstr "" "Language: ku_IQ\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -66,11 +52,11 @@ msgstr "" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -182,52 +168,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "ناو" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -312,3 +290,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po index db582696a9..45bfc958c4 100644 --- a/l10n/ku_IQ/settings.po +++ b/l10n/ku_IQ/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n" "MIME-Version: 1.0\n" @@ -262,6 +262,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/lb/core.po b/l10n/lb/core.po index cf61dda08c..5af337c2fa 100644 --- a/l10n/lb/core.po +++ b/l10n/lb/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Deelen" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/lb/files.po b/l10n/lb/files.po index 89400d8476..6e1fda9da7 100644 --- a/l10n/lb/files.po +++ b/l10n/lb/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -67,11 +53,11 @@ msgstr "Et feelt en temporären Dossier" msgid "Failed to write to disk" msgstr "Konnt net op den Disk schreiwen" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Upload ofgebrach." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Numm" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Gréisst" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Geännert" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -313,3 +291,7 @@ msgstr "Fichieren gi gescannt, war weg." #: templates/index.php:111 msgid "Current scanning" msgstr "Momentane Scan" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po index ffe1d795a6..0dbc3f3e7f 100644 --- a/l10n/lb/settings.po +++ b/l10n/lb/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "Gruppen Admin" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po index a6aff9a772..5676435c04 100644 --- a/l10n/lt_LT/core.po +++ b/l10n/lt_LT/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Dalintis" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po index ade78b1789..29ff50d96c 100644 --- a/l10n/lt_LT/files.po +++ b/l10n/lt_LT/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: lt_LT\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -69,11 +55,11 @@ msgstr "Nėra laikinojo katalogo" msgid "Failed to write to disk" msgstr "Nepavyko įrašyti į diską" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "{count} įkeliami failai" msgid "Upload cancelled." msgstr "Įkėlimas atšauktas." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} praskanuoti failai" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "klaida skanuojant" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Pavadinimas" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Dydis" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Pakeista" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 aplankalas" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} aplankalai" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 failas" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} failai" @@ -315,3 +293,7 @@ msgstr "Skenuojami failai, prašome palaukti." #: templates/index.php:111 msgid "Current scanning" msgstr "Šiuo metu skenuojama" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po index 4c4d82e432..23fe35cf9a 100644 --- a/l10n/lt_LT/settings.po +++ b/l10n/lt_LT/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/lv/core.po b/l10n/lv/core.po index 723dfe3b85..1a5b812980 100644 --- a/l10n/lv/core.po +++ b/l10n/lv/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Līdzdalīt" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/lv/files.po b/l10n/lv/files.po index f5fb737c58..8d8b7d8884 100644 --- a/l10n/lv/files.po +++ b/l10n/lv/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -68,11 +54,11 @@ msgstr "Trūkst pagaidu mapes" msgid "Failed to write to disk" msgstr "Nav iespējams saglabāt" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Augšuplāde ir atcelta" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nosaukums" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Izmērs" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Izmainīts" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -314,3 +292,7 @@ msgstr "Faili šobrīd tiek caurskatīti, nedaudz jāpagaida." #: templates/index.php:111 msgid "Current scanning" msgstr "Šobrīd tiek pārbaudīti" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po index afc2514715..addf740206 100644 --- a/l10n/lv/settings.po +++ b/l10n/lv/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "Grupas administrators" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/mk/core.po b/l10n/mk/core.po index a6cc634a95..95679fe31d 100644 --- a/l10n/mk/core.po +++ b/l10n/mk/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "Задолжителната датотека {file} не е инста #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Сподели" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/mk/files.po b/l10n/mk/files.po index 875893ff2a..b4dc2e60d8 100644 --- a/l10n/mk/files.po +++ b/l10n/mk/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ниту еден фајл не се вчита. Непозната грешка" @@ -69,11 +55,11 @@ msgstr "Не постои привремена папка" msgid "Failed to write to disk" msgstr "Неуспеав да запишам на диск" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "{count} датотеки се подигаат" msgid "Upload cancelled." msgstr "Преземањето е прекинато." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Адресата неможе да биде празна." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} датотеки скенирани" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "грешка при скенирање" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Име" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Големина" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Променето" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 папка" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} папки" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 датотека" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} датотеки" @@ -315,3 +293,7 @@ msgstr "Се скенираат датотеки, ве молам почекај #: templates/index.php:111 msgid "Current scanning" msgstr "Моментално скенирам" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po index 8468db8e1a..72c82ec24c 100644 --- a/l10n/mk/settings.po +++ b/l10n/mk/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Администратор на група" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po index 3a62b70434..98f3b0afee 100644 --- a/l10n/ms_MY/core.po +++ b/l10n/ms_MY/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Kongsi" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po index 642cde5a6e..af05e61894 100644 --- a/l10n/ms_MY/files.po +++ b/l10n/ms_MY/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -21,20 +21,6 @@ msgstr "" "Language: ms_MY\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Tiada fail dimuatnaik. Ralat tidak diketahui." @@ -70,11 +56,11 @@ msgstr "Folder sementara hilang" msgid "Failed to write to disk" msgstr "Gagal untuk disimpan" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -186,52 +172,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Muatnaik dibatalkan." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nama " -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Saiz" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Dimodifikasi" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -316,3 +294,7 @@ msgstr "Fail sedang diimbas, harap bersabar." #: templates/index.php:111 msgid "Current scanning" msgstr "Imbasan semasa" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po index 020c1d29f4..40df55766f 100644 --- a/l10n/ms_MY/settings.po +++ b/l10n/ms_MY/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po index cf8ff804cf..6bb4f89191 100644 --- a/l10n/nb_NO/core.po +++ b/l10n/nb_NO/core.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -259,7 +259,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Del" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po index 035398726f..6198f2690c 100644 --- a/l10n/nb_NO/files.po +++ b/l10n/nb_NO/files.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -26,20 +26,6 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ingen filer ble lastet opp. Ukjent feil." @@ -75,11 +61,11 @@ msgstr "Mangler en midlertidig mappe" msgid "Failed to write to disk" msgstr "Klarte ikke å skrive til disk" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -191,52 +177,44 @@ msgstr "{count} filer laster opp" msgid "Upload cancelled." msgstr "Opplasting avbrutt." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL-en kan ikke være tom." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} filer lest inn" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "feil under skanning" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Navn" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Størrelse" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Endret" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mappe" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} mapper" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fil" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} filer" @@ -321,3 +299,7 @@ msgstr "Skanner etter filer, vennligst vent." #: templates/index.php:111 msgid "Current scanning" msgstr "Pågående skanning" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po index 15ea0f7eb6..6544828d8a 100644 --- a/l10n/nb_NO/settings.po +++ b/l10n/nb_NO/settings.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -270,6 +270,14 @@ msgstr "Gruppeadministrator" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/nl/core.po b/l10n/nl/core.po index e331b66a8d..0e4ae9cb8b 100644 --- a/l10n/nl/core.po +++ b/l10n/nl/core.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -266,7 +266,7 @@ msgstr "Het vereiste bestand {file} is niet geïnstalleerd!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Delen" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/nl/files.po b/l10n/nl/files.po index 0fcff7925a..e30647c61a 100644 --- a/l10n/nl/files.po +++ b/l10n/nl/files.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -29,20 +29,6 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Kon %s niet verplaatsen" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Kan bestand niet hernoemen" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Er was geen bestand geladen. Onbekende fout" @@ -78,11 +64,11 @@ msgstr "Een tijdelijke map mist" msgid "Failed to write to disk" msgstr "Schrijven naar schijf mislukt" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Ongeldige directory." @@ -194,52 +180,44 @@ msgstr "{count} bestanden aan het uploaden" msgid "Upload cancelled." msgstr "Uploaden geannuleerd." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL kan niet leeg zijn." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} bestanden gescanned" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "Fout tijdens het scannen" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Naam" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Bestandsgrootte" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Laatst aangepast" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 map" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} mappen" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 bestand" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} bestanden" @@ -324,3 +302,7 @@ msgstr "Bestanden worden gescand, even wachten." #: templates/index.php:111 msgid "Current scanning" msgstr "Er wordt gescand" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po index d3d08ece02..bc6514ffac 100644 --- a/l10n/nl/settings.po +++ b/l10n/nl/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" @@ -273,6 +273,14 @@ msgstr "Groep beheerder" msgid "Storage" msgstr "Opslag" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Default" diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po index 3cd6f2dfa0..28ffec0234 100644 --- a/l10n/nn_NO/files.po +++ b/l10n/nn_NO/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: nn_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -68,11 +54,11 @@ msgstr "Manglar ei mellombels mappe" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Namn" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Storleik" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Endra" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -314,3 +292,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po index cb70f810e6..db09ffd114 100644 --- a/l10n/nn_NO/settings.po +++ b/l10n/nn_NO/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/oc/core.po b/l10n/oc/core.po index 11903a2bbc..8ad819dd9e 100644 --- a/l10n/oc/core.po +++ b/l10n/oc/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Parteja" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/oc/files.po b/l10n/oc/files.po index 7d952dff63..ccb0ea9e29 100644 --- a/l10n/oc/files.po +++ b/l10n/oc/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -67,11 +53,11 @@ msgstr "Un dorsièr temporari manca" msgid "Failed to write to disk" msgstr "L'escriptura sul disc a fracassat" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "" msgid "Upload cancelled." msgstr "Amontcargar anullat." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. " -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "error pendant l'exploracion" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nom" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Talha" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificat" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -313,3 +291,7 @@ msgstr "Los fiichièrs son a èsser explorats, " #: templates/index.php:111 msgid "Current scanning" msgstr "Exploracion en cors" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po index 624ac3293f..593221357c 100644 --- a/l10n/oc/settings.po +++ b/l10n/oc/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "Grop Admin" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/pl/core.po b/l10n/pl/core.po index ba00a2aa5f..70a4880051 100644 --- a/l10n/pl/core.po +++ b/l10n/pl/core.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -262,11 +262,11 @@ msgstr "Żądany plik {file} nie jest zainstalowany!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Udostępnij" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Udostępniono" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/pl/files.po b/l10n/pl/files.po index 273a818baf..8052c7c543 100644 --- a/l10n/pl/files.po +++ b/l10n/pl/files.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -25,20 +25,6 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Nie można było przenieść %s - Plik o takiej nazwie już istnieje" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Nie można było przenieść %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Nie można zmienić nazwy pliku" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Plik nie został załadowany. Nieznany błąd" @@ -74,11 +60,11 @@ msgstr "Brak katalogu tymczasowego" msgid "Failed to write to disk" msgstr "Błąd zapisu na dysk" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Zła ścieżka." @@ -190,52 +176,44 @@ msgstr "{count} przesyłanie plików" msgid "Upload cancelled." msgstr "Wczytywanie anulowane." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL nie może być pusty." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} pliki skanowane" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "Wystąpił błąd podczas skanowania" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nazwa" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Rozmiar" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Czas modyfikacji" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 folder" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} foldery" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 plik" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} pliki" @@ -320,3 +298,7 @@ msgstr "Skanowanie plików, proszę czekać." #: templates/index.php:111 msgid "Current scanning" msgstr "Aktualnie skanowane" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po index 3bca8654b8..6390f9daaf 100644 --- a/l10n/pl/settings.po +++ b/l10n/pl/settings.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" @@ -273,6 +273,14 @@ msgstr "Grupa Admin" msgid "Storage" msgstr "Magazyn" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Domyślny" diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po index 81c77fd71e..a7f0400709 100644 --- a/l10n/pl_PL/files.po +++ b/l10n/pl_PL/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -17,20 +17,6 @@ msgstr "" "Language: pl_PL\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -66,11 +52,11 @@ msgstr "" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -182,52 +168,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -312,3 +290,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po index 3bf2e6878b..29b1d16e59 100644 --- a/l10n/pl_PL/settings.po +++ b/l10n/pl_PL/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" "MIME-Version: 1.0\n" @@ -262,6 +262,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po index 843960355d..d2e12de601 100644 --- a/l10n/pt_BR/core.po +++ b/l10n/pt_BR/core.po @@ -10,6 +10,7 @@ # Guilherme Maluf Balzana , 2012. # , 2012. # , 2012. +# Rodrigo Tavares , 2013. # Thiago Vicente , 2012. # Unforgiving Fallout <>, 2012. # Van Der Fran , 2011, 2012. @@ -17,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:30+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,26 +31,26 @@ msgstr "" #: ajax/share.php:85 #, php-format msgid "User %s shared a file with you" -msgstr "" +msgstr "O usuário %s compartilhou um arquivo com você" #: ajax/share.php:87 #, php-format msgid "User %s shared a folder with you" -msgstr "" +msgstr "O usuário %s compartilhou uma pasta com você" #: ajax/share.php:89 #, php-format msgid "" "User %s shared the file \"%s\" with you. It is available for download here: " "%s" -msgstr "" +msgstr "O usuário %s compartilhou com você o arquivo \"%s\", que está disponível para download em: %s" #: ajax/share.php:91 #, php-format msgid "" "User %s shared the folder \"%s\" with you. It is available for download " "here: %s" -msgstr "" +msgstr "O usuário %s compartilhou com você a pasta \"%s\", que está disponível para download em: %s" #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 msgid "Category type not provided." @@ -262,11 +263,11 @@ msgstr "O arquivo {file} necessário não está instalado!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Compartilhar" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Compartilhados" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" @@ -306,11 +307,11 @@ msgstr "Senha" #: js/share.js:189 msgid "Email link to person" -msgstr "" +msgstr "Enviar link por e-mail" #: js/share.js:190 msgid "Send" -msgstr "" +msgstr "Enviar" #: js/share.js:194 msgid "Set expiration date" @@ -378,22 +379,22 @@ msgstr "Erro ao definir data de expiração" #: js/share.js:598 msgid "Sending ..." -msgstr "" +msgstr "Enviando ..." #: js/share.js:609 msgid "Email sent" -msgstr "" +msgstr "E-mail enviado" #: js/update.js:14 msgid "" "The update was unsuccessful. Please report this issue to the ownCloud " "community." -msgstr "" +msgstr "A atualização falhou. Por favor, relate este problema para a comunidade ownCloud." #: js/update.js:18 msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" +msgstr "A atualização teve êxito. Você será redirecionado ao ownCloud agora." #: lostpassword/controller.php:47 msgid "ownCloud password reset" @@ -591,4 +592,4 @@ msgstr "próximo" #: templates/update.php:3 #, php-format msgid "Updating ownCloud to version %s, this may take a while." -msgstr "" +msgstr "Atualizando ownCloud para a versão %s, isto pode levar algum tempo." diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po index 38713a5ae3..c36b462544 100644 --- a/l10n/pt_BR/files.po +++ b/l10n/pt_BR/files.po @@ -7,6 +7,7 @@ # , 2012. # Guilherme Maluf Balzana , 2012. # , 2012. +# Rodrigo Tavares , 2013. # , 2012. # Thiago Vicente , 2012. # Unforgiving Fallout <>, 2012. @@ -15,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -25,20 +26,6 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nenhum arquivo foi transferido. Erro desconhecido" @@ -74,13 +61,13 @@ msgstr "Pasta temporária não encontrada" msgid "Failed to write to disk" msgstr "Falha ao escrever no disco" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." -msgstr "" +msgstr "Diretório inválido." #: appinfo/app.php:10 msgid "Files" @@ -136,11 +123,11 @@ msgstr "{files} apagados" #: js/files.js:52 msgid "'.' is an invalid file name." -msgstr "" +msgstr "'.' é um nome de arquivo inválido." #: js/files.js:56 msgid "File name cannot be empty." -msgstr "" +msgstr "O nome do arquivo não pode estar vazio." #: js/files.js:64 msgid "" @@ -160,7 +147,7 @@ msgstr "" msgid "" "Your download is being prepared. This might take some time if the files are " "big." -msgstr "" +msgstr "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes." #: js/files.js:256 msgid "Unable to upload your file as it is a directory or has 0 bytes" @@ -190,52 +177,44 @@ msgstr "Enviando {count} arquivos" msgid "Upload cancelled." msgstr "Envio cancelado." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL não pode ficar em branco" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -msgstr "" +msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} arquivos scaneados" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "erro durante verificação" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nome" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamanho" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificado" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 arquivo" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} arquivos" @@ -320,3 +299,7 @@ msgstr "Arquivos sendo escaneados, por favor aguarde." #: templates/index.php:111 msgid "Current scanning" msgstr "Scanning atual" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po index ee24c51910..5c733f9c61 100644 --- a/l10n/pt_BR/files_encryption.po +++ b/l10n/pt_BR/files_encryption.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Rodrigo Tavares , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-23 00:05+0100\n" -"PO-Revision-Date: 2013-01-22 23:05+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:40+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,53 +23,53 @@ msgstr "" msgid "" "Please switch to your ownCloud client and change your encryption password to" " complete the conversion." -msgstr "" +msgstr "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão." #: js/settings-personal.js:17 msgid "switched to client side encryption" -msgstr "" +msgstr "alterado para criptografia por parte do cliente" #: js/settings-personal.js:21 msgid "Change encryption password to login password" -msgstr "" +msgstr "Mudar senha de criptografia para senha de login" #: js/settings-personal.js:25 msgid "Please check your passwords and try again." -msgstr "" +msgstr "Por favor, verifique suas senhas e tente novamente." #: js/settings-personal.js:25 msgid "Could not change your file encryption password to your login password" -msgstr "" +msgstr "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login" #: templates/settings-personal.php:3 templates/settings.php:5 msgid "Choose encryption mode:" -msgstr "" +msgstr "Escolha o modo de criptografia:" #: templates/settings-personal.php:20 templates/settings.php:24 msgid "" "Client side encryption (most secure but makes it impossible to access your " "data from the web interface)" -msgstr "" +msgstr "Criptografia por parte do cliente (mais segura, mas torna impossível acessar seus dados a partir da interface web)" #: templates/settings-personal.php:30 templates/settings.php:36 msgid "" "Server side encryption (allows you to access your files from the web " "interface and the desktop client)" -msgstr "" +msgstr "Criptografia por parte do servidor (permite que você acesse seus arquivos da interface web e do cliente desktop)" #: templates/settings-personal.php:41 templates/settings.php:60 msgid "None (no encryption at all)" -msgstr "" +msgstr "Nenhuma (sem qualquer criptografia)" #: templates/settings.php:10 msgid "" "Important: Once you selected an encryption mode there is no way to change it" " back" -msgstr "" +msgstr "Importante: Uma vez que tiver escolhido um modo de criptografia, não há um meio de voltar atrás" #: templates/settings.php:48 msgid "User specific (let the user decide)" -msgstr "" +msgstr "Específico por usuário (deixa o usuário decidir)" #: templates/settings.php:65 msgid "Encryption" diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po index cb39401817..3c17453294 100644 --- a/l10n/pt_BR/files_external.po +++ b/l10n/pt_BR/files_external.po @@ -4,13 +4,14 @@ # # Translators: # , 2012. +# Rodrigo Tavares , 2013. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-13 00:17+0100\n" -"PO-Revision-Date: 2012-12-11 23:22+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:50+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,11 +27,11 @@ msgstr "Acesso concedido" msgid "Error configuring Dropbox storage" msgstr "Erro ao configurar armazenamento do Dropbox" -#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41 msgid "Grant access" msgstr "Permitir acesso" -#: js/dropbox.js:73 js/google.js:72 +#: js/dropbox.js:73 js/google.js:73 msgid "Fill out all required fields" msgstr "Preencha todos os campos obrigatórios" @@ -38,22 +39,22 @@ msgstr "Preencha todos os campos obrigatórios" msgid "Please provide a valid Dropbox app key and secret." msgstr "Por favor forneça um app key e secret válido do Dropbox" -#: js/google.js:26 js/google.js:73 js/google.js:78 +#: js/google.js:26 js/google.js:74 js/google.js:79 msgid "Error configuring Google Drive storage" msgstr "Erro ao configurar armazenamento do Google Drive" -#: lib/config.php:434 +#: lib/config.php:405 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." -msgstr "" +msgstr "Aviso: \"smbclient\" não está instalado. Não será possível montar compartilhamentos de CIFS/SMB. Por favor, peça ao seu administrador do sistema para instalá-lo." -#: lib/config.php:435 +#: lib/config.php:406 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " "install it." -msgstr "" +msgstr "Aviso: O suporte para FTP do PHP não está ativado ou instalado. Não será possível montar compartilhamentos FTP. Por favor, peça ao seu administrador do sistema para instalá-lo." #: templates/settings.php:3 msgid "External Storage" @@ -100,7 +101,7 @@ msgid "Users" msgstr "Usuários" #: templates/settings.php:108 templates/settings.php:109 -#: templates/settings.php:149 templates/settings.php:150 +#: templates/settings.php:144 templates/settings.php:145 msgid "Delete" msgstr "Remover" @@ -112,10 +113,10 @@ msgstr "Habilitar Armazenamento Externo do Usuário" msgid "Allow users to mount their own external storage" msgstr "Permitir usuários a montar seus próprios armazenamentos externos" -#: templates/settings.php:139 +#: templates/settings.php:136 msgid "SSL root certificates" msgstr "Certificados SSL raíz" -#: templates/settings.php:158 +#: templates/settings.php:153 msgid "Import Root Certificate" msgstr "Importar Certificado Raíz" diff --git a/l10n/pt_BR/files_versions.po b/l10n/pt_BR/files_versions.po index 63442db0ef..d6cf483ba3 100644 --- a/l10n/pt_BR/files_versions.po +++ b/l10n/pt_BR/files_versions.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:50+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po index f1a550574b..d20d57c814 100644 --- a/l10n/pt_BR/lib.po +++ b/l10n/pt_BR/lib.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-17 00:26+0100\n" -"PO-Revision-Date: 2013-01-16 23:26+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 15:50+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -44,23 +44,23 @@ msgstr "Aplicações" msgid "Admin" msgstr "Admin" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "Download ZIP está desligado." -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "Arquivos precisam ser baixados um de cada vez." -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "Voltar para Arquivos" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "Arquivos selecionados são muito grandes para gerar arquivo zip." -#: helper.php:228 +#: helper.php:226 msgid "couldn't be determined" msgstr "" diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po index 06a011df78..49d4158b40 100644 --- a/l10n/pt_BR/settings.po +++ b/l10n/pt_BR/settings.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -29,7 +29,7 @@ msgstr "" #: ajax/apps/ocs.php:20 msgid "Unable to load list from App Store" -msgstr "Não foi possivel carregar lista da App Store" +msgstr "Não foi possível carregar lista da App Store" #: ajax/creategroup.php:10 msgid "Group already exists" @@ -37,35 +37,35 @@ msgstr "Grupo já existe" #: ajax/creategroup.php:19 msgid "Unable to add group" -msgstr "Não foi possivel adicionar grupo" +msgstr "Não foi possível adicionar grupo" #: ajax/enableapp.php:11 msgid "Could not enable app. " -msgstr "Não pôde habilitar aplicação" +msgstr "Não foi possível habilitar aplicativo." #: ajax/lostpassword.php:12 msgid "Email saved" -msgstr "Email gravado" +msgstr "E-mail guardado" #: ajax/lostpassword.php:14 msgid "Invalid email" -msgstr "Email inválido" +msgstr "E-mail inválido" #: ajax/removegroup.php:13 msgid "Unable to delete group" -msgstr "Não foi possivel remover grupo" +msgstr "Não foi possível remover grupo" #: ajax/removeuser.php:15 ajax/setquota.php:15 ajax/togglegroups.php:18 msgid "Authentication error" -msgstr "erro de autenticação" +msgstr "Erro de autenticação" #: ajax/removeuser.php:24 msgid "Unable to delete user" -msgstr "Não foi possivel remover usuário" +msgstr "Não foi possível remover usuário" #: ajax/setlanguage.php:15 msgid "Language changed" -msgstr "Mudou Idioma" +msgstr "Idioma alterado" #: ajax/setlanguage.php:17 ajax/setlanguage.php:20 msgid "Invalid request" @@ -78,28 +78,28 @@ msgstr "Admins não podem se remover do grupo admin" #: ajax/togglegroups.php:28 #, php-format msgid "Unable to add user to group %s" -msgstr "Não foi possivel adicionar usuário ao grupo %s" +msgstr "Não foi possível adicionar usuário ao grupo %s" #: ajax/togglegroups.php:34 #, php-format msgid "Unable to remove user from group %s" -msgstr "Não foi possivel remover usuário ao grupo %s" +msgstr "Não foi possível remover usuário do grupo %s" #: js/apps.js:28 js/apps.js:67 msgid "Disable" -msgstr "Desabilitado" +msgstr "Desabilitar" #: js/apps.js:28 js/apps.js:55 msgid "Enable" -msgstr "Habilitado" +msgstr "Habilitar" #: js/personal.js:69 msgid "Saving..." -msgstr "Gravando..." +msgstr "Guardando..." #: personal.php:34 personal.php:35 msgid "__language_name__" -msgstr "Português do Brasil" +msgstr "Português (Brasil)" #: templates/apps.php:10 msgid "Add your App" @@ -111,7 +111,7 @@ msgstr "Mais Apps" #: templates/apps.php:24 msgid "Select an App" -msgstr "Selecione uma Aplicação" +msgstr "Selecione um Aplicativo" #: templates/apps.php:28 msgid "See application page at apps.owncloud.com" @@ -123,19 +123,19 @@ msgstr "-licenciado por , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 16:22+0000\n" +"Last-Translator: rodrigost23 \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,15 +21,15 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "Autenticação WebDAV" #: templates/settings.php:4 msgid "URL: http://" -msgstr "" +msgstr "URL: http://" #: templates/settings.php:6 msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "" +msgstr "O ownCloud enviará as credenciais do usuário para esta URL. Este plugin verifica a resposta e interpreta o os códigos de status do HTTP 401 e 403 como credenciais inválidas, e todas as outras respostas como credenciais válidas." diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po index afaa00874d..e5f09b7f56 100644 --- a/l10n/pt_PT/core.po +++ b/l10n/pt_PT/core.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 13:50+0000\n" +"Last-Translator: Duarte Velez Grilo \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -260,11 +260,11 @@ msgstr "O ficheiro necessário {file} não está instalado!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Partilhar" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Partilhado" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po index 38429e8ec2..ac9f18e9cb 100644 --- a/l10n/pt_PT/files.po +++ b/l10n/pt_PT/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-29 00:04+0100\n" -"PO-Revision-Date: 2013-01-28 17:06+0000\n" -"Last-Translator: Duarte Velez Grilo \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,20 +24,6 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Não foi possível move o ficheiro %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Não foi possível renomear o ficheiro" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nenhum ficheiro foi carregado. Erro desconhecido" @@ -73,11 +59,11 @@ msgstr "Falta uma pasta temporária" msgid "Failed to write to disk" msgstr "Falhou a escrita no disco" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Não há espaço suficiente em disco" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Directório Inválido" @@ -189,52 +175,44 @@ msgstr "A carregar {count} ficheiros" msgid "Upload cancelled." msgstr "Envio cancelado." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "O URL não pode estar vazio." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} ficheiros analisados" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "erro ao analisar" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nome" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Tamanho" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificado" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 pasta" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} pastas" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ficheiro" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} ficheiros" @@ -319,3 +297,7 @@ msgstr "Os ficheiros estão a ser analisados, por favor aguarde." #: templates/index.php:111 msgid "Current scanning" msgstr "Análise actual" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po index a2de9c1e4c..055deff15c 100644 --- a/l10n/pt_PT/settings.po +++ b/l10n/pt_PT/settings.po @@ -4,6 +4,7 @@ # # Translators: # , 2012. +# , 2013. # Duarte Velez Grilo , 2012-2013. # , 2012. # Helder Meneses , 2012. @@ -12,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n" "MIME-Version: 1.0\n" @@ -233,7 +234,7 @@ msgstr "Desenvolvido pela \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -258,7 +258,7 @@ msgstr "Fișierul obligatoriu {file} nu este instalat!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Partajează" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ro/files.po b/l10n/ro/files.po index e5a64577eb..e75ae16fdc 100644 --- a/l10n/ro/files.po +++ b/l10n/ro/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -23,20 +23,6 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Nu se poate de mutat %s - Fișier cu acest nume deja există" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Nu s-a putut muta %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Nu s-a putut redenumi fișierul" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nici un fișier nu a fost încărcat. Eroare necunoscută" @@ -72,11 +58,11 @@ msgstr "Lipsește un dosar temporar" msgid "Failed to write to disk" msgstr "Eroare la scriere pe disc" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Director invalid." @@ -188,52 +174,44 @@ msgstr "{count} fisiere incarcate" msgid "Upload cancelled." msgstr "Încărcare anulată." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Adresa URL nu poate fi goală." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Invalid folder name. Usage of 'Shared' is reserved by Ownclou" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} fisiere scanate" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "eroare la scanarea" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Nume" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Dimensiune" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Modificat" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 folder" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} foldare" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fisier" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} fisiere" @@ -318,3 +296,7 @@ msgstr "Fișierele sunt scanate, te rog așteptă." #: templates/index.php:111 msgid "Current scanning" msgstr "În curs de scanare" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po index 9773ea8fce..e69c97841f 100644 --- a/l10n/ro/settings.po +++ b/l10n/ro/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n" "MIME-Version: 1.0\n" @@ -269,6 +269,14 @@ msgstr "Grupul Admin " msgid "Storage" msgstr "Stocare" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Implicită" diff --git a/l10n/ru/core.po b/l10n/ru/core.po index bcc0d34627..497f496cfe 100644 --- a/l10n/ru/core.po +++ b/l10n/ru/core.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -262,7 +262,7 @@ msgstr "Необходимый файл {file} не установлен!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Открыть доступ" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ru/files.po b/l10n/ru/files.po index 0c617eada2..f14a42f81b 100644 --- a/l10n/ru/files.po +++ b/l10n/ru/files.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -28,20 +28,6 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Невозможно переместить %s - файл с таким именем уже существует" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Невозможно переместить %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Невозможно переименовать файл" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Файл не был загружен. Неизвестная ошибка" @@ -77,11 +63,11 @@ msgstr "Невозможно найти временную папку" msgid "Failed to write to disk" msgstr "Ошибка записи на диск" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Неправильный каталог." @@ -193,52 +179,44 @@ msgstr "{count} файлов загружается" msgid "Upload cancelled." msgstr "Загрузка отменена." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Ссылка не может быть пустой." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Неправильное имя каталога. Имя 'Shared' зарезервировано." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} файлов просканировано" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "ошибка во время санирования" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Название" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Размер" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Изменён" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 папка" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} папок" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 файл" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} файлов" @@ -323,3 +301,7 @@ msgstr "Подождите, файлы сканируются." #: templates/index.php:111 msgid "Current scanning" msgstr "Текущее сканирование" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po index 23d54be85f..9ae6bc4fa9 100644 --- a/l10n/ru/settings.po +++ b/l10n/ru/settings.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n" "MIME-Version: 1.0\n" @@ -274,6 +274,14 @@ msgstr "Группа Администраторы" msgid "Storage" msgstr "Хранилище" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "По-умолчанию" diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po index ad1e6dddba..ad3125e6d9 100644 --- a/l10n/ru_RU/core.po +++ b/l10n/ru_RU/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -254,11 +254,11 @@ msgstr "Требуемый файл {файл} не установлен!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Сделать общим" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Опубликовано" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po index 00422df23b..f91c30ed74 100644 --- a/l10n/ru_RU/files.po +++ b/l10n/ru_RU/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: ru_RU\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Файл не был загружен. Неизвестная ошибка" @@ -68,11 +54,11 @@ msgstr "Отсутствует временная папка" msgid "Failed to write to disk" msgstr "Не удалось записать на диск" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "{количество} загружено файлов" msgid "Upload cancelled." msgstr "Загрузка отменена" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL не должен быть пустым." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{количество} файлов отсканировано" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "ошибка при сканировании" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Имя" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Размер" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Изменен" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 папка" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{количество} папок" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 файл" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{количество} файлов" @@ -314,3 +292,7 @@ msgstr "Файлы сканируются, пожалуйста, подожди #: templates/index.php:111 msgid "Current scanning" msgstr "Текущее сканирование" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po index 8722c9ae95..9660ab8456 100644 --- a/l10n/ru_RU/settings.po +++ b/l10n/ru_RU/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "Группа Admin" msgid "Storage" msgstr "Хранилище" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "По умолчанию" diff --git a/l10n/ru_RU/user_webdavauth.po b/l10n/ru_RU/user_webdavauth.po index a14bb9d28e..48ae554ac0 100644 --- a/l10n/ru_RU/user_webdavauth.po +++ b/l10n/ru_RU/user_webdavauth.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# , 2013. # , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-15 00:03+0100\n" -"PO-Revision-Date: 2013-01-14 23:04+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 10:01+0000\n" +"Last-Translator: AnnaSch \n" "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,7 @@ msgstr "" #: templates/settings.php:3 msgid "WebDAV Authentication" -msgstr "" +msgstr "WebDAV аутентификация" #: templates/settings.php:4 msgid "URL: http://" diff --git a/l10n/si_LK/core.po b/l10n/si_LK/core.po index 0d0fd472df..082545b7a7 100644 --- a/l10n/si_LK/core.po +++ b/l10n/si_LK/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "බෙදා හදා ගන්න" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po index 6f61a4f5cd..ca38591aa1 100644 --- a/l10n/si_LK/files.po +++ b/l10n/si_LK/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: si_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "ගොනුවක් උඩුගත නොවුනි. නොහැඳිනු දෝෂයක්" @@ -68,11 +54,11 @@ msgstr "තාවකාලික ෆොල්ඩරයක් සොයාගත msgid "Failed to write to disk" msgstr "තැටිගත කිරීම අසාර්ථකයි" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "" msgid "Upload cancelled." msgstr "උඩුගත කිරීම අත් හරින්න ලදී" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "යොමුව හිස් විය නොහැක" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "පරීක්ෂා කිරීමේදී දෝෂයක්" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "නම" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "ප්‍රමාණය" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "වෙනස් කළ" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 ෆොල්ඩරයක්" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ගොනුවක්" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -314,3 +292,7 @@ msgstr "ගොනු පරික්ෂා කෙරේ. මඳක් රැඳ #: templates/index.php:111 msgid "Current scanning" msgstr "වර්තමාන පරික්ෂාව" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po index f5d3776192..3baa171814 100644 --- a/l10n/si_LK/settings.po +++ b/l10n/si_LK/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "කාණ්ඩ පරිපාලක" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po index de52d7a52d..530ce81b43 100644 --- a/l10n/sk_SK/core.po +++ b/l10n/sk_SK/core.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -258,11 +258,11 @@ msgstr "Požadovaný súbor {file} nie je inštalovaný!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Zdieľaj" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Zdieľané" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po index 083a241ac4..9b4c68104a 100644 --- a/l10n/sk_SK/files.po +++ b/l10n/sk_SK/files.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -22,20 +22,6 @@ msgstr "" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Nie je možné presunúť %s - súbor s týmto menom už existuje" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Nie je možné presunúť %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Nemožno premenovať súbor" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Žiaden súbor nebol odoslaný. Neznáma chyba" @@ -71,11 +57,11 @@ msgstr "Chýbajúci dočasný priečinok" msgid "Failed to write to disk" msgstr "Zápis na disk sa nepodaril" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Neplatný adresár" @@ -147,11 +133,11 @@ msgstr "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú #: js/files.js:78 msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" +msgstr "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!" #: js/files.js:82 msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" +msgstr "Vaše úložisko je takmer plné ({usedSpacePercent}%)" #: js/files.js:219 msgid "" @@ -187,52 +173,44 @@ msgstr "{count} súborov odosielaných" msgid "Upload cancelled." msgstr "Odosielanie zrušené" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL nemôže byť prázdne" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} súborov prehľadaných" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "chyba počas kontroly" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Meno" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Veľkosť" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Upravené" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 priečinok" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} priečinkov" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 súbor" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} súborov" @@ -317,3 +295,7 @@ msgstr "Čakajte, súbory sú prehľadávané." #: templates/index.php:111 msgid "Current scanning" msgstr "Práve prehliadané" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po index 7a081bb7aa..56de6320ff 100644 --- a/l10n/sk_SK/files_external.po +++ b/l10n/sk_SK/files_external.po @@ -4,14 +4,15 @@ # # Translators: # , 2012. +# Marián Hvolka , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2012-12-13 00:17+0100\n" -"PO-Revision-Date: 2012-12-11 23:22+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 06:20+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,11 +28,11 @@ msgstr "Prístup povolený" msgid "Error configuring Dropbox storage" msgstr "Chyba pri konfigurácii úložiska Dropbox" -#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41 msgid "Grant access" msgstr "Povoliť prístup" -#: js/dropbox.js:73 js/google.js:72 +#: js/dropbox.js:73 js/google.js:73 msgid "Fill out all required fields" msgstr "Vyplňte všetky vyžadované kolónky" @@ -39,22 +40,22 @@ msgstr "Vyplňte všetky vyžadované kolónky" msgid "Please provide a valid Dropbox app key and secret." msgstr "Zadajte platný kľúč aplikácie a heslo Dropbox" -#: js/google.js:26 js/google.js:73 js/google.js:78 +#: js/google.js:26 js/google.js:74 js/google.js:79 msgid "Error configuring Google Drive storage" msgstr "Chyba pri konfigurácii úložiska Google drive" -#: lib/config.php:434 +#: lib/config.php:405 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." -msgstr "" +msgstr "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje." -#: lib/config.php:435 +#: lib/config.php:406 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting" " of FTP shares is not possible. Please ask your system administrator to " "install it." -msgstr "" +msgstr "Upozornenie: Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje." #: templates/settings.php:3 msgid "External Storage" @@ -101,7 +102,7 @@ msgid "Users" msgstr "Užívatelia" #: templates/settings.php:108 templates/settings.php:109 -#: templates/settings.php:149 templates/settings.php:150 +#: templates/settings.php:144 templates/settings.php:145 msgid "Delete" msgstr "Odstrániť" @@ -113,10 +114,10 @@ msgstr "Povoliť externé úložisko" msgid "Allow users to mount their own external storage" msgstr "Povoliť užívateľom pripojiť ich vlastné externé úložisko" -#: templates/settings.php:139 +#: templates/settings.php:136 msgid "SSL root certificates" msgstr "Koreňové SSL certifikáty" -#: templates/settings.php:158 +#: templates/settings.php:153 msgid "Import Root Certificate" msgstr "Importovať koreňový certifikát" diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index 74bc6b025b..f5d4cc18d7 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -234,7 +234,7 @@ msgstr "Vyvinuté komu #: templates/users.php:21 templates/users.php:79 msgid "Login Name" -msgstr "" +msgstr "Prihlasovacie meno" #: templates/users.php:26 templates/users.php:82 templates/users.php:107 msgid "Groups" @@ -258,7 +258,7 @@ msgstr "Iné" #: templates/users.php:80 msgid "Display Name" -msgstr "" +msgstr "Zobrazované meno" #: templates/users.php:84 templates/users.php:121 msgid "Group Admin" @@ -268,6 +268,14 @@ msgstr "Správca skupiny" msgid "Storage" msgstr "Úložisko" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Predvolené" diff --git a/l10n/sk_SK/user_ldap.po b/l10n/sk_SK/user_ldap.po index 497fea635a..e3c65fc426 100644 --- a/l10n/sk_SK/user_ldap.po +++ b/l10n/sk_SK/user_ldap.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Marián Hvolka , 2013. # Roman Priesol , 2012. msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-16 00:19+0100\n" -"PO-Revision-Date: 2013-01-15 23:20+0000\n" -"Last-Translator: I Robot \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 06:20+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,13 +24,13 @@ msgid "" "Warning: Apps user_ldap and user_webdavauth are incompatible. You may" " experience unexpected behaviour. Please ask your system administrator to " "disable one of them." -msgstr "" +msgstr "Upozornenie: Aplikácie user_ldap a user_webdavauth nie sú kompatibilné. Môže nastávať neočakávané správanie. Požiadajte správcu systému aby jednu z nich zakázal." #: templates/settings.php:11 msgid "" "Warning: The PHP LDAP module is not installed, the backend will not " "work. Please ask your system administrator to install it." -msgstr "" +msgstr "Upozornenie: nie je nainštalovaný LDAP modul pre PHP, backend vrstva nebude fungovať. Požádejte správcu systému aby ho nainštaloval." #: templates/settings.php:15 msgid "Host" @@ -46,7 +47,7 @@ msgstr "Základné DN" #: templates/settings.php:16 msgid "One Base DN per line" -msgstr "" +msgstr "Jedno základné DN na riadok" #: templates/settings.php:16 msgid "You can specify Base DN for users and groups in the Advanced tab" @@ -121,7 +122,7 @@ msgstr "Základný používateľský strom" #: templates/settings.php:25 msgid "One User Base DN per line" -msgstr "" +msgstr "Jedna používateľská základná DN na riadok" #: templates/settings.php:26 msgid "Base Group Tree" @@ -129,7 +130,7 @@ msgstr "Základný skupinový strom" #: templates/settings.php:26 msgid "One Group Base DN per line" -msgstr "" +msgstr "Jedna skupinová základná DN na riadok" #: templates/settings.php:27 msgid "Group-Member association" diff --git a/l10n/sk_SK/user_webdavauth.po b/l10n/sk_SK/user_webdavauth.po index 4e77a87a39..b3a30b89ca 100644 --- a/l10n/sk_SK/user_webdavauth.po +++ b/l10n/sk_SK/user_webdavauth.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 16:01+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 08:31+0000\n" "Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -32,4 +32,4 @@ msgid "" "ownCloud will send the user credentials to this URL. This plugin checks the " "response and will interpret the HTTP statuscodes 401 and 403 as invalid " "credentials, and all other responses as valid credentials." -msgstr "ownCloud odošle používateľské údajena zadanú URL. Plugin skontroluje odpoveď a považuje návratovou hodnotu HTTP 401 a 403 za neplatné údaje a všetky ostatné hodnoty ako platné prihlasovacie údaje." +msgstr "ownCloud odošle používateľské údaje na zadanú URL. Plugin skontroluje odpoveď a považuje návratovú hodnotu HTTP 401 a 403 za neplatné údaje a všetky ostatné hodnoty ako platné prihlasovacie údaje." diff --git a/l10n/sl/core.po b/l10n/sl/core.po index e489f98a6c..ea692e06ee 100644 --- a/l10n/sl/core.po +++ b/l10n/sl/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "Zahtevana datoteka {file} ni nameščena!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Souporaba" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/sl/files.po b/l10n/sl/files.po index 2302abc537..0aadeafed2 100644 --- a/l10n/sl/files.po +++ b/l10n/sl/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -21,20 +21,6 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Nobena datoteka ni naložena. Neznana napaka." @@ -70,11 +56,11 @@ msgstr "Manjka začasna mapa" msgid "Failed to write to disk" msgstr "Pisanje na disk je spodletelo" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -186,52 +172,44 @@ msgstr "nalagam {count} datotek" msgid "Upload cancelled." msgstr "Pošiljanje je preklicano." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "Naslov URL ne sme biti prazen." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} files scanned" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "napaka med pregledovanjem datotek" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Ime" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Velikost" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Spremenjeno" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mapa" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} map" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 datoteka" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} datotek" @@ -316,3 +294,7 @@ msgstr "Poteka preučevanje datotek, počakajte ..." #: templates/index.php:111 msgid "Current scanning" msgstr "Trenutno poteka preučevanje" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po index 225f4e3a20..c9d12a2351 100644 --- a/l10n/sl/settings.po +++ b/l10n/sl/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "Skrbnik skupine" msgid "Storage" msgstr "Shramba" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Privzeto" diff --git a/l10n/sr/core.po b/l10n/sr/core.po index 80d0ec2de4..da0a165ac2 100644 --- a/l10n/sr/core.po +++ b/l10n/sr/core.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -255,7 +255,7 @@ msgstr "Потребна датотека {file} није инсталирана #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Дељење" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/sr/files.po b/l10n/sr/files.po index 06cef3e322..1548c06289 100644 --- a/l10n/sr/files.po +++ b/l10n/sr/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -69,11 +55,11 @@ msgstr "Недостаје привремена фасцикла" msgid "Failed to write to disk" msgstr "Не могу да пишем на диск" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "Отпремам {count} датотеке/а" msgid "Upload cancelled." msgstr "Отпремање је прекинуто." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "Скенирано датотека: {count}" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "грешка при скенирању" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Назив" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Величина" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Измењено" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 фасцикла" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} фасцикле/и" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 датотека" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} датотеке/а" @@ -315,3 +293,7 @@ msgstr "Скенирам датотеке…" #: templates/index.php:111 msgid "Current scanning" msgstr "Тренутно скенирање" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po index 2d04a03138..02c0627b45 100644 --- a/l10n/sr/settings.po +++ b/l10n/sr/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "Управник групе" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po index baa7894556..9ff8bb26b8 100644 --- a/l10n/sr@latin/files.po +++ b/l10n/sr@latin/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -67,11 +53,11 @@ msgstr "Nedostaje privremena fascikla" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Ime" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Veličina" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Zadnja izmena" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -313,3 +291,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po index e22f8796d2..da806c71a9 100644 --- a/l10n/sr@latin/settings.po +++ b/l10n/sr@latin/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/sv/core.po b/l10n/sv/core.po index 0df2d492ca..dd6eace5cc 100644 --- a/l10n/sv/core.po +++ b/l10n/sv/core.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -259,11 +259,11 @@ msgstr "Den nödvändiga filen {file} är inte installerad!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Dela" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "Delad" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/sv/files.po b/l10n/sv/files.po index 8ad64f646e..6193e2e4af 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 09:25+0000\n" -"Last-Translator: Lokal_Profil \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,20 +24,6 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "Kunde inte flytta %s - Det finns redan en fil med detta namn" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "Kan inte flytta %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Kan inte byta namn på filen" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Ingen fil uppladdad. Okänt fel" @@ -73,11 +59,11 @@ msgstr "Saknar en tillfällig mapp" msgid "Failed to write to disk" msgstr "Misslyckades spara till disk" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "Inte tillräckligt med lagringsutrymme tillgängligt" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Felaktig mapp." @@ -189,52 +175,44 @@ msgstr "{count} filer laddas upp" msgid "Upload cancelled." msgstr "Uppladdning avbruten." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL kan inte vara tom." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} filer skannade" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "fel vid skanning" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Namn" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Storlek" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Ändrad" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 mapp" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} mappar" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 fil" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} filer" @@ -319,3 +297,7 @@ msgstr "Filer skannas, var god vänta" #: templates/index.php:111 msgid "Current scanning" msgstr "Aktuell skanning" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index 3b39b6e231..f8d3cb191d 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# André , 2013. # Christer Eriksson , 2012. # Daniel Sandman , 2012. # , 2011. @@ -15,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" @@ -236,7 +237,7 @@ msgstr "Utvecklad av o #: templates/users.php:21 templates/users.php:79 msgid "Login Name" -msgstr "" +msgstr "Inloggningsnamn" #: templates/users.php:26 templates/users.php:82 templates/users.php:107 msgid "Groups" @@ -260,7 +261,7 @@ msgstr "Annat" #: templates/users.php:80 msgid "Display Name" -msgstr "" +msgstr "Visat namn" #: templates/users.php:84 templates/users.php:121 msgid "Group Admin" @@ -270,6 +271,14 @@ msgstr "Gruppadministratör" msgid "Storage" msgstr "Lagring" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "Förvald" diff --git a/l10n/ta_LK/core.po b/l10n/ta_LK/core.po index ec703bdcd4..ae45ba61f4 100644 --- a/l10n/ta_LK/core.po +++ b/l10n/ta_LK/core.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -253,7 +253,7 @@ msgstr "தேவைப்பட்ட கோப்பு {கோப்பு} #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "பகிர்வு" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po index 9f5d785083..1da508bc1a 100644 --- a/l10n/ta_LK/files.po +++ b/l10n/ta_LK/files.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -18,20 +18,6 @@ msgstr "" "Language: ta_LK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "ஒரு கோப்பும் பதிவேற்றப்படவில்லை. அறியப்படாத வழு" @@ -67,11 +53,11 @@ msgstr "ஒரு தற்காலிகமான கோப்புறைய msgid "Failed to write to disk" msgstr "வட்டில் எழுத முடியவில்லை" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -183,52 +169,44 @@ msgstr "{எண்ணிக்கை} கோப்புகள் பதிவ msgid "Upload cancelled." msgstr "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL வெறுமையாக இருக்கமுடியாது." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{எண்ணிக்கை} கோப்புகள் வருடப்பட்டது" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "வருடும் போதான வழு" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "பெயர்" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "அளவு" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "மாற்றப்பட்டது" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 கோப்புறை" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{எண்ணிக்கை} கோப்புறைகள்" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 கோப்பு" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{எண்ணிக்கை} கோப்புகள்" @@ -313,3 +291,7 @@ msgstr "கோப்புகள் வருடப்படுகின்ற #: templates/index.php:111 msgid "Current scanning" msgstr "தற்போது வருடப்படுபவை" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po index 9853ea2645..2aaf155445 100644 --- a/l10n/ta_LK/settings.po +++ b/l10n/ta_LK/settings.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n" "MIME-Version: 1.0\n" @@ -263,6 +263,14 @@ msgstr "குழு நிர்வாகி" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 459384f62c..d6b1cde875 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 385f79bc97..2eee327bd1 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,20 +17,6 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -66,11 +52,11 @@ msgstr "" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -182,52 +168,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -312,3 +290,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index ce76225fda..212a10d2f1 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index a46c86e0b6..bf7231438f 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -25,11 +25,11 @@ msgstr "" msgid "Error configuring Dropbox storage" msgstr "" -#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:40 +#: js/dropbox.js:34 js/dropbox.js:45 js/google.js:31 js/google.js:41 msgid "Grant access" msgstr "" -#: js/dropbox.js:73 js/google.js:72 +#: js/dropbox.js:73 js/google.js:73 msgid "Fill out all required fields" msgstr "" @@ -37,17 +37,17 @@ msgstr "" msgid "Please provide a valid Dropbox app key and secret." msgstr "" -#: js/google.js:26 js/google.js:73 js/google.js:78 +#: js/google.js:26 js/google.js:74 js/google.js:79 msgid "Error configuring Google Drive storage" msgstr "" -#: lib/config.php:434 +#: lib/config.php:405 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "" -#: lib/config.php:435 +#: lib/config.php:406 msgid "" "Warning: The FTP support in PHP is not enabled or installed. Mounting " "of FTP shares is not possible. Please ask your system administrator to " diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index fa7fe27829..6aff7da3cb 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 5af79d543f..9f2014b394 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 01f7eb678c..5fc7047312 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,23 +41,23 @@ msgstr "" msgid "Admin" msgstr "" -#: files.php:365 +#: files.php:202 msgid "ZIP download is turned off." msgstr "" -#: files.php:366 +#: files.php:203 msgid "Files need to be downloaded one by one." msgstr "" -#: files.php:366 files.php:391 +#: files.php:203 files.php:228 msgid "Back to Files" msgstr "" -#: files.php:390 +#: files.php:227 msgid "Selected files too large to generate zip file." msgstr "" -#: helper.php:229 +#: helper.php:226 msgid "couldn't be determined" msgstr "" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index c07b99aab7..8cea75c2ec 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -262,6 +262,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index 002852e202..1fe3cbd560 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 4687e50a63..d6d2617293 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po index e218f60d9a..4da07c4afb 100644 --- a/l10n/th_TH/core.po +++ b/l10n/th_TH/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "ไฟล์ {file} ซึ่งเป็นไฟล์ที่จำ #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "แชร์" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po index 3bde97a7e0..5ad5720bc3 100644 --- a/l10n/th_TH/files.po +++ b/l10n/th_TH/files.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 17:20+0000\n" -"Last-Translator: AriesAnywhere Anywhere \n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" +"Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,20 +19,6 @@ msgstr "" "Language: th_TH\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "ไม่สามารถย้าย %s ได้" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "ไม่สามารถเปลี่ยนชื่อไฟล์ได้" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ" @@ -68,11 +54,11 @@ msgstr "แฟ้มเอกสารชั่วคราวเกิดกา msgid "Failed to write to disk" msgstr "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว" -#: ajax/upload.php:48 -msgid "Not enough storage available" -msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน" +#: ajax/upload.php:51 +msgid "Not enough space available" +msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "ไดเร็กทอรี่ไม่ถูกต้อง" @@ -184,52 +170,44 @@ msgstr "กำลังอัพโหลด {count} ไฟล์" msgid "Upload cancelled." msgstr "การอัพโหลดถูกยกเลิก" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL ไม่สามารถเว้นว่างได้" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "ชื่อโฟลเดอร์ไม่ถูกต้อง การใช้งาน 'แชร์' สงวนไว้สำหรับ Owncloud เท่านั้น" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "สแกนไฟล์แล้ว {count} ไฟล์" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "พบข้อผิดพลาดในระหว่างการสแกนไฟล์" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "ชื่อ" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "ขนาด" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "ปรับปรุงล่าสุด" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 โฟลเดอร์" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} โฟลเดอร์" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 ไฟล์" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} ไฟล์" @@ -314,3 +292,7 @@ msgstr "ไฟล์กำลังอยู่ระหว่างการส #: templates/index.php:111 msgid "Current scanning" msgstr "ไฟล์ที่กำลังสแกนอยู่ขณะนี้" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po index 238a91cd1d..13466b5fa0 100644 --- a/l10n/th_TH/settings.po +++ b/l10n/th_TH/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "ผู้ดูแลกลุ่ม" msgid "Storage" msgstr "พื้นที่จัดเก็บข้อมูล" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "ค่าเริ่มต้น" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 1f3b9f92bc..04e9beae3d 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -257,7 +257,7 @@ msgstr "İhtiyaç duyulan {file} dosyası kurulu değil." #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Paylaş" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index c6e1b108a7..118c91724c 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -23,20 +23,6 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "%s taşınamadı. Bu isimde dosya zaten var." - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "%s taşınamadı" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "Dosya adı değiştirilemedi" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Dosya yüklenmedi. Bilinmeyen hata" @@ -72,11 +58,11 @@ msgstr "Geçici bir klasör eksik" msgid "Failed to write to disk" msgstr "Diske yazılamadı" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "Geçersiz dizin." @@ -188,52 +174,44 @@ msgstr "{count} dosya yükleniyor" msgid "Upload cancelled." msgstr "Yükleme iptal edildi." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL boş olamaz." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir." -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} dosya tarandı" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "tararamada hata oluşdu" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Ad" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Boyut" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Değiştirilme" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 dizin" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} dizin" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 dosya" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} dosya" @@ -318,3 +296,7 @@ msgstr "Dosyalar taranıyor, lütfen bekleyin." #: templates/index.php:111 msgid "Current scanning" msgstr "Güncel tarama" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po index 0fb46fd329..6712f5fe47 100644 --- a/l10n/tr/settings.po +++ b/l10n/tr/settings.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -266,6 +266,14 @@ msgstr "Yönetici Grubu " msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/uk/core.po b/l10n/uk/core.po index 55b74a2fc0..5574b3859a 100644 --- a/l10n/uk/core.po +++ b/l10n/uk/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -257,7 +257,7 @@ msgstr "Необхідний файл {file} не встановлено!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Поділитися" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/uk/files.po b/l10n/uk/files.po index ac7166cb82..65eb2a8b8a 100644 --- a/l10n/uk/files.po +++ b/l10n/uk/files.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -20,20 +20,6 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Не завантажено жодного файлу. Невідома помилка" @@ -69,11 +55,11 @@ msgstr "Відсутній тимчасовий каталог" msgid "Failed to write to disk" msgstr "Невдалося записати на диск" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -185,52 +171,44 @@ msgstr "{count} файлів завантажується" msgid "Upload cancelled." msgstr "Завантаження перервано." -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL не може бути пустим." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} файлів проскановано" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "помилка при скануванні" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Ім'я" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Розмір" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Змінено" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 папка" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} папок" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 файл" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} файлів" @@ -315,3 +293,7 @@ msgstr "Файли скануються, зачекайте, будь-ласка #: templates/index.php:111 msgid "Current scanning" msgstr "Поточне сканування" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po index ff129914fe..561d4be190 100644 --- a/l10n/uk/settings.po +++ b/l10n/uk/settings.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n" "MIME-Version: 1.0\n" @@ -265,6 +265,14 @@ msgstr "Адміністратор групи" msgid "Storage" msgstr "Сховище" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "За замовчуванням" diff --git a/l10n/vi/core.po b/l10n/vi/core.po index 7f3635025e..ecabca5e69 100644 --- a/l10n/vi/core.po +++ b/l10n/vi/core.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -257,7 +257,7 @@ msgstr "Tập tin cần thiết {file} không được cài đặt!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "Chia sẻ" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/vi/files.po b/l10n/vi/files.po index 4250cfece6..6b5902bb63 100644 --- a/l10n/vi/files.po +++ b/l10n/vi/files.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -21,20 +21,6 @@ msgstr "" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "Không có tập tin nào được tải lên. Lỗi không xác định" @@ -70,11 +56,11 @@ msgstr "Không tìm thấy thư mục tạm" msgid "Failed to write to disk" msgstr "Không thể ghi " -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -186,52 +172,44 @@ msgstr "{count} tập tin đang tải lên" msgid "Upload cancelled." msgstr "Hủy tải lên" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này." -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL không được để trống." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} tập tin đã được quét" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "lỗi trong khi quét" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "Tên" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "Kích cỡ" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "Thay đổi" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 thư mục" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} thư mục" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 tập tin" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} tập tin" @@ -316,3 +294,7 @@ msgstr "Tập tin đang được quét ,vui lòng chờ." #: templates/index.php:111 msgid "Current scanning" msgstr "Hiện tại đang quét" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po index 3cb4e519b6..bac645946c 100644 --- a/l10n/vi/settings.po +++ b/l10n/vi/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n" "MIME-Version: 1.0\n" @@ -268,6 +268,14 @@ msgstr "Nhóm quản trị" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po index 54ee264a5a..dbfa5828be 100644 --- a/l10n/zh_CN.GB2312/core.po +++ b/l10n/zh_CN.GB2312/core.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -254,7 +254,7 @@ msgstr "" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "分享" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po index 4ae0f2a922..04c75d2f0c 100644 --- a/l10n/zh_CN.GB2312/files.po +++ b/l10n/zh_CN.GB2312/files.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -19,20 +19,6 @@ msgstr "" "Language: zh_CN.GB2312\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "没有上传文件。未知错误" @@ -68,11 +54,11 @@ msgstr "丢失了一个临时文件夹" msgid "Failed to write to disk" msgstr "写磁盘失败" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -184,52 +170,44 @@ msgstr "{count} 个文件正在上传" msgid "Upload cancelled." msgstr "上传取消了" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "文件正在上传。关闭页面会取消上传。" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "网址不能为空。" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} 个文件已扫描" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "扫描出错" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "名字" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "大小" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "修改日期" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 个文件夹" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 个文件" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} 个文件" @@ -314,3 +292,7 @@ msgstr "正在扫描文件,请稍候." #: templates/index.php:111 msgid "Current scanning" msgstr "正在扫描" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po index deb922c37f..17e86539b7 100644 --- a/l10n/zh_CN.GB2312/settings.po +++ b/l10n/zh_CN.GB2312/settings.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n" "MIME-Version: 1.0\n" @@ -264,6 +264,14 @@ msgstr "群组管理员" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po index f7c192f722..58bc32e1e4 100644 --- a/l10n/zh_CN/core.po +++ b/l10n/zh_CN/core.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -258,11 +258,11 @@ msgstr "所需文件{file}未安装!" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "共享" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" -msgstr "" +msgstr "已共享" #: js/share.js:141 js/share.js:611 msgid "Error while sharing" diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po index ac41681ce4..5f9a49f752 100644 --- a/l10n/zh_CN/files.po +++ b/l10n/zh_CN/files.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -24,20 +24,6 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "无法移动 %s - 同名文件已存在" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "无法移动 %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "无法重命名文件" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "没有文件被上传。未知错误" @@ -73,11 +59,11 @@ msgstr "缺少临时目录" msgid "Failed to write to disk" msgstr "写入磁盘失败" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "无效文件夹。" @@ -189,52 +175,44 @@ msgstr "{count} 个文件上传中" msgid "Upload cancelled." msgstr "上传已取消" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "文件正在上传中。现在离开此页会导致上传动作被取消。" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL不能为空" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "无效文件夹名。'共享' 是 Owncloud 预留的文件夹名。" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} 个文件已扫描。" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "扫描时出错" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "名称" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "大小" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "修改日期" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1个文件夹" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} 个文件夹" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 个文件" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} 个文件" @@ -319,3 +297,7 @@ msgstr "文件正在被扫描,请稍候。" #: templates/index.php:111 msgid "Current scanning" msgstr "当前扫描" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po index 53b7fa6a2c..a7d5f860ad 100644 --- a/l10n/zh_CN/settings.po +++ b/l10n/zh_CN/settings.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -268,6 +268,14 @@ msgstr "组管理员" msgid "Storage" msgstr "存储" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "默认" diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po index d8fe0228bc..152d04b392 100644 --- a/l10n/zh_HK/files.po +++ b/l10n/zh_HK/files.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -17,20 +17,6 @@ msgstr "" "Language: zh_HK\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "" @@ -66,11 +52,11 @@ msgstr "" msgid "Failed to write to disk" msgstr "" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "" @@ -182,52 +168,44 @@ msgstr "" msgid "Upload cancelled." msgstr "" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "" -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "" @@ -312,3 +290,7 @@ msgstr "" #: templates/index.php:111 msgid "Current scanning" msgstr "" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po index bbba342f38..9523f29e80 100644 --- a/l10n/zh_HK/settings.po +++ b/l10n/zh_HK/settings.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n" "MIME-Version: 1.0\n" @@ -262,6 +262,14 @@ msgstr "" msgid "Storage" msgstr "" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "" diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po index ee734ce272..ff36663374 100644 --- a/l10n/zh_TW/core.po +++ b/l10n/zh_TW/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:23+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 12:46+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -256,7 +256,7 @@ msgstr "沒有安裝所需的檔案 {file} !" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Share" -msgstr "" +msgstr "分享" #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93 msgid "Shared" diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po index a1e826aabd..8e3bf55ca6 100644 --- a/l10n/zh_TW/files.po +++ b/l10n/zh_TW/files.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-27 00:04+0100\n" -"PO-Revision-Date: 2013-01-26 23:05+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -23,20 +23,6 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "無法移動 %s - 同名的檔案已經存在" - -#: ajax/move.php:24 -#, php-format -msgid "Could not move %s" -msgstr "無法移動 %s" - -#: ajax/rename.php:19 -msgid "Unable to rename file" -msgstr "無法重新命名檔案" - #: ajax/upload.php:17 msgid "No file was uploaded. Unknown error" msgstr "沒有檔案被上傳。未知的錯誤。" @@ -72,11 +58,11 @@ msgstr "遺失暫存資料夾" msgid "Failed to write to disk" msgstr "寫入硬碟失敗" -#: ajax/upload.php:48 -msgid "Not enough storage available" +#: ajax/upload.php:51 +msgid "Not enough space available" msgstr "" -#: ajax/upload.php:77 +#: ajax/upload.php:82 msgid "Invalid directory." msgstr "無效的資料夾。" @@ -188,52 +174,44 @@ msgstr "{count} 個檔案正在上傳" msgid "Upload cancelled." msgstr "上傳取消" -#: js/files.js:493 +#: js/files.js:497 msgid "" "File upload is in progress. Leaving the page now will cancel the upload." msgstr "檔案上傳中。離開此頁面將會取消上傳。" -#: js/files.js:566 +#: js/files.js:570 msgid "URL cannot be empty." msgstr "URL 不能為空白." -#: js/files.js:571 +#: js/files.js:575 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" msgstr "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留" -#: js/files.js:784 -msgid "{count} files scanned" -msgstr "{count} 個檔案已掃描" - -#: js/files.js:792 -msgid "error while scanning" -msgstr "掃描時發生錯誤" - -#: js/files.js:866 templates/index.php:63 +#: js/files.js:944 templates/index.php:63 msgid "Name" msgstr "名稱" -#: js/files.js:867 templates/index.php:74 +#: js/files.js:945 templates/index.php:74 msgid "Size" msgstr "大小" -#: js/files.js:868 templates/index.php:76 +#: js/files.js:946 templates/index.php:76 msgid "Modified" msgstr "修改" -#: js/files.js:887 +#: js/files.js:965 msgid "1 folder" msgstr "1 個資料夾" -#: js/files.js:889 +#: js/files.js:967 msgid "{count} folders" msgstr "{count} 個資料夾" -#: js/files.js:897 +#: js/files.js:975 msgid "1 file" msgstr "1 個檔案" -#: js/files.js:899 +#: js/files.js:977 msgid "{count} files" msgstr "{count} 個檔案" @@ -318,3 +296,7 @@ msgstr "正在掃描檔案,請稍等。" #: templates/index.php:111 msgid "Current scanning" msgstr "目前掃描" + +#: templates/upgrade.php:2 +msgid "Upgrading filesystem cache..." +msgstr "" diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po index e657008a0c..0b6948fb19 100644 --- a/l10n/zh_TW/settings.po +++ b/l10n/zh_TW/settings.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-01-30 00:23+0100\n" -"PO-Revision-Date: 2013-01-29 23:24+0000\n" +"POT-Creation-Date: 2013-01-31 00:27+0100\n" +"PO-Revision-Date: 2013-01-30 23:28+0000\n" "Last-Translator: I Robot \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -269,6 +269,14 @@ msgstr "群組 管理員" msgid "Storage" msgstr "儲存區" +#: templates/users.php:97 +msgid "change display name" +msgstr "" + +#: templates/users.php:101 +msgid "set new password" +msgstr "" + #: templates/users.php:137 msgid "Default" msgstr "預設" diff --git a/lib/app.php b/lib/app.php index 108226fc1a..73bee11a69 100644 --- a/lib/app.php +++ b/lib/app.php @@ -803,16 +803,16 @@ class OC_App{ /** * @param string $appid - * @return OC_FilesystemView + * @return \OC\Files\View */ public static function getStorage($appid) { if(OC_App::isEnabled($appid)) {//sanity check if(OC_User::isLoggedIn()) { - $view = new OC_FilesystemView('/'.OC_User::getUser()); + $view = new \OC\Files\View('/'.OC_User::getUser()); if(!$view->file_exists($appid)) { $view->mkdir($appid); } - return new OC_FilesystemView('/'.OC_User::getUser().'/'.$appid); + return new \OC\Files\View('/'.OC_User::getUser().'/'.$appid); }else{ OC_Log::write('core', 'Can\'t get app storage, app '.$appid.', user not logged in', OC_Log::ERROR); return false; diff --git a/lib/archive/tar.php b/lib/archive/tar.php index 0fa633c603..117d88e5f4 100644 --- a/lib/archive/tar.php +++ b/lib/archive/tar.php @@ -308,7 +308,7 @@ class OC_Archive_TAR extends OC_Archive{ if($mode=='r' or $mode=='rb') { return fopen($tmpFile, $mode); }else{ - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); self::$tempFiles[$tmpFile]=$path; return fopen('close://'.$tmpFile, $mode); } diff --git a/lib/archive/zip.php b/lib/archive/zip.php index 1c967baa08..8e31795ded 100644 --- a/lib/archive/zip.php +++ b/lib/archive/zip.php @@ -171,7 +171,7 @@ class OC_Archive_ZIP extends OC_Archive{ $ext=''; } $tmpFile=OCP\Files::tmpFile($ext); - OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this, 'writeBack'); + \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if($this->fileExists($path)) { $this->extractFile($path, $tmpFile); } diff --git a/lib/base.php b/lib/base.php index f9818d3514..ea5c939cd8 100644 --- a/lib/base.php +++ b/lib/base.php @@ -112,6 +112,8 @@ class OC $path = str_replace('\\', '/', $className) . '.php'; } elseif (strpos($className, 'Test_') === 0) { $path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php'); + } elseif (strpos($className, 'Test\\') === 0) { + $path = 'tests/lib/' . strtolower(str_replace('\\', '/', substr($className, 5)) . '.php'); } else { return false; } @@ -420,10 +422,10 @@ class OC } // register the stream wrappers - require_once 'streamwrappers.php'; - stream_wrapper_register("fakedir", "OC_FakeDirStream"); - stream_wrapper_register('static', 'OC_StaticStreamWrapper'); - stream_wrapper_register('close', 'OC_CloseStreamWrapper'); + stream_wrapper_register('fakedir', 'OC\Files\Stream\Dir'); + stream_wrapper_register('static', 'OC\Files\Stream\StaticStream'); + stream_wrapper_register('close', 'OC\Files\Stream\Close'); + stream_wrapper_register('oc', 'OC\Files\Stream\OC'); self::checkConfig(); self::checkInstalled(); @@ -502,7 +504,7 @@ class OC // write error into log if locale can't be set if (OC_Util::issetlocaleworking() == false) { - OC_Log::write('core', 'setting locate to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR); + OC_Log::write('core', 'setting locale to en_US.UTF-8 failed. Support is probably not installed on your system', OC_Log::ERROR); } if (OC_Config::getValue('installed', false)) { if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { diff --git a/lib/cache/file.php b/lib/cache/file.php index 27d8b19f36..f9ecf41dca 100644 --- a/lib/cache/file.php +++ b/lib/cache/file.php @@ -15,11 +15,11 @@ class OC_Cache_File{ } if(OC_User::isLoggedIn()) { $subdir = 'cache'; - $view = new OC_FilesystemView('/'.OC_User::getUser()); + $view = new \OC\Files\View('/'.OC_User::getUser()); if(!$view->file_exists($subdir)) { $view->mkdir($subdir); } - $this->storage = new OC_FilesystemView('/'.OC_User::getUser().'/'.$subdir); + $this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir); return $this->storage; }else{ OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR); diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index 6076aed6fc..a720157936 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -62,7 +62,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa } } else { $newPath = $this->path . '/' . $name; - OC_Filesystem::file_put_contents($newPath, $data); + \OC\Files\Filesystem::file_put_contents($newPath, $data); return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath); } @@ -78,7 +78,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa public function createDirectory($name) { $newPath = $this->path . '/' . $name; - OC_Filesystem::mkdir($newPath); + \OC\Files\Filesystem::mkdir($newPath); } @@ -93,7 +93,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa $path = $this->path . '/' . $name; if (is_null($info)) { - $info = OC_Files::getFileInfo($path); + $info = \OC\Files\Filesystem::getFileInfo($path); } if (!$info) { @@ -116,12 +116,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * @return Sabre_DAV_INode[] */ public function getChildren() { - $folder_content = OC_Files::getDirectoryContent($this->path); + + $folder_content = \OC\Files\Filesystem::getDirectoryContent($this->path); $paths = array(); foreach($folder_content as $info) { $paths[] = $this->path.'/'.$info['name']; + $properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = $info['etag']; } - $properties = array_fill_keys($paths, array()); if(count($paths)>0) { // // the number of arguments within IN conditions are limited in most databases @@ -160,7 +161,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa public function childExists($name) { $path = $this->path . '/' . $name; - return OC_Filesystem::file_exists($path); + return \OC\Files\Filesystem::file_exists($path); } @@ -173,7 +174,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa if ($this->path != "/Shared") { foreach($this->getChildren() as $child) $child->delete(); - OC_Filesystem::rmdir($this->path); + \OC\Files\Filesystem::rmdir($this->path); } } @@ -184,10 +185,10 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * @return array */ public function getQuotaInfo() { - $rootInfo=OC_FileCache_Cached::get(''); + $rootInfo=\OC\Files\Filesystem::getFileInfo(''); return array( $rootInfo['size'], - OC_Filesystem::free_space() + \OC\Files\Filesystem::free_space() ); } diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 8d963a1cf8..1c18a39174 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -45,7 +45,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D */ public function put($data) { - OC_Filesystem::file_put_contents($this->path, $data); + \OC\Files\Filesystem::file_put_contents($this->path,$data); return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); } @@ -57,7 +57,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D */ public function get() { - return OC_Filesystem::fopen($this->path, 'rb'); + return \OC\Files\Filesystem::fopen($this->path,'rb'); } @@ -68,7 +68,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D */ public function delete() { - OC_Filesystem::unlink($this->path); + \OC\Files\Filesystem::unlink($this->path); } @@ -98,16 +98,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D if (isset($properties[self::GETETAG_PROPERTYNAME])) { return $properties[self::GETETAG_PROPERTYNAME]; } - return $this->getETagPropertyForPath($this->path); - } - - /** - * Creates a ETag for this path. - * @param string $path Path of the file - * @return string|null Returns null if the ETag can not effectively be determined - */ - static protected function createETag($path) { - return OC_Filesystem::hash('md5', $path); + return null; } /** @@ -122,7 +113,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D return $this->fileinfo_cache['mimetype']; } - return OC_Filesystem::getMimeType($this->path); + return \OC\Files\Filesystem::getMimeType($this->path); } } diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php index 026ec9f7ec..b48d3b41f2 100644 --- a/lib/connector/sabre/node.php +++ b/lib/connector/sabre/node.php @@ -84,12 +84,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr $newPath = $parentPath . '/' . $newName; $oldPath = $this->path; - OC_Filesystem::rename($this->path, $newPath); + \OC\Files\Filesystem::rename($this->path,$newPath); $this->path = $newPath; $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' ); - $query->execute( array( $newPath, OC_User::getUser(), $oldPath )); + $query->execute( array( $newPath,OC_User::getUser(), $oldPath )); } @@ -104,9 +104,9 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr */ protected function getFileinfoCache() { if (!isset($this->fileinfo_cache)) { - if ($fileinfo_cache = OC_FileCache::get($this->path)) { + if ($fileinfo_cache = \OC\Files\Filesystem::getFileInfo($this->path)) { } else { - $fileinfo_cache = OC_Filesystem::stat($this->path); + $fileinfo_cache = \OC\Files\Filesystem::stat($this->path); } $this->fileinfo_cache = $fileinfo_cache; @@ -134,7 +134,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr * Even if the modification time is set to a custom value the access time is set to now. */ public function touch($mtime) { - OC_Filesystem::touch($this->path, $mtime); + \OC\Files\Filesystem::touch($this->path, $mtime); } /** @@ -159,10 +159,10 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr } else { if(!array_key_exists( $propertyName, $existing )) { $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' ); - $query->execute( array( OC_User::getUser(), $this->path, $propertyName, $propertyValue )); + $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue )); } else { $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' ); - $query->execute( array( $propertyValue, OC_User::getUser(), $this->path, $propertyName )); + $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName )); } } } @@ -190,6 +190,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr while( $row = $result->fetchRow()) { $this->property_cache[$row['propertyname']] = $row['propertyvalue']; } + $this->property_cache[self::GETETAG_PROPERTYNAME] = $this->getETagPropertyForPath($this->path); } // if the array was empty, we need to return everything @@ -205,57 +206,16 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr } /** - * @brief Creates a ETag for this path. - * @param string $path Path of the file - * @return string|null Returns null if the ETag can not effectively be determined - */ - static protected function createETag($path) { - if(self::$ETagFunction) { - $hash = call_user_func(self::$ETagFunction, $path); - return $hash; - }else{ - return uniqid('', true); - } - } - - /** - * @brief Returns the ETag surrounded by double-quotes for this path. + * Returns the ETag surrounded by double-quotes for this path. * @param string $path Path of the file * @return string|null Returns null if the ETag can not effectively be determined */ static public function getETagPropertyForPath($path) { - $tag = self::createETag($path); - if (empty($tag)) { - return null; + $data = \OC\Files\Filesystem::getFileInfo($path); + if (isset($data['etag'])) { + return '"'.$data['etag'].'"'; } - $etag = '"'.$tag.'"'; - $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' ); - $query->execute( array( OC_User::getUser(), $path, self::GETETAG_PROPERTYNAME, $etag )); - return $etag; + return null; } - /** - * @brief Remove the ETag from the cache. - * @param string $path Path of the file - */ - static public function removeETagPropertyForPath($path) { - // remove tags from this and parent paths - $paths = array(); - while ($path != '/' && $path != '.' && $path != '' && $path != '\\') { - $paths[] = $path; - $path = dirname($path); - } - if (empty($paths)) { - return; - } - $paths[] = $path; - $path_placeholders = join(',', array_fill(0, count($paths), '?')); - $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`' - .' WHERE `userid` = ?' - .' AND `propertyname` = ?' - .' AND `propertypath` IN ('.$path_placeholders.')' - ); - $vals = array( OC_User::getUser(), self::GETETAG_PROPERTYNAME ); - $query->execute(array_merge( $vals, $paths )); - } } diff --git a/lib/connector/sabre/quotaplugin.php b/lib/connector/sabre/quotaplugin.php index fbbb4a3cf6..ce9a968eb3 100644 --- a/lib/connector/sabre/quotaplugin.php +++ b/lib/connector/sabre/quotaplugin.php @@ -50,7 +50,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { $uri='/'.$uri; } list($parentUri, $newName) = Sabre_DAV_URLUtil::splitPath($uri); - if ($length > OC_Filesystem::free_space($parentUri)) { + if ($length > \OC\Files\Filesystem::free_space($parentUri)) { throw new Sabre_DAV_Exception_InsufficientStorage(); } } diff --git a/lib/filecache.php b/lib/filecache.php deleted file mode 100644 index 7764890ef1..0000000000 --- a/lib/filecache.php +++ /dev/null @@ -1,539 +0,0 @@ -. -* -*/ - -/** - * provide caching for filesystem info in the database - * - * not used by OC_Filesystem for reading filesystem info, - * instead apps should use OC_FileCache::get where possible - * - * It will try to keep the data up to date but changes from outside - * ownCloud can invalidate the cache - * - * Methods that take $path and $root params expect $path to be relative, like - * /admin/files/file.txt, if $root is false - * - */ -class OC_FileCache{ - - /** - * get the filesystem info from the cache - * @param string path - * @param string root (optional) - * @return array - * - * returns an associative array with the following keys: - * - size - * - mtime - * - ctime - * - mimetype - * - encrypted - * - versioned - */ - public static function get($path, $root=false) { - if(OC_FileCache_Update::hasUpdated($path, $root)) { - if($root===false) {//filesystem hooks are only valid for the default root - OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path)); - }else{ - OC_FileCache_Update::update($path, $root); - } - } - return OC_FileCache_Cached::get($path, $root); - } - - /** - * put filesystem info in the cache - * @param string $path - * @param array data - * @param string root (optional) - * @note $data is an associative array in the same format as returned - * by get - */ - public static function put($path, $data, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $fullpath=OC_Filesystem::normalizePath($root.'/'.$path); - $parent=self::getParentId($fullpath); - $id=self::getId($fullpath, ''); - if(isset(OC_FileCache_Cached::$savedData[$fullpath])) { - $data=array_merge(OC_FileCache_Cached::$savedData[$fullpath], $data); - unset(OC_FileCache_Cached::$savedData[$fullpath]); - } - if($id!=-1) { - self::update($id, $data); - return; - } - - // add parent directory to the file cache if it does not exist yet. - if ($parent == -1 && $fullpath != $root) { - $parentDir = dirname($path); - self::scanFile($parentDir); - $parent = self::getParentId($fullpath); - } - - if(!isset($data['size']) or !isset($data['mtime'])) {//save incomplete data for the next time we write it - OC_FileCache_Cached::$savedData[$fullpath]=$data; - return; - } - if(!isset($data['encrypted'])) { - $data['encrypted']=false; - } - if(!isset($data['versioned'])) { - $data['versioned']=false; - } - $mimePart=dirname($data['mimetype']); - $data['size']=(int)$data['size']; - $data['ctime']=(int)$data['mtime']; - $data['writable']=(int)$data['writable']; - $data['encrypted']=(int)$data['encrypted']; - $data['versioned']=(int)$data['versioned']; - $user=OC_User::getUser(); - $query=OC_DB::prepare('INSERT INTO `*PREFIX*fscache`(`parent`, `name`, `path`, `path_hash`, `size`, `mtime`, `ctime`, `mimetype`, `mimepart`,`user`,`writable`,`encrypted`,`versioned`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)'); - $result=$query->execute(array($parent, basename($fullpath), $fullpath, md5($fullpath), $data['size'], $data['mtime'], $data['ctime'], $data['mimetype'], $mimePart, $user, $data['writable'], $data['encrypted'], $data['versioned'])); - if(OC_DB::isError($result)) { - OC_Log::write('files', 'error while writing file('.$fullpath.') to cache', OC_Log::ERROR); - } - - if($cache=OC_Cache::getUserCache(true)) { - $cache->remove('fileid/'.$fullpath);//ensure we don't have -1 cached - } - } - - /** - * update filesystem info of a file - * @param int $id - * @param array $data - */ - private static function update($id, $data) { - $arguments=array(); - $queryParts=array(); - foreach(array('size','mtime','ctime','mimetype','encrypted','versioned', 'writable') as $attribute) { - if(isset($data[$attribute])) { - //Convert to int it args are false - if($data[$attribute] === false) { - $arguments[] = 0; - }else{ - $arguments[] = $data[$attribute]; - } - $queryParts[]='`'.$attribute.'`=?'; - } - } - if(isset($data['mimetype'])) { - $arguments[]=dirname($data['mimetype']); - $queryParts[]='`mimepart`=?'; - } - $arguments[]=$id; - - if(!empty($queryParts)) { - $sql = 'UPDATE `*PREFIX*fscache` SET '.implode(' , ', $queryParts).' WHERE `id`=?'; - $query=OC_DB::prepare($sql); - $result=$query->execute($arguments); - if(OC_DB::isError($result)) { - OC_Log::write('files', 'error while updating file('.$id.') in cache', OC_Log::ERROR); - } - } - } - - /** - * register a file move in the cache - * @param string oldPath - * @param string newPath - * @param string root (optional) - */ - public static function move($oldPath, $newPath, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - // If replacing an existing file, delete the file - if (self::inCache($newPath, $root)) { - self::delete($newPath, $root); - } - $oldPath=$root.$oldPath; - $newPath=$root.$newPath; - $newParent=self::getParentId($newPath); - $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `parent`=? ,`name`=?, `path`=?, `path_hash`=? WHERE `path_hash`=?'); - $query->execute(array($newParent, basename($newPath), $newPath, md5($newPath), md5($oldPath))); - - if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$oldPath)) { - $cache->set('fileid/'.$newPath, $cache->get('fileid/'.$oldPath)); - $cache->remove('fileid/'.$oldPath); - } - - $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `path` LIKE ?'); - $oldLength=strlen($oldPath); - $updateQuery=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `path`=?, `path_hash`=? WHERE `path_hash`=?'); - while($row= $query->execute(array($oldPath.'/%'))->fetchRow()) { - $old=$row['path']; - $new=$newPath.substr($old, $oldLength); - $updateQuery->execute(array($new, md5($new), md5($old))); - - if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$old)) { - $cache->set('fileid/'.$new, $cache->get('fileid/'.$old)); - $cache->remove('fileid/'.$old); - } - } - } - - /** - * delete info from the cache - * @param string path - * @param string root (optional) - */ - public static function delete($path, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path_hash`=?'); - $query->execute(array(md5($root.$path))); - - //delete everything inside the folder - $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path` LIKE ?'); - $query->execute(array($root.$path.'/%')); - - OC_Cache::remove('fileid/'.$root.$path); - } - - /** - * return array of filenames matching the querty - * @param string $query - * @param boolean $returnData - * @param string root (optional) - * @return array of filepaths - */ - public static function search($search, $returnData=false, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $rootLen=strlen($root); - if(!$returnData) { - $select = '`path`'; - }else{ - $select = '*'; - } - if (OC_Config::getValue('dbtype') === 'oci8') { - $where = 'LOWER(`name`) LIKE LOWER(?) AND `user`=?'; - } else { - $where = '`name` LIKE ? AND `user`=?'; - } - $query=OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*fscache` WHERE '.$where); - $result=$query->execute(array("%$search%", OC_User::getUser())); - $names=array(); - while($row=$result->fetchRow()) { - if(!$returnData) { - $names[]=substr($row['path'], $rootLen); - }else{ - $row['path']=substr($row['path'], $rootLen); - $names[]=$row; - } - } - return $names; - } - - /** - * get all files and folders in a folder - * @param string path - * @param string root (optional) - * @return array - * - * returns an array of assiciative arrays with the following keys: - * - name - * - size - * - mtime - * - ctime - * - mimetype - * - encrypted - * - versioned - */ - public static function getFolderContent($path, $root=false, $mimetype_filter='') { - if(OC_FileCache_Update::hasUpdated($path, $root, true)) { - OC_FileCache_Update::updateFolder($path, $root); - } - return OC_FileCache_Cached::getFolderContent($path, $root, $mimetype_filter); - } - - /** - * check if a file or folder is in the cache - * @param string $path - * @param string root (optional) - * @return bool - */ - public static function inCache($path, $root=false) { - return self::getId($path, $root)!=-1; - } - - /** - * get the file id as used in the cache - * @param string path - * @param string root (optional) - * @return int - */ - public static function getId($path, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - - $fullPath=$root.$path; - if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$fullPath)) { - return $cache->get('fileid/'.$fullPath); - } - - $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?'); - $result=$query->execute(array(md5($fullPath))); - if(OC_DB::isError($result)) { - OC_Log::write('files', 'error while getting file id of '.$path, OC_Log::ERROR); - return -1; - } - - $result=$result->fetchRow(); - if(is_array($result)) { - $id=$result['id']; - }else{ - $id=-1; - } - if($cache=OC_Cache::getUserCache(true)) { - $cache->set('fileid/'.$fullPath, $id); - } - - return $id; - } - - /** - * get the file path from the id, relative to the home folder of the user - * @param int id - * @param string user (optional) - * @return string - */ - public static function getPath($id, $user='') { - if(!$user) { - $user=OC_User::getUser(); - } - $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `id`=? AND `user`=?'); - $result=$query->execute(array($id, $user)); - $row=$result->fetchRow(); - $path=$row['path']; - $root='/'.$user.'/files'; - if(substr($path, 0, strlen($root))!=$root) { - return false; - } - return substr($path, strlen($root)); - } - - /** - * get the file id of the parent folder, taking into account '/' has no parent - * @param string $path - * @return int - */ - private static function getParentId($path) { - if($path=='/') { - return -1; - }else{ - return self::getId(dirname($path), ''); - } - } - - /** - * adjust the size of the parent folders - * @param string $path - * @param int $sizeDiff - * @param string root (optinal) - */ - public static function increaseSize($path, $sizeDiff, $root=false) { - if($sizeDiff==0) return; - $item = OC_FileCache_Cached::get($path); - //stop walking up the filetree if we hit a non-folder or reached the root folder - if($path == '/' || $path=='' || $item['mimetype'] !== 'httpd/unix-directory') { - return; - } - $id = $item['id']; - while($id!=-1) {//walk up the filetree increasing the size of all parent folders - $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `size`=`size`+? WHERE `id`=?'); - $query->execute(array($sizeDiff, $id)); - $path=dirname($path); - if($path == '' or $path =='/') { - return; - } - $parent = OC_FileCache_Cached::get($path); - $id = $parent['id']; - //stop walking up the filetree if we hit a non-folder - if($parent['mimetype'] !== 'httpd/unix-directory') { - return; - } - } - } - - /** - * recursively scan the filesystem and fill the cache - * @param string $path - * @param OC_EventSource $eventSource (optional) - * @param int $count (optional) - * @param string $root (optional) - */ - public static function scan($path, $eventSource=false,&$count=0, $root=false) { - if($eventSource) { - $eventSource->send('scanning', array('file'=>$path, 'count'=>$count)); - } - $lastSend=$count; - // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache) - if (substr($path, 0, 7) == '/Shared') { - return; - } - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - self::scanFile($path, $root); - $dh=$view->opendir($path.'/'); - $totalSize=0; - if($dh) { - while (($filename = readdir($dh)) !== false) { - if($filename != '.' and $filename != '..') { - $file=$path.'/'.$filename; - if($view->is_dir($file.'/')) { - self::scan($file, $eventSource, $count, $root); - }else{ - $totalSize+=self::scanFile($file, $root); - $count++; - if($count>$lastSend+25 and $eventSource) { - $lastSend=$count; - $eventSource->send('scanning', array('file'=>$path, 'count'=>$count)); - } - } - } - } - } - - OC_FileCache_Update::cleanFolder($path, $root); - self::increaseSize($path, $totalSize, $root); - } - - /** - * scan a single file - * @param string path - * @param string root (optional) - * @return int size of the scanned file - */ - public static function scanFile($path, $root=false) { - // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache) - if (substr($path, 0, 7) == '/Shared') { - return; - } - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - if(!$view->is_readable($path)) return; //cant read, nothing we can do - clearstatcache(); - $mimetype=$view->getMimeType($path); - $stat=$view->stat($path); - if($mimetype=='httpd/unix-directory') { - $stat['size'] = 0; - $writable=$view->is_writable($path.'/'); - }else{ - $writable=$view->is_writable($path); - } - $stat['mimetype']=$mimetype; - $stat['writable']=$writable; - if($path=='/') { - $path=''; - } - self::put($path, $stat, $root); - return $stat['size']; - } - - /** - * find files by mimetype - * @param string $part1 - * @param string $part2 (optional) - * @param string root (optional) - * @return array of file paths - * - * $part1 and $part2 together form the complete mimetype. - * e.g. searchByMime('text', 'plain') - * - * seccond mimetype part can be ommited - * e.g. searchByMime('audio') - */ - public static function searchByMime($part1, $part2=null, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $rootLen=strlen($root); - $root .= '%'; - $user=OC_User::getUser(); - if(!$part2) { - $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimepart`=? AND `user`=? AND `path` LIKE ?'); - $result=$query->execute(array($part1, $user, $root)); - }else{ - $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `mimetype`=? AND `user`=? AND `path` LIKE ? '); - $result=$query->execute(array($part1.'/'.$part2, $user, $root)); - } - $names=array(); - while($row=$result->fetchRow()) { - $names[]=substr($row['path'], $rootLen); - } - return $names; - } - - /** - * clean old pre-path_hash entries - */ - public static function clean() { - $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE LENGTH(`path_hash`)<30'); - $query->execute(); - } - - /** - * clear filecache entries - * @param string user (optonal) - */ - public static function clear($user='') { - if($user) { - $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `user`=?'); - $query->execute(array($user)); - }else{ - $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache`'); - $query->execute(); - } - } - - /** - * trigger an update for the cache by setting the mtimes to 0 - * @param string $user (optional) - */ - public static function triggerUpdate($user='') { - if($user) { - $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 WHERE `user`=? AND `mimetype`= ? '); - $query->execute(array($user,'httpd/unix-directory')); - }else{ - $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `mtime`=0 AND `mimetype`= ? '); - $query->execute(array('httpd/unix-directory')); - } - } -} - -//watch for changes and try to keep the cache up to date -OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_FileCache_Update', 'fileSystemWatcherWrite'); -OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_FileCache_Update', 'fileSystemWatcherDelete'); -OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_FileCache_Update', 'fileSystemWatcherRename'); -OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_FileCache_Update', 'deleteFromUser'); diff --git a/lib/filecache/cached.php b/lib/filecache/cached.php deleted file mode 100644 index 5e0a00746b..0000000000 --- a/lib/filecache/cached.php +++ /dev/null @@ -1,81 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - - -/** - * get data from the filecache without checking for updates - */ -class OC_FileCache_Cached{ - public static $savedData=array(); - - public static function get($path, $root=false) { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $path=$root.$path; - $stmt=OC_DB::prepare('SELECT `id`, `path`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `path_hash`=?'); - if ( ! OC_DB::isError($stmt) ) { - $result=$stmt->execute(array(md5($path))); - if ( ! OC_DB::isError($result) ) { - $result = $result->fetchRow(); - } else { - OC:Log::write('OC_FileCache_Cached', 'could not execute get: '. OC_DB::getErrorMessage($result), OC_Log::ERROR); - $result = false; - } - } else { - OC_Log::write('OC_FileCache_Cached', 'could not prepare get: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR); - $result = false; - } - if(is_array($result)) { - if(isset(self::$savedData[$path])) { - $result=array_merge($result, self::$savedData[$path]); - } - return $result; - }else{ - if(isset(self::$savedData[$path])) { - return self::$savedData[$path]; - }else{ - return array(); - } - } - } - - /** - * get all files and folders in a folder - * @param string path - * @param string root (optional) - * @return array - * - * returns an array of assiciative arrays with the following keys: - * - path - * - name - * - size - * - mtime - * - ctime - * - mimetype - * - encrypted - * - versioned - */ - public static function getFolderContent($path, $root=false, $mimetype_filter='') { - if($root===false) { - $root=OC_Filesystem::getRoot(); - } - $parent=OC_FileCache::getId($path, $root); - if($parent==-1) { - return array(); - } - $query=OC_DB::prepare('SELECT `id`,`path`,`name`,`ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `parent`=? AND (`mimetype` LIKE ? OR `mimetype` = ?)'); - $result=$query->execute(array($parent, $mimetype_filter.'%', 'httpd/unix-directory'))->fetchAll(); - if(is_array($result)) { - return $result; - }else{ - OC_Log::write('files', 'getFolderContent(): file not found in cache ('.$path.')', OC_Log::DEBUG); - return false; - } - } -} diff --git a/lib/filecache/update.php b/lib/filecache/update.php deleted file mode 100644 index bc403113e7..0000000000 --- a/lib/filecache/update.php +++ /dev/null @@ -1,227 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - - -/** - * handles updating the filecache according to outside changes - */ -class OC_FileCache_Update{ - /** - * check if a file or folder is updated outside owncloud - * @param string path - * @param string root (optional) - * @param boolean folder - * @return bool - */ - public static function hasUpdated($path, $root=false, $folder=false) { - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - if(!$view->file_exists($path)) { - return false; - } - $cachedData=OC_FileCache_Cached::get($path, $root); - if(isset($cachedData['mtime'])) { - $cachedMTime=$cachedData['mtime']; - if($folder) { - return $view->hasUpdated($path.'/', $cachedMTime); - }else{ - return $view->hasUpdated($path, $cachedMTime); - } - }else{//file not in cache, so it has to be updated - if(($path=='/' or $path=='') and $root===false) {//dont auto update the home folder, it will be scanned - return false; - } - return true; - } - } - - /** - * delete non existing files from the cache - */ - public static function cleanFolder($path, $root=false) { - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - - $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root); - foreach($cachedContent as $fileData) { - $path=$fileData['path']; - $file=$view->getRelativePath($path); - if(!$view->file_exists($file)) { - if($root===false) {//filesystem hooks are only valid for the default root - OC_Hook::emit('OC_Filesystem', 'post_delete', array('path'=>$file)); - }else{ - self::delete($file, $root); - } - } - } - } - - /** - * update the cache according to changes in the folder - * @param string path - * @param string root (optional) - */ - public static function updateFolder($path, $root=false) { - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - $dh=$view->opendir($path.'/'); - if($dh) {//check for changed/new files - while (($filename = readdir($dh)) !== false) { - if($filename != '.' and $filename != '..' and $filename != '') { - $file=$path.'/'.$filename; - $isDir=$view->is_dir($file); - if(self::hasUpdated($file, $root, $isDir)) { - if($isDir) { - self::updateFolder($file, $root); - }elseif($root===false) {//filesystem hooks are only valid for the default root - OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$file)); - }else{ - self::update($file, $root); - } - } - } - } - } - - self::cleanFolder($path, $root); - - //update the folder last, so we can calculate the size correctly - if($root===false) {//filesystem hooks are only valid for the default root - OC_Hook::emit('OC_Filesystem', 'post_write', array('path'=>$path)); - }else{ - self::update($path, $root); - } - } - - /** - * called when changes are made to files - * @param array $params - * @param string root (optional) - */ - public static function fileSystemWatcherWrite($params) { - $path=$params['path']; - self::update($path); - } - - /** - * called when files are deleted - * @param array $params - * @param string root (optional) - */ - public static function fileSystemWatcherDelete($params) { - $path=$params['path']; - self::delete($path); - } - - /** - * called when files are deleted - * @param array $params - * @param string root (optional) - */ - public static function fileSystemWatcherRename($params) { - $oldPath=$params['oldpath']; - $newPath=$params['newpath']; - self::rename($oldPath, $newPath); - } - - /** - * update the filecache according to changes to the filesystem - * @param string path - * @param string root (optional) - */ - public static function update($path, $root=false) { - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - - $mimetype=$view->getMimeType($path); - - $size=0; - $cached=OC_FileCache_Cached::get($path, $root); - $cachedSize=isset($cached['size'])?$cached['size']:0; - - if($view->is_dir($path.'/')) { - if(OC_FileCache::inCache($path, $root)) { - $cachedContent=OC_FileCache_Cached::getFolderContent($path, $root); - foreach($cachedContent as $file) { - $size+=$file['size']; - } - $mtime=$view->filemtime($path.'/'); - $ctime=$view->filectime($path.'/'); - $writable=$view->is_writable($path.'/'); - OC_FileCache::put($path, array('size'=>$size,'mtime'=>$mtime,'ctime'=>$ctime,'mimetype'=>$mimetype, 'writable'=>$writable)); - }else{ - $count=0; - OC_FileCache::scan($path, null, $count, $root); - return; //increaseSize is already called inside scan - } - }else{ - $size=OC_FileCache::scanFile($path, $root); - } - if($path !== '' and $path !== '/') { - OC_FileCache::increaseSize(dirname($path), $size-$cachedSize, $root); - } - } - - /** - * update the filesystem after a delete has been detected - * @param string path - * @param string root (optional) - */ - public static function delete($path, $root=false) { - $cached=OC_FileCache_Cached::get($path, $root); - if(!isset($cached['size'])) { - return; - } - $size=$cached['size']; - OC_FileCache::increaseSize(dirname($path), -$size, $root); - OC_FileCache::delete($path, $root); - } - - /** - * update the filesystem after a rename has been detected - * @param string oldPath - * @param string newPath - * @param string root (optional) - */ - public static function rename($oldPath, $newPath, $root=false) { - if(!OC_FileCache::inCache($oldPath, $root)) { - return; - } - if($root===false) { - $view=OC_Filesystem::getView(); - }else{ - $view=new OC_FilesystemView($root); - } - - $cached=OC_FileCache_Cached::get($oldPath, $root); - $oldSize=$cached['size']; - OC_FileCache::increaseSize(dirname($oldPath), -$oldSize, $root); - OC_FileCache::increaseSize(dirname($newPath), $oldSize, $root); - OC_FileCache::move($oldPath, $newPath); - } - - /** - * delete files owned by user from the cache - * @param string $parameters$parameters["uid"]) - */ - public static function deleteFromUser($parameters) { - OC_FileCache::clear($parameters["uid"]); - } -} diff --git a/lib/filechunking.php b/lib/filechunking.php index 55a4d73043..d63a0d72c8 100644 --- a/lib/filechunking.php +++ b/lib/filechunking.php @@ -94,49 +94,49 @@ class OC_FileChunking { } public function file_assemble($path) { - $absolutePath = OC_Filesystem::normalizePath(OC_Filesystem::getView()->getAbsolutePath($path)); + $absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path)); $data = ''; // use file_put_contents as method because that best matches what this function does - if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) { - $path = OC_Filesystem::getView()->getRelativePath($absolutePath); - $exists = OC_Filesystem::file_exists($path); + if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && \OC\Files\Filesystem::isValidPath($path)) { + $path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath); + $exists = \OC\Files\Filesystem::file_exists($path); $run = true; if(!$exists) { OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_create, + \OC\Files\Filesystem::CLASSNAME, + \OC\Files\Filesystem::signal_create, array( - OC_Filesystem::signal_param_path => $path, - OC_Filesystem::signal_param_run => &$run + \OC\Files\Filesystem::signal_param_path => $path, + \OC\Files\Filesystem::signal_param_run => &$run ) ); } OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_write, + \OC\Files\Filesystem::CLASSNAME, + \OC\Files\Filesystem::signal_write, array( - OC_Filesystem::signal_param_path => $path, - OC_Filesystem::signal_param_run => &$run + \OC\Files\Filesystem::signal_param_path => $path, + \OC\Files\Filesystem::signal_param_run => &$run ) ); if(!$run) { return false; } - $target = OC_Filesystem::fopen($path, 'w'); + $target = \OC\Files\Filesystem::fopen($path, 'w'); if($target) { $count = $this->assemble($target); fclose($target); if(!$exists) { OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_create, - array( OC_Filesystem::signal_param_path => $path) + \OC\Files\Filesystem::CLASSNAME, + \OC\Files\Filesystem::signal_post_create, + array( \OC\Files\Filesystem::signal_param_path => $path) ); } OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_write, - array( OC_Filesystem::signal_param_path => $path) + \OC\Files\Filesystem::CLASSNAME, + \OC\Files\Filesystem::signal_post_write, + array( \OC\Files\Filesystem::signal_param_path => $path) ); OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count); return $count > 0; diff --git a/lib/fileproxy.php b/lib/fileproxy.php index 2f81bde64a..52ec79b4bd 100644 --- a/lib/fileproxy.php +++ b/lib/fileproxy.php @@ -36,7 +36,7 @@ * The return value of the post-proxy will be used as the new result of the operation * The operations that have a post-proxy are: * file_get_contents, is_file, is_dir, file_exists, stat, is_readable, - * is_writable, fileatime, filemtime, filectime, file_get_contents, + * is_writable, filemtime, filectime, file_get_contents, * getMimeType, hash, fopen, free_space and search */ diff --git a/lib/fileproxy/fileoperations.php b/lib/fileproxy/fileoperations.php index 516629adae..47ccd8f8c2 100644 --- a/lib/fileproxy/fileoperations.php +++ b/lib/fileproxy/fileoperations.php @@ -28,10 +28,10 @@ class OC_FileProxy_FileOperations extends OC_FileProxy{ static $rootView; public function premkdir($path) { - if(!self::$rootView) { - self::$rootView = new OC_FilesystemView(''); + if(!self::$rootView){ + self::$rootView = new \OC\Files\View(''); } return !self::$rootView->file_exists($path); } -} \ No newline at end of file +} diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php index 503288142a..7e0f631c8f 100644 --- a/lib/fileproxy/quota.php +++ b/lib/fileproxy/quota.php @@ -22,7 +22,7 @@ */ /** - * user quota managment + * user quota management */ class OC_FileProxy_Quota extends OC_FileProxy{ @@ -57,23 +57,25 @@ class OC_FileProxy_Quota extends OC_FileProxy{ * @return int */ private function getFreeSpace($path) { - $storage=OC_Filesystem::getStorage($path); - $owner=$storage->getOwner($path); + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path); + $owner=$storage->getOwner($internalPath); + if (!$owner) { + return -1; + } $totalSpace=$this->getQuota($owner); if($totalSpace==-1) { return -1; } - $rootInfo=OC_FileCache::get('', "/".$owner."/files"); - // TODO Remove after merge of share_api - if (OC_FileCache::inCache('/Shared', "/".$owner."/files")) { - $sharedInfo=OC_FileCache::get('/Shared', "/".$owner."/files"); - } else { - $sharedInfo = null; - } + $view = new \OC\Files\View("/".$owner."/files"); + + $rootInfo=$view->getFileInfo('/'); $usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0; - $usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace; return $totalSpace-$usedSpace; } @@ -93,8 +95,8 @@ class OC_FileProxy_Quota extends OC_FileProxy{ } public function preCopy($path1, $path2) { - if(!self::$rootView) { - self::$rootView = new OC_FilesystemView(''); + if(!self::$rootView){ + self::$rootView = new \OC\Files\View(''); } return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1); } diff --git a/lib/files.php b/lib/files.php index f4e0f140a4..e3245653f9 100644 --- a/lib/files.php +++ b/lib/files.php @@ -1,144 +1,48 @@ . -* -*/ + * ownCloud + * + * @author Frank Karlitschek + * @copyright 2012 Frank Karlitschek frank@owncloud.org + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ /** * Class for fileserver access * */ class OC_Files { - static $tmpFiles=array(); + static $tmpFiles = array(); + + static public function getFileInfo($path){ + return \OC\Files\Filesystem::getFileInfo($path); + } + + static public function getDirectoryContent($path){ + return \OC\Files\Filesystem::getDirectoryContent($path); + } /** - * get the filesystem info - * @param string path - * @return array + * return the content of a file or return a zip file containing multiple files * - * returns an associative array with the following keys: - * - size - * - mtime - * - ctime - * - mimetype - * - encrypted - * - versioned + * @param string $dir + * @param string $file ; separated list of files to download + * @param boolean $only_header ; boolean to only send header of the request */ - public static function getFileInfo($path) { - $path = OC_Filesystem::normalizePath($path); - if (($path == '/Shared' || substr($path, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) { - if ($path == '/Shared') { - list($info) = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT); - } else { - $info = array(); - if (OC_Filesystem::file_exists($path)) { - $info['size'] = OC_Filesystem::filesize($path); - $info['mtime'] = OC_Filesystem::filemtime($path); - $info['ctime'] = OC_Filesystem::filectime($path); - $info['mimetype'] = OC_Filesystem::getMimeType($path); - $info['encrypted'] = false; - $info['versioned'] = false; - } - } - } else { - $info = OC_FileCache::get($path); - } - return $info; - } - - /** - * get the content of a directory - * @param dir $directory path under datadirectory - */ - public static function getDirectoryContent($directory, $mimetype_filter = '') { - $directory=OC_Filesystem::normalizePath($directory); - if($directory=='/') { - $directory=''; - } - $files = array(); - if (($directory == '/Shared' || substr($directory, 0, 8) == '/Shared/') && OC_App::isEnabled('files_sharing')) { - if ($directory == '/Shared') { - $files = OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter)); - } else { - $pos = strpos($directory, '/', 8); - // Get shared folder name - if ($pos !== false) { - $itemTarget = substr($directory, 7, $pos - 7); - } else { - $itemTarget = substr($directory, 7); - } - $files = OCP\Share::getItemSharedWith('folder', $itemTarget, OC_Share_Backend_File::FORMAT_FILE_APP, array('folder' => $directory, 'mimetype_filter' => $mimetype_filter)); - } - } else { - $files = OC_FileCache::getFolderContent($directory, false, $mimetype_filter); - foreach ($files as &$file) { - $file['directory'] = $directory; - $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file'; - $permissions = OCP\PERMISSION_READ; - // NOTE: Remove check when new encryption is merged - if (!$file['encrypted']) { - $permissions |= OCP\PERMISSION_SHARE; - } - if ($file['type'] == 'dir' && $file['writable']) { - $permissions |= OCP\PERMISSION_CREATE; - } - if ($file['writable']) { - $permissions |= OCP\PERMISSION_UPDATE | OCP\PERMISSION_DELETE; - } - $file['permissions'] = $permissions; - } - if ($directory == '' && OC_App::isEnabled('files_sharing')) { - // Add 'Shared' folder - $files = array_merge($files, OCP\Share::getItemsSharedWith('file', OC_Share_Backend_File::FORMAT_FILE_APP_ROOT)); - } - } - usort($files, "fileCmp");//TODO: remove this once ajax is merged - return $files; - } - - public static function searchByMime($mimetype_filter) { - $files = array(); - $dirs_to_check = array(''); - while (!empty($dirs_to_check)) { - // get next subdir to check - $dir = array_pop($dirs_to_check); - $dir_content = self::getDirectoryContent($dir, $mimetype_filter); - foreach($dir_content as $file) { - if ($file['type'] == 'file') { - $files[] = $dir.'/'.$file['name']; - } - else { - $dirs_to_check[] = $dir.'/'.$file['name']; - } - } - } - return $files; - } - - /** - * return the content of a file or return a zip file containning multiply files - * - * @param dir $dir - * @param file $file ; seperated list of files to download - * @param boolean $only_header ; boolean to only send header of the request - */ public static function get($dir, $files, $only_header = false) { $xsendfile = false; if (isset($_SERVER['MOD_X_SENDFILE_ENABLED']) || @@ -149,7 +53,7 @@ class OC_Files { $files=explode(';', $files); } - if(is_array($files)) { + if (is_array($files)) { self::validateZipDownload($dir, $files); $executionTime = intval(ini_get('max_execution_time')); set_time_limit(0); @@ -162,19 +66,20 @@ class OC_Files { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) { exit("cannot open <$filename>\n"); } - foreach($files as $file) { - $file=$dir.'/'.$file; - if(OC_Filesystem::is_file($file)) { - $tmpFile=OC_Filesystem::toTmpFile($file); - self::$tmpFiles[]=$tmpFile; + foreach ($files as $file) { + $file = $dir . '/' . $file; + if (\OC\Files\Filesystem::is_file($file)) { + $tmpFile = \OC\Files\Filesystem::toTmpFile($file); + self::$tmpFiles[] = $tmpFile; $zip->addFile($tmpFile, basename($file)); - }elseif(OC_Filesystem::is_dir($file)) { + } elseif (\OC\Files\Filesystem::is_dir($file)) { self::zipAddDir($file, $zip); } } $zip->close(); + $name = basename($dir) . '.zip'; set_time_limit($executionTime); - }elseif(OC_Filesystem::is_dir($dir.'/'.$files)) { + } elseif (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) { self::validateZipDownload($dir, $files); $executionTime = intval(ini_get('max_execution_time')); set_time_limit(0); @@ -187,53 +92,55 @@ class OC_Files { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==true) { exit("cannot open <$filename>\n"); } - $file=$dir.'/'.$files; + $file = $dir . '/' . $files; self::zipAddDir($file, $zip); $zip->close(); + $name = $files . '.zip'; set_time_limit($executionTime); - }else{ - $zip=false; - $filename=$dir.'/'.$files; + } else { + $zip = false; + $filename = $dir . '/' . $files; + $name = $files; } OC_Util::obEnd(); - if($zip or OC_Filesystem::is_readable($filename)) { + if ($zip or \OC\Files\Filesystem::isReadable($filename)) { if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { - header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); + header( 'Content-Disposition: attachment; filename="' . rawurlencode($name) . '"' ); } else { - header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) - . '; filename="' . rawurlencode( basename($filename) ) . '"' ); + header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($name) + . '; filename="' . rawurlencode($name) . '"' ); } header('Content-Transfer-Encoding: binary'); OC_Response::disableCaching(); - if($zip) { + if ($zip) { ini_set('zlib.output_compression', 'off'); header('Content-Type: application/zip'); header('Content-Length: ' . filesize($filename)); self::addSendfileHeader($filename); }else{ - header('Content-Type: '.OC_Filesystem::getMimeType($filename)); - header("Content-Length: ".OC_Filesystem::filesize($filename)); - $storage = OC_Filesystem::getStorage($filename); - if ($storage instanceof OC_Filestorage_Local) { - self::addSendfileHeader(OC_Filesystem::getLocalFile($filename)); + header('Content-Type: '.\OC\Files\Filesystem::getMimeType($filename)); + header("Content-Length: ".\OC\Files\Filesystem::filesize($filename)); + list($storage) = \OC\Files\Filesystem::resolvePath($filename); + if ($storage instanceof \OC\File\Storage\Local) { + self::addSendfileHeader(\OC\Files\Filesystem::getLocalFile($filename)); } } - }elseif($zip or !OC_Filesystem::file_exists($filename)) { + } elseif ($zip or !\OC\Files\Filesystem::file_exists($filename)) { header("HTTP/1.0 404 Not Found"); - $tmpl = new OC_Template( '', '404', 'guest' ); - $tmpl->assign('file', $filename); + $tmpl = new OC_Template('', '404', 'guest'); + $tmpl->assign('file', $name); $tmpl->printPage(); - }else{ + } else { header("HTTP/1.0 403 Forbidden"); die('403 Forbidden'); } if($only_header) { return ; } - if($zip) { - $handle=fopen($filename, 'r'); + if ($zip) { + $handle = fopen($filename, 'r'); if ($handle) { - $chunkSize = 8*1024;// 1 MB chunks + $chunkSize = 8 * 1024; // 1 MB chunks while (!feof($handle)) { echo fread($handle, $chunkSize); flush(); @@ -243,10 +150,10 @@ class OC_Files { unlink($filename); } }else{ - OC_Filesystem::readfile($filename); + \OC\Files\Filesystem::readfile($filename); } - foreach(self::$tmpFiles as $tmpFile) { - if(file_exists($tmpFile) and is_file($tmpFile)) { + foreach (self::$tmpFiles as $tmpFile) { + if (file_exists($tmpFile) and is_file($tmpFile)) { unlink($tmpFile); } } @@ -269,97 +176,27 @@ class OC_Files { foreach($files as $file) { $filename=$file['name']; $file=$dir.'/'.$filename; - if(OC_Filesystem::is_file($file)) { - $tmpFile=OC_Filesystem::toTmpFile($file); + if(\OC\Files\Filesystem::is_file($file)) { + $tmpFile=\OC\Files\Filesystem::toTmpFile($file); OC_Files::$tmpFiles[]=$tmpFile; $zip->addFile($tmpFile, $internalDir.$filename); - }elseif(OC_Filesystem::is_dir($file)) { + }elseif(\OC\Files\Filesystem::is_dir($file)) { self::zipAddDir($file, $zip, $internalDir); } } } - /** - * move a file or folder - * - * @param dir $sourceDir - * @param file $source - * @param dir $targetDir - * @param file $target - */ - public static function move($sourceDir, $source, $targetDir, $target) { - if(OC_User::isLoggedIn() && ($sourceDir != '' || $source != 'Shared')) { - $targetFile=self::normalizePath($targetDir.'/'.$target); - $sourceFile=self::normalizePath($sourceDir.'/'.$source); - return OC_Filesystem::rename($sourceFile, $targetFile); - } else { - return false; - } - } /** - * copy a file or folder - * - * @param dir $sourceDir - * @param file $source - * @param dir $targetDir - * @param file $target - */ - public static function copy($sourceDir, $source, $targetDir, $target) { - if(OC_User::isLoggedIn()) { - $targetFile=$targetDir.'/'.$target; - $sourceFile=$sourceDir.'/'.$source; - return OC_Filesystem::copy($sourceFile, $targetFile); - } - } - - /** - * create a new file or folder - * - * @param dir $dir - * @param file $name - * @param type $type - */ - public static function newFile($dir, $name, $type) { - if(OC_User::isLoggedIn()) { - $file=$dir.'/'.$name; - if($type=='dir') { - return OC_Filesystem::mkdir($file); - }elseif($type=='file') { - $fileHandle=OC_Filesystem::fopen($file, 'w'); - if($fileHandle) { - fclose($fileHandle); - return true; - }else{ - return false; - } - } - } - } - - /** - * deletes a file or folder - * - * @param dir $dir - * @param file $name - */ - public static function delete($dir, $file) { - if(OC_User::isLoggedIn() && ($dir!= '' || $file != 'Shared')) { - $file=$dir.'/'.$file; - return OC_Filesystem::unlink($file); - } - } - - /** - * checks if the selected files are within the size constraint. If not, outputs an error page. - * - * @param dir $dir - * @param files $files - */ + * checks if the selected files are within the size constraint. If not, outputs an error page. + * + * @param dir $dir + * @param files $files + */ static function validateZipDownload($dir, $files) { - if(!OC_Config::getValue('allowZipDownload', true)) { + if (!OC_Config::getValue('allowZipDownload', true)) { $l = OC_L10N::get('lib'); header("HTTP/1.0 409 Conflict"); - $tmpl = new OC_Template( '', 'error', 'user' ); + $tmpl = new OC_Template('', 'error', 'user'); $errors = array( array( 'error' => $l->t('ZIP download is turned off.'), @@ -372,19 +209,19 @@ class OC_Files { } $zipLimit = OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB')); - if($zipLimit > 0) { + if ($zipLimit > 0) { $totalsize = 0; - if(is_array($files)) { - foreach($files as $file) { - $totalsize += OC_Filesystem::filesize($dir.'/'.$file); + if (is_array($files)) { + foreach ($files as $file) { + $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $file); } - }else{ - $totalsize += OC_Filesystem::filesize($dir.'/'.$files); + } else { + $totalsize += \OC\Files\Filesystem::filesize($dir . '/' . $files); } - if($totalsize > $zipLimit) { + if ($totalsize > $zipLimit) { $l = OC_L10N::get('lib'); header("HTTP/1.0 409 Conflict"); - $tmpl = new OC_Template( '', 'error', 'user' ); + $tmpl = new OC_Template('', 'error', 'user'); $errors = array( array( 'error' => $l->t('Selected files too large to generate zip file.'), @@ -398,79 +235,32 @@ class OC_Files { } } - /** - * try to detect the mime type of a file - * - * @param string path - * @return string guessed mime type - */ - static function getMimeType($path) { - return OC_Filesystem::getMimeType($path); - } - - /** - * get a file tree - * - * @param string path - * @return array - */ - static function getTree($path) { - return OC_Filesystem::getTree($path); - } - - /** - * pull a file from a remote server - * @param string source - * @param string token - * @param string dir - * @param string file - * @return string guessed mime type - */ - static function pull($source, $token, $dir, $file) { - $tmpfile=tempnam(get_temp_dir(), 'remoteCloudFile'); - $fp=fopen($tmpfile, 'w+'); - $url=$source.="/files/pull.php?token=$token"; - $ch=curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_FILE, $fp); - curl_exec($ch); - fclose($fp); - $info=curl_getinfo($ch); - $httpCode=$info['http_code']; - curl_close($ch); - if($httpCode==200 or $httpCode==0) { - OC_Filesystem::fromTmpFile($tmpfile, $dir.'/'.$file); - return true; - }else{ - return false; - } - } - /** * set the maximum upload size limit for apache hosts using .htaccess + * * @param int size filesisze in bytes * @return false on failure, size on success */ static function setUploadLimit($size) { //don't allow user to break his config -- upper boundary - if($size > PHP_INT_MAX) { + if ($size > PHP_INT_MAX) { //max size is always 1 byte lower than computerFileSize returns - if($size > PHP_INT_MAX+1) + if ($size > PHP_INT_MAX + 1) return false; - $size -=1; + $size -= 1; } else { - $size=OC_Helper::humanFileSize($size); - $size=substr($size, 0, -1);//strip the B - $size=str_replace(' ', '', $size); //remove the space between the size and the postfix + $size = OC_Helper::humanFileSize($size); + $size = substr($size, 0, -1); //strip the B + $size = str_replace(' ', '', $size); //remove the space between the size and the postfix } //don't allow user to break his config -- broken or malicious size input - if(intval($size) == 0) { + if (intval($size) == 0) { return false; } - $htaccess = @file_get_contents(OC::$SERVERROOT.'/.htaccess'); //supress errors in case we don't have permissions for - if(!$htaccess) { + $htaccess = @file_get_contents(OC::$SERVERROOT . '/.htaccess'); //supress errors in case we don't have permissions for + if (!$htaccess) { return false; } @@ -479,52 +269,26 @@ class OC_Files { 'post_max_size' ); - foreach($phpValueKeys as $key) { - $pattern = '/php_value '.$key.' (\S)*/'; - $setting = 'php_value '.$key.' '.$size; - $hasReplaced = 0; - $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced); - if($content !== null) { + foreach ($phpValueKeys as $key) { + $pattern = '/php_value ' . $key . ' (\S)*/'; + $setting = 'php_value ' . $key . ' ' . $size; + $hasReplaced = 0; + $content = preg_replace($pattern, $setting, $htaccess, 1, $hasReplaced); + if ($content !== null) { $htaccess = $content; } - if($hasReplaced == 0) { + if ($hasReplaced == 0) { $htaccess .= "\n" . $setting; } } //check for write permissions - if(is_writable(OC::$SERVERROOT.'/.htaccess')) { - file_put_contents(OC::$SERVERROOT.'/.htaccess', $htaccess); + if (is_writable(OC::$SERVERROOT . '/.htaccess')) { + file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess); return OC_Helper::computerFileSize($size); } else { - OC_Log::write('files', 'Can\'t write upload limit to '.OC::$SERVERROOT.'/.htaccess. Please check the file permissions', OC_Log::WARN); + OC_Log::write('files', 'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions', OC_Log::WARN); } - return false; } - - /** - * normalize a path, removing any double, add leading /, etc - * @param string $path - * @return string - */ - static public function normalizePath($path) { - $path='/'.$path; - $old=''; - while($old!=$path) {//replace any multiplicity of slashes with a single one - $old=$path; - $path=str_replace('//', '/', $path); - } - return $path; - } -} - -function fileCmp($a, $b) { - if($a['type']=='dir' and $b['type']!='dir') { - return -1; - }elseif($a['type']!='dir' and $b['type']=='dir') { - return 1; - }else{ - return strnatcasecmp($a['name'], $b['name']); - } } diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php new file mode 100644 index 0000000000..69cbaea851 --- /dev/null +++ b/lib/files/cache/cache.php @@ -0,0 +1,521 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +/** + * Metadata cache for the filesystem + * + * don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead + */ +class Cache { + const NOT_FOUND = 0; + const PARTIAL = 1; //only partial data available, file not cached in the database + const SHALLOW = 2; //folder in cache, but not all child files are completely scanned + const COMPLETE = 3; + + /** + * @var array partial data for the cache + */ + private $partial = array(); + + /** + * @var string + */ + private $storageId; + + /** + * numeric storage id + * + * @var int $numericId + */ + private $numericId; + + private $mimetypeIds = array(); + private $mimetypes = array(); + + /** + * @param \OC\Files\Storage\Storage|string $storage + */ + public function __construct($storage) { + if ($storage instanceof \OC\Files\Storage\Storage) { + $this->storageId = $storage->getId(); + } else { + $this->storageId = $storage; + } + + $query = \OC_DB::prepare('SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?'); + $result = $query->execute(array($this->storageId)); + if ($row = $result->fetchRow()) { + $this->numericId = $row['numeric_id']; + } else { + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*storages`(`id`) VALUES(?)'); + $query->execute(array($this->storageId)); + $this->numericId = \OC_DB::insertid('*PREFIX*filecache'); + } + } + + public function getNumericStorageId() { + return $this->numericId; + } + + /** + * normalize mimetypes + * + * @param string $mime + * @return int + */ + public function getMimetypeId($mime) { + if (!isset($this->mimetypeIds[$mime])) { + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?'); + $result = $query->execute(array($mime)); + if ($row = $result->fetchRow()) { + $this->mimetypeIds[$mime] = $row['id']; + } else { + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*mimetypes`(`mimetype`) VALUES(?)'); + $query->execute(array($mime)); + $this->mimetypeIds[$mime] = \OC_DB::insertid('*PREFIX*mimetypes'); + } + $this->mimetypes[$this->mimetypeIds[$mime]] = $mime; + } + return $this->mimetypeIds[$mime]; + } + + public function getMimetype($id) { + if (!isset($this->mimetypes[$id])) { + $query = \OC_DB::prepare('SELECT `mimetype` FROM `*PREFIX*mimetypes` WHERE `id` = ?'); + $result = $query->execute(array($id)); + if ($row = $result->fetchRow()) { + $this->mimetypes[$id] = $row['mimetype']; + } else { + return null; + } + } + return $this->mimetypes[$id]; + } + + /** + * get the stored metadata of a file or folder + * + * @param string/int $file + * @return array + */ + public function get($file) { + if (is_string($file) or $file == '') { + $where = 'WHERE `storage` = ? AND `path_hash` = ?'; + $params = array($this->numericId, md5($file)); + } else { //file id + $where = 'WHERE `fileid` = ?'; + $params = array($file); + } + $query = \OC_DB::prepare( + 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag` + FROM `*PREFIX*filecache` ' . $where); + $result = $query->execute($params); + $data = $result->fetchRow(); + + //merge partial data + if (!$data and is_string($file)) { + if (isset($this->partial[$file])) { + $data = $this->partial[$file]; + } + } else { + //fix types + $data['fileid'] = (int)$data['fileid']; + $data['size'] = (int)$data['size']; + $data['mtime'] = (int)$data['mtime']; + $data['encrypted'] = (bool)$data['encrypted']; + $data['storage'] = $this->storageId; + $data['mimetype'] = $this->getMimetype($data['mimetype']); + $data['mimepart'] = $this->getMimetype($data['mimepart']); + } + + return $data; + } + + /** + * get the metadata of all files stored in $folder + * + * @param string $folder + * @return array + */ + public function getFolderContents($folder) { + $fileId = $this->getId($folder); + if ($fileId > -1) { + $query = \OC_DB::prepare( + 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag` + FROM `*PREFIX*filecache` WHERE parent = ? ORDER BY `name` ASC'); + $result = $query->execute(array($fileId)); + $files = $result->fetchAll(); + foreach ($files as &$file) { + $file['mimetype'] = $this->getMimetype($file['mimetype']); + $file['mimepart'] = $this->getMimetype($file['mimepart']); + } + return $files; + } else { + return array(); + } + } + + /** + * store meta data for a file or folder + * + * @param string $file + * @param array $data + * + * @return int file id + */ + public function put($file, array $data) { + if (($id = $this->getId($file)) > -1) { + $this->update($id, $data); + return $id; + } else { + if (isset($this->partial[$file])) { //add any saved partial data + $data = array_merge($this->partial[$file], $data); + unset($this->partial[$file]); + } + + $requiredFields = array('size', 'mtime', 'mimetype'); + foreach ($requiredFields as $field) { + if (!isset($data[$field])) { //data not complete save as partial and return + $this->partial[$file] = $data; + return -1; + } + } + + $data['path'] = $file; + $data['parent'] = $this->getParentId($file); + $data['name'] = basename($file); + $data['encrypted'] = isset($data['encrypted']) ? ((int)$data['encrypted']) : 0; + + list($queryParts, $params) = $this->buildParts($data); + $queryParts[] = '`storage`'; + $params[] = $this->numericId; + $valuesPlaceholder = array_fill(0, count($queryParts), '?'); + + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ') VALUES(' . implode(', ', $valuesPlaceholder) . ')'); + $query->execute($params); + + return (int)\OC_DB::insertid('*PREFIX*filecache'); + } + } + + /** + * update the metadata in the cache + * + * @param int $id + * @param array $data + */ + public function update($id, array $data) { + list($queryParts, $params) = $this->buildParts($data); + $params[] = $id; + + $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE fileid = ?'); + $query->execute($params); + } + + /** + * extract query parts and params array from data array + * + * @param array $data + * @return array + */ + function buildParts(array $data) { + $fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted', 'etag'); + $params = array(); + $queryParts = array(); + foreach ($data as $name => $value) { + if (array_search($name, $fields) !== false) { + if ($name === 'path') { + $params[] = md5($value); + $queryParts[] = '`path_hash`'; + } elseif ($name === 'mimetype') { + $params[] = $this->getMimetypeId(substr($value, 0, strpos($value, '/'))); + $queryParts[] = '`mimepart`'; + $value = $this->getMimetypeId($value); + } + $params[] = $value; + $queryParts[] = '`' . $name . '`'; + } + } + return array($queryParts, $params); + } + + /** + * get the file id for a file + * + * @param string $file + * @return int + */ + public function getId($file) { + $pathHash = md5($file); + + $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?'); + $result = $query->execute(array($this->numericId, $pathHash)); + + if ($row = $result->fetchRow()) { + return $row['fileid']; + } else { + return -1; + } + } + + /** + * get the id of the parent folder of a file + * + * @param string $file + * @return int + */ + public function getParentId($file) { + if ($file === '') { + return -1; + } else { + $parent = dirname($file); + if ($parent === '.') { + $parent = ''; + } + return $this->getId($parent); + } + } + + /** + * check if a file is available in the cache + * + * @param string $file + * @return bool + */ + public function inCache($file) { + return $this->getId($file) != -1; + } + + /** + * remove a file or folder from the cache + * + * @param string $file + */ + public function remove($file) { + $entry = $this->get($file); + if ($entry['mimetype'] === 'httpd/unix-directory') { + $children = $this->getFolderContents($file); + foreach ($children as $child) { + $this->remove($child['path']); + } + } + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + $query->execute(array($entry['fileid'])); + } + + /** + * Move a file or folder in the cache + * + * @param string $source + * @param string $target + */ + public function move($source, $target) { + $sourceId = $this->getId($source); + $newParentId = $this->getParentId($target); + + //find all child entries + $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?'); + $result = $query->execute(array($source . '/%')); + $childEntries = $result->fetchAll(); + $sourceLength = strlen($source); + $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?'); + + foreach ($childEntries as $child) { + $targetPath = $target . substr($child['path'], $sourceLength); + $query->execute(array($targetPath, md5($targetPath), $child['fileid'])); + } + + $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =? WHERE `fileid` = ?'); + $query->execute(array($target, md5($target), $newParentId, $sourceId)); + } + + /** + * remove all entries for files that are stored on the storage from the cache + */ + public function clear() { + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE storage = ?'); + $query->execute(array($this->numericId)); + + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*storages` WHERE id = ?'); + $query->execute(array($this->storageId)); + } + + /** + * @param string $file + * + * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE + */ + public function getStatus($file) { + $pathHash = md5($file); + $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?'); + $result = $query->execute(array($this->numericId, $pathHash)); + if ($row = $result->fetchRow()) { + if ((int)$row['size'] === -1) { + return self::SHALLOW; + } else { + return self::COMPLETE; + } + } else { + if (isset($this->partial[$file])) { + return self::PARTIAL; + } else { + return self::NOT_FOUND; + } + } + } + + /** + * search for files matching $pattern + * + * @param string $pattern + * @return array of file data + */ + public function search($pattern) { + $query = \OC_DB::prepare(' + SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag` + FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?' + ); + $result = $query->execute(array($pattern, $this->numericId)); + $files = array(); + while ($row = $result->fetchRow()) { + $row['mimetype'] = $this->getMimetype($row['mimetype']); + $row['mimepart'] = $this->getMimetype($row['mimepart']); + $files[] = $row; + } + return $files; + } + + /** + * search for files by mimetype + * + * @param string $mimetype + * @return array + */ + public function searchByMime($mimetype) { + if (strpos($mimetype, '/')) { + $where = '`mimetype` = ?'; + } else { + $where = '`mimepart` = ?'; + } + $query = \OC_DB::prepare(' + SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag` + FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?' + ); + $mimetype = $this->getMimetypeId($mimetype); + $result = $query->execute(array($mimetype, $this->numericId)); + return $result->fetchAll(); + } + + /** + * update the folder size and the size of all parent folders + * + * @param $path + */ + public function correctFolderSize($path) { + $this->calculateFolderSize($path); + if ($path !== '') { + $parent = dirname($path); + if ($parent === '.') { + $parent = ''; + } + $this->correctFolderSize($parent); + } + } + + /** + * get the size of a folder and set it in the cache + * + * @param string $path + * @return int + */ + public function calculateFolderSize($path) { + $id = $this->getId($path); + if ($id === -1) { + return 0; + } + $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?'); + $result = $query->execute(array($id, $this->numericId)); + $totalSize = 0; + $hasChilds = 0; + while ($row = $result->fetchRow()) { + $hasChilds = true; + $size = (int)$row['size']; + if ($size === -1) { + $totalSize = -1; + break; + } else { + $totalSize += $size; + } + } + + if ($hasChilds) { + $this->update($id, array('size' => $totalSize)); + } + return $totalSize; + } + + /** + * get all file ids on the files on the storage + * + * @return int[] + */ + public function getAll() { + $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ?'); + $result = $query->execute(array($this->numericId)); + $ids = array(); + while ($row = $result->fetchRow()) { + $ids[] = $row['fileid']; + } + return $ids; + } + + /** + * find a folder in the cache which has not been fully scanned + * + * If multiply incomplete folders are in the cache, the one with the highest id will be returned, + * use the one with the highest id gives the best result with the background scanner, since that is most + * likely the folder where we stopped scanning previously + * + * @return string|bool the path of the folder or false when no folder matched + */ + public function getIncomplete() { + $query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1'); + $query->execute(array($this->numericId)); + if ($row = $query->fetchRow()) { + return $row['path']; + } else { + return false; + } + } + + /** + * get the storage id of the storage for a file and the internal path of the file + * + * @return array, first element holding the storage id, second the path + */ + static public function getById($id) { + $query = \OC_DB::prepare('SELECT `storage`, `path` FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + $result = $query->execute(array($id)); + if ($row = $result->fetchRow()) { + $numericId = $row['storage']; + $path = $row['path']; + } else { + return null; + } + + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?'); + $result = $query->execute(array($numericId)); + if ($row = $result->fetchRow()) { + return array($row['id'], $path); + } else { + return null; + } + } +} diff --git a/lib/files/cache/legacy.php b/lib/files/cache/legacy.php new file mode 100644 index 0000000000..33d4b8e7c9 --- /dev/null +++ b/lib/files/cache/legacy.php @@ -0,0 +1,81 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +/** + * Provide read only support for the old filecache + */ +class Legacy { + private $user; + + private $cacheHasItems = null; + + public function __construct($user) { + $this->user = $user; + } + + function getCount() { + $query = \OC_DB::prepare('SELECT COUNT(`id`) AS `count` FROM `*PREFIX*fscache` WHERE `user` = ?'); + $result = $query->execute(array($this->user)); + if ($row = $result->fetchRow()) { + return $row['count']; + } else { + return 0; + } + } + + /** + * check if a legacy cache is present and holds items + * + * @return bool + */ + function hasItems() { + if (!is_null($this->cacheHasItems)) { + return $this->cacheHasItems; + } + try { + $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `user` = ? LIMIT 1'); + } catch (\Exception $e) { + $this->cacheHasItems = false; + return false; + } + try { + $result = $query->execute(array($this->user)); + } catch (\Exception $e) { + $this->cacheHasItems = false; + return false; + } + $this->cacheHasItems = (bool)$result->fetchRow(); + return $this->cacheHasItems; + } + + /** + * @param string|int $path + * @return array + */ + function get($path) { + if (is_numeric($path)) { + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `id` = ?'); + } else { + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `path` = ?'); + } + $result = $query->execute(array($path)); + return $result->fetchRow(); + } + + /** + * @param int $id + * @return array + */ + function getChildren($id) { + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `parent` = ?'); + $result = $query->execute(array($id)); + return $result->fetchAll(); + } +} diff --git a/lib/files/cache/permissions.php b/lib/files/cache/permissions.php new file mode 100644 index 0000000000..d0968337f0 --- /dev/null +++ b/lib/files/cache/permissions.php @@ -0,0 +1,102 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +class Permissions { + /** + * @var string $storageId + */ + private $storageId; + + /** + * @param \OC\Files\Storage\Storage|string $storage + */ + public function __construct($storage){ + if($storage instanceof \OC\Files\Storage\Storage){ + $this->storageId = $storage->getId(); + }else{ + $this->storageId = $storage; + } + } + + /** + * get the permissions for a single file + * + * @param int $fileId + * @param string $user + * @return int (-1 if file no permissions set) + */ + public function get($fileId, $user) { + $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?'); + $result = $query->execute(array($user, $fileId)); + if ($row = $result->fetchRow()) { + return $row['permissions']; + } else { + return -1; + } + } + + /** + * set the permissions of a file + * + * @param int $fileId + * @param string $user + * @param int $permissions + */ + public function set($fileId, $user, $permissions) { + if (self::get($fileId, $user) !== -1) { + $query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?'); + } else { + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )'); + } + $query->execute(array($permissions, $user, $fileId)); + } + + /** + * get the permissions of multiply files + * + * @param int[] $fileIds + * @param string $user + * @return int[] + */ + public function getMultiple($fileIds, $user) { + if (count($fileIds) === 0) { + return array(); + } + $params = $fileIds; + $params[] = $user; + $inPart = implode(', ', array_fill(0, count($fileIds), '?')); + + $query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?'); + $result = $query->execute($params); + $filePermissions = array(); + while ($row = $result->fetchRow()) { + $filePermissions[$row['fileid']] = $row['permissions']; + } + return $filePermissions; + } + + /** + * remove the permissions for a file + * + * @param int $fileId + * @param string $user + */ + public function remove($fileId, $user) { + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?'); + $query->execute(array($fileId, $user)); + } + + public function removeMultiple($fileIds, $user) { + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?'); + foreach($fileIds as $fileId){ + $query->execute(array($fileId, $user)); + } + } +} diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php new file mode 100644 index 0000000000..bf0ef01d6b --- /dev/null +++ b/lib/files/cache/scanner.php @@ -0,0 +1,146 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +class Scanner { + /** + * @var \OC\Files\Storage\Storage $storage + */ + private $storage; + + /** + * @var string $storageId + */ + private $storageId; + + /** + * @var \OC\Files\Cache\Cache $cache + */ + private $cache; + + const SCAN_RECURSIVE = true; + const SCAN_SHALLOW = false; + + public function __construct(\OC\Files\Storage\Storage $storage) { + $this->storage = $storage; + $this->storageId = $this->storage->getId(); + $this->cache = $storage->getCache(); + } + + /** + * get all the metadata of a file or folder + * * + * + * @param string $path + * @return array with metadata of the file + */ + public function getData($path) { + $data = array(); + if (!$this->storage->isReadable($path)) return null; //cant read, nothing we can do + $data['mimetype'] = $this->storage->getMimeType($path); + $data['mtime'] = $this->storage->filemtime($path); + if ($data['mimetype'] == 'httpd/unix-directory') { + $data['size'] = -1; //unknown + } else { + $data['size'] = $this->storage->filesize($path); + } + $data['etag'] = $this->storage->getETag($path); + return $data; + } + + /** + * scan a single file and store it in the cache + * + * @param string $file + * @return array with metadata of the scanned file + */ + public function scanFile($file) { + \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId)); + $data = $this->getData($file); + if ($data) { + if ($file) { + $parent = dirname($file); + if ($parent === '.') { + $parent = ''; + } + if (!$this->cache->inCache($parent)) { + $this->scanFile($parent); + } + } + $id = $this->cache->put($file, $data); + } + return $data; + } + + /** + * scan all the files in a folder and store them in the cache + * + * @param string $path + * @param SCAN_RECURSIVE/SCAN_SHALLOW $recursive + * @param bool $onlyChilds + * @return int the size of the scanned folder or -1 if the size is unknown at this stage + */ + public function scan($path, $recursive = self::SCAN_RECURSIVE, $onlyChilds = false) { + \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_folder', array('path' => $path, 'storage' => $this->storageId)); + $childQueue = array(); + if (!$onlyChilds) { + $this->scanFile($path); + } + + $size = 0; + if ($dh = $this->storage->opendir($path)) { + \OC_DB::beginTransaction(); + while ($file = readdir($dh)) { + if ($file !== '.' and $file !== '..') { + $child = ($path) ? $path . '/' . $file : $file; + $data = $this->scanFile($child); + if ($data) { + if ($data['mimetype'] === 'httpd/unix-directory') { + if ($recursive === self::SCAN_RECURSIVE) { + $childQueue[] = $child; + $data['size'] = 0; + } else { + $data['size'] = -1; + } + } else { + } + if ($data['size'] === -1) { + $size = -1; + } elseif ($size !== -1) { + $size += $data['size']; + } + } + } + } + \OC_DB::commit(); + foreach ($childQueue as $child) { + $childSize = $this->scan($child, self::SCAN_RECURSIVE, true); + if ($childSize === -1) { + $size = -1; + } else { + $size += $childSize; + } + } + if ($size !== -1) { + $this->cache->put($path, array('size' => $size)); + } + } + return $size; + } + + /** + * walk over any folders that are not fully scanned yet and scan them + */ + public function backgroundScan() { + while ($path = $this->cache->getIncomplete()) { + $this->scan($path); + $this->cache->correctFolderSize($path); + } + } +} diff --git a/lib/files/cache/updater.php b/lib/files/cache/updater.php new file mode 100644 index 0000000000..d04541c219 --- /dev/null +++ b/lib/files/cache/updater.php @@ -0,0 +1,105 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +/** + * listen to filesystem hooks and change the cache accordingly + */ +class Updater { + + /** + * resolve a path to a storage and internal path + * + * @param string $path + * @return array consisting of the storage and the internal path + */ + static public function resolvePath($path) { + $view = \OC\Files\Filesystem::getView(); + return $view->resolvePath($path); + } + + static public function writeUpdate($path) { + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = self::resolvePath($path); + if ($storage) { + $cache = $storage->getCache($internalPath); + $scanner = $storage->getScanner($internalPath); + $scanner->scan($internalPath, Scanner::SCAN_SHALLOW); + $cache->correctFolderSize($internalPath); + self::correctFolder($path, $storage->filemtime($internalPath)); + } + } + + static public function deleteUpdate($path) { + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = self::resolvePath($path); + if ($storage) { + $cache = $storage->getCache($internalPath); + $cache->remove($internalPath); + $cache->correctFolderSize($internalPath); + self::correctFolder($path, time()); + } + } + + /** + * Update the mtime and ETag of all parent folders + * + * @param string $path + * @param string $time + */ + static public function correctFolder($path, $time) { + if ($path !== '' && $path !== '/') { + $parent = dirname($path); + if ($parent === '.') { + $parent = ''; + } + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = self::resolvePath($parent); + if ($storage) { + $cache = $storage->getCache(); + $id = $cache->getId($internalPath); + if ($id !== -1) { + $cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath))); + self::correctFolder($parent, $time); + } + } + } + } + + /** + * @param array $params + */ + static public function writeHook($params) { + self::writeUpdate($params['path']); + } + + /** + * @param array $params + */ + static public function renameHook($params) { + self::deleteUpdate($params['oldpath']); + self::writeUpdate($params['newpath']); + } + + /** + * @param array $params + */ + static public function deleteHook($params) { + self::deleteUpdate($params['path']); + } +} diff --git a/lib/files/cache/upgrade.php b/lib/files/cache/upgrade.php new file mode 100644 index 0000000000..eb8c7297c3 --- /dev/null +++ b/lib/files/cache/upgrade.php @@ -0,0 +1,159 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +class Upgrade { + /** + * @var Legacy $legacy + */ + private $legacy; + + private $numericIds = array(); + + private $mimeTypeIds = array(); + + /** + * @param Legacy $legacy + */ + public function __construct($legacy) { + $this->legacy = $legacy; + } + + /** + * Preform a shallow upgrade + * + * @param string $path + * @param int $mode + */ + function upgradePath($path, $mode = Scanner::SCAN_RECURSIVE) { + if (!$this->legacy->hasItems()) { + return; + } + \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $path); + + if ($row = $this->legacy->get($path)) { + $data = $this->getNewData($row); + $this->insert($data); + + $this->upgradeChilds($data['id'], $mode); + } + } + + /** + * @param int $id + */ + function upgradeChilds($id, $mode = Scanner::SCAN_RECURSIVE) { + $children = $this->legacy->getChildren($id); + foreach ($children as $child) { + $childData = $this->getNewData($child); + \OC_Hook::emit('\OC\Files\Cache\Upgrade', 'migrate_path', $child['path']); + $this->insert($childData); + if ($mode == Scanner::SCAN_RECURSIVE) { + $this->upgradeChilds($child['id']); + } + } + } + + /** + * @param array $data the data for the new cache + */ + function insert($data) { + if (!$this->inCache($data['storage'], $data['path_hash'])) { + $insertQuery = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` + ( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` ) + VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); + + $insertQuery->execute(array($data['id'], $data['storage'], $data['path'], $data['path_hash'], $data['parent'], $data['name'], + $data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted'])); + } + } + + /** + * @param string $storage + * @param string $pathHash + * @return bool + */ + function inCache($storage, $pathHash) { + $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?'); + $result = $query->execute(array($storage, $pathHash)); + return (bool)$result->fetchRow(); + } + + /** + * get the new data array from the old one + * + * @param array $data the data from the old cache + * @return array + */ + function getNewData($data) { + $newData = $data; + list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($data['path']); + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath; + */ + $newData['path_hash'] = md5($internalPath); + $newData['path'] = $internalPath; + $newData['storage'] = $this->getNumericId($storage); + $newData['parent'] = ($internalPath === '') ? -1 : $data['parent']; + $newData['permissions'] = ($data['writable']) ? \OCP\PERMISSION_ALL : \OCP\PERMISSION_READ; + $newData['storage_object'] = $storage; + $newData['mimetype'] = $this->getMimetypeId($newData['mimetype'], $storage); + $newData['mimepart'] = $this->getMimetypeId($newData['mimepart'], $storage); + return $newData; + } + + /** + * get the numeric storage id + * + * @param \OC\Files\Storage\Storage $storage + * @return int + */ + function getNumericId($storage) { + $storageId = $storage->getId(); + if (!isset($this->numericIds[$storageId])) { + $cache = $storage->getCache(); + $this->numericIds[$storageId] = $cache->getNumericStorageId(); + } + return $this->numericIds[$storageId]; + } + + /** + * @param string $mimetype + * @param \OC\Files\Storage\Storage $storage + * @return int + */ + function getMimetypeId($mimetype, $storage) { + if (!isset($this->mimeTypeIds[$mimetype])) { + $cache = new Cache($storage); + $this->mimeTypeIds[$mimetype] = $cache->getMimetypeId($mimetype); + } + return $this->mimeTypeIds[$mimetype]; + } + + /** + * check if a cache upgrade is required for $user + * + * @param string $user + * @return bool + */ + static function needUpgrade($user) { + $cacheVersion = (int)\OCP\Config::getUserValue($user, 'files', 'cache_version', 4); + return $cacheVersion < 5; + } + + /** + * mark the filecache as upgrade + * + * @param string $user + */ + static function upgradeDone($user) { + \OCP\Config::setUserValue($user, 'files', 'cache_version', 5); + } +} diff --git a/lib/files/cache/watcher.php b/lib/files/cache/watcher.php new file mode 100644 index 0000000000..31059ec7f5 --- /dev/null +++ b/lib/files/cache/watcher.php @@ -0,0 +1,72 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Cache; + +/** + * check the storage backends for updates and change the cache accordingly + */ +class Watcher { + /** + * @var \OC\Files\Storage\Storage $storage + */ + private $storage; + + /** + * @var Cache $cache + */ + private $cache; + + /** + * @var Scanner $scanner; + */ + private $scanner; + + /** + * @param \OC\Files\Storage\Storage $storage + */ + public function __construct(\OC\Files\Storage\Storage $storage) { + $this->storage = $storage; + $this->cache = $storage->getCache(); + $this->scanner = $storage->getScanner(); + } + + /** + * check $path for updates + * + * @param string $path + */ + public function checkUpdate($path) { + $cachedEntry = $this->cache->get($path); + if ($this->storage->hasUpdated($path, $cachedEntry['mtime'])) { + if ($this->storage->is_dir($path)) { + $this->scanner->scan($path, Scanner::SCAN_SHALLOW); + } else { + $this->scanner->scanFile($path); + } + if ($cachedEntry['mimetype'] === 'httpd/unix-directory') { + $this->cleanFolder($path); + } + $this->cache->correctFolderSize($path); + } + } + + /** + * remove deleted files in $path from the cache + * + * @param string $path + */ + public function cleanFolder($path) { + $cachedContent = $this->cache->getFolderContents($path); + foreach ($cachedContent as $entry) { + if (!$this->storage->file_exists($entry['path'])) { + $this->cache->remove($entry['path']); + } + } + } +} diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php new file mode 100644 index 0000000000..262fde320a --- /dev/null +++ b/lib/files/filesystem.php @@ -0,0 +1,628 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +/** + * Class for abstraction of filesystem functions + * This class won't call any filesystem functions for itself but but will pass them to the correct OC_Filestorage object + * this class should also handle all the file permission related stuff + * + * Hooks provided: + * read(path) + * write(path, &run) + * post_write(path) + * create(path, &run) (when a file is created, both create and write will be emitted in that order) + * post_create(path) + * delete(path, &run) + * post_delete(path) + * rename(oldpath,newpath, &run) + * post_rename(oldpath,newpath) + * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order) + * post_rename(oldpath,newpath) + * + * the &run parameter can be set to false to prevent the operation from occurring + */ + +namespace OC\Files; + +class Filesystem { + public static $loaded = false; + /** + * @var \OC\Files\View $defaultInstance + */ + static private $defaultInstance; + + + /** + * classname which used for hooks handling + * used as signalclass in OC_Hooks::emit() + */ + const CLASSNAME = 'OC_Filesystem'; + + /** + * signalname emitted before file renaming + * + * @param string $oldpath + * @param string $newpath + */ + const signal_rename = 'rename'; + + /** + * signal emitted after file renaming + * + * @param string $oldpath + * @param string $newpath + */ + const signal_post_rename = 'post_rename'; + + /** + * signal emitted before file/dir creation + * + * @param string $path + * @param bool $run changing this flag to false in hook handler will cancel event + */ + const signal_create = 'create'; + + /** + * signal emitted after file/dir creation + * + * @param string $path + * @param bool $run changing this flag to false in hook handler will cancel event + */ + const signal_post_create = 'post_create'; + + /** + * signal emits before file/dir copy + * + * @param string $oldpath + * @param string $newpath + * @param bool $run changing this flag to false in hook handler will cancel event + */ + const signal_copy = 'copy'; + + /** + * signal emits after file/dir copy + * + * @param string $oldpath + * @param string $newpath + */ + const signal_post_copy = 'post_copy'; + + /** + * signal emits before file/dir save + * + * @param string $path + * @param bool $run changing this flag to false in hook handler will cancel event + */ + const signal_write = 'write'; + + /** + * signal emits after file/dir save + * + * @param string $path + */ + const signal_post_write = 'post_write'; + + /** + * signal emits when reading file/dir + * + * @param string $path + */ + const signal_read = 'read'; + + /** + * signal emits when removing file/dir + * + * @param string $path + */ + const signal_delete = 'delete'; + + /** + * parameters definitions for signals + */ + const signal_param_path = 'path'; + const signal_param_oldpath = 'oldpath'; + const signal_param_newpath = 'newpath'; + + /** + * run - changing this flag to false in hook handler will cancel event + */ + const signal_param_run = 'run'; + + /** + * get the mountpoint of the storage object for a path + ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account + * + * @param string $path + * @return string + */ + static public function getMountPoint($path) { + $mount = Mount::find($path); + if ($mount) { + return $mount->getMountPoint(); + } else { + return ''; + } + } + + /** + * get a list of all mount points in a directory + * + * @param string $path + * @return string[] + */ + static public function getMountPoints($path) { + $result = array(); + $mounts = Mount::findIn($path); + foreach ($mounts as $mount) { + $result[] = $mount->getMountPoint(); + } + return $result; + } + + /** + * get the storage mounted at $mountPoint + * + * @param string $mountPoint + * @return \OC\Files\Storage\Storage + */ + public static function getStorage($mountPoint) { + $mount = Mount::find($mountPoint); + return $mount->getStorage(); + } + + /** + * resolve a path to a storage and internal path + * + * @param string $path + * @return array consisting of the storage and the internal path + */ + static public function resolvePath($path) { + $mount = Mount::find($path); + if ($mount) { + return array($mount->getStorage(), $mount->getInternalPath($path)); + } else { + return array(null, null); + } + } + + static public function init($root) { + if (self::$defaultInstance) { + return false; + } + self::$defaultInstance = new View($root); + + //load custom mount config + self::initMountPoints(); + + self::$loaded = true; + + return true; + } + + /** + * Initialize system and personal mount points for a user + * + * @param string $user + */ + public static function initMountPoints($user = '') { + if ($user == '') { + $user = \OC_User::getUser(); + } + // Load system mount points + if (is_file(\OC::$SERVERROOT . '/config/mount.php')) { + $mountConfig = include 'config/mount.php'; + if (isset($mountConfig['global'])) { + foreach ($mountConfig['global'] as $mountPoint => $options) { + self::mount($options['class'], $options['options'], $mountPoint); + } + } + if (isset($mountConfig['group'])) { + foreach ($mountConfig['group'] as $group => $mounts) { + if (\OC_Group::inGroup($user, $group)) { + foreach ($mounts as $mountPoint => $options) { + $mountPoint = self::setUserVars($user, $mountPoint); + foreach ($options as &$option) { + $option = self::setUserVars($user, $option); + } + self::mount($options['class'], $options['options'], $mountPoint); + } + } + } + } + if (isset($mountConfig['user'])) { + foreach ($mountConfig['user'] as $mountUser => $mounts) { + if ($user === 'all' or strtolower($mountUser) === strtolower($user)) { + foreach ($mounts as $mountPoint => $options) { + $mountPoint = self::setUserVars($user, $mountPoint); + foreach ($options as &$option) { + $option = self::setUserVars($user, $option); + } + self::mount($options['class'], $options['options'], $mountPoint); + } + } + } + } + } + // Load personal mount points + $root = \OC_User::getHome($user); + self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user); + if (is_file($root . '/mount.php')) { + $mountConfig = include $root . '/mount.php'; + if (isset($mountConfig['user'][$user])) { + foreach ($mountConfig['user'][$user] as $mountPoint => $options) { + self::mount($options['class'], $options['options'], $mountPoint); + } + } + } + } + + /** + * fill in the correct values for $user, and $password placeholders + * + * @param string $input + * @param string $input + * @return string + */ + private static function setUserVars($user, $input) { + return str_replace('$user', $user, $input); + } + + /** + * get the default filesystem view + * + * @return View + */ + static public function getView() { + return self::$defaultInstance; + } + + /** + * tear down the filesystem, removing all storage providers + */ + static public function tearDown() { + self::clearMounts(); + } + + /** + * @brief get the relative path of the root data directory for the current user + * @return string + * + * Returns path like /admin/files + */ + static public function getRoot() { + return self::$defaultInstance->getRoot(); + } + + /** + * clear all mounts and storage backends + */ + public static function clearMounts() { + Mount::clear(); + } + + /** + * mount an \OC\Files\Storage\Storage in our virtual filesystem + * + * @param \OC\Files\Storage\Storage|string $class + * @param array $arguments + * @param string $mountpoint + */ + static public function mount($class, $arguments, $mountpoint) { + new Mount($class, $mountpoint, $arguments); + } + + /** + * return the path to a local version of the file + * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed + * + * @param string $path + * @return string + */ + static public function getLocalFile($path) { + return self::$defaultInstance->getLocalFile($path); + } + + /** + * @param string $path + * @return string + */ + static public function getLocalFolder($path) { + return self::$defaultInstance->getLocalFolder($path); + } + + /** + * return path to file which reflects one visible in browser + * + * @param string $path + * @return string + */ + static public function getLocalPath($path) { + $datadir = \OC_User::getHome(\OC_User::getUser()) . '/files'; + $newpath = $path; + if (strncmp($newpath, $datadir, strlen($datadir)) == 0) { + $newpath = substr($path, strlen($datadir)); + } + return $newpath; + } + + /** + * check if the requested path is valid + * + * @param string $path + * @return bool + */ + static public function isValidPath($path) { + $path = self::normalizePath($path); + if (!$path || $path[0] !== '/') { + $path = '/' . $path; + } + if (strstr($path, '/../') || strrchr($path, '/') === '/..') { + return false; + } + return true; + } + + /** + * checks if a file is blacklisted for storage in the filesystem + * Listens to write and rename hooks + * + * @param array $data from hook + */ + static public function isBlacklisted($data) { + $blacklist = array('.htaccess'); + if (isset($data['path'])) { + $path = $data['path']; + } else if (isset($data['newpath'])) { + $path = $data['newpath']; + } + if (isset($path)) { + $filename = strtolower(basename($path)); + if (in_array($filename, $blacklist)) { + $data['run'] = false; + } + } + } + + /** + * following functions are equivalent to their php builtin equivalents for arguments/return values. + */ + static public function mkdir($path) { + return self::$defaultInstance->mkdir($path); + } + + static public function rmdir($path) { + return self::$defaultInstance->rmdir($path); + } + + 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); + } + + static public function is_file($path) { + return self::$defaultInstance->is_file($path); + } + + static public function stat($path) { + return self::$defaultInstance->stat($path); + } + + static public function filetype($path) { + return self::$defaultInstance->filetype($path); + } + + static public function filesize($path) { + return self::$defaultInstance->filesize($path); + } + + static public function readfile($path) { + return self::$defaultInstance->readfile($path); + } + + static public function isCreatable($path) { + return self::$defaultInstance->isCreatable($path); + } + + static public function isReadable($path) { + return self::$defaultInstance->isReadable($path); + } + + static public function isUpdatable($path) { + return self::$defaultInstance->isUpdatable($path); + } + + static public function isDeletable($path) { + return self::$defaultInstance->isDeletable($path); + } + + static public function isSharable($path) { + return self::$defaultInstance->isSharable($path); + } + + static public function file_exists($path) { + return self::$defaultInstance->file_exists($path); + } + + static public function filemtime($path) { + return self::$defaultInstance->filemtime($path); + } + + static public function touch($path, $mtime = null) { + return self::$defaultInstance->touch($path, $mtime); + } + + static public function file_get_contents($path) { + return self::$defaultInstance->file_get_contents($path); + } + + static public function file_put_contents($path, $data) { + return self::$defaultInstance->file_put_contents($path, $data); + } + + static public function unlink($path) { + return self::$defaultInstance->unlink($path); + } + + static public function rename($path1, $path2) { + return self::$defaultInstance->rename($path1, $path2); + } + + static public function copy($path1, $path2) { + return self::$defaultInstance->copy($path1, $path2); + } + + static public function fopen($path, $mode) { + return self::$defaultInstance->fopen($path, $mode); + } + + static public function toTmpFile($path) { + return self::$defaultInstance->toTmpFile($path); + } + + static public function fromTmpFile($tmpFile, $path) { + return self::$defaultInstance->fromTmpFile($tmpFile, $path); + } + + static public function getMimeType($path) { + return self::$defaultInstance->getMimeType($path); + } + + static public function hash($type, $path, $raw = false) { + return self::$defaultInstance->hash($type, $path, $raw); + } + + static public function free_space($path = '/') { + return self::$defaultInstance->free_space($path); + } + + static public function search($query) { + return self::$defaultInstance->search($query); + } + + static public function searchByMime($query) { + return self::$defaultInstance->searchByMime($query); + } + + /** + * check if a file or folder has been updated since $time + * + * @param string $path + * @param int $time + * @return bool + */ + static public function hasUpdated($path, $time) { + return self::$defaultInstance->hasUpdated($path, $time); + } + + /** + * normalize a path + * + * @param string $path + * @param bool $stripTrailingSlash + * @return string + */ + public static function normalizePath($path, $stripTrailingSlash = true) { + if ($path == '') { + return '/'; + } +//no windows style slashes + $path = str_replace('\\', '/', $path); +//add leading slash + if ($path[0] !== '/') { + $path = '/' . $path; + } +//remove duplicate slashes + while (strpos($path, '//') !== false) { + $path = str_replace('//', '/', $path); + } +//remove trailing slash + if ($stripTrailingSlash and strlen($path) > 1 and substr($path, -1, 1) === '/') { + $path = substr($path, 0, -1); + } +//normalize unicode if possible + if (class_exists('Normalizer')) { + $path = \Normalizer::normalize($path); + } + return $path; + } + + /** + * get the filesystem info + * + * @param string $path + * @return array + * + * returns an associative array with the following keys: + * - size + * - mtime + * - mimetype + * - encrypted + * - versioned + */ + public static function getFileInfo($path) { + return self::$defaultInstance->getFileInfo($path); + } + + /** + * change file metadata + * + * @param string $path + * @param array $data + * @return int + * + * returns the fileid of the updated file + */ + public static function putFileInfo($path, $data) { + return self::$defaultInstance->putFileInfo($path, $data); + } + + /** + * get the content of a directory + * + * @param string $directory path under datadirectory + * @return array + */ + public static function getDirectoryContent($directory) { + return self::$defaultInstance->getDirectoryContent($directory); + } + + /** + * Get the path of a file by id + * + * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file + * + * @param int $id + * @return string + */ + public static function getPath($id) { + return self::$defaultInstance->getPath($id); + } + + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + static public function getETag($path) { + return self::$defaultInstance->getETag($path); + } +} + +\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook'); +\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook'); +\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook'); + +\OC_Util::setupFS(); diff --git a/lib/files/mount.php b/lib/files/mount.php new file mode 100644 index 0000000000..74ee483b1b --- /dev/null +++ b/lib/files/mount.php @@ -0,0 +1,188 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files; + +class Mount { + /** + * @var Mount[] + */ + static private $mounts = array(); + + /** + * @var \OC\Files\Storage\Storage $storage + */ + private $storage = null; + private $class; + private $storageId; + private $arguments = array(); + private $mountPoint; + + /** + * @param string|\OC\Files\Storage\Storage $storage + * @param string $mountpoint + * @param array $arguments (optional) + */ + public function __construct($storage, $mountpoint, $arguments = null) { + if (is_null($arguments)) { + $arguments = array(); + } + + $mountpoint = self::formatPath($mountpoint); + if ($storage instanceof \OC\Files\Storage\Storage) { + $this->class = get_class($storage); + $this->storage = $storage; + } else { + // Update old classes to new namespace + if (strpos($storage, 'OC_Filestorage_') !== false) { + $storage = '\OC\Files\Storage\\' . substr($storage, 15); + } + $this->class = $storage; + $this->arguments = $arguments; + } + $this->mountPoint = $mountpoint; + + self::$mounts[$this->mountPoint] = $this; + } + + /** + * @return string + */ + public function getMountPoint() { + return $this->mountPoint; + } + + /** + * @return \OC\Files\Storage\Storage + */ + private function createStorage() { + if (class_exists($this->class)) { + try { + return new $this->class($this->arguments); + } catch (\Exception $exception) { + \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR); + return null; + } + } else { + \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR); + return null; + } + } + + /** + * @return \OC\Files\Storage\Storage + */ + public function getStorage() { + if (is_null($this->storage)) { + $this->storage = $this->createStorage(); + } + return $this->storage; + } + + /** + * @return string + */ + public function getStorageId() { + if (!$this->storageId) { + if (is_null($this->storage)) { + $this->storage = $this->createStorage(); + } + $this->storageId = $this->storage->getId(); + } + return $this->storageId; + } + + /** + * @param string $path + * @return string + */ + public function getInternalPath($path) { + if ($this->mountPoint === $path or $this->mountPoint . '/' === $path) { + $internalPath = ''; + } else { + $internalPath = substr($path, strlen($this->mountPoint)); + } + return $internalPath; + } + + /** + * @param string $path + * @return string + */ + private static function formatPath($path) { + $path = Filesystem::normalizePath($path); + if (strlen($path) > 1) { + $path .= '/'; + } + return $path; + } + + /** + * Find the mount for $path + * + * @param $path + * @return Mount + */ + public static function find($path) { + $path = self::formatPath($path); + if (isset(self::$mounts[$path])) { + return self::$mounts[$path]; + } + + \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path)); + $foundMountPoint = ''; + $mountPoints = array_keys(self::$mounts); + foreach ($mountPoints as $mountpoint) { + if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) { + $foundMountPoint = $mountpoint; + } + } + if (isset(self::$mounts[$foundMountPoint])) { + return self::$mounts[$foundMountPoint]; + } else { + return null; + } + } + + /** + * Find all mounts in $path + * + * @param $path + * @return Mount[] + */ + public static function findIn($path) { + $path = self::formatPath($path); + $result = array(); + $pathLength = strlen($path); + $mountPoints = array_keys(self::$mounts); + foreach ($mountPoints as $mountPoint) { + if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) { + $result[] = self::$mounts[$mountPoint]; + } + } + return $result; + } + + public static function clear() { + self::$mounts = array(); + } + + /** + * @param string $id + * @return \OC\Files\Storage\Storage[] + */ + public static function findById($id) { + $result = array(); + foreach (self::$mounts as $mount) { + if ($mount->getStorageId() === $id) { + $result[] = $mount; + } + } + return $result; + } +} diff --git a/lib/filestorage/common.php b/lib/files/storage/common.php similarity index 51% rename from lib/filestorage/common.php rename to lib/files/storage/common.php index b97eb79d8d..591803f044 100644 --- a/lib/filestorage/common.php +++ b/lib/files/storage/common.php @@ -1,51 +1,34 @@ . -*/ + * Copyright (c) 2012 Robin Appelman + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Storage; /** * Storage backend class for providing common filesystem operation methods * which are not storage-backend specific. * - * OC_Filestorage_Common is never used directly; it is extended by all other + * \OC\Files\Storage\Common is never used directly; it is extended by all other * storage backends, where its methods may be overridden, and additional * (backend-specific) methods are defined. * - * Some OC_Filestorage_Common methods call functions which are first defined + * Some \OC\Files\Storage\Common methods call functions which are first defined * in classes which extend it, e.g. $this->stat() . */ -abstract class OC_Filestorage_Common extends OC_Filestorage { +abstract class Common implements \OC\Files\Storage\Storage { public function __construct($parameters) {} -// abstract public function mkdir($path); -// abstract public function rmdir($path); -// abstract public function opendir($path); public function is_dir($path) { return $this->filetype($path)=='dir'; } public function is_file($path) { return $this->filetype($path)=='file'; } -// abstract public function stat($path); -// abstract public function filetype($path); public function filesize($path) { if($this->is_dir($path)) { return 0;//by definition @@ -55,29 +38,40 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { } } public function isCreatable($path) { - return $this->isUpdatable($path); + if ($this->is_dir($path) && $this->isUpdatable($path)) { + return true; + } + return false; } -// abstract public function isReadable($path); -// abstract public function isUpdatable($path); public function isDeletable($path) { return $this->isUpdatable($path); } public function isSharable($path) { return $this->isReadable($path); } -// abstract public function file_exists($path); - public function filectime($path) { - $stat = $this->stat($path); - return $stat['ctime']; + public function getPermissions($path){ + $permissions = 0; + if($this->isCreatable($path)){ + $permissions |= \OCP\PERMISSION_CREATE; + } + if($this->isReadable($path)){ + $permissions |= \OCP\PERMISSION_READ; + } + if($this->isUpdatable($path)){ + $permissions |= \OCP\PERMISSION_UPDATE; + } + if($this->isDeletable($path)){ + $permissions |= \OCP\PERMISSION_DELETE; + } + if($this->isSharable($path)){ + $permissions |= \OCP\PERMISSION_SHARE; + } + return $permissions; } public function filemtime($path) { $stat = $this->stat($path); return $stat['mtime']; } - public function fileatime($path) { - $stat = $this->stat($path); - return $stat['atime']; - } public function file_get_contents($path) { $handle = $this->fopen($path, "r"); if(!$handle) { @@ -89,94 +83,58 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { } return fread($handle, $size); } - public function file_put_contents($path, $data) { + public function file_put_contents($path,$data) { $handle = $this->fopen($path, "w"); return fwrite($handle, $data); } -// abstract public function unlink($path); - public function rename($path1, $path2) { - if($this->copy($path1, $path2)) { + public function rename($path1,$path2) { + if($this->copy($path1,$path2)) { return $this->unlink($path1); }else{ return false; } } - public function copy($path1, $path2) { - $source=$this->fopen($path1, 'r'); - $target=$this->fopen($path2, 'w'); - $count=OC_Helper::streamCopy($source, $target); + public function copy($path1,$path2) { + $source=$this->fopen($path1,'r'); + $target=$this->fopen($path2,'w'); + $count=\OC_Helper::streamCopy($source,$target); return $count>0; } -// abstract public function fopen($path, $mode); /** * @brief Deletes all files and folders recursively within a directory - * @param $directory The directory whose contents will be deleted - * @param $empty Flag indicating whether directory will be emptied - * @returns true/false + * @param string $directory The directory whose contents will be deleted + * @param bool $empty Flag indicating whether directory will be emptied + * @returns bool * * @note By default the directory specified by $directory will be * deleted together with its contents. To avoid this set $empty to true */ public function deleteAll( $directory, $empty = false ) { - - // strip leading slash - if( substr( $directory, 0, 1 ) == "/" ) { - - $directory = substr( $directory, 1 ); - - } - - // strip trailing slash - if( substr( $directory, -1) == "/" ) { - - $directory = substr( $directory, 0, -1 ); - - } + $directory = trim($directory,'/'); if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) { - return false; - - } elseif( !$this->is_readable( \OCP\USER::getUser() . '/' . $directory ) ) { - + } elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) { return false; - } else { - $directoryHandle = $this->opendir( \OCP\USER::getUser() . '/' . $directory ); - while ( $contents = readdir( $directoryHandle ) ) { - if ( $contents != '.' && $contents != '..') { - $path = $directory . "/" . $contents; - if ( $this->is_dir( $path ) ) { - - deleteAll( $path ); - + $this->deleteAll( $path ); } else { - $this->unlink( \OCP\USER::getUser() .'/' . $path ); // TODO: make unlink use same system path as is_dir - } } - } - //$this->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV - if ( $empty == false ) { - if ( !$this->rmdir( $directory ) ) { - - return false; - + return false; } - } - return true; } @@ -188,73 +146,71 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { if($this->is_dir($path)) { return 'httpd/unix-directory'; } - $source=$this->fopen($path, 'r'); + $source=$this->fopen($path,'r'); if(!$source) { return false; } - $head=fread($source, 8192);//8kb should suffice to determine a mimetype - if($pos=strrpos($path, '.')) { - $extension=substr($path, $pos); + $head=fread($source,8192);//8kb should suffice to determine a mimetype + if($pos=strrpos($path,'.')) { + $extension=substr($path,$pos); }else{ $extension=''; } - $tmpFile=OC_Helper::tmpFile($extension); - file_put_contents($tmpFile, $head); - $mime=OC_Helper::getMimeType($tmpFile); + $tmpFile=\OC_Helper::tmpFile($extension); + file_put_contents($tmpFile,$head); + $mime=\OC_Helper::getMimeType($tmpFile); unlink($tmpFile); return $mime; } - public function hash($type, $path, $raw = false) { - $tmpFile=$this->getLocalFile(); - $hash=hash($type, $tmpFile, $raw); + public function hash($type,$path,$raw = false) { + $tmpFile=$this->getLocalFile($path); + $hash=hash($type,$tmpFile,$raw); unlink($tmpFile); return $hash; } -// abstract public function free_space($path); public function search($query) { return $this->searchInDir($query); } public function getLocalFile($path) { return $this->toTmpFile($path); } - private function toTmpFile($path) {//no longer in the storage api, still usefull here - $source=$this->fopen($path, 'r'); + private function toTmpFile($path) {//no longer in the storage api, still useful here + $source=$this->fopen($path,'r'); if(!$source) { return false; } - if($pos=strrpos($path, '.')) { - $extension=substr($path, $pos); + if($pos=strrpos($path,'.')) { + $extension=substr($path,$pos); }else{ $extension=''; } - $tmpFile=OC_Helper::tmpFile($extension); - $target=fopen($tmpFile, 'w'); - OC_Helper::streamCopy($source, $target); + $tmpFile=\OC_Helper::tmpFile($extension); + $target=fopen($tmpFile,'w'); + \OC_Helper::streamCopy($source,$target); return $tmpFile; } public function getLocalFolder($path) { - $baseDir=OC_Helper::tmpFolder(); - $this->addLocalFolder($path, $baseDir); + $baseDir=\OC_Helper::tmpFolder(); + $this->addLocalFolder($path,$baseDir); return $baseDir; } - private function addLocalFolder($path, $target) { + private function addLocalFolder($path,$target) { if($dh=$this->opendir($path)) { while($file=readdir($dh)) { if($file!=='.' and $file!=='..') { if($this->is_dir($path.'/'.$file)) { mkdir($target.'/'.$file); - $this->addLocalFolder($path.'/'.$file, $target.'/'.$file); + $this->addLocalFolder($path.'/'.$file,$target.'/'.$file); }else{ $tmp=$this->toTmpFile($path.'/'.$file); - rename($tmp, $target.'/'.$file); + rename($tmp,$target.'/'.$file); } } } } } -// abstract public function touch($path, $mtime=null); - protected function searchInDir($query, $dir='') { + protected function searchInDir($query,$dir='') { $files=array(); $dh=$this->opendir($dir); if($dh) { @@ -264,7 +220,7 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { $files[]=$dir.'/'.$item; } if($this->is_dir($dir.'/'.$item)) { - $files=array_merge($files, $this->searchInDir($query, $dir.'/'.$item)); + $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item)); } } } @@ -273,19 +229,52 @@ abstract class OC_Filestorage_Common extends OC_Filestorage { /** * check if a file or folder has been updated since $time + * @param string $path * @param int $time * @return bool */ - public function hasUpdated($path, $time) { + public function hasUpdated($path,$time) { return $this->filemtime($path)>$time; } + public function getCache($path=''){ + return new \OC\Files\Cache\Cache($this); + } + + public function getScanner($path=''){ + return new \OC\Files\Cache\Scanner($this); + } + + public function getPermissionsCache($path=''){ + return new \OC\Files\Cache\Permissions($this); + } + + public function getWatcher($path=''){ + return new \OC\Files\Cache\Watcher($this); + } + /** * get the owner of a path - * @param $path The path to get the owner + * @param string $path The path to get the owner * @return string uid or false */ public function getOwner($path) { - return OC_User::getUser(); + return \OC_User::getUser(); + } + + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + public function getETag($path){ + $ETagFunction = \OC_Connector_Sabre_Node::$ETagFunction; + if($ETagFunction) { + $hash = call_user_func($ETagFunction, $path); + return $hash; + }else{ + return uniqid(); + } } } diff --git a/lib/filestorage/commontest.php b/lib/files/storage/commontest.php similarity index 85% rename from lib/filestorage/commontest.php rename to lib/files/storage/commontest.php index 3b038b3fda..fbdb7fbf11 100644 --- a/lib/filestorage/commontest.php +++ b/lib/files/storage/commontest.php @@ -22,20 +22,25 @@ */ /** - * test implementation for OC_FileStorage_Common with OC_FileStorage_Local + * test implementation for \OC\Files\Storage\Common with \OC\Files\Storage\Local */ -class OC_Filestorage_CommonTest extends OC_Filestorage_Common{ +namespace OC\Files\Storage; + +class CommonTest extends \OC\Files\Storage\Common{ /** * underlying local storage used for missing functions - * @var OC_FileStorage_Local + * @var \OC\Files\Storage\Local */ private $storage; public function __construct($params) { - $this->storage=new OC_Filestorage_Local($params); + $this->storage=new \OC\Files\Storage\Local($params); } + public function getId(){ + return 'test::'.$this->storage->getId(); + } public function mkdir($path) { return $this->storage->mkdir($path); } diff --git a/lib/filestorage/local.php b/lib/files/storage/local.php similarity index 90% rename from lib/filestorage/local.php rename to lib/files/storage/local.php index 4a4019a322..9fc9d375bb 100644 --- a/lib/filestorage/local.php +++ b/lib/files/storage/local.php @@ -1,8 +1,17 @@ + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Storage; + /** * for local filestore, we only have to map the paths */ -class OC_Filestorage_Local extends OC_Filestorage_Common{ +class Local extends \OC\Files\Storage\Common{ protected $datadir; public function __construct($arguments) { $this->datadir=$arguments['datadir']; @@ -10,6 +19,9 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ $this->datadir.='/'; } } + public function getId(){ + return 'local::'.$this->datadir; + } public function mkdir($path) { return @mkdir($this->datadir.$path); } @@ -20,7 +32,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ return opendir($this->datadir.$path); } public function is_dir($path) { - if(substr($path, -1)=='/') { + if(substr($path,-1)=='/') { $path=substr($path, 0, -1); } return is_dir($this->datadir.$path); @@ -68,9 +80,6 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ public function file_exists($path) { return file_exists($this->datadir.$path); } - public function filectime($path) { - return filectime($this->datadir.$path); - } public function filemtime($path) { return filemtime($this->datadir.$path); } @@ -100,11 +109,11 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ } public function rename($path1, $path2) { if (!$this->isUpdatable($path1)) { - OC_Log::write('core', 'unable to rename, file is not writable : '.$path1, OC_Log::ERROR); + \OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR); return false; } if(! $this->file_exists($path1)) { - OC_Log::write('core', 'unable to rename, file does not exists : '.$path1, OC_Log::ERROR); + \OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR); return false; } @@ -143,7 +152,7 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ public function getMimeType($path) { if($this->isReadable($path)) { - return OC_Helper::getMimeType($this->datadir.$path); + return \OC_Helper::getMimeType($this->datadir . $path); }else{ return false; } diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php new file mode 100644 index 0000000000..2cc835236b --- /dev/null +++ b/lib/files/storage/storage.php @@ -0,0 +1,88 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Storage; + +/** + * Provide a common interface to all different storage options + */ +interface Storage{ + public function __construct($parameters); + public function getId(); + public function mkdir($path); + public function rmdir($path); + public function opendir($path); + public function is_dir($path); + public function is_file($path); + public function stat($path); + public function filetype($path); + public function filesize($path); + public function isCreatable($path); + public function isReadable($path); + public function isUpdatable($path); + public function isDeletable($path); + public function isSharable($path); + public function getPermissions($path); + public function file_exists($path); + public function filemtime($path); + public function file_get_contents($path); + public function file_put_contents($path,$data); + public function unlink($path); + public function rename($path1,$path2); + public function copy($path1,$path2); + public function fopen($path,$mode); + public function getMimeType($path); + public function hash($type,$path,$raw = false); + public function free_space($path); + public function search($query); + public function touch($path, $mtime=null); + public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote + public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote + /** + * check if a file or folder has been updated since $time + * @param int $time + * @return bool + * + * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed. + * returning true for other changes in the folder is optional + */ + public function hasUpdated($path,$time); + + /** + * @param string $path + * @return \OC\Files\Cache\Cache + */ + public function getCache($path=''); + /** + * @param string $path + * @return \OC\Files\Cache\Scanner + */ + public function getScanner($path=''); + + public function getOwner($path); + + /** + * @param string $path + * @return \OC\Files\Cache\Permissions + */ + public function getPermissionsCache($path=''); + + /** + * @param string $path + * @return \OC\Files\Cache\Watcher + */ + public function getWatcher($path=''); + + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + public function getETag($path); +} diff --git a/lib/files/storage/temporary.php b/lib/files/storage/temporary.php new file mode 100644 index 0000000000..ffc55e2750 --- /dev/null +++ b/lib/files/storage/temporary.php @@ -0,0 +1,26 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Storage; + +/** + * local storage backnd in temporary folder for testing purpores + */ +class Temporary extends Local{ + public function __construct($arguments) { + $this->datadir=\OC_Helper::tmpFolder(); + } + + public function cleanUp() { + \OC_Helper::rmdirr($this->datadir); + } + + public function __destruct() { + $this->cleanUp(); + } +} diff --git a/lib/files/stream/close.php b/lib/files/stream/close.php new file mode 100644 index 0000000000..80de3497c3 --- /dev/null +++ b/lib/files/stream/close.php @@ -0,0 +1,100 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Stream; + +/** + * stream wrapper that provides a callback on stream close + */ +class Close { + private static $callBacks = array(); + private $path = ''; + private $source; + private static $open = array(); + + public function stream_open($path, $mode, $options, &$opened_path) { + $path = substr($path, strlen('close://')); + $this->path = $path; + $this->source = fopen($path, $mode); + if (is_resource($this->source)) { + $this->meta = stream_get_meta_data($this->source); + } + self::$open[] = $path; + return is_resource($this->source); + } + + public function stream_seek($offset, $whence = SEEK_SET) { + fseek($this->source, $offset, $whence); + } + + public function stream_tell() { + return ftell($this->source); + } + + public function stream_read($count) { + return fread($this->source, $count); + } + + public function stream_write($data) { + return fwrite($this->source, $data); + } + + public function stream_set_option($option, $arg1, $arg2) { + switch ($option) { + case STREAM_OPTION_BLOCKING: + stream_set_blocking($this->source, $arg1); + break; + case STREAM_OPTION_READ_TIMEOUT: + stream_set_timeout($this->source, $arg1, $arg2); + break; + case STREAM_OPTION_WRITE_BUFFER: + stream_set_write_buffer($this->source, $arg1, $arg2); + } + } + + public function stream_stat() { + return fstat($this->source); + } + + public function stream_lock($mode) { + flock($this->source, $mode); + } + + public function stream_flush() { + return fflush($this->source); + } + + public function stream_eof() { + return feof($this->source); + } + + public function url_stat($path) { + $path = substr($path, strlen('close://')); + if (file_exists($path)) { + return stat($path); + } else { + return false; + } + } + + public function stream_close() { + fclose($this->source); + if (isset(self::$callBacks[$this->path])) { + call_user_func(self::$callBacks[$this->path], $this->path); + } + } + + public function unlink($path) { + $path = substr($path, strlen('close://')); + return unlink($path); + } + + public static function registerCallback($path, $callback) { + self::$callBacks[$path] = $callback; + } +} diff --git a/lib/files/stream/dir.php b/lib/files/stream/dir.php new file mode 100644 index 0000000000..6ca884fc99 --- /dev/null +++ b/lib/files/stream/dir.php @@ -0,0 +1,47 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Stream; + +class Dir { + private static $dirs = array(); + private $name; + private $index; + + public function dir_opendir($path, $options) { + $this->name = substr($path, strlen('fakedir://')); + $this->index = 0; + if (!isset(self::$dirs[$this->name])) { + self::$dirs[$this->name] = array(); + } + return true; + } + + public function dir_readdir() { + if ($this->index >= count(self::$dirs[$this->name])) { + return false; + } + $filename = self::$dirs[$this->name][$this->index]; + $this->index++; + return $filename; + } + + public function dir_closedir() { + $this->name = ''; + return true; + } + + public function dir_rewinddir() { + $this->index = 0; + return true; + } + + public static function register($path, $content) { + self::$dirs[$path] = $content; + } +} diff --git a/lib/files/stream/oc.php b/lib/files/stream/oc.php new file mode 100644 index 0000000000..88e7e062df --- /dev/null +++ b/lib/files/stream/oc.php @@ -0,0 +1,129 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Stream; + +/** + * a stream wrappers for ownCloud's virtual filesystem + */ +class OC { + /** + * @var \OC\Files\View + */ + static private $rootView; + + private $path; + private $dirSource; + private $fileSource; + private $meta; + + private function setup(){ + if (!self::$rootView) { + self::$rootView = new \OC\Files\View(''); + } + } + + public function stream_open($path, $mode, $options, &$opened_path) { + $this->setup(); + $path = substr($path, strlen('oc://')); + $this->path = $path; + $this->fileSource = self::$rootView->fopen($path, $mode); + if (is_resource($this->fileSource)) { + $this->meta = stream_get_meta_data($this->fileSource); + } + return is_resource($this->fileSource); + } + + public function stream_seek($offset, $whence = SEEK_SET) { + fseek($this->fileSource, $offset, $whence); + } + + public function stream_tell() { + return ftell($this->fileSource); + } + + public function stream_read($count) { + return fread($this->fileSource, $count); + } + + public function stream_write($data) { + return fwrite($this->fileSource, $data); + } + + public function stream_set_option($option, $arg1, $arg2) { + switch ($option) { + case STREAM_OPTION_BLOCKING: + stream_set_blocking($this->fileSource, $arg1); + break; + case STREAM_OPTION_READ_TIMEOUT: + stream_set_timeout($this->fileSource, $arg1, $arg2); + break; + case STREAM_OPTION_WRITE_BUFFER: + stream_set_write_buffer($this->fileSource, $arg1, $arg2); + } + } + + public function stream_stat() { + return fstat($this->fileSource); + } + + public function stream_lock($mode) { + flock($this->fileSource, $mode); + } + + public function stream_flush() { + return fflush($this->fileSource); + } + + public function stream_eof() { + return feof($this->fileSource); + } + + public function url_stat($path) { + $this->setup(); + $path = substr($path, strlen('oc://')); + if (self::$rootView->file_exists($path)) { + return self::$rootView->stat($path); + } else { + return false; + } + } + + public function stream_close() { + fclose($this->fileSource); + } + + public function unlink($path) { + $this->setup(); + $path = substr($path, strlen('oc://')); + return self::$rootView->unlink($path); + } + + public function dir_opendir($path, $options) { + $this->setup(); + $path = substr($path, strlen('oc://')); + $this->path = $path; + $this->dirSource = self::$rootView->opendir($path); + if (is_resource($this->dirSource)) { + $this->meta = stream_get_meta_data($this->dirSource); + } + return is_resource($this->dirSource); + } + + public function dir_readdir() { + return readdir($this->dirSource); + } + + public function dir_closedir() { + closedir($this->dirSource); + } + + public function dir_rewinddir() { + rewinddir($this->dirSource); + } +} diff --git a/lib/streamwrappers.php b/lib/files/stream/staticstream.php similarity index 57% rename from lib/streamwrappers.php rename to lib/files/stream/staticstream.php index 981c280f0d..7725a6a5a0 100644 --- a/lib/streamwrappers.php +++ b/lib/files/stream/staticstream.php @@ -1,54 +1,30 @@ + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ -class OC_FakeDirStream{ - public static $dirs=array(); - private $name; - private $index; +namespace OC\Files\Stream; - public function dir_opendir($path, $options) { - $this->name=substr($path, strlen('fakedir://')); - $this->index=0; - if(!isset(self::$dirs[$this->name])) { - self::$dirs[$this->name]=array(); - } - return true; - } - - public function dir_readdir() { - if($this->index>=count(self::$dirs[$this->name])) { - return false; - } - $filename=self::$dirs[$this->name][$this->index]; - $this->index++; - return $filename; - } - - public function dir_closedir() { - $this->name=''; - return true; - } - - public function dir_rewinddir() { - $this->index=0; - return true; - } -} - -class OC_StaticStreamWrapper { +class StaticStream { public $context; protected static $data = array(); - protected $path = ''; + protected $path = ''; protected $pointer = 0; protected $writable = false; - public function stream_close() {} + public function stream_close() { + } public function stream_eof() { return $this->pointer >= strlen(self::$data[$this->path]); } - public function stream_flush() {} + public function stream_flush() { + } public function stream_open($path, $mode, $options, &$opened_path) { switch ($mode[0]) { @@ -213,89 +189,3 @@ class OC_StaticStreamWrapper { return false; } } - -/** - * stream wrapper that provides a callback on stream close - */ -class OC_CloseStreamWrapper{ - public static $callBacks=array(); - private $path=''; - private $source; - private static $open=array(); - public function stream_open($path, $mode, $options, &$opened_path) { - $path=substr($path, strlen('close://')); - $this->path=$path; - $this->source=fopen($path, $mode); - if(is_resource($this->source)) { - $this->meta=stream_get_meta_data($this->source); - } - self::$open[]=$path; - return is_resource($this->source); - } - - public function stream_seek($offset, $whence=SEEK_SET) { - fseek($this->source, $offset, $whence); - } - - public function stream_tell() { - return ftell($this->source); - } - - public function stream_read($count) { - return fread($this->source, $count); - } - - public function stream_write($data) { - return fwrite($this->source, $data); - } - - public function stream_set_option($option, $arg1, $arg2) { - switch($option) { - case STREAM_OPTION_BLOCKING: - stream_set_blocking($this->source, $arg1); - break; - case STREAM_OPTION_READ_TIMEOUT: - stream_set_timeout($this->source, $arg1, $arg2); - break; - case STREAM_OPTION_WRITE_BUFFER: - stream_set_write_buffer($this->source, $arg1, $arg2); - } - } - - public function stream_stat() { - return fstat($this->source); - } - - public function stream_lock($mode) { - flock($this->source, $mode); - } - - public function stream_flush() { - return fflush($this->source); - } - - public function stream_eof() { - return feof($this->source); - } - - public function url_stat($path) { - $path=substr($path, strlen('close://')); - if(file_exists($path)) { - return stat($path); - }else{ - return false; - } - } - - public function stream_close() { - fclose($this->source); - if(isset(self::$callBacks[$this->path])) { - call_user_func(self::$callBacks[$this->path], $this->path); - } - } - - public function unlink($path) { - $path=substr($path, strlen('close://')); - return unlink($path); - } -} diff --git a/lib/files/view.php b/lib/files/view.php new file mode 100644 index 0000000000..302232b513 --- /dev/null +++ b/lib/files/view.php @@ -0,0 +1,958 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +/** + * Class to provide access to ownCloud filesystem via a "view", and methods for + * working with files within that view (e.g. read, write, delete, etc.). Each + * view is restricted to a set of directories via a virtual root. The default view + * uses the currently logged in user's data directory as root (parts of + * OC_Filesystem are merely a wrapper for OC_FilesystemView). + * + * Apps that need to access files outside of the user data folders (to modify files + * belonging to a user other than the one currently logged in, for example) should + * use this class directly rather than using OC_Filesystem, or making use of PHP's + * built-in file manipulation functions. This will ensure all hooks and proxies + * are triggered correctly. + * + * Filesystem functions are not called directly; they are passed to the correct + * \OC\Files\Storage\Storage object + */ + +namespace OC\Files; + +class View { + private $fakeRoot = ''; + private $internal_path_cache = array(); + private $storage_cache = array(); + + public function __construct($root) { + $this->fakeRoot = $root; + } + + public function getAbsolutePath($path = '/') { + if (!$path) { + $path = '/'; + } + if ($path[0] !== '/') { + $path = '/' . $path; + } + return $this->fakeRoot . $path; + } + + /** + * change the root to a fake root + * + * @param string $fakeRoot + * @return bool + */ + public function chroot($fakeRoot) { + if (!$fakeRoot == '') { + if ($fakeRoot[0] !== '/') { + $fakeRoot = '/' . $fakeRoot; + } + } + $this->fakeRoot = $fakeRoot; + } + + /** + * get the fake root + * + * @return string + */ + public function getRoot() { + return $this->fakeRoot; + } + + /** + * get path relative to the root of the view + * + * @param string $path + * @return string + */ + public function getRelativePath($path) { + if ($this->fakeRoot == '') { + return $path; + } + if (strpos($path, $this->fakeRoot) !== 0) { + return null; + } else { + $path = substr($path, strlen($this->fakeRoot)); + if (strlen($path) === 0) { + return '/'; + } else { + return $path; + } + } + } + + /** + * get the mountpoint of the storage object for a path + ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account + * + * @param string $path + * @return string + */ + public function getMountPoint($path) { + return Filesystem::getMountPoint($this->getAbsolutePath($path)); + } + + /** + * resolve a path to a storage and internal path + * + * @param string $path + * @return array consisting of the storage and the internal path + */ + public function resolvePath($path) { + return Filesystem::resolvePath($this->getAbsolutePath($path)); + } + + /** + * return the path to a local version of the file + * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed + * + * @param string $path + * @return string + */ + public function getLocalFile($path) { + $parent = substr($path, 0, strrpos($path, '/')); + $path = $this->getAbsolutePath($path); + list($storage, $internalPath) = Filesystem::resolvePath($path); + if (Filesystem::isValidPath($parent) and $storage) { + return $storage->getLocalFile($internalPath); + } else { + return null; + } + } + + /** + * @param string $path + * @return string + */ + public function getLocalFolder($path) { + $parent = substr($path, 0, strrpos($path, '/')); + $path = $this->getAbsolutePath($path); + list($storage, $internalPath) = Filesystem::resolvePath($path); + if (Filesystem::isValidPath($parent) and $storage) { + return $storage->getLocalFolder($internalPath); + } else { + return null; + } + } + + /** + * the following functions operate with arguments and return values identical + * to those of their PHP built-in equivalents. Mostly they are merely wrappers + * for \OC\Files\Storage\Storage via basicOperation(). + */ + public function mkdir($path) { + return $this->basicOperation('mkdir', $path, array('create', 'write')); + } + + public function rmdir($path) { + return $this->basicOperation('rmdir', $path, array('delete')); + } + + public function opendir($path) { + return $this->basicOperation('opendir', $path, array('read')); + } + + public function readdir($handle) { + $fsLocal = new Storage\Local(array('datadir' => '/')); + return $fsLocal->readdir($handle); + } + + public function is_dir($path) { + if ($path == '/') { + return true; + } + return $this->basicOperation('is_dir', $path); + } + + public function is_file($path) { + if ($path == '/') { + return false; + } + return $this->basicOperation('is_file', $path); + } + + public function stat($path) { + return $this->basicOperation('stat', $path); + } + + public function filetype($path) { + return $this->basicOperation('filetype', $path); + } + + public function filesize($path) { + return $this->basicOperation('filesize', $path); + } + + public function readfile($path) { + @ob_end_clean(); + $handle = $this->fopen($path, 'rb'); + if ($handle) { + $chunkSize = 8192; // 8 MB chunks + while (!feof($handle)) { + echo fread($handle, $chunkSize); + flush(); + } + $size = $this->filesize($path); + return $size; + } + return false; + } + + public function isCreatable($path) { + return $this->basicOperation('isCreatable', $path); + } + + public function isReadable($path) { + return $this->basicOperation('isReadable', $path); + } + + public function isUpdatable($path) { + return $this->basicOperation('isUpdatable', $path); + } + + public function isDeletable($path) { + return $this->basicOperation('isDeletable', $path); + } + + public function isSharable($path) { + return $this->basicOperation('isSharable', $path); + } + + public function file_exists($path) { + if ($path == '/') { + return true; + } + return $this->basicOperation('file_exists', $path); + } + + public function filemtime($path) { + return $this->basicOperation('filemtime', $path); + } + + public function touch($path, $mtime = null) { + if (!is_null($mtime) and !is_numeric($mtime)) { + $mtime = strtotime($mtime); + } + return $this->basicOperation('touch', $path, array('write'), $mtime); + } + + public function file_get_contents($path) { + return $this->basicOperation('file_get_contents', $path, array('read')); + } + + public function file_put_contents($path, $data) { + if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier + $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); + if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && Filesystem::isValidPath($path)) { + $path = $this->getRelativePath($absolutePath); + $exists = $this->file_exists($path); + $run = true; + if ($this->fakeRoot == Filesystem::getRoot()) { + if (!$exists) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_create, + array( + Filesystem::signal_param_path => $path, + Filesystem::signal_param_run => &$run + ) + ); + } + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_write, + array( + Filesystem::signal_param_path => $path, + Filesystem::signal_param_run => &$run + ) + ); + } + if (!$run) { + return false; + } + $target = $this->fopen($path, 'w'); + if ($target) { + $count = \OC_Helper::streamCopy($data, $target); + fclose($target); + fclose($data); + if ($this->fakeRoot == Filesystem::getRoot()) { + if (!$exists) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_create, + array(Filesystem::signal_param_path => $path) + ); + } + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_write, + array(Filesystem::signal_param_path => $path) + ); + } + \OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count); + return $count > 0; + } else { + return false; + } + } else { + return false; + } + } else { + return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data); + } + } + + public function unlink($path) { + return $this->basicOperation('unlink', $path, array('delete')); + } + + public function deleteAll($directory, $empty = false) { + return $this->basicOperation('deleteAll', $directory, array('delete'), $empty); + } + + public function rename($path1, $path2) { + $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : ''; + $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : ''; + $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1)); + $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2)); + if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) { + $path1 = $this->getRelativePath($absolutePath1); + $path2 = $this->getRelativePath($absolutePath2); + + if ($path1 == null or $path2 == null) { + return false; + } + $run = true; + if ($this->fakeRoot == Filesystem::getRoot()) { + \OC_Hook::emit( + Filesystem::CLASSNAME, Filesystem::signal_rename, + array( + Filesystem::signal_param_oldpath => $path1, + Filesystem::signal_param_newpath => $path2, + Filesystem::signal_param_run => &$run + ) + ); + } + if ($run) { + $mp1 = $this->getMountPoint($path1 . $postFix1); + $mp2 = $this->getMountPoint($path2 . $postFix2); + if ($mp1 == $mp2) { + list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1); + list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2); + if ($storage) { + $result = $storage->rename($internalPath1, $internalPath2); + } else { + $result = false; + } + } else { + $source = $this->fopen($path1 . $postFix1, 'r'); + $target = $this->fopen($path2 . $postFix2, 'w'); + $count = \OC_Helper::streamCopy($source, $target); + list($storage1, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1); + $storage1->unlink($internalPath1); + $result = $count > 0; + } + if ($this->fakeRoot == Filesystem::getRoot()) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_rename, + array( + Filesystem::signal_param_oldpath => $path1, + Filesystem::signal_param_newpath => $path2 + ) + ); + } + return $result; + } else { + return false; + } + } else { + return false; + } + } + + public function copy($path1, $path2) { + $postFix1 = (substr($path1, -1, 1) === '/') ? '/' : ''; + $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : ''; + $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1)); + $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2)); + if (\OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) { + $path1 = $this->getRelativePath($absolutePath1); + $path2 = $this->getRelativePath($absolutePath2); + + if ($path1 == null or $path2 == null) { + return false; + } + $run = true; + $exists = $this->file_exists($path2); + if ($this->fakeRoot == Filesystem::getRoot()) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_copy, + array( + Filesystem::signal_param_oldpath => $path1, + Filesystem::signal_param_newpath => $path2, + Filesystem::signal_param_run => &$run + ) + ); + if ($run and !$exists) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_create, + array( + Filesystem::signal_param_path => $path2, + Filesystem::signal_param_run => &$run + ) + ); + } + if ($run) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_write, + array( + Filesystem::signal_param_path => $path2, + Filesystem::signal_param_run => &$run + ) + ); + } + } + if ($run) { + $mp1 = $this->getMountPoint($path1 . $postFix1); + $mp2 = $this->getMountPoint($path2 . $postFix2); + if ($mp1 == $mp2) { + list($storage, $internalPath1) = Filesystem::resolvePath($absolutePath1 . $postFix1); + list(, $internalPath2) = Filesystem::resolvePath($absolutePath2 . $postFix2); + if ($storage) { + $result = $storage->copy($internalPath1, $internalPath2); + } else { + $result = false; + } + } else { + $source = $this->fopen($path1 . $postFix1, 'r'); + $target = $this->fopen($path2 . $postFix2, 'w'); + $result = \OC_Helper::streamCopy($source, $target); + } + if ($this->fakeRoot == Filesystem::getRoot()) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_copy, + array( + Filesystem::signal_param_oldpath => $path1, + Filesystem::signal_param_newpath => $path2 + ) + ); + if (!$exists) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_create, + array(Filesystem::signal_param_path => $path2) + ); + } + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_post_write, + array(Filesystem::signal_param_path => $path2) + ); + } + return $result; + } else { + return false; + } + } else { + return false; + } + } + + public function fopen($path, $mode) { + $hooks = array(); + switch ($mode) { + case 'r': + case 'rb': + $hooks[] = 'read'; + break; + case 'r+': + case 'rb+': + case 'w+': + case 'wb+': + case 'x+': + case 'xb+': + case 'a+': + case 'ab+': + $hooks[] = 'read'; + $hooks[] = 'write'; + break; + case 'w': + case 'wb': + case 'x': + case 'xb': + case 'a': + case 'ab': + $hooks[] = 'write'; + break; + default: + \OC_Log::write('core', 'invalid mode (' . $mode . ') for ' . $path, \OC_Log::ERROR); + } + + return $this->basicOperation('fopen', $path, $hooks, $mode); + } + + public function toTmpFile($path) { + if (Filesystem::isValidPath($path)) { + $source = $this->fopen($path, 'r'); + if ($source) { + $extension = ''; + $extOffset = strpos($path, '.'); + if ($extOffset !== false) { + $extension = substr($path, strrpos($path, '.')); + } + $tmpFile = \OC_Helper::tmpFile($extension); + file_put_contents($tmpFile, $source); + return $tmpFile; + } else { + return false; + } + } else { + return false; + } + } + + public function fromTmpFile($tmpFile, $path) { + if (Filesystem::isValidPath($path)) { + if (!$tmpFile) { + debug_print_backtrace(); + } + $source = fopen($tmpFile, 'r'); + if ($source) { + $this->file_put_contents($path, $source); + unlink($tmpFile); + return true; + } else { + return false; + } + } else { + return false; + } + } + + public function getMimeType($path) { + return $this->basicOperation('getMimeType', $path); + } + + public function hash($type, $path, $raw = false) { + $postFix = (substr($path, -1, 1) === '/') ? '/' : ''; + $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); + if (\OC_FileProxy::runPreProxies('hash', $absolutePath) && Filesystem::isValidPath($path)) { + $path = $this->getRelativePath($absolutePath); + if ($path == null) { + return false; + } + if (Filesystem::$loaded && $this->fakeRoot == Filesystem::getRoot()) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + Filesystem::signal_read, + array(Filesystem::signal_param_path => $path) + ); + } + list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix); + if ($storage) { + $result = $storage->hash($type, $internalPath, $raw); + $result = \OC_FileProxy::runPostProxies('hash', $absolutePath, $result); + return $result; + } + } + return null; + } + + public function free_space($path = '/') { + return $this->basicOperation('free_space', $path); + } + + /** + * @brief abstraction layer for basic filesystem functions: wrapper for \OC\Files\Storage\Storage + * @param string $operation + * @param string $path + * @param array $hooks (optional) + * @param mixed $extraParam (optional) + * @return mixed + * + * This method takes requests for basic filesystem functions (e.g. reading & writing + * files), processes hooks and proxies, sanitises paths, and finally passes them on to + * \OC\Files\Storage\Storage for delegation to a storage backend for execution + */ + private function basicOperation($operation, $path, $hooks = array(), $extraParam = null) { + $postFix = (substr($path, -1, 1) === '/') ? '/' : ''; + $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); + if (\OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and Filesystem::isValidPath($path)) { + $path = $this->getRelativePath($absolutePath); + if ($path == null) { + return false; + } + $run = $this->runHooks($hooks, $path); + list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix); + if ($run and $storage) { + if (!is_null($extraParam)) { + $result = $storage->$operation($internalPath, $extraParam); + } else { + $result = $storage->$operation($internalPath); + } + $result = \OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result); + if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) { + if ($operation != 'fopen') { //no post hooks for fopen, the file stream is still open + $this->runHooks($hooks, $path, true); + } + } + return $result; + } + } + return null; + } + + private function runHooks($hooks, $path, $post = false) { + $prefix = ($post) ? 'post_' : ''; + $run = true; + if (Filesystem::$loaded and $this->fakeRoot == Filesystem::getRoot()) { + foreach ($hooks as $hook) { + if ($hook != 'read') { + \OC_Hook::emit( + Filesystem::CLASSNAME, + $prefix . $hook, + array( + Filesystem::signal_param_run => &$run, + Filesystem::signal_param_path => $path + ) + ); + } elseif (!$post) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + $prefix . $hook, + array( + Filesystem::signal_param_path => $path + ) + ); + } + } + } + return $run; + } + + /** + * check if a file or folder has been updated since $time + * + * @param string $path + * @param int $time + * @return bool + */ + public function hasUpdated($path, $time) { + return $this->basicOperation('hasUpdated', $path, array(), $time); + } + + /** + * get the filesystem info + * + * @param string $path + * @return array + * + * returns an associative array with the following keys: + * - size + * - mtime + * - mimetype + * - encrypted + * - versioned + */ + public function getFileInfo($path) { + $data = array(); + $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path); + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = Filesystem::resolvePath($path); + if ($storage) { + $cache = $storage->getCache($internalPath); + $permissionsCache = $storage->getPermissionsCache($internalPath); + $user = \OC_User::getUser(); + + if (!$cache->inCache($internalPath)) { + $scanner = $storage->getScanner($internalPath); + $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW); + } else { + $watcher = $storage->getWatcher($internalPath); + $watcher->checkUpdate($internalPath); + } + + $data = $cache->get($internalPath); + + if ($data and $data['fileid']) { + if ($data['mimetype'] === 'httpd/unix-directory') { + //add the sizes of other mountpoints to the folder + $mountPoints = Filesystem::getMountPoints($path); + foreach ($mountPoints as $mountPoint) { + $subStorage = Filesystem::getStorage($mountPoint); + if ($subStorage) { + $subCache = $subStorage->getCache(''); + $rootEntry = $subCache->get(''); + $data['size'] += $rootEntry['size']; + } + } + } + + $permissions = $permissionsCache->get($data['fileid'], $user); + if ($permissions === -1) { + $permissions = $storage->getPermissions($internalPath); + $permissionsCache->set($data['fileid'], $user, $permissions); + } + $data['permissions'] = $permissions; + } + } + return $data; + } + + /** + * get the content of a directory + * + * @param string $directory path under datadirectory + * @return array + */ + public function getDirectoryContent($directory, $mimetype_filter = '') { + $result = array(); + $path = Filesystem::normalizePath($this->fakeRoot . '/' . $directory); + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = Filesystem::resolvePath($path); + if ($storage) { + $cache = $storage->getCache($internalPath); + $permissionsCache = $storage->getPermissionsCache($internalPath); + $user = \OC_User::getUser(); + + if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) { + $scanner = $storage->getScanner($internalPath); + $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW); + } else { + $watcher = $storage->getWatcher($internalPath); + $watcher->checkUpdate($internalPath); + } + + $files = $cache->getFolderContents($internalPath); //TODO: mimetype_filter + + $ids = array(); + foreach ($files as $i => $file) { + $files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file'; + $ids[] = $file['fileid']; + + $permissions = $permissionsCache->get($file['fileid'], $user); + if ($permissions === -1) { + $permissions = $storage->getPermissions($file['path']); + $permissionsCache->set($file['fileid'], $user, $permissions); + } + $files[$i]['permissions'] = $permissions; + } + + //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders + $mountPoints = Filesystem::getMountPoints($path); + $dirLength = strlen($path); + foreach ($mountPoints as $mountPoint) { + $subStorage = Filesystem::getStorage($mountPoint); + if ($subStorage) { + $subCache = $subStorage->getCache(''); + + if ($subCache->getStatus('') === Cache\Cache::NOT_FOUND) { + $subScanner = $subStorage->getScanner(''); + $subScanner->scanFile(''); + } + + $rootEntry = $subCache->get(''); + if ($rootEntry) { + $relativePath = trim(substr($mountPoint, $dirLength), '/'); + if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder + $entryName = substr($relativePath, 0, $pos); + foreach ($files as &$entry) { + if ($entry['name'] === $entryName) { + $entry['size'] += $rootEntry['size']; + } + } + } else { //mountpoint in this folder, add an entry for it + $rootEntry['name'] = $relativePath; + $rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file'; + $subPermissionsCache = $subStorage->getPermissionsCache(''); + $permissions = $subPermissionsCache->get($rootEntry['fileid'], $user); + if ($permissions === -1) { + $permissions = $subStorage->getPermissions($rootEntry['path']); + $subPermissionsCache->set($rootEntry['fileid'], $user, $permissions); + } + $rootEntry['permissions'] = $permissions; + + //remove any existing entry with the same name + foreach ($files as $i => $file) { + if ($file['name'] === $rootEntry['name']) { + unset($files[$i]); + break; + } + } + $files[] = $rootEntry; + } + } + } + } + + if ($mimetype_filter) { + foreach ($files as $file) { + if (strpos($mimetype_filter, '/')) { + if ($file['mimetype'] === $mimetype_filter) { + $result[] = $file; + } + } else { + if ($file['mimepart'] === $mimetype_filter) { + $result[] = $file; + } + } + } + } else { + $result = $files; + } + } + return $result; + } + + /** + * change file metadata + * + * @param string $path + * @param array $data + * @return int + * + * returns the fileid of the updated file + */ + public function putFileInfo($path, $data) { + $path = Filesystem::normalizePath($this->fakeRoot . '/' . $path); + /** + * @var \OC\Files\Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = Filesystem::resolvePath($path); + if ($storage) { + $cache = $storage->getCache($path); + + if (!$cache->inCache($internalPath)) { + $scanner = $storage->getScanner($internalPath); + $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW); + } + + return $cache->put($internalPath, $data); + } else { + return -1; + } + } + + /** + * search for files with the name matching $query + * + * @param string $query + * @return array + */ + public function search($query) { + return $this->searchCommon('%' . $query . '%', 'search'); + } + + /** + * search for files by mimetype + * + * @param string $query + * @return array + */ + public function searchByMime($mimetype) { + return $this->searchCommon($mimetype, 'searchByMime'); + } + + /** + * @param string $query + * @param string $method + * @return array + */ + private function searchCommon($query, $method) { + $files = array(); + $rootLength = strlen($this->fakeRoot); + + $mountPoint = Filesystem::getMountPoint($this->fakeRoot); + $storage = Filesystem::getStorage($mountPoint); + if ($storage) { + $cache = $storage->getCache(''); + + $results = $cache->$method($query); + foreach ($results as $result) { + if (substr($mountPoint . $result['path'], 0, $rootLength) === $this->fakeRoot) { + $result['path'] = substr($mountPoint . $result['path'], $rootLength); + $files[] = $result; + } + } + + $mountPoints = Filesystem::getMountPoints($this->fakeRoot); + foreach ($mountPoints as $mountPoint) { + $storage = Filesystem::getStorage($mountPoint); + if ($storage) { + $cache = $storage->getCache(''); + + $relativeMountPoint = substr($mountPoint, $rootLength); + $results = $cache->$method($query); + foreach ($results as $result) { + $result['path'] = $relativeMountPoint . $result['path']; + $files[] = $result; + } + } + } + } + return $files; + } + + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + public function getETag($path) { + /** + * @var Storage\Storage $storage + * @var string $internalPath + */ + list($storage, $internalPath) = $this->resolvePath($path); + if ($storage) { + return $storage->getETag($internalPath); + } else { + return null; + } + } + + /** + * Get the path of a file by id, relative to the view + * + * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file + * + * @param int $id + * @return string + */ + public function getPath($id) { + list($storage, $internalPath) = Cache\Cache::getById($id); + $mounts = Mount::findById($storage); + foreach ($mounts as $mount) { + /** + * @var \OC\Files\Mount $mount + */ + $fullPath = $mount->getMountPoint() . $internalPath; + if (!is_null($path = $this->getRelativePath($fullPath))) { + return $path; + } + } + return null; + } +} diff --git a/lib/filestorage.php b/lib/filestorage.php deleted file mode 100644 index 2e03c4cb6d..0000000000 --- a/lib/filestorage.php +++ /dev/null @@ -1,67 +0,0 @@ -. -*/ - -/** - * Provide a common interface to all different storage options - */ -abstract class OC_Filestorage{ - abstract public function __construct($parameters); - abstract public function mkdir($path); - abstract public function rmdir($path); - abstract public function opendir($path); - abstract public function is_dir($path); - abstract public function is_file($path); - abstract public function stat($path); - abstract public function filetype($path); - abstract public function filesize($path); - abstract public function isCreatable($path); - abstract public function isReadable($path); - abstract public function isUpdatable($path); - abstract public function isDeletable($path); - abstract public function isSharable($path); - abstract public function file_exists($path); - abstract public function filectime($path); - abstract public function filemtime($path); - abstract public function file_get_contents($path); - abstract public function file_put_contents($path, $data); - abstract public function unlink($path); - abstract public function rename($path1, $path2); - abstract public function copy($path1, $path2); - abstract public function fopen($path, $mode); - abstract public function getMimeType($path); - abstract public function hash($type, $path, $raw = false); - abstract public function free_space($path); - abstract public function search($query); - abstract public function touch($path, $mtime=null); - abstract public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote - abstract public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote - /** - * check if a file or folder has been updated since $time - * @param int $time - * @return bool - * - * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed. - * returning true for other changes in the folder is optional - */ - abstract public function hasUpdated($path, $time); - abstract public function getOwner($path); -} diff --git a/lib/filestorage/temporary.php b/lib/filestorage/temporary.php deleted file mode 100644 index 876ba045a6..0000000000 --- a/lib/filestorage/temporary.php +++ /dev/null @@ -1,17 +0,0 @@ -datadir=OC_Helper::tmpFolder(); - } - - public function cleanUp() { - OC_Helper::rmdirr($this->datadir); - } - - public function __destruct() { - $this->cleanUp(); - } -} diff --git a/lib/filesystem.php b/lib/filesystem.php index f185d777de..57cca90230 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -1,26 +1,11 @@ . -* -*/ - + * Copyright (c) 2012 Robin Appelman + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ /** * Class for abstraction of filesystem functions @@ -31,578 +16,397 @@ * read(path) * write(path, &run) * post_write(path) - * create(path, &run) (when a file is created, both create and write will be emited in that order) + * create(path, &run) (when a file is created, both create and write will be emitted in that order) * post_create(path) * delete(path, &run) * post_delete(path) - * rename(oldpath, newpath, &run) - * post_rename(oldpath, newpath) - * copy(oldpath, newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emited in that order) - * post_rename(oldpath, newpath) + * rename(oldpath,newpath, &run) + * post_rename(oldpath,newpath) + * copy(oldpath,newpath, &run) (if the newpath doesn't exists yes, copy, create and write will be emitted in that order) + * post_rename(oldpath,newpath) * - * the &run parameter can be set to false to prevent the operation from occuring + * the &run parameter can be set to false to prevent the operation from occurring */ -class OC_Filesystem{ - static private $storages=array(); - static private $mounts=array(); - static private $loadedUsers=array(); - public static $loaded=false; - /** - * @var OC_Filestorage $defaultInstance - */ - static private $defaultInstance; - - - /** - * classname which used for hooks handling - * used as signalclass in OC_Hooks::emit() - */ - const CLASSNAME = 'OC_Filesystem'; - - /** - * signalname emited before file renaming - * @param oldpath - * @param newpath - */ - const signal_rename = 'rename'; - - /** - * signal emited after file renaming - * @param oldpath - * @param newpath - */ - const signal_post_rename = 'post_rename'; - - /** - * signal emited before file/dir creation - * @param path - * @param run changing this flag to false in hook handler will cancel event - */ - const signal_create = 'create'; - - /** - * signal emited after file/dir creation - * @param path - * @param run changing this flag to false in hook handler will cancel event - */ - const signal_post_create = 'post_create'; - - /** - * signal emits before file/dir copy - * @param oldpath - * @param newpath - * @param run changing this flag to false in hook handler will cancel event - */ - const signal_copy = 'copy'; - - /** - * signal emits after file/dir copy - * @param oldpath - * @param newpath - */ - const signal_post_copy = 'post_copy'; - - /** - * signal emits before file/dir save - * @param path - * @param run changing this flag to false in hook handler will cancel event - */ - const signal_write = 'write'; - - /** - * signal emits after file/dir save - * @param path - */ - const signal_post_write = 'post_write'; - - /** - * signal emits when reading file/dir - * @param path - */ - const signal_read = 'read'; - - /** - * signal emits when removing file/dir - * @param path - */ - const signal_delete = 'delete'; - - /** - * parameters definitions for signals - */ - const signal_param_path = 'path'; - const signal_param_oldpath = 'oldpath'; - const signal_param_newpath = 'newpath'; - - /** - * run - changing this flag to false in hook handler will cancel event - */ - const signal_param_run = 'run'; - +/** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ +class OC_Filesystem { /** * get the mountpoint of the storage object for a path - ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account + ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account * - * @param string path - * @return string - */ - static public function getMountPoint($path) { - OC_Hook::emit(self::CLASSNAME, 'get_mountpoint', array('path'=>$path)); - if(!$path) { - $path='/'; - } - if($path[0]!=='/') { - $path='/'.$path; - } - $path=str_replace('//', '/', $path); - $foundMountPoint=''; - $mountPoints=array_keys(OC_Filesystem::$mounts); - foreach($mountPoints as $mountpoint) { - if($mountpoint==$path) { - return $mountpoint; - } - if(strpos($path, $mountpoint)===0 and strlen($mountpoint)>strlen($foundMountPoint)) { - $foundMountPoint=$mountpoint; - } - } - return $foundMountPoint; - } - - /** - * get the part of the path relative to the mountpoint of the storage it's stored in - * @param string path - * @return bool - */ - static public function getInternalPath($path) { - $mountPoint=self::getMountPoint($path); - $internalPath=substr($path, strlen($mountPoint)); - return $internalPath; - } - - static private function mountPointsLoaded($user) { - return in_array($user, self::$loadedUsers); - } - - /** - * get the storage object for a path - * @param string path - * @return OC_Filestorage - */ - static public function getStorage($path) { - $user = ltrim(substr($path, 0, strpos($path, '/', 1)), '/'); - // check mount points if file was shared from a different user - if ($user != OC_User::getUser() && !self::mountPointsLoaded($user)) { - OC_Util::loadUserMountPoints($user); - self::loadSystemMountPoints($user); - self::$loadedUsers[] = $user; - } - - $mountpoint=self::getMountPoint($path); - if($mountpoint) { - if(!isset(OC_Filesystem::$storages[$mountpoint])) { - $mount=OC_Filesystem::$mounts[$mountpoint]; - OC_Filesystem::$storages[$mountpoint]=OC_Filesystem::createStorage($mount['class'], $mount['arguments']); - } - return OC_Filesystem::$storages[$mountpoint]; - } - } - - static private function loadSystemMountPoints($user) { - if(is_file(OC::$SERVERROOT.'/config/mount.php')) { - $mountConfig=include OC::$SERVERROOT.'/config/mount.php'; - if(isset($mountConfig['global'])) { - foreach($mountConfig['global'] as $mountPoint=>$options) { - self::mount($options['class'], $options['options'], $mountPoint); - } - } - - if(isset($mountConfig['group'])) { - foreach($mountConfig['group'] as $group=>$mounts) { - if(OC_Group::inGroup($user, $group)) { - foreach($mounts as $mountPoint=>$options) { - $mountPoint=self::setUserVars($mountPoint, $user); - foreach($options as &$option) { - $option=self::setUserVars($option, $user); - } - self::mount($options['class'], $options['options'], $mountPoint); - } - } - } - } - - if(isset($mountConfig['user'])) { - foreach($mountConfig['user'] as $mountUser=>$mounts) { - if($user==='all' or strtolower($mountUser)===strtolower($user)) { - foreach($mounts as $mountPoint=>$options) { - $mountPoint=self::setUserVars($mountPoint, $user); - foreach($options as &$option) { - $option=self::setUserVars($option, $user); - } - self::mount($options['class'], $options['options'], $mountPoint); - } - } - } - } - - $mtime=filemtime(OC::$SERVERROOT.'/config/mount.php'); - $previousMTime=OC_Appconfig::getValue('files', 'mountconfigmtime', 0); - if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated - OC_FileCache::triggerUpdate(); - OC_Appconfig::setValue('files', 'mountconfigmtime', $mtime); - } - } - } - - static public function init($root, $user = '') { - if(self::$defaultInstance) { - return false; - } - self::$defaultInstance=new OC_FilesystemView($root); - - //load custom mount config - if (!isset($user)) { - $user = OC_User::getUser(); - } - self::loadSystemMountPoints($user); - - self::$loaded=true; - } - - /** - * fill in the correct values for $user, and $password placeholders - * @param string intput + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path * @return string */ - private static function setUserVars($input, $user) { - if (isset($user)) { - return str_replace('$user', $user, $input); - } else { - return str_replace('$user', OC_User::getUser(), $input); - } + static public function getMountPoint($path) { + return \OC\Files\Filesystem::getMountPoint($path); + } + + /** + * resolve a path to a storage and internal path + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path + * @return array consisting of the storage and the internal path + */ + static public function resolvePath($path) { + return \OC\Files\Filesystem::resolvePath($path); + } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ + static public function init($root) { + return \OC\Files\Filesystem::init($root); } /** * get the default filesystem view - * @return OC_FilesystemView + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @return \OC\Files\View */ static public function getView() { - return self::$defaultInstance; + return \OC\Files\Filesystem::getView(); } /** * tear down the filesystem, removing all storage providers + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem */ static public function tearDown() { - self::$storages=array(); - } - - /** - * create a new storage of a specific type - * @param string type - * @param array arguments - * @return OC_Filestorage - */ - static private function createStorage($class, $arguments) { - if(class_exists($class)) { - try { - return new $class($arguments); - } catch (Exception $exception) { - OC_Log::write('core', $exception->getMessage(), OC_Log::ERROR); - return false; - } - }else{ - OC_Log::write('core', 'storage backend '.$class.' not found', OC_Log::ERROR); - return false; - } - } - - /** - * change the root to a fake root - * @param string fakeRoot - * @return bool - */ - static public function chroot($fakeRoot) { - return self::$defaultInstance->chroot($fakeRoot); + \OC\Files\Filesystem::tearDown(); } /** * @brief get the relative path of the root data directory for the current user * @return string * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem * Returns path like /admin/files */ static public function getRoot() { - return self::$defaultInstance->getRoot(); + return \OC\Files\Filesystem::getRoot(); } /** * clear all mounts and storage backends + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem */ public static function clearMounts() { - self::$mounts=array(); - self::$storages=array(); + \OC\Files\Filesystem::clearMounts(); } /** - * mount an OC_Filestorage in our virtual filesystem - * @param OC_Filestorage storage - * @param string mountpoint - */ + * mount an \OC\Files\Storage\Storage in our virtual filesystem + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param \OC\Files\Storage\Storage $class + * @param array $arguments + * @param string $mountpoint + */ static public function mount($class, $arguments, $mountpoint) { - if($mountpoint[0]!='/') { - $mountpoint='/'.$mountpoint; - } - if(substr($mountpoint, -1)!=='/') { - $mountpoint=$mountpoint.'/'; - } - self::$mounts[$mountpoint]=array('class'=>$class, 'arguments'=>$arguments); + \OC\Files\Filesystem::mount($class, $arguments, $mountpoint); } /** - * return the path to a local version of the file - * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed - * @param string path - * @return string - */ + * return the path to a local version of the file + * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path + * @return string + */ static public function getLocalFile($path) { - return self::$defaultInstance->getLocalFile($path); + return \OC\Files\Filesystem::getLocalFile($path); } + /** - * @param string path + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path * @return string */ static public function getLocalFolder($path) { - return self::$defaultInstance->getLocalFolder($path); + return \OC\Files\Filesystem::getLocalFolder($path); } /** - * return path to file which reflects one visible in browser - * @param string path - * @return string - */ + * return path to file which reflects one visible in browser + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path + * @return string + */ static public function getLocalPath($path) { - $datadir = OC_User::getHome(OC_User::getUser()).'/files'; - $newpath = $path; - if (strncmp($newpath, $datadir, strlen($datadir)) == 0) { - $newpath = substr($path, strlen($datadir)); - } - return $newpath; + return \OC\Files\Filesystem::getLocalPath($path); } /** * check if the requested path is valid - * @param string path + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path * @return bool */ static public function isValidPath($path) { - $path = self::normalizePath($path); - if(!$path || $path[0]!=='/') { - $path='/'.$path; - } - if(strstr($path, '/../') || strrchr($path, '/') === '/..' ) { - return false; - } - if(self::isFileBlacklisted($path)) { - return false; - } - return true; + return \OC\Files\Filesystem::isValidPath($path); } /** - * checks if a file is blacklsited for storage in the filesystem + * checks if a file is blacklisted for storage in the filesystem * Listens to write and rename hooks + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem * @param array $data from hook */ static public function isBlacklisted($data) { - if (isset($data['path'])) { - $path = $data['path']; - } else if (isset($data['newpath'])) { - $path = $data['newpath']; - } - if (isset($path)) { - $data['run'] = !self::isFileBlacklisted($path); - } - } - - static public function isFileBlacklisted($path) { - $blacklist = array('.htaccess'); - $filename = strtolower(basename($path)); - return in_array($filename, $blacklist); + \OC\Files\Filesystem::isBlacklisted($data); } /** - * following functions are equivilent to their php buildin equivilents for arguments/return values. + * following functions are equivalent to their php builtin equivalents for arguments/return values. + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem */ static public function mkdir($path) { - return self::$defaultInstance->mkdir($path); + return \OC\Files\Filesystem::mkdir($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function rmdir($path) { - return self::$defaultInstance->rmdir($path); + return \OC\Files\Filesystem::rmdir($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function opendir($path) { - return self::$defaultInstance->opendir($path); + return \OC\Files\Filesystem::opendir($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function readdir($path) { - return self::$defaultInstance->readdir($path); + return \OC\Files\Filesystem::readdir($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function is_dir($path) { - return self::$defaultInstance->is_dir($path); + return \OC\Files\Filesystem::is_dir($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function is_file($path) { - return self::$defaultInstance->is_file($path); + return \OC\Files\Filesystem::is_file($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function stat($path) { - return self::$defaultInstance->stat($path); + return \OC\Files\Filesystem::stat($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function filetype($path) { - return self::$defaultInstance->filetype($path); + return \OC\Files\Filesystem::filetype($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function filesize($path) { - return self::$defaultInstance->filesize($path); + return \OC\Files\Filesystem::filesize($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function readfile($path) { - return self::$defaultInstance->readfile($path); + return \OC\Files\Filesystem::readfile($path); } + /** - * @deprecated Replaced by isReadable() as part of CRUDS - */ + * @deprecated Replaced by isReadable() as part of CRUDS + */ static public function is_readable($path) { - return self::$defaultInstance->is_readable($path); + return \OC\Files\Filesystem::isReadable($path); } + /** - * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS - */ - static public function is_writable($path) { - return self::$defaultInstance->is_writable($path); - } + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function isCreatable($path) { - return self::$defaultInstance->isCreatable($path); + return \OC\Files\Filesystem::isCreatable($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function isReadable($path) { - return self::$defaultInstance->isReadable($path); + return \OC\Files\Filesystem::isReadable($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function isUpdatable($path) { - return self::$defaultInstance->isUpdatable($path); + return \OC\Files\Filesystem::isUpdatable($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function isDeletable($path) { - return self::$defaultInstance->isDeletable($path); + return \OC\Files\Filesystem::isDeletable($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function isSharable($path) { - return self::$defaultInstance->isSharable($path); + return \OC\Files\Filesystem::isSharable($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function file_exists($path) { - return self::$defaultInstance->file_exists($path); - } - static public function filectime($path) { - return self::$defaultInstance->filectime($path); + return \OC\Files\Filesystem::file_exists($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function filemtime($path) { - return self::$defaultInstance->filemtime($path); + return \OC\Files\Filesystem::filemtime($path); } - static public function touch($path, $mtime=null) { - return self::$defaultInstance->touch($path, $mtime); + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ + static public function touch($path, $mtime = null) { + return \OC\Files\Filesystem::touch($path, $mtime); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function file_get_contents($path) { - return self::$defaultInstance->file_get_contents($path); + return \OC\Files\Filesystem::file_get_contents($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function file_put_contents($path, $data) { - return self::$defaultInstance->file_put_contents($path, $data); + return \OC\Files\Filesystem::file_put_contents($path, $data); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function unlink($path) { - return self::$defaultInstance->unlink($path); + return \OC\Files\Filesystem::unlink($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function rename($path1, $path2) { - return self::$defaultInstance->rename($path1, $path2); + return \OC\Files\Filesystem::rename($path1, $path2); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function copy($path1, $path2) { - return self::$defaultInstance->copy($path1, $path2); + return \OC\Files\Filesystem::copy($path1, $path2); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function fopen($path, $mode) { - return self::$defaultInstance->fopen($path, $mode); + return \OC\Files\Filesystem::fopen($path, $mode); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function toTmpFile($path) { - return self::$defaultInstance->toTmpFile($path); + return \OC\Files\Filesystem::toTmpFile($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function fromTmpFile($tmpFile, $path) { - return self::$defaultInstance->fromTmpFile($tmpFile, $path); + return \OC\Files\Filesystem::fromTmpFile($tmpFile, $path); } + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function getMimeType($path) { - return self::$defaultInstance->getMimeType($path); + return \OC\Files\Filesystem::getMimeType($path); } + + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function hash($type, $path, $raw = false) { - return self::$defaultInstance->hash($type, $path, $raw); + return \OC\Files\Filesystem::hash($type, $path, $raw); } - static public function free_space($path='/') { - return self::$defaultInstance->free_space($path); + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ + static public function free_space($path = '/') { + return \OC\Files\Filesystem::free_space($path); } + /** + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + */ static public function search($query) { - return OC_FileCache::search($query); + return \OC\Files\Filesystem::search($query); } /** * check if a file or folder has been updated since $time + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path * @param int $time * @return bool */ static public function hasUpdated($path, $time) { - return self::$defaultInstance->hasUpdated($path, $time); - } - - static public function removeETagHook($params, $root = false) { - if (isset($params['path'])) { - $path=$params['path']; - } else { - $path=$params['oldpath']; - } - - if ($root) { // reduce path to the required part of it (no 'username/files') - $fakeRootView = new OC_FilesystemView($root); - $count = 1; - $path=str_replace(OC_App::getStorage("files")->getAbsolutePath(), "", $fakeRootView->getAbsolutePath($path), $count); - } - - $path = self::normalizePath($path); - OC_Connector_Sabre_Node::removeETagPropertyForPath($path); + return \OC\Files\Filesystem::hasUpdated($path, $time); } /** * normalize a path - * @param string path + * + * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem + * @param string $path * @param bool $stripTrailingSlash * @return string */ - public static function normalizePath($path, $stripTrailingSlash=true) { - if($path=='') { - return '/'; - } - //no windows style slashes - $path=str_replace('\\', '/', $path); - //add leading slash - if($path[0]!=='/') { - $path='/'.$path; - } - //remove trainling slash - if($stripTrailingSlash and strlen($path)>1 and substr($path, -1, 1)==='/') { - $path=substr($path, 0, -1); - } - //remove duplicate slashes - while(strpos($path, '//')!==false) { - $path=str_replace('//', '/', $path); - } - //normalize unicode if possible - if(class_exists('Normalizer')) { - $path=Normalizer::normalize($path); - } - return $path; + public static function normalizePath($path, $stripTrailingSlash = true) { + return \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash); } } -OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_Filesystem', 'removeETagHook'); -OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC_Filesystem', 'removeETagHook'); -OC_Hook::connect('OC_Filesystem', 'post_rename', 'OC_Filesystem', 'removeETagHook'); - -OC_Util::setupFS(); -require_once 'filecache.php'; diff --git a/lib/filesystemview.php b/lib/filesystemview.php index 1fc8e83d68..d6bca62e06 100644 --- a/lib/filesystemview.php +++ b/lib/filesystemview.php @@ -1,662 +1,9 @@ . - */ + * Copyright (c) 2012 Robin Appelman + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. */ - -/** - * Class to provide access to ownCloud filesystem via a "view", and methods for - * working with files within that view (e.g. read, write, delete, etc.). Each - * view is restricted to a set of directories via a virtual root. The default view - * uses the currently logged in user's data directory as root (parts of - * OC_Filesystem are merely a wrapper for OC_FilesystemView). - * - * Apps that need to access files outside of the user data folders (to modify files - * belonging to a user other than the one currently logged in, for example) should - * use this class directly rather than using OC_Filesystem, or making use of PHP's - * built-in file manipulation functions. This will ensure all hooks and proxies - * are triggered correctly. - * - * Filesystem functions are not called directly; they are passed to the correct - * OC_Filestorage object - * - * @note default root (if $root is empty or '/') is /data/[user]/ - * @note If you don't include a leading slash, you may encounter problems. - * e.g. use $v = new \OC_FilesystemView( '/' . $params['uid'] ); not - * $v = new \OC_FilesystemView( $params['uid'] ); - */ -class OC_FilesystemView { - private $fakeRoot=''; - private $internal_path_cache=array(); - private $storage_cache=array(); - - public function __construct($root) { - $this->fakeRoot=$root; - } - - public function getAbsolutePath($path = '/') { - if(!$path || $path[0]!=='/') { - $path='/'.$path; - } - return $this->fakeRoot.$path; - } - - /** - * change the root to a fake toor - * @param string fakeRoot - * @return bool - */ - public function chroot($fakeRoot) { - if(!$fakeRoot=='') { - if($fakeRoot[0]!=='/') { - $fakeRoot='/'.$fakeRoot; - } - } - $this->fakeRoot=$fakeRoot; - } - - /** - * get the fake root - * @return string - */ - public function getRoot() { - return $this->fakeRoot; - } - - /** - * get the part of the path relative to the mountpoint of the storage it's stored in - * @param string path - * @return bool - */ - public function getInternalPath($path) { - if (!isset($this->internal_path_cache[$path])) { - $this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path)); - } - return $this->internal_path_cache[$path]; - } - - /** - * get path relative to the root of the view - * @param string path - * @return string - */ - public function getRelativePath($path) { - if($this->fakeRoot=='') { - return $path; - } - if(strpos($path, $this->fakeRoot)!==0) { - return null; - }else{ - $path=substr($path, strlen($this->fakeRoot)); - if(strlen($path)===0) { - return '/'; - }else{ - return $path; - } - } - } - - /** - * get the storage object for a path - * @param string path - * @return OC_Filestorage - */ - public function getStorage($path) { - if (!isset($this->storage_cache[$path])) { - $this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path)); - } - return $this->storage_cache[$path]; - } - - /** - * get the mountpoint of the storage object for a path - ( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account - * - * @param string path - * @return string - */ - public function getMountPoint($path) { - return OC_Filesystem::getMountPoint($this->getAbsolutePath($path)); - } - - /** - * return the path to a local version of the file - * we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed - * @param string path - * @return string - */ - public function getLocalFile($path) { - $parent=substr($path, 0, strrpos($path, '/')); - if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) { - return $storage->getLocalFile($this->getInternalPath($path)); - } - } - /** - * @param string path - * @return string - */ - public function getLocalFolder($path) { - $parent=substr($path, 0, strrpos($path, '/')); - if(OC_Filesystem::isValidPath($parent) and $storage=$this->getStorage($path)) { - return $storage->getLocalFolder($this->getInternalPath($path)); - } - } - - /** - * the following functions operate with arguments and return values identical - * to those of their PHP built-in equivalents. Mostly they are merely wrappers - * for OC_Filestorage via basicOperation(). - */ - public function mkdir($path) { - return $this->basicOperation('mkdir', $path, array('create', 'write')); - } - public function rmdir($path) { - return $this->basicOperation('rmdir', $path, array('delete')); - } - 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; - } - return $this->basicOperation('is_dir', $path); - } - public function is_file($path) { - if($path=='/') { - return false; - } - return $this->basicOperation('is_file', $path); - } - public function stat($path) { - return $this->basicOperation('stat', $path); - } - public function filetype($path) { - return $this->basicOperation('filetype', $path); - } - public function filesize($path) { - return $this->basicOperation('filesize', $path); - } - public function readfile($path) { - OC_Util::obEnd(); - $handle=$this->fopen($path, 'rb'); - if ($handle) { - $chunkSize = 8192;// 8 MB chunks - while (!feof($handle)) { - echo fread($handle, $chunkSize); - flush(); - } - $size=$this->filesize($path); - return $size; - } - return false; - } - /** - * @deprecated Replaced by isReadable() as part of CRUDS - */ - public function is_readable($path) { - return $this->basicOperation('isReadable', $path); - } - /** - * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS - */ - public function is_writable($path) { - return $this->basicOperation('isUpdatable', $path); - } - public function isCreatable($path) { - return $this->basicOperation('isCreatable', $path); - } - public function isReadable($path) { - return $this->basicOperation('isReadable', $path); - } - public function isUpdatable($path) { - return $this->basicOperation('isUpdatable', $path); - } - public function isDeletable($path) { - return $this->basicOperation('isDeletable', $path); - } - public function isSharable($path) { - return $this->basicOperation('isSharable', $path); - } - public function file_exists($path) { - if($path=='/') { - return true; - } - return $this->basicOperation('file_exists', $path); - } - public function filectime($path) { - return $this->basicOperation('filectime', $path); - } - public function filemtime($path) { - return $this->basicOperation('filemtime', $path); - } - public function touch($path, $mtime=null) { - if(!is_null($mtime) and !is_numeric($mtime)) { - $mtime = strtotime($mtime); - } - return $this->basicOperation('touch', $path, array('write'), $mtime); - } - public function file_get_contents($path) { - return $this->basicOperation('file_get_contents', $path, array('read')); - } - public function file_put_contents($path, $data) { - if(is_resource($data)) {//not having to deal with streams in file_put_contents makes life easier - $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); - if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && OC_Filesystem::isValidPath($path)) { - $path = $this->getRelativePath($absolutePath); - $exists = $this->file_exists($path); - $run = true; - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - if(!$exists) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_create, - array( - OC_Filesystem::signal_param_path => $path, - OC_Filesystem::signal_param_run => &$run - ) - ); - } - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_write, - array( - OC_Filesystem::signal_param_path => $path, - OC_Filesystem::signal_param_run => &$run - ) - ); - } - if(!$run) { - return false; - } - $target=$this->fopen($path, 'w'); - if($target) { - $count=OC_Helper::streamCopy($data, $target); - fclose($target); - fclose($data); - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - if(!$exists) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_create, - array( OC_Filesystem::signal_param_path => $path) - ); - } - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_write, - array( OC_Filesystem::signal_param_path => $path) - ); - } - OC_FileProxy::runPostProxies('file_put_contents', $absolutePath, $count); - return $count > 0; - }else{ - return false; - } - } - }else{ - return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data); - } - } - public function unlink($path) { - return $this->basicOperation('unlink', $path, array('delete')); - } - public function deleteAll( $directory, $empty = false ) { - return $this->basicOperation( 'deleteAll', $directory, array('delete'), $empty ); - } - public function rename($path1, $path2) { - $postFix1=(substr($path1, -1, 1)==='/')?'/':''; - $postFix2=(substr($path2, -1, 1)==='/')?'/':''; - $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1)); - $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2)); - if(OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) { - $path1 = $this->getRelativePath($absolutePath1); - $path2 = $this->getRelativePath($absolutePath2); - - if($path1 == null or $path2 == null) { - return false; - } - $run=true; - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename, - array( - OC_Filesystem::signal_param_oldpath => $path1, - OC_Filesystem::signal_param_newpath => $path2, - OC_Filesystem::signal_param_run => &$run - ) - ); - } - if($run) { - $mp1 = $this->getMountPoint($path1.$postFix1); - $mp2 = $this->getMountPoint($path2.$postFix2); - if($mp1 == $mp2) { - if($storage = $this->getStorage($path1)) { - $result = $storage->rename($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2)); - } - } else { - $source = $this->fopen($path1.$postFix1, 'r'); - $target = $this->fopen($path2.$postFix2, 'w'); - $count = OC_Helper::streamCopy($source, $target); - $storage1 = $this->getStorage($path1); - $storage1->unlink($this->getInternalPath($path1.$postFix1)); - $result = $count>0; - } - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_rename, - array( - OC_Filesystem::signal_param_oldpath => $path1, - OC_Filesystem::signal_param_newpath => $path2 - ) - ); - } - return $result; - } - } - } - public function copy($path1, $path2) { - $postFix1=(substr($path1, -1, 1)==='/')?'/':''; - $postFix2=(substr($path2, -1, 1)==='/')?'/':''; - $absolutePath1 = OC_Filesystem::normalizePath($this->getAbsolutePath($path1)); - $absolutePath2 = OC_Filesystem::normalizePath($this->getAbsolutePath($path2)); - if(OC_FileProxy::runPreProxies('copy', $absolutePath1, $absolutePath2) and OC_Filesystem::isValidPath($path2)) { - $path1 = $this->getRelativePath($absolutePath1); - $path2 = $this->getRelativePath($absolutePath2); - - if($path1 == null or $path2 == null) { - return false; - } - $run=true; - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_copy, - array( - OC_Filesystem::signal_param_oldpath => $path1, - OC_Filesystem::signal_param_newpath=>$path2, - OC_Filesystem::signal_param_run => &$run - ) - ); - $exists=$this->file_exists($path2); - if($run and !$exists) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_create, - array( - OC_Filesystem::signal_param_path => $path2, - OC_Filesystem::signal_param_run => &$run - ) - ); - } - if($run) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_write, - array( - OC_Filesystem::signal_param_path => $path2, - OC_Filesystem::signal_param_run => &$run - ) - ); - } - } - if($run) { - $mp1=$this->getMountPoint($path1.$postFix1); - $mp2=$this->getMountPoint($path2.$postFix2); - if($mp1 == $mp2) { - if($storage = $this->getStorage($path1.$postFix1)) { - $result=$storage->copy($this->getInternalPath($path1.$postFix1), $this->getInternalPath($path2.$postFix2)); - } - } else { - $source = $this->fopen($path1.$postFix1, 'r'); - $target = $this->fopen($path2.$postFix2, 'w'); - $result = OC_Helper::streamCopy($source, $target); - } - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { - // If the file to be copied originates within - // the user's data directory - - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_copy, - array( - OC_Filesystem::signal_param_oldpath => $path1, - OC_Filesystem::signal_param_newpath=>$path2 - ) - ); - if(!$exists) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_create, - array(OC_Filesystem::signal_param_path => $path2) - ); - } - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_post_write, - array( OC_Filesystem::signal_param_path => $path2) - ); - - } else { - // If this is not a normal file copy operation - // and the file originates somewhere else - // (e.g. a version rollback operation), do not - // perform all the other post_write actions - - // Update webdav properties - OC_Filesystem::removeETagHook(array("path" => $path2), $this->fakeRoot); - - $splitPath2 = explode( '/', $path2 ); - - // Only cache information about files - // that are being copied from within - // the user files directory. Caching - // other files, like VCS backup files, - // serves no purpose - if ( $splitPath2[1] == 'files' ) { - - OC_FileCache_Update::update($path2, $this->fakeRoot); - - } - - } - - return $result; - - } - } - } - public function fopen($path, $mode) { - $hooks=array(); - switch($mode) { - case 'r': - case 'rb': - $hooks[]='read'; - break; - case 'r+': - case 'rb+': - case 'w+': - case 'wb+': - case 'x+': - case 'xb+': - case 'a+': - case 'ab+': - $hooks[]='read'; - $hooks[]='write'; - break; - case 'w': - case 'wb': - case 'x': - case 'xb': - case 'a': - case 'ab': - $hooks[]='write'; - break; - default: - OC_Log::write('core', 'invalid mode ('.$mode.') for '.$path, OC_Log::ERROR); - } - - return $this->basicOperation('fopen', $path, $hooks, $mode); - } - public function toTmpFile($path) { - if(OC_Filesystem::isValidPath($path)) { - $source = $this->fopen($path, 'r'); - if($source) { - $extension=''; - $extOffset=strpos($path, '.'); - if($extOffset !== false) { - $extension=substr($path, strrpos($path, '.')); - } - $tmpFile = OC_Helper::tmpFile($extension); - file_put_contents($tmpFile, $source); - return $tmpFile; - } - } - } - public function fromTmpFile($tmpFile, $path) { - if(OC_Filesystem::isValidPath($path)) { - if(!$tmpFile) { - debug_print_backtrace(); - } - $source=fopen($tmpFile, 'r'); - if($source) { - $this->file_put_contents($path, $source); - unlink($tmpFile); - return true; - } else { - } - } else { - return false; - } - } - - public function getMimeType($path) { - return $this->basicOperation('getMimeType', $path); - } - public function hash($type, $path, $raw = false) { - $postFix=(substr($path, -1, 1)==='/')?'/':''; - $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); - if (OC_FileProxy::runPreProxies('hash', $absolutePath) && OC_Filesystem::isValidPath($path)) { - $path = $this->getRelativePath($absolutePath); - if ($path == null) { - return false; - } - if (OC_Filesystem::$loaded && $this->fakeRoot == OC_Filesystem::getRoot()) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - OC_Filesystem::signal_read, - array( OC_Filesystem::signal_param_path => $path) - ); - } - if ($storage = $this->getStorage($path.$postFix)) { - $result = $storage->hash($type, $this->getInternalPath($path.$postFix), $raw); - $result = OC_FileProxy::runPostProxies('hash', $absolutePath, $result); - return $result; - } - } - return null; - } - - public function free_space($path='/') { - return $this->basicOperation('free_space', $path); - } - - /** - * @brief abstraction layer for basic filesystem functions: wrapper for OC_Filestorage - * @param string $operation - * @param string #path - * @param array (optional) hooks - * @param mixed (optional) $extraParam - * @return mixed - * - * This method takes requests for basic filesystem functions (e.g. reading & writing - * files), processes hooks and proxies, sanitises paths, and finally passes them on to - * OC_Filestorage for delegation to a storage backend for execution - */ - private function basicOperation($operation, $path, $hooks=array(), $extraParam=null) { - $postFix=(substr($path, -1, 1)==='/')?'/':''; - $absolutePath = OC_Filesystem::normalizePath($this->getAbsolutePath($path)); - if(OC_FileProxy::runPreProxies($operation, $absolutePath, $extraParam) and OC_Filesystem::isValidPath($path)) { - $path = $this->getRelativePath($absolutePath); - if($path == null) { - return false; - } - $internalPath = $this->getInternalPath($path.$postFix); - $run=$this->runHooks($hooks, $path); - if($run and $storage = $this->getStorage($path.$postFix)) { - if(!is_null($extraParam)) { - $result = $storage->$operation($internalPath, $extraParam); - } else { - $result = $storage->$operation($internalPath); - } - $result = OC_FileProxy::runPostProxies($operation, $this->getAbsolutePath($path), $result); - if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) { - if($operation!='fopen') {//no post hooks for fopen, the file stream is still open - $this->runHooks($hooks, $path, true); - } - } - return $result; - } - } - return null; - } - - private function runHooks($hooks, $path, $post=false) { - $prefix=($post)?'post_':''; - $run=true; - if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()) { - foreach($hooks as $hook) { - if($hook!='read') { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - $prefix.$hook, - array( - OC_Filesystem::signal_param_run => &$run, - OC_Filesystem::signal_param_path => $path - ) - ); - } elseif(!$post) { - OC_Hook::emit( - OC_Filesystem::CLASSNAME, - $prefix.$hook, - array( - OC_Filesystem::signal_param_path => $path - ) - ); - } - } - } - return $run; - } - - /** - * check if a file or folder has been updated since $time - * @param int $time - * @return bool - */ - public function hasUpdated($path, $time) { - return $this->basicOperation('hasUpdated', $path, array(), $time); - } -} +class OC_FilesystemView extends \OC\Files\View {} diff --git a/lib/group/database.php b/lib/group/database.php index c5dd402b21..1e2328f4c0 100644 --- a/lib/group/database.php +++ b/lib/group/database.php @@ -219,21 +219,14 @@ class OC_Group_Database extends OC_Group_Backend { */ public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) { $displayNames = ''; - /* - - SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo - FROM Persons - INNER JOIN Orders - ON Persons.P_Id=Orders.P_Id - ORDER BY Persons.LastName - */ + $stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', $limit, $offset); $result = $stmt->execute(array($gid, $search.'%')); $users = array(); while ($row = $result->fetchRow()) { $displayName = trim($row['displayname'], ' '); $displayNames[$row['uid']] = empty($displayName) ? $row['uid'] : $displayName; - } + } return $displayNames; } } diff --git a/lib/helper.php b/lib/helper.php index 425dc138c5..0e549d006a 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -324,7 +324,7 @@ class OC_Helper { self::copyr("$src/$file", "$dest/$file"); } } - }elseif(file_exists($src) && !OC_Filesystem::isFileBlacklisted($src)) { + }elseif(file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) { copy($src, $dest); } } @@ -618,7 +618,7 @@ class OC_Helper { $newpath = $path . '/' . $filename; $counter = 2; - while (OC_Filesystem::file_exists($newpath)) { + while (\OC\Files\Filesystem::file_exists($newpath)) { $newname = $name . ' (' . $counter . ')' . $ext; $newpath = $path . '/' . $newname; $counter++; @@ -757,7 +757,7 @@ class OC_Helper { $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = min($upload_max_filesize, $post_max_size); - $freeSpace = OC_Filesystem::free_space($dir); + $freeSpace = \OC\Files\Filesystem::free_space($dir); $freeSpace = max($freeSpace, 0); return min($maxUploadFilesize, $freeSpace); @@ -787,12 +787,12 @@ class OC_Helper { * Calculate the disc space */ public static function getStorageInfo() { - $rootInfo = OC_FileCache::get(''); + $rootInfo = \OC\Files\Filesystem::getFileInfo('/'); $used = $rootInfo['size']; if ($used < 0) { $used = 0; } - $free = OC_Filesystem::free_space(); + $free = \OC\Files\Filesystem::free_space(); $total = $free + $used; if ($total == 0) { $total = 1; // prevent division by zero diff --git a/lib/image.php b/lib/image.php index cfc6d47739..eaa35350bc 100644 --- a/lib/image.php +++ b/lib/image.php @@ -455,7 +455,7 @@ class OC_Image { default: // this is mostly file created from encrypted file - $this->resource = imagecreatefromstring(\OC_Filesystem::file_get_contents(\OC_Filesystem::getLocalPath($imagepath))); + $this->resource = imagecreatefromstring(\OC\Files\Filesystem::file_get_contents(\OC\Files\Filesystem::getLocalPath($imagepath))); $itype = IMAGETYPE_PNG; OC_Log::write('core', 'OC_Image->loadFromFile, Default', OC_Log::DEBUG); break; diff --git a/lib/ocs/cloud.php b/lib/ocs/cloud.php index 2d18b1db3f..179ed8f310 100644 --- a/lib/ocs/cloud.php +++ b/lib/ocs/cloud.php @@ -45,11 +45,11 @@ class OC_OCS_Cloud { if(OC_User::userExists($parameters['user'])) { // calculate the disc space $userDir = '/'.$parameters['user'].'/files'; - OC_Filesystem::init($userDir); - $rootInfo = OC_FileCache::get(''); - $sharedInfo = OC_FileCache::get('/Shared'); + \OC\Files\Filesystem::init($useDir); + $rootInfo = \OC\Files\Filesystem::getFileInfo(''); + $sharedInfo = \OC\Files\Filesystem::getFileInfo('/Shared'); $used = $rootInfo['size'] - $sharedInfo['size']; - $free = OC_Filesystem::free_space(); + $free = \OC\Files\Filesystem::free_space(); $total = $free + $used; if($total===0) $total = 1; // prevent division by zero $relative = round(($used/$total)*10000)/100; diff --git a/lib/public/files.php b/lib/public/files.php index 75e1d2fbbc..f6b3e0ee38 100644 --- a/lib/public/files.php +++ b/lib/public/files.php @@ -99,7 +99,7 @@ class Files { /** * @param string appid * @param $app app - * @return OC_FilesystemView + * @return \OC\Files\View */ public static function getStorage( $app ) { return \OC_App::getStorage( $app ); diff --git a/lib/public/share.php b/lib/public/share.php index e1d77e652d..3c5c2d5378 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -37,8 +37,7 @@ class Share { const SHARE_TYPE_REMOTE = 6; /** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask - * Construct permissions for share() and setPermissions with Or (|) - * e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE + * Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE * Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE) * Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE * Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares @@ -67,17 +66,14 @@ class Share { public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) { if (self::isEnabled()) { if (!isset(self::$backendTypes[$itemType])) { - self::$backendTypes[$itemType] = array('class' => $class, - 'collectionOf' => $collectionOf, - 'supportedFileExtensions' => $supportedFileExtensions); + self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions); if(count(self::$backendTypes) === 1) { \OC_Util::addScript('core', 'share'); \OC_Util::addStyle('core', 'share'); } return true; } - \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, ' - .self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN); + \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN); } return false; } @@ -103,20 +99,8 @@ class Share { * @param int Number of items to return (optional) Returns all by default * @return Return depends on format */ - public static function getItemsSharedWith($itemType, - $format = self::FORMAT_NONE, - $parameters = null, - $limit = -1, - $includeCollections = false) { - return self::getItems($itemType, - null, - self::$shareTypeUserAndGroups, - \OC_User::getUser(), - null, - $format, - $parameters, - $limit, - $includeCollections); + public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { + return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections); } /** @@ -126,20 +110,8 @@ class Share { * @param int Format (optional) Format type must be defined by the backend * @return Return depends on format */ - public static function getItemSharedWith($itemType, - $itemTarget, - $format = self::FORMAT_NONE, - $parameters = null, - $includeCollections = false) { - return self::getItems($itemType, - $itemTarget, - self::$shareTypeUserAndGroups, - \OC_User::getUser(), - null, - $format, - $parameters, - 1, - $includeCollections); + public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections); } /** @@ -149,20 +121,8 @@ class Share { * @param int Format (optional) Format type must be defined by the backend * @return Return depends on format */ - public static function getItemSharedWithBySource($itemType, - $itemSource, - $format = self::FORMAT_NONE, - $parameters = null, - $includeCollections = false) { - return self::getItems($itemType, - $itemSource, - self::$shareTypeUserAndGroups, - \OC_User::getUser(), - null, - $format, - $parameters, - 1, - $includeCollections, true); + public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true); } /** @@ -173,14 +133,7 @@ class Share { * @return Item */ public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) { - return self::getItems($itemType, - $itemSource, - self::SHARE_TYPE_LINK, - null, - $uidOwner, - self::FORMAT_NONE, - null, - 1); + return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1); } /** @@ -189,7 +142,7 @@ class Share { * @return Item */ public static function getShareByToken($token) { - $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?', 1); + $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?',1); $result = $query->execute(array($token)); if (\OC_DB::isError($result)) { \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR); @@ -204,20 +157,8 @@ class Share { * @param int Number of items to return (optional) Returns all by default * @return Return depends on format */ - public static function getItemsShared($itemType, - $format = self::FORMAT_NONE, - $parameters = null, - $limit = -1, - $includeCollections = false) { - return self::getItems($itemType, - null, - null, - null, - \OC_User::getUser(), - $format, - $parameters, - $limit, - $includeCollections); + public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { + return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections); } /** @@ -227,20 +168,8 @@ class Share { * @param int Format (optional) Format type must be defined by the backend * @return Return depends on format */ - public static function getItemShared($itemType, - $itemSource, - $format = self::FORMAT_NONE, - $parameters = null, - $includeCollections = false) { - return self::getItems($itemType, - $itemSource, - null, - null, - \OC_User::getUser(), - $format, - $parameters, - -1, - $includeCollections); + public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { + return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections); } /** @@ -270,26 +199,14 @@ class Share { if ($sharingPolicy == 'groups_only') { $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith)); if (empty($inGroup)) { - $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member' - .' of any groups that '.$uidOwner.' is a member of'; + $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of'; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); throw new \Exception($message); } } // Check if the item source is already shared with the user, either from the same owner or a different user - $checkExists = self::getItems($itemType, - $itemSource, - self::$shareTypeUserAndGroups, - $shareWith, - null, - self::FORMAT_NONE, - null, - 1, - true, - true); - if ($checkExists) { - // Only allow the same share to occur again if it is the same owner and is not a user share, - // this use case is for increasing permissions for a specific user + if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { + // Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); @@ -303,26 +220,14 @@ class Share { throw new \Exception($message); } if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) { - $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner - .' is not a member of the group '.$shareWith; + $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); throw new \Exception($message); } // Check if the item source is already shared with the group, either from the same owner or a different user // The check for each user in the group is done inside the put() function - $checkExists = self::getItems($itemType, - $itemSource, - self::SHARE_TYPE_GROUP, - $shareWith, - null, - self::FORMAT_NONE, - null, - 1, - true, - true); - if ($checkExists) { - // Only allow the same share to occur again if it is the same owner and is not a group share, - // this use case is for increasing permissions for a specific user + if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { + // Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); @@ -337,15 +242,7 @@ class Share { } else if ($shareType === self::SHARE_TYPE_LINK) { if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') { // when updating a link share - $checkExists = self::getItems($itemType, - $itemSource, - self::SHARE_TYPE_LINK, - null, - $uidOwner, - self::FORMAT_NONE, - null, - 1); - if ($checkExists) { + if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) { // remember old token $oldToken = $checkExists['token']; //delete the old share @@ -365,14 +262,7 @@ class Share { } else { $token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH); } - $result = self::put($itemType, - $itemSource, - $shareType, - $shareWith, - $uidOwner, - $permissions, - null, - $token); + $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token); if ($result) { return $token; } else { @@ -410,41 +300,36 @@ class Share { throw new \Exception($message); } // If the item is a folder, scan through the folder looking for equivalent item types - if ($itemType == 'folder') { - $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true); - if ($parentFolder && $files = \OC_Files::getDirectoryContent($itemSource)) { - for ($i = 0; $i < count($files); $i++) { - $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource)); - if ($files[$i]['mimetype'] == 'httpd/unix-directory' - && $children = \OC_Files::getDirectoryContent($name, '/') - ) { - // Continue scanning into child folders - array_push($files, $children); - } else { - // Check file extension for an equivalent item type to convert to - $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1)); - foreach (self::$backends as $type => $backend) { - if (isset($backend->dependsOn) - && $backend->dependsOn == 'file' - && isset($backend->supportedFileExtensions) - && in_array($extension, $backend->supportedFileExtensions) - ) { - $itemType = $type; - break; - } - } - // Pass on to put() to check if this item should be converted, - // the item won't be inserted into the database unless it can be converted - self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder); - } - } - return true; - } - return false; - } else { +// if ($itemType == 'folder') { +// $parentFolder = self::put('folder', $itemSource, $shareType, $shareWith, $uidOwner, $permissions, true); +// if ($parentFolder && $files = \OC\Files\Filesystem::getDirectoryContent($itemSource)) { +// for ($i = 0; $i < count($files); $i++) { +// $name = substr($files[$i]['name'], strpos($files[$i]['name'], $itemSource) - strlen($itemSource)); +// if ($files[$i]['mimetype'] == 'httpd/unix-directory' +// && $children = \OC\Files\Filesystem::getDirectoryContent($name, '/') +// ) { +// // Continue scanning into child folders +// array_push($files, $children); +// } else { +// // Check file extension for an equivalent item type to convert to +// $extension = strtolower(substr($itemSource, strrpos($itemSource, '.') + 1)); +// foreach (self::$backends as $type => $backend) { +// if (isset($backend->dependsOn) && $backend->dependsOn == 'file' && isset($backend->supportedFileExtensions) && in_array($extension, $backend->supportedFileExtensions)) { +// $itemType = $type; +// break; +// } +// } +// // Pass on to put() to check if this item should be converted, the item won't be inserted into the database unless it can be converted +// self::put($itemType, $name, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder); +// } +// } +// return true; +// } +// return false; +// } else { // Put the item into the database return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions); - } +// } } /** @@ -456,15 +341,7 @@ class Share { * @return Returns true on success or false on failure */ public static function unshare($itemType, $itemSource, $shareType, $shareWith) { - $item = self::getItems($itemType, - $itemSource, - $shareType, - $shareWith, - \OC_User::getUser(), - self::FORMAT_NONE, - null, - 1); - if ($item) { + if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) { self::delete($item['id']); return true; } @@ -478,8 +355,7 @@ class Share { * @return Returns true on success or false on failure */ public static function unshareAll($itemType, $itemSource) { - $shares = self::getItemShared($itemType, $itemSource); - if ($shares) { + if ($shares = self::getItemShared($itemType, $itemSource)) { foreach ($shares as $share) { self::delete($share['id']); } @@ -498,27 +374,11 @@ class Share { * */ public static function unshareFromSelf($itemType, $itemTarget) { - $item = self::getItemSharedWith($itemType, $itemTarget); - if ($item) { + if ($item = self::getItemSharedWith($itemType, $itemTarget)) { if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) { - // Insert an extra row for the group share and set permission to 0 - // to prevent it from showing up for the user - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (' - .'`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, ' - .'`uid_owner`, `permissions`, `stime`, `file_source`, `file_target`' - .') VALUES (?,?,?,?,?,?,?,?,?,?,?)'); - $query->execute(array( - $item['item_type'], - $item['item_source'], - $item['item_target'], - $item['id'], - self::$shareTypeGroupUserUnique, - \OC_User::getUser(), - $item['uid_owner'], - 0, - $item['stime'], - $item['file_source'], - $item['file_target'])); + // Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); + $query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target'])); \OC_DB::insertid('*PREFIX*share'); // Delete all reshares by this user of the group share self::delete($item['id'], true, \OC_User::getUser()); @@ -545,24 +405,13 @@ class Share { * @return Returns true on success or false on failure */ public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) { - $item = self::getItems($itemType, - $itemSource, - $shareType, - $shareWith, - \OC_User::getUser(), - self::FORMAT_NONE, - null, - 1, - false); - if ($item) { - // Check if this item is a reshare and - // verify that the permissions granted don't exceed the parent shared item + if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) { + // Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item if (isset($item['parent'])) { $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1); $result = $query->execute(array($item['parent']))->fetchRow(); if (~(int)$result['permissions'] & $permissions) { - $message = 'Setting permissions for '.$itemSource.' failed, ' - .'because the permissions exceed permissions granted to '.\OC_User::getUser(); + $message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser(); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); throw new \Exception($message); } @@ -579,12 +428,9 @@ class Share { $parents = array($item['id']); while (!empty($parents)) { $parents = "'".implode("','", $parents)."'"; - $query = \OC_DB::prepare('SELECT `id`, `permissions`' - .' FROM `*PREFIX*share`' - .' WHERE `parent` IN ('.$parents.')'); + $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); $result = $query->execute(); - // Reset parents array, - // only go through loop again if items are found that need permissions removed + // Reset parents array, only go through loop again if items are found that need permissions removed $parents = array(); while ($item = $result->fetchRow()) { // Check if permissions need to be removed @@ -598,9 +444,7 @@ class Share { // Remove the permissions for all reshares of this item if (!empty($ids)) { $ids = "'".implode("','", $ids)."'"; - $query = \OC_DB::prepare('UPDATE `*PREFIX*share`' - .' SET `permissions` = `permissions` & ?' - .' WHERE `id` IN ('.$ids.')'); + $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')'); $query->execute(array($permissions)); } } @@ -613,16 +457,7 @@ class Share { } public static function setExpirationDate($itemType, $itemSource, $date) { - $items = self::getItems($itemType, - $itemSource, - null, - null, - \OC_User::getUser(), - self::FORMAT_NONE, - null, - -1, - false); - if ($items) { + if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) { if (!empty($items)) { if ($date == '') { $date = null; @@ -684,8 +519,7 @@ class Share { if (!self::getBackend($itemType) instanceof Share_Backend_Collection) { unset($collectionTypes[0]); } - // Return array if collections were found or the item type is a collection itself - // - collections can be inside collections + // Return array if collections were found or the item type is a collection itself - collections can be inside collections if (count($collectionTypes) > 0) { return $collectionTypes; } @@ -696,8 +530,7 @@ class Share { * @brief Get shared items from the database * @param string Item type * @param string Item source or target (optional) - * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK, - * $shareTypeUserAndGroups, or $shareTypeGroupUserUnique + * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_LINK, $shareTypeUserAndGroups, or $shareTypeGroupUserUnique * @param string User or group the item is being shared with * @param string User that is the owner of shared items (optional) * @param int Format to convert items to with formatItems() @@ -709,16 +542,7 @@ class Share { * See public functions getItem(s)... for parameter usage * */ - private static function getItems($itemType, - $item = null, - $shareType = null, - $shareWith = null, - $uidOwner = null, - $format = self::FORMAT_NONE, - $parameters = null, - $limit = -1, - $includeCollections = false, - $itemShareWithBySource = false) { + private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) { if (!self::isEnabled()) { if ($limit == 1 || (isset($uidOwner) && isset($item))) { return false; @@ -727,11 +551,10 @@ class Share { } } $backend = self::getBackend($itemType); - // Get filesystem root to add it to the file target and remove from the file source, - // match file_source with the file cache + // Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache if ($itemType == 'file' || $itemType == 'folder') { - $root = \OC_Filesystem::getRoot(); - $where = 'INNER JOIN `*PREFIX*fscache` ON `file_source` = `*PREFIX*fscache`.`id`'; + $root = \OC\Files\Filesystem::getRoot(); + $where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`'; if (!isset($item)) { $where .= ' WHERE `file_target` IS NOT NULL'; } @@ -817,7 +640,7 @@ class Share { } else { if ($itemType == 'file' || $itemType == 'folder') { $where .= ' `file_target` = ?'; - $item = \OC_Filesystem::normalizePath($item); + $item = \OC\Files\Filesystem::normalizePath($item); } else { $where .= ' `item_target` = ?'; } @@ -831,8 +654,7 @@ class Share { } if ($limit != -1 && !$includeCollections) { if ($shareType == self::$shareTypeUserAndGroups) { - // Make sure the unique user target is returned if it exists, - // unique targets should follow the group share in the database + // Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database // If the limit is not 1, the filtering can be done later $where .= ' ORDER BY `*PREFIX*share`.`id` DESC'; } @@ -848,34 +670,29 @@ class Share { // TODO Optimize selects if ($format == self::FORMAT_STATUSES) { if ($itemType == 'file' || $itemType == 'folder') { - $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, ' - .'`share_type`, `file_source`, `path`, `expiration`'; + $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`'; } else { $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`'; } } else { if (isset($uidOwner)) { if ($itemType == 'file' || $itemType == 'folder') { - $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, ' - .'`share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`'; + $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`'; } else { - $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, ' - .'`permissions`, `stime`, `file_source`, `expiration`, `token`'; + $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`, `token`'; } } else { if ($fileDependent) { if (($itemType == 'file' || $itemType == 'folder') - && $format == \OC_Share_Backend_File::FORMAT_FILE_APP + && $format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT ) { $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, ' - .'`share_type`, `share_with`, `file_source`, `path`, `file_target`, `permissions`, ' - .'`expiration`, `name`, `ctime`, `mtime`, `mimetype`, `size`, `encrypted`, ' - .'`versioned`, `writable`'; + .'`share_type`, `share_with`, `file_source`, `path`, `file_target`, ' + .'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, ' + .'`name` `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`'; } else { - $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, ' - .'`*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, ' - .'`path`, `file_target`, `permissions`, `stime`, `expiration`, `token`'; + $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`'; } } else { $select = '*'; @@ -886,9 +703,7 @@ class Share { $query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit); $result = $query->execute($queryArgs); if (\OC_DB::isError($result)) { - \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) - . ', select=' . $select - . ' where=' . $where, \OC_Log::ERROR); + \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where, \OC_Log::ERROR); } $items = array(); $targets = array(); @@ -905,8 +720,7 @@ class Share { } else if (!isset($uidOwner)) { // Check if the same target already exists if (isset($targets[$row[$column]])) { - // Check if the same owner shared with the user twice through a group and user share - // - this is allowed + // Check if the same owner shared with the user twice through a group and user share - this is allowed $id = $targets[$row[$column]]; if ($items[$id]['uid_owner'] == $row['uid_owner']) { // Switch to group share type to ensure resharing conditions aren't bypassed @@ -914,11 +728,8 @@ class Share { $items[$id]['share_type'] = self::SHARE_TYPE_GROUP; $items[$id]['share_with'] = $row['share_with']; } - // Switch ids if sharing permission is granted on only one share - // to ensure correct parent is used if resharing - if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE - && (int)$row['permissions'] & PERMISSION_SHARE - ) { + // Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing + if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) { $items[$row['id']] = $items[$id]; unset($items[$id]); $id = $row['id']; @@ -936,7 +747,8 @@ class Share { if (isset($row['parent'])) { $row['path'] = '/Shared/'.basename($row['path']); } else { - $row['path'] = substr($row['path'], $root); + // Strip 'files' from path + $row['path'] = substr($row['path'], 5); } } if (isset($row['expiration'])) { @@ -961,7 +773,7 @@ class Share { $collectionItems = array(); foreach ($items as &$row) { // Return only the item instead of a 2-dimensional array - if ($limit == 1 && $row['item_type'] == $itemType && $row[$column] == $item) { + if ($limit == 1 && $row[$column] == $item && ($row['item_type'] == $itemType || $itemType == 'file')) { if ($format == self::FORMAT_NONE) { return $row; } else { @@ -970,9 +782,7 @@ class Share { } // Check if this is a collection of the requested item type if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) { - if (($collectionBackend = self::getBackend($row['item_type'])) - && $collectionBackend instanceof Share_Backend_Collection - ) { + if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) { // Collections can be inside collections, check if the item is a collection if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) { $collectionItems[] = $row; @@ -996,9 +806,10 @@ class Share { if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') { $childItem['file_source'] = $child['source']; } else { - $childItem['file_source'] = \OC_FileCache::getId($child['file_path']); + $meta = \OC\Files\Filesystem::getFileInfo($child['file_path']); + $childItem['file_source'] = $meta['fileid']; } - $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']); + $childItem['file_target'] = \OC\Files\Filesystem::normalizePath($child['file_path']); } if (isset($item)) { if ($childItem[$column] == $item) { @@ -1029,6 +840,9 @@ class Share { if (!empty($collectionItems)) { $items = array_merge($items, $collectionItems); } + if (empty($items) && $limit == 1) { + return false; + } if ($format == self::FORMAT_NONE) { return $items; } else if ($format == self::FORMAT_STATUSES) { @@ -1064,18 +878,10 @@ class Share { * @param bool|array Parent folder target (optional) * @return bool Returns true on success or false on failure */ - private static function put($itemType, - $itemSource, - $shareType, - $shareWith, - $uidOwner, - $permissions, - $parentFolder = null, - $token = null) { + private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null, $token = null) { $backend = self::getBackend($itemType); // Check if this is a reshare - $checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true); - if ($checkReshare) { + if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) { // Check if attempting to share back to owner if ($checkReshare['uid_owner'] == $shareWith && $shareType == self::SHARE_TYPE_USER) { $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the original sharer'; @@ -1085,8 +891,7 @@ class Share { // Check if share permissions is granted if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) { if (~(int)$checkReshare['permissions'] & $permissions) { - $message = 'Sharing '.$itemSource.' failed, ' - .'because the permissions exceed permissions granted to '.$uidOwner; + $message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); throw new \Exception($message); } else { @@ -1108,8 +913,7 @@ class Share { $suggestedItemTarget = null; $suggestedFileTarget = null; if (!$backend->isValidSource($itemSource, $uidOwner)) { - $message = 'Sharing '.$itemSource.' failed, ' - .'because the sharing backend for '.$itemType.' could not find its source'; + $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source'; \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); throw new \Exception($message); } @@ -1119,7 +923,8 @@ class Share { if ($itemType == 'file' || $itemType == 'folder') { $fileSource = $itemSource; } else { - $fileSource = \OC_FileCache::getId($filePath); + $meta = \OC\Files\Filesystem::getFileInfo($filePath); + $fileSource = $meta['fileid']; } if ($fileSource == -1) { $message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache'; @@ -1131,27 +936,14 @@ class Share { $fileSource = null; } } - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`,' - .' `share_type`, `share_with`, `uid_owner`, `permissions`,' - .' `stime`, `file_source`, `file_target`, `token`' - .') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'); + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'); // Share with a group if ($shareType == self::SHARE_TYPE_GROUP) { - $groupItemTarget = self::generateTarget($itemType, - $itemSource, - $shareType, - $shareWith['group'], - $uidOwner, - $suggestedItemTarget); + $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget); if (isset($fileSource)) { if ($parentFolder) { if ($parentFolder === true) { - $groupFileTarget = self::generateTarget('file', - $filePath, - $shareType, - $shareWith['group'], - $uidOwner, - $suggestedFileTarget); + $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); // Set group default file target for future use $parentFolders[0]['folder'] = $groupFileTarget; } else { @@ -1160,50 +952,21 @@ class Share { $parent = $parentFolder[0]['id']; } } else { - $groupFileTarget = self::generateTarget('file', - $filePath, - $shareType, - $shareWith['group'], - $uidOwner, - $suggestedFileTarget); + $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); } } else { $groupFileTarget = null; } - $query->execute(array( - $itemType, - $itemSource, - $groupItemTarget, - $parent, - $shareType, - $shareWith['group'], - $uidOwner, - $permissions, - time(), - $fileSource, - $groupFileTarget, - $token)); + $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token)); // Save this id, any extra rows for this group share will need to reference it $parent = \OC_DB::insertid('*PREFIX*share'); // Loop through all users of this group in case we need to add an extra row foreach ($shareWith['users'] as $uid) { - $itemTarget = self::generateTarget($itemType, - $itemSource, - self::SHARE_TYPE_USER, - $uid, - $uidOwner, - $suggestedItemTarget, - $parent); + $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent); if (isset($fileSource)) { if ($parentFolder) { if ($parentFolder === true) { - $fileTarget = self::generateTarget('file', - $filePath, - self::SHARE_TYPE_USER, - $uid, - $uidOwner, - $suggestedFileTarget, - $parent); + $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); if ($fileTarget != $groupFileTarget) { $parentFolders[$uid]['folder'] = $fileTarget; } @@ -1212,13 +975,7 @@ class Share { $parent = $parentFolder[$uid]['id']; } } else { - $fileTarget = self::generateTarget('file', - $filePath, - self::SHARE_TYPE_USER, - $uid, - $uidOwner, - $suggestedFileTarget, - $parent); + $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); } } else { $fileTarget = null; @@ -1239,19 +996,7 @@ class Share { )); // Insert an extra row for the group share if the item or file target is unique for this user if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) { - $query->execute(array( - $itemType, - $itemSource, - $itemTarget, - $parent, - self::$shareTypeGroupUserUnique, - $uid, - $uidOwner, - $permissions, - time(), - $fileSource, - $fileTarget, - $token)); + $query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token)); $id = \OC_DB::insertid('*PREFIX*share'); } } @@ -1260,50 +1005,23 @@ class Share { return $parentFolders; } } else { - $itemTarget = self::generateTarget($itemType, - $itemSource, - $shareType, - $shareWith, - $uidOwner, - $suggestedItemTarget); + $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget); if (isset($fileSource)) { if ($parentFolder) { if ($parentFolder === true) { - $fileTarget = self::generateTarget('file', - $filePath, - $shareType, - $shareWith, - $uidOwner, - $suggestedFileTarget); + $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); $parentFolders['folder'] = $fileTarget; } else { $fileTarget = $parentFolder['folder'].$itemSource; $parent = $parentFolder['id']; } } else { - $fileTarget = self::generateTarget('file', - $filePath, - $shareType, - $shareWith, - $uidOwner, - $suggestedFileTarget); + $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); } } else { $fileTarget = null; } - $query->execute(array( - $itemType, - $itemSource, - $itemTarget, - $parent, - $shareType, - $shareWith, - $uidOwner, - $permissions, - time(), - $fileSource, - $fileTarget, - $token)); + $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token)); $id = \OC_DB::insertid('*PREFIX*share'); \OC_Hook::emit('OCP\Share', 'post_shared', array( 'itemType' => $itemType, @@ -1338,13 +1056,7 @@ class Share { * @param int The id of the parent group share (optional) * @return string Item target */ - private static function generateTarget($itemType, - $itemSource, - $shareType, - $shareWith, - $uidOwner, - $suggestedTarget = null, - $groupParent = null) { + private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) { $backend = self::getBackend($itemType); if ($shareType == self::SHARE_TYPE_LINK) { if (isset($suggestedTarget)) { @@ -1396,7 +1108,8 @@ class Share { } if ($item['uid_owner'] == $uidOwner) { if ($itemType == 'file' || $itemType == 'folder') { - if ($item['file_source'] == \OC_FileCache::getId($itemSource)) { + $meta = \OC\Files\Filesystem::getFileInfo($itemSource); + if ($item['file_source'] == $meta['fileid']) { return $target; } } else if ($item['item_source'] == $itemSource) { @@ -1410,43 +1123,18 @@ class Share { // Find similar targets to improve backend's chances to generate a unqiue target if ($userAndGroups) { if ($column == 'file_target') { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`' - .' FROM `*PREFIX*share`' - .' WHERE `item_type` IN (\'file\', \'folder\')' - .' AND `share_type` IN (?,?,?)' - .' AND `share_with`' - .' IN (\''.implode('\',\'', $userAndGroups).'\')'); - $result = $checkTargets->execute(array( - self::SHARE_TYPE_USER, - self::SHARE_TYPE_GROUP, - self::$shareTypeGroupUserUnique)); + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); + $result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); } else { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`' - .' FROM `*PREFIX*share`' - .' WHERE `item_type` = ?' - .' AND `share_type` IN (?,?,?)' - .' AND `share_with`' - .' IN (\''.implode('\',\'', $userAndGroups).'\')'); - $result = $checkTargets->execute(array( - $itemType, - self::SHARE_TYPE_USER, - self::SHARE_TYPE_GROUP, - self::$shareTypeGroupUserUnique)); + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); + $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); } } else { if ($column == 'file_target') { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`' - .' FROM `*PREFIX*share`' - .' WHERE `item_type` IN (\'file\', \'folder\')' - .' AND `share_type` = ?' - .' AND `share_with` = ?'); + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?'); $result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith)); } else { - $checkTargets = \OC_DB::prepare('SELECT `'.$column.'`' - .' FROM `*PREFIX*share`' - .' WHERE `item_type` = ?' - .' AND `share_type` = ?' - .' AND `share_with` = ?'); + $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?'); $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith)); } } @@ -1474,43 +1162,21 @@ class Share { $parents = array($parent); while (!empty($parents)) { $parents = "'".implode("','", $parents)."'"; - // Check the owner on the first search of reshares, - // useful for finding and deleting the reshares by a single user of a group share + // Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share if (count($ids) == 1 && isset($uidOwner)) { - $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent`' - .' FROM `*PREFIX*share`' - .' WHERE `parent` IN ('.$parents.')' - .' AND `uid_owner` = ?'); + $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?'); $result = $query->execute(array($uidOwner)); } else { - $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner`' - .' FROM `*PREFIX*share`' - .' WHERE `parent` IN ('.$parents.')'); + $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); $result = $query->execute(); } // Reset parents array, only go through loop again if items are found $parents = array(); while ($item = $result->fetchRow()) { - // Search for a duplicate parent share, - // this occurs when an item is shared to the same user through a group and user - // or the same item is shared by different users + // Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users $userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner'])); - $query = \OC_DB::prepare('SELECT `id`, `permissions`' - .' FROM `*PREFIX*share`' - .' WHERE `item_type` = ?' - .' AND `item_target` = ?' - .' AND `share_type` IN (?,?,?)' - .' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')' - .' AND `uid_owner` != ?' - .' AND `id` != ?'); - $duplicateParent = $query->execute(array( - $item['item_type'], - $item['item_target'], - self::SHARE_TYPE_USER, - self::SHARE_TYPE_GROUP, - self::$shareTypeGroupUserUnique, - $item['uid_owner'], - $item['parent']))->fetchRow(); + $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?'); + $duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow(); if ($duplicateParent) { // Change the parent to the other item id if share permission is granted if ($duplicateParent['permissions'] & PERMISSION_SHARE) { @@ -1539,10 +1205,7 @@ class Share { public static function post_deleteUser($arguments) { // Delete any items shared with the deleted user - $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`' - .' WHERE `share_with` = ?' - .' AND `share_type` = ?' - .' OR `share_type` = ?'); + $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?'); $result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique)); // Delete any items the deleted user shared $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?'); @@ -1556,46 +1219,21 @@ class Share { // Find the group shares and check if the user needs a unique target $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); - $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`,' - .' `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,' - .' `file_target`)' - .' VALUES (?,?,?,?,?,?,?,?,?,?,?)'); + $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); while ($item = $result->fetchRow()) { if ($item['item_type'] == 'file' || $item['item_type'] == 'file') { $itemTarget = null; } else { - $itemTarget = self::generateTarget($item['item_type'], - $item['item_source'], - self::SHARE_TYPE_USER, - $arguments['uid'], - $item['uid_owner'], - $item['item_target'], - $item['id']); + $itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']); } if (isset($item['file_source'])) { - $fileTarget = self::generateTarget($item['item_type'], - $item['item_source'], - self::SHARE_TYPE_USER, - $arguments['uid'], - $item['uid_owner'], - $item['file_target'], - $item['id']); + $fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']); } else { $fileTarget = null; } // Insert an extra row for the group share if the item or file target is unique for this user if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) { - $query->execute(array($item['item_type'], - $item['item_source'], - $itemTarget, - $item['id'], - self::$shareTypeGroupUserUnique, - $arguments['uid'], - $item['uid_owner'], - $item['permissions'], - $item['stime'], - $item['file_source'], - $fileTarget)); + $query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget)); \OC_DB::insertid('*PREFIX*share'); } } @@ -1603,15 +1241,8 @@ class Share { public static function post_removeFromGroup($arguments) { // TODO Don't call if user deleted? - $query = \OC_DB::prepare('SELECT `id`, `share_type`' - .' FROM `*PREFIX*share`' - .' WHERE (`share_type` = ? AND `share_with` = ?)' - .' OR (`share_type` = ? AND `share_with` = ?)'); - $result = $query->execute(array( - self::SHARE_TYPE_GROUP, - $arguments['gid'], - self::$shareTypeGroupUserUnique, - $arguments['uid'])); + $query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)'); + $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid'])); while ($item = $result->fetchRow()) { if ($item['share_type'] == self::SHARE_TYPE_GROUP) { // Delete all reshares by this user of the group share @@ -1668,13 +1299,10 @@ interface Share_Backend { * @param int Format * @return ? * - * The items array is a 3-dimensional array with the item_source as the first key - * and the share id as the second key to an array with the share info. + * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info. * The key/value pairs included in the share info depend on the function originally called: - * If called by getItem(s)Shared: id, item_type, item, item_source, - * share_type, share_with, permissions, stime, file_source - * If called by getItem(s)SharedWith: id, item_type, item, item_source, - * item_target, share_type, share_with, permissions, stime, file_source, file_target + * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source + * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target * This function allows the backend to control the output of shared items with custom formats. * It is only called through calls to the public getItem(s)Shared(With) functions. */ @@ -1707,8 +1335,7 @@ interface Share_Backend_Collection extends Share_Backend { /** * @brief Get the sources of the children of the item * @param string Item source - * @return array Returns an array of children each inside an array with the keys: - * source, target, and file_path if applicable + * @return array Returns an array of children each inside an array with the keys: source, target, and file_path if applicable */ public function getChildren($itemSource); diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php index ea536ef77d..4d88c2a87f 100644 --- a/lib/search/provider/file.php +++ b/lib/search/provider/file.php @@ -2,7 +2,7 @@ class OC_Search_Provider_File extends OC_Search_Provider{ function search($query) { - $files=OC_FileCache::search($query, true); + $files=\OC\Files\Filesystem::search($query, true); $results=array(); $l=OC_L10N::get('lib'); foreach($files as $fileData) { diff --git a/lib/user/database.php b/lib/user/database.php index 7deeb0c469..8dfd9534a9 100644 --- a/lib/user/database.php +++ b/lib/user/database.php @@ -156,12 +156,23 @@ class OC_User_Database extends OC_User_Backend { public function getDisplayNames($search = '', $limit = null, $offset = null) { $displayNames = array(); $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset); - $result = $query->execute(array($search.'%')); + $result = $query->execute(array($search.'%')); $users = array(); - while ($row = $result->fetchRow()) { - $displayName = trim($row['displayname'], ' '); - $displayNames[$row['uid']] = empty($displayName) ? $row['uid'] : $displayName; - } + while ($row = $result->fetchRow()) { + $displayNames[$row['uid']] = $row['displayname']; + } + + // let's see if we can also find some users who don't have a display name yet + $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset); + $result = $query->execute(array($search.'%')); + while ($row = $result->fetchRow()) { + $displayName = trim($row['displayname'], ' '); + if ( empty($displayName) ) { + $displayNames[$row['uid']] = $row['uid']; + } + } + + return $displayNames; } diff --git a/lib/util.php b/lib/util.php index 0543df979d..e8057abe9a 100755 --- a/lib/util.php +++ b/lib/util.php @@ -39,7 +39,7 @@ class OC_Util { $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //first set up the local "root" storage if(!self::$rootMounted) { - OC_Filesystem::mount('OC_Filestorage_Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/'); + \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$CONFIG_DATADIRECTORY), '/'); self::$rootMounted=true; } @@ -51,51 +51,30 @@ class OC_Util { mkdir( $userdirectory, 0755, true ); } //jail the user into his "home" directory - OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => $user_root), $user); - OC_Filesystem::init($user_dir, $user); + \OC\Files\Filesystem::init($user_dir); + $quotaProxy=new OC_FileProxy_Quota(); $fileOperationProxy = new OC_FileProxy_FileOperations(); OC_FileProxy::register($quotaProxy); OC_FileProxy::register($fileOperationProxy); - // Load personal mount config - self::loadUserMountPoints($user); + OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir)); } + return true; } public static function tearDownFS() { - OC_Filesystem::tearDown(); + \OC\Files\Filesystem::tearDown(); self::$fsSetup=false; } - public static function loadUserMountPoints($user) { - $user_dir = '/'.$user.'/files'; - $user_root = OC_User::getHome($user); - $userdirectory = $user_root . '/files'; - if (is_file($user_root.'/mount.php')) { - $mountConfig = include $user_root.'/mount.php'; - if (isset($mountConfig['user'][$user])) { - foreach ($mountConfig['user'][$user] as $mountPoint => $options) { - OC_Filesystem::mount($options['class'], $options['options'], $mountPoint); - } - } - - $mtime=filemtime($user_root.'/mount.php'); - $previousMTime=OC_Preferences::getValue($user, 'files', 'mountconfigmtime', 0); - if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated - OC_FileCache::triggerUpdate($user); - OC_Preferences::setValue($user, 'files', 'mountconfigmtime', $mtime); - } - } - } - /** * get the current installed version of ownCloud * @return array */ public static function getVersion() { // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user - return array(4, 91, 03); + return array(4, 91, 9); } /** @@ -157,14 +136,14 @@ class OC_Util { * @param string $text the text content for the element */ public static function addHeader( $tag, $attributes, $text='') { - self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes, 'text'=>$text); + self::$headers[] = array('tag'=>$tag, 'attributes'=>$attributes, 'text'=>$text); } /** * formats a timestamp in the "right" way * * @param int timestamp $timestamp - * @param bool dateOnly option to ommit time from the result + * @param bool dateOnly option to omit time from the result */ public static function formatDate( $timestamp, $dateOnly=false) { if(isset($_SESSION['timezone'])) {//adjust to clients timezone if we know it @@ -397,6 +376,17 @@ class OC_Util { return $id; } + /** + * @brief Static lifespan (in seconds) when a request token expires. + * @see OC_Util::callRegister() + * @see OC_Util::isCallRegistered() + * @description + * Also required for the client side to compute the piont in time when to + * request a fresh token. The client will do so when nearly 97% of the + * timespan coded here has expired. + */ + public static $callLifespan = 3600; // 3600 secs = 1 hour + /** * @brief Register an get/post call. Important to prevent CSRF attacks. * @todo Write howto: CSRF protection guide @@ -405,6 +395,8 @@ class OC_Util { * Creates a 'request token' (random) and stores it inside the session. * Ever subsequent (ajax) request must use such a valid token to succeed, * otherwise the request will be denied as a protection against CSRF. + * The tokens expire after a fixed lifespan. + * @see OC_Util::$callLifespan * @see OC_Util::isCallRegistered() */ public static function callRegister() { @@ -423,6 +415,7 @@ class OC_Util { /** * @brief Check an ajax get/post call if the request token is valid. * @return boolean False if request token is not set or is invalid. + * @see OC_Util::$callLifespan * @see OC_Util::callRegister() */ public static function isCallRegistered() { diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php index 1f23c2cfd6..35c0b7a934 100644 --- a/settings/l10n/ca.php +++ b/settings/l10n/ca.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Useu aquesta adreça per connectar amb ownCloud des del gestor de fitxers", "Version" => "Versió", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desenvolupat per la comunitat ownCloud, el codi font té llicència AGPL.", +"Login Name" => "Nom d'accés", "Groups" => "Grups", "Create" => "Crea", "Default Storage" => "Emmagatzemament per defecte", "Unlimited" => "Il·limitat", "Other" => "Un altre", +"Display Name" => "Nom a mostrar", "Group Admin" => "Grup Admin", "Storage" => "Emmagatzemament", "Default" => "Per defecte", diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php index be75a679c6..f9e8f2155d 100644 --- a/settings/l10n/cs_CZ.php +++ b/settings/l10n/cs_CZ.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Použijte tuto adresu pro připojení k vašemu ownCloud skrze správce souborů", "Version" => "Verze", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Vyvinuto komunitou ownCloud, zdrojový kód je licencován pod AGPL.", +"Login Name" => "Přihlašovací jméno", "Groups" => "Skupiny", "Create" => "Vytvořit", "Default Storage" => "Výchozí úložiště", "Unlimited" => "Neomezeně", "Other" => "Jiná", +"Display Name" => "Zobrazované jméno", "Group Admin" => "Správa skupiny", "Storage" => "Úložiště", "Default" => "Výchozí", diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php index bbf45bc562..ce807b642e 100644 --- a/settings/l10n/es_AR.php +++ b/settings/l10n/es_AR.php @@ -24,7 +24,7 @@ "-licensed by " => "-licenciado por ", "User Documentation" => "Documentación de Usuario", "Administrator Documentation" => "Documentación de Administrador", -"Online Documentation" => "Documentación en linea", +"Online Documentation" => "Documentación en línea", "Forum" => "Foro", "Bugtracker" => "Informar errores", "Commercial Support" => "Soporte comercial", @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Utiliza esta dirección para conectarte con ownCloud en tu Administrador de Archivos", "Version" => "Versión", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desarrollado por la comunidad ownCloud, el código fuente está bajo licencia AGPL.", +"Login Name" => "Nombre de ", "Groups" => "Grupos", "Create" => "Crear", "Default Storage" => "Almacenamiento Predeterminado", "Unlimited" => "Ilimitado", "Other" => "Otro", +"Display Name" => "Nombre a mostrar", "Group Admin" => "Grupo Administrador", "Storage" => "Almacenamiento", "Default" => "Predeterminado", diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php index 29e3a810ca..dd9eb48304 100644 --- a/settings/l10n/eu.php +++ b/settings/l10n/eu.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko", "Version" => "Bertsioa", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "ownCloud komunitateak garatuta, itubruru kodeaAGPL lizentziarekin banatzen da.", +"Login Name" => "Sarrera Izena", "Groups" => "Taldeak", "Create" => "Sortu", "Default Storage" => "Lehenetsitako Biltegiratzea", "Unlimited" => "Mugarik gabe", "Other" => "Besteak", +"Display Name" => "Bistaratze Izena", "Group Admin" => "Talde administradorea", "Storage" => "Biltegiratzea", "Default" => "Lehenetsia", diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php index 84b18902b9..f8a19ae0f9 100644 --- a/settings/l10n/fi_FI.php +++ b/settings/l10n/fi_FI.php @@ -49,10 +49,12 @@ "Use this address to connect to your ownCloud in your file manager" => "Käytä tätä osoitetta yhdistäessäsi ownCloudiisi tiedostonhallintaa käyttäen", "Version" => "Versio", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Kehityksestä on vastannut ownCloud-yhteisö, lähdekoodi on julkaistu lisenssin AGPL alaisena.", +"Login Name" => "Kirjautumisnimi", "Groups" => "Ryhmät", "Create" => "Luo", "Unlimited" => "Rajoittamaton", "Other" => "Muu", +"Display Name" => "Näyttönimi", "Group Admin" => "Ryhmän ylläpitäjä", "Default" => "Oletus", "Delete" => "Poista" diff --git a/settings/l10n/it.php b/settings/l10n/it.php index 2199f7d8db..806732933d 100644 --- a/settings/l10n/it.php +++ b/settings/l10n/it.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Usa questo indirizzo per connetterti al tuo ownCloud dal tuo gestore file", "Version" => "Versione", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Sviluppato dalla comunità di ownCloud, il codice sorgente è licenziato nei termini della AGPL.", +"Login Name" => "Nome utente", "Groups" => "Gruppi", "Create" => "Crea", "Default Storage" => "Archiviazione predefinita", "Unlimited" => "Illimitata", "Other" => "Altro", +"Display Name" => "Nome visualizzato", "Group Admin" => "Gruppi amministrati", "Storage" => "Archiviazione", "Default" => "Predefinito", diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php index f14233d7e5..e3146a33c5 100644 --- a/settings/l10n/pt_BR.php +++ b/settings/l10n/pt_BR.php @@ -1,29 +1,37 @@ "Não foi possivel carregar lista da App Store", +"Unable to load list from App Store" => "Não foi possível carregar lista da App Store", "Group already exists" => "Grupo já existe", -"Unable to add group" => "Não foi possivel adicionar grupo", -"Could not enable app. " => "Não pôde habilitar aplicação", -"Email saved" => "Email gravado", -"Invalid email" => "Email inválido", -"Unable to delete group" => "Não foi possivel remover grupo", -"Authentication error" => "erro de autenticação", -"Unable to delete user" => "Não foi possivel remover usuário", -"Language changed" => "Mudou Idioma", +"Unable to add group" => "Não foi possível adicionar grupo", +"Could not enable app. " => "Não foi possível habilitar aplicativo.", +"Email saved" => "E-mail guardado", +"Invalid email" => "E-mail inválido", +"Unable to delete group" => "Não foi possível remover grupo", +"Authentication error" => "Erro de autenticação", +"Unable to delete user" => "Não foi possível remover usuário", +"Language changed" => "Idioma alterado", "Invalid request" => "Pedido inválido", "Admins can't remove themself from the admin group" => "Admins não podem se remover do grupo admin", -"Unable to add user to group %s" => "Não foi possivel adicionar usuário ao grupo %s", -"Unable to remove user from group %s" => "Não foi possivel remover usuário ao grupo %s", -"Disable" => "Desabilitado", -"Enable" => "Habilitado", -"Saving..." => "Gravando...", -"__language_name__" => "Português do Brasil", +"Unable to add user to group %s" => "Não foi possível adicionar usuário ao grupo %s", +"Unable to remove user from group %s" => "Não foi possível remover usuário do grupo %s", +"Disable" => "Desabilitar", +"Enable" => "Habilitar", +"Saving..." => "Guardando...", +"__language_name__" => "Português (Brasil)", "Add your App" => "Adicione seu Aplicativo", "More Apps" => "Mais Apps", -"Select an App" => "Selecione uma Aplicação", +"Select an App" => "Selecione um Aplicativo", "See application page at apps.owncloud.com" => "Ver página do aplicativo em apps.owncloud.com", "-licensed by " => "-licenciado por ", +"User Documentation" => "Documentação de Usuário", +"Administrator Documentation" => "Documentação de Administrador", +"Online Documentation" => "Documentação Online", +"Forum" => "Fórum", +"Commercial Support" => "Suporte Comercial", "You have used %s of the available %s" => "Você usou %s do seu espaço de %s", "Clients" => "Clientes", +"Download Desktop Clients" => "Baixar Clientes Desktop", +"Download Android Client" => "Baixar Cliente Android", +"Download iOS Client" => "Baixar Cliente iOS", "Password" => "Senha", "Your password was changed" => "Sua senha foi alterada", "Unable to change your password" => "Não é possivel alterar a sua senha", @@ -31,15 +39,24 @@ "New password" => "Nova senha", "show" => "mostrar", "Change password" => "Alterar senha", -"Email" => "Email", -"Your email address" => "Seu endereço de email", -"Fill in an email address to enable password recovery" => "Preencha um endereço de email para habilitar a recuperação de senha", +"Email" => "E-mail", +"Your email address" => "Seu endereço de e-mail", +"Fill in an email address to enable password recovery" => "Preencha um endereço de e-mail para habilitar a recuperação de senha", "Language" => "Idioma", "Help translate" => "Ajude a traduzir", +"WebDAV" => "WebDAV", +"Use this address to connect to your ownCloud in your file manager" => "Usar este endereço para conectar-se ao seu ownCloud no seu gerenciador de arquivos", +"Version" => "Versão", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desenvolvido pela comunidade ownCloud, o código fonte está licenciado sob AGPL.", +"Login Name" => "Nome de Login", "Groups" => "Grupos", "Create" => "Criar", +"Default Storage" => "Armazenamento Padrão", +"Unlimited" => "Ilimitado", "Other" => "Outro", +"Display Name" => "Nome de Exibição", "Group Admin" => "Grupo Administrativo", +"Storage" => "Armazenamento", +"Default" => "Padrão", "Delete" => "Apagar" ); diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php index af5dfbf6e4..86d4c2778c 100644 --- a/settings/l10n/pt_PT.php +++ b/settings/l10n/pt_PT.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Use este endereço no seu gestor de ficheiros para ligar à sua ownCloud", "Version" => "Versão", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Desenvolvido pela comunidade ownCloud, ocódigo fonte está licenciado sob a AGPL.", +"Login Name" => "Nome de utilizador", "Groups" => "Grupos", "Create" => "Criar", "Default Storage" => "Armazenamento Padrão", "Unlimited" => "Ilimitado", "Other" => "Outro", +"Display Name" => "Nome público", "Group Admin" => "Grupo Administrador", "Storage" => "Armazenamento", "Default" => "Padrão", diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php index 3941bd51ae..6f93d0db0b 100644 --- a/settings/l10n/sk_SK.php +++ b/settings/l10n/sk_SK.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Použite túto adresu pre pripojenie vášho ownCloud k súborovému správcovi", "Version" => "Verzia", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Vyvinuté komunitou ownCloud,zdrojový kód je licencovaný pod AGPL.", +"Login Name" => "Prihlasovacie meno", "Groups" => "Skupiny", "Create" => "Vytvoriť", "Default Storage" => "Predvolené úložisko", "Unlimited" => "Nelimitované", "Other" => "Iné", +"Display Name" => "Zobrazované meno", "Group Admin" => "Správca skupiny", "Storage" => "Úložisko", "Default" => "Predvolené", diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php index 4c30873b3c..1bf3d22595 100644 --- a/settings/l10n/sv.php +++ b/settings/l10n/sv.php @@ -49,11 +49,13 @@ "Use this address to connect to your ownCloud in your file manager" => "Använd denna adress för att ansluta till ownCloud i din filhanterare", "Version" => "Version", "Developed by the ownCloud community, the source code is licensed under the AGPL." => "Utvecklad av ownCloud kommunity, källkoden är licenserad under AGPL.", +"Login Name" => "Inloggningsnamn", "Groups" => "Grupper", "Create" => "Skapa", "Default Storage" => "Förvald lagring", "Unlimited" => "Obegränsad", "Other" => "Annat", +"Display Name" => "Visat namn", "Group Admin" => "Gruppadministratör", "Storage" => "Lagring", "Default" => "Förvald", diff --git a/settings/templates/users.php b/settings/templates/users.php index f30c21efae..4d7c29678c 100644 --- a/settings/templates/users.php +++ b/settings/templates/users.php @@ -94,11 +94,11 @@ $_['subadmingroups'] = array_flip($items);
change display name + alt="t("change display name")?>" title="t("change display name")?>"/> ●●●●●●● set new password + alt="t("set new password")?>" title="t("set new password")?>"/>