Merge branch 'master' into share_expiration

Conflicts:
	core/js/share.js
	lib/util.php
This commit is contained in:
Michael Gapczynski 2012-09-12 01:06:57 -04:00
commit 60feaf9abf
981 changed files with 26746 additions and 13913 deletions

2
.gitignore vendored
View File

@ -19,10 +19,12 @@ _darcs/*
CVS/*
.svn/*
RCS/*
*.backup*
# kdevelop
.kdev
*.kdev4
*.kate-swp
# Lokalize
*lokalize*

View File

@ -1,182 +0,0 @@
[main]
host = https://www.transifex.net
[owncloud.core]
file_filter = l10n/<lang>/core.po
host = http://www.transifex.net
source_file = l10n/templates/core.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/core.po
trans.ca = l10n/ca/core.po
trans.cs_CZ = l10n/cs_CZ/core.po
trans.da = l10n/da/core.po
trans.de = l10n/de/core.po
trans.el = l10n/el/core.po
trans.es = l10n/es/core.po
trans.et_EE = l10n/et_EE/core.po
trans.fr = l10n/fr/core.po
trans.id = l10n/id/core.po
trans.it = l10n/it/core.po
trans.lb = l10n/lb/core.po
trans.ms_MY = l10n/ms_MY/core.po
trans.nb_NO = l10n/nb_NO/core.po
trans.nl = l10n/nl/core.po
trans.pl = l10n/pl/core.po
trans.pt_BR = l10n/pt_BR/core.po
trans.pt_PT = l10n/pt_PT/core.po
trans.ro = l10n/ro/core.po
trans.ru = l10n/ru/core.po
trans.sr = l10n/sr/core.po
trans.sr@latin = l10n/sr@latin/core.po
trans.sv = l10n/sv/core.po
trans.zh_CN = l10n/zh_CN/core.po
[owncloud.settings]
file_filter = l10n/<lang>/settings.po
host = http://www.transifex.net
source_file = l10n/templates/settings.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/settings.po
trans.ca = l10n/ca/settings.po
trans.cs_CZ = l10n/cs_CZ/settings.po
trans.da = l10n/da/settings.po
trans.de = l10n/de/settings.po
trans.el = l10n/el/settings.po
trans.es = l10n/es/settings.po
trans.et_EE = l10n/et_EE/settings.po
trans.fr = l10n/fr/settings.po
trans.id = l10n/id/settings.po
trans.it = l10n/it/settings.po
trans.lb = l10n/lb/settings.po
trans.ms_MY = l10n/ms_MY/settings.po
trans.nb_NO = l10n/nb_NO/settings.po
trans.nl = l10n/nl/settings.po
trans.pl = l10n/pl/settings.po
trans.pt_BR = l10n/pt_BR/settings.po
trans.pt_PT = l10n/pt_PT/settings.po
trans.ro = l10n/ro/settings.po
trans.ru = l10n/ru/settings.po
trans.sr = l10n/sr/settings.po
trans.sr@latin = l10n/sr@latin/settings.po
trans.sv = l10n/sv/settings.po
trans.zh_CN = l10n/zh_CN/settings.po
[owncloud.files]
file_filter = translations/owncloud.files/<lang>.po
host = http://www.transifex.net
source_file = l10n/templates/files.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/files.po
trans.ca = l10n/ca/files.po
trans.cs_CZ = l10n/cs_CZ/files.po
trans.da = l10n/da/files.po
trans.de = l10n/de/files.po
trans.el = l10n/el/files.po
trans.es = l10n/es/files.po
trans.et_EE = l10n/et_EE/files.po
trans.fr = l10n/fr/files.po
trans.id = l10n/id/files.po
trans.it = l10n/it/files.po
trans.lb = l10n/lb/files.po
trans.ms_MY = l10n/ms_MY/files.po
trans.nb_NO = l10n/nb_NO/files.po
trans.nl = l10n/nl/files.po
trans.pl = l10n/pl/files.po
trans.pt_BR = l10n/pt_BR/files.po
trans.pt_PT = l10n/pt_PT/files.po
trans.ro = l10n/ro/files.po
trans.ru = l10n/ru/files.po
trans.sr = l10n/sr/files.po
trans.sr@latin = l10n/sr@latin/files.po
trans.sv = l10n/sv/files.po
trans.zh_CN = l10n/zh_CN/files.po
[owncloud.media]
file_filter = translations/owncloud.media/<lang>.po
host = http://www.transifex.net
source_file = l10n/templates/media.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/media.po
trans.ca = l10n/ca/media.po
trans.cs_CZ = l10n/cs_CZ/media.po
trans.da = l10n/da/media.po
trans.de = l10n/de/media.po
trans.el = l10n/el/media.po
trans.es = l10n/es/media.po
trans.et_EE = l10n/et_EE/media.po
trans.fr = l10n/fr/media.po
trans.id = l10n/id/media.po
trans.it = l10n/it/media.po
trans.lb = l10n/lb/media.po
trans.ms_MY = l10n/ms_MY/media.po
trans.nb_NO = l10n/nb_NO/media.po
trans.nl = l10n/nl/media.po
trans.pl = l10n/pl/media.po
trans.pt_BR = l10n/pt_BR/media.po
trans.pt_PT = l10n/pt_PT/media.po
trans.ro = l10n/ro/media.po
trans.ru = l10n/ru/media.po
trans.sr = l10n/sr/media.po
trans.sr@latin = l10n/sr@latin/media.po
trans.sv = l10n/sv/media.po
trans.zh_CN = l10n/zh_CN/media.po
[owncloud.calendar]
file_filter = l10n/<lang>/calendar.po
host = http://www.transifex.net
source_file = l10n/templates/calendar.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/calendar.po
trans.ca = l10n/ca/calendar.po
trans.cs_CZ = l10n/cs_CZ/calendar.po
trans.da = l10n/da/calendar.po
trans.de = l10n/de/calendar.po
trans.el = l10n/el/calendar.po
trans.es = l10n/es/calendar.po
trans.et_EE = l10n/et_EE/calendar.po
trans.fr = l10n/fr/calendar.po
trans.id = l10n/id/calendar.po
trans.it = l10n/it/calendar.po
trans.lb = l10n/lb/calendar.po
trans.ms_MY = l10n/ms_MY/calendar.po
trans.nb_NO = l10n/nb_NO/calendar.po
trans.nl = l10n/nl/calendar.po
trans.pl = l10n/pl/calendar.po
trans.pt_BR = l10n/pt_BR/calendar.po
trans.pt_PT = l10n/pt_PT/calendar.po
trans.ro = l10n/ro/calendar.po
trans.ru = l10n/ru/calendar.po
trans.sr = l10n/sr/calendar.po
trans.sr@latin = l10n/sr@latin/calendar.po
trans.sv = l10n/sv/calendar.po
trans.zh_CN = l10n/zh_CN/calendar.po
[owncloud.contacts]
file_filter = translations/owncloud.contacts/<lang>.po
host = http://www.transifex.net
source_file = l10n/templates/contacts.pot
source_lang = en
trans.bg_BG = l10n/bg_BG/contacts.po
trans.ca = l10n/ca/contacts.po
trans.cs_CZ = l10n/cs_CZ/contacts.po
trans.da = l10n/da/contacts.po
trans.de = l10n/de/contacts.po
trans.el = l10n/el/contacts.po
trans.es = l10n/es/contacts.po
trans.et_EE = l10n/et_EE/contacts.po
trans.fr = l10n/fr/contacts.po
trans.id = l10n/id/contacts.po
trans.it = l10n/it/contacts.po
trans.lb = l10n/lb/contacts.po
trans.ms_MY = l10n/ms_MY/contacts.po
trans.nb_NO = l10n/nb_NO/contacts.po
trans.nl = l10n/nl/contacts.po
trans.pl = l10n/pl/contacts.po
trans.pt_BR = l10n/pt_BR/contacts.po
trans.pt_PT = l10n/pt_PT/contacts.po
trans.ro = l10n/ro/contacts.po
trans.ru = l10n/ru/contacts.po
trans.sr = l10n/sr/contacts.po
trans.sr@latin = l10n/sr@latin/contacts.po
trans.sv = l10n/sv/contacts.po
trans.zh_CN = l10n/zh_CN/contacts.po

View File

@ -19,3 +19,6 @@ With help from many libraries and frameworks including:
SabreDAV
jQuery
"Lock” symbol from thenounproject.com collection
"Clock” symbol by Brandon Hopkins, from thenounproject.com collection

View File

@ -23,7 +23,7 @@
// Init owncloud
OCP\User::checkAdminUser();
@ -33,7 +33,7 @@ $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize')
$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size));
if($_POST) {
if(isset($_POST['maxUploadSize'])){
if(isset($_POST['maxUploadSize'])) {
if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) {
$maxUploadFilesize = OCP\Util::humanFileSize($setMaxSize);
}

View File

@ -11,20 +11,20 @@ OCP\JSON::checkLoggedIn();
$query = $_GET['term'];
$dirOnly=(isset($_GET['dironly']))?($_GET['dironly']=='true'):false;
if($query[0]!='/'){
if($query[0]!='/') {
$query='/'.$query;
}
if(substr($query,-1,1)=='/'){
if(substr($query, -1, 1)=='/') {
$base=$query;
}else{
} else {
$base=dirname($query);
}
$query=substr($query,strlen($base));
$query=substr($query, strlen($base));
if($base!='/'){
$query=substr($query,1);
if($base!='/') {
$query=substr($query, 1);
}
$queryLen=strlen($query);
$query=strtolower($query);
@ -33,17 +33,17 @@ $query=strtolower($query);
$files=array();
if(OC_Filesystem::file_exists($base) and OC_Filesystem::is_dir($base)){
if(OC_Filesystem::file_exists($base) and OC_Filesystem::is_dir($base)) {
$dh = OC_Filesystem::opendir($base);
if($dh){
if(substr($base,-1,1)!='/'){
if($dh) {
if(substr($base, -1, 1)!='/') {
$base=$base.'/';
}
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != ".."){
if(substr(strtolower($file),0,$queryLen)==$query){
if ($file != "." && $file != "..") {
if(substr(strtolower($file), 0, $queryLen)==$query) {
$item=$base.$file;
if((!$dirOnly or OC_Filesystem::is_dir($item))){
if((!$dirOnly or OC_Filesystem::is_dir($item))) {
$files[]=(object)array('id'=>$item,'label'=>$item,'name'=>$item);
}
}

View File

@ -15,7 +15,7 @@ $filesWithError = '';
$success = true;
//Now delete
foreach($files as $file) {
if( !OC_Files::delete( $dir, $file )){
if( !OC_Files::delete( $dir, $file )) {
$filesWithError .= $file . "\n";
$success = false;
}

View File

@ -14,25 +14,25 @@ $doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false;
$data = array();
// Make breadcrumb
if($doBreadcrumb){
if($doBreadcrumb) {
$breadcrumb = array();
$pathtohere = "/";
foreach( explode( "/", $dir ) as $i ){
if( $i != "" ){
foreach( explode( "/", $dir ) as $i ) {
if( $i != "" ) {
$pathtohere .= "$i/";
$breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
}
}
$breadcrumbNav = new OCP\Template( "files", "part.breadcrumb", "" );
$breadcrumbNav->assign( "breadcrumb", $breadcrumb );
$data['breadcrumb'] = $breadcrumbNav->fetchPage();
}
// make filelist
$files = array();
foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$files[] = $i;
}

View File

@ -12,8 +12,8 @@ $file = stripslashes($_GET["file"]);
$target = stripslashes($_GET["target"]);
if(OC_Files::move($dir,$file,$target,$file)){
if(OC_Files::move($dir, $file, $target, $file)) {
OCP\JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
}else{
} else {
OCP\JSON::error(array("data" => array( "message" => "Could not move $file" )));
}

View File

@ -3,7 +3,7 @@
// Init owncloud
global $eventSource;
if(!OC_User::isLoggedIn()){
if(!OC_User::isLoggedIn()) {
exit;
}
@ -15,9 +15,9 @@ $filename = isset( $_REQUEST['filename'] ) ? stripslashes($_REQUEST['filename'])
$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : '';
$source = isset( $_REQUEST['source'] ) ? stripslashes($_REQUEST['source']) : '';
if($source){
if($source) {
$eventSource=new OC_EventSource();
}else{
} else {
OC_JSON::callCheck();
}
@ -25,12 +25,12 @@ if($filename == '') {
OCP\JSON::error(array("data" => array( "message" => "Empty Filename" )));
exit();
}
if(strpos($filename,'/')!==false){
if(strpos($filename, '/')!==false) {
OCP\JSON::error(array("data" => array( "message" => "Invalid Filename" )));
exit();
}
function progress($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max){
function progress($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
static $filesize = 0;
static $lastsize = 0;
global $eventSource;
@ -39,14 +39,14 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
case STREAM_NOTIFY_FILE_SIZE_IS:
$filesize = $bytes_max;
break;
case STREAM_NOTIFY_PROGRESS:
if ($bytes_transferred > 0) {
if (!isset($filesize)) {
} else {
$progress = (int)(($bytes_transferred/$filesize)*100);
if($progress>$lastsize){//limit the number or messages send
$eventSource->send('progress',$progress);
if($progress>$lastsize) {//limit the number or messages send
$eventSource->send('progress', $progress);
}
$lastsize=$progress;
}
@ -55,31 +55,31 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
}
}
if($source){
if(substr($source,0,8)!='https://' and substr($source,0,7)!='http://'){
if($source) {
if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') {
OCP\JSON::error(array("data" => array( "message" => "Not a valid source" )));
exit();
}
$ctx = stream_context_create(null, array('notification' =>'progress'));
$sourceStream=fopen($source,'rb', false, $ctx);
$sourceStream=fopen($source, 'rb', false, $ctx);
$target=$dir.'/'.$filename;
$result=OC_Filesystem::file_put_contents($target,$sourceStream);
if($result){
$result=OC_Filesystem::file_put_contents($target, $sourceStream);
if($result) {
$mime=OC_Filesystem::getMimetype($target);
$eventSource->send('success',$mime);
}else{
$eventSource->send('error',"Error while downloading ".$source. ' to '.$target);
$eventSource->send('success', $mime);
} else {
$eventSource->send('error', "Error while downloading ".$source. ' to '.$target);
}
$eventSource->close();
exit();
}else{
if($content){
if(OC_Filesystem::file_put_contents($dir.'/'.$filename,$content)){
} else {
if($content) {
if(OC_Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
OCP\JSON::success(array("data" => array('content'=>$content)));
exit();
}
}elseif(OC_Files::newFile($dir, $filename, 'file')){
}elseif(OC_Files::newFile($dir, $filename, 'file')) {
OCP\JSON::success(array("data" => array('content'=>$content)));
exit();
}

View File

@ -14,7 +14,7 @@ if(trim($foldername) == '') {
OCP\JSON::error(array("data" => array( "message" => "Empty Foldername" )));
exit();
}
if(strpos($foldername,'/')!==false){
if(strpos($foldername, '/')!==false) {
OCP\JSON::error(array("data" => array( "message" => "Invalid Foldername" )));
exit();
}

View File

@ -5,19 +5,19 @@ $RUNTIME_APPTYPES=array('filesystem');
// Init owncloud
require_once('lib/template.php');
require_once 'lib/template.php';
OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
$mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
// make filelist
$files = array();
foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ){
foreach( OC_Files::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']);
$i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']);
$files[] = $i;
}

View File

@ -6,38 +6,38 @@ $force=isset($_GET['force']) and $_GET['force']=='true';
$dir=isset($_GET['dir'])?$_GET['dir']:'';
$checkOnly=isset($_GET['checkonly']) and $_GET['checkonly']=='true';
if(!$checkOnly){
if(!$checkOnly) {
$eventSource=new OC_EventSource();
}
session_write_close();
//create the file cache if necesary
if($force or !OC_FileCache::inCache('')){
if(!$checkOnly){
if($force or !OC_FileCache::inCache('')) {
if(!$checkOnly) {
OCP\DB::beginTransaction();
if(OC_Cache::isFast()){
if(OC_Cache::isFast()) {
OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
}
OC_FileCache::scan($dir,$eventSource);
OC_FileCache::clean();
OCP\DB::commit();
$eventSource->send('success',true);
}else{
$eventSource->send('success', true);
} else {
OCP\JSON::success(array('data'=>array('done'=>true)));
exit;
}
}else{
if($checkOnly){
} else {
if($checkOnly) {
OCP\JSON::success(array('data'=>array('done'=>false)));
exit;
}
if(isset($eventSource)){
$eventSource->send('success',false);
}else{
if(isset($eventSource)) {
$eventSource->send('success', false);
} else {
exit;
}
}
$eventSource->close();
$eventSource->close();

View File

@ -3,4 +3,3 @@
// see lib/base.php for an example
//session_start();
$_SESSION['timezone'] = $_GET['time'];

View File

@ -35,27 +35,27 @@ $dir = $_POST['dir'];
$error='';
$totalSize=0;
foreach($files['size'] as $size){
foreach($files['size'] as $size) {
$totalSize+=$size;
}
if($totalSize>OC_Filesystem::free_space('/')){
if($totalSize>OC_Filesystem::free_space('/')) {
OCP\JSON::error(array("data" => array( "message" => "Not enough space available" )));
exit();
}
$result=array();
if(strpos($dir,'..') === false){
if(strpos($dir, '..') === false) {
$fileCount=count($files['name']);
for($i=0;$i<$fileCount;$i++){
for($i=0;$i<$fileCount;$i++) {
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i],$target)){
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
$meta=OC_FileCache_Cached::get($target);
$result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'],'name'=>basename($target));
}
}
OCP\JSON::encodedPrint($result);
exit();
}else{
} else {
$error='invalid dir';
}

View File

@ -23,14 +23,14 @@
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem','authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
if(!OC_User::isLoggedIn()){
if(!isset($_SERVER['PHP_AUTH_USER'])){
if(!OC_User::isLoggedIn()) {
if(!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="ownCloud Server"');
header('HTTP/1.0 401 Unauthorized');
echo 'Valid credentials must be supplied';
exit();
} else {
if(!OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])){
if(!OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
exit();
}
}

View File

@ -5,7 +5,7 @@ $installedVersion=OCP\Config::getAppValue('files', 'installed_version');
if (version_compare($installedVersion, '1.1.4', '<')) {
$query = OC_DB::prepare( "SELECT `propertyname`, `propertypath`, `userid` FROM `*PREFIX*properties`" );
$result = $query->execute();
while( $row = $result->fetchRow()){
while( $row = $result->fetchRow()) {
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyname` = ? WHERE `userid` = ? AND `propertypath` = ?' );
$query->execute( array( preg_replace("/^{.*}/", "", $row["propertyname"]),$row["userid"], $row["propertypath"] ));
}
@ -41,5 +41,3 @@ foreach($filesToRemove as $file) {
break;
}
}

View File

@ -47,9 +47,6 @@ tbody a { color:#000; }
span.extension, span.uploading, td.date { color:#999; }
span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
tr:hover span.extension { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; color:#777; }
div.crumb { float:left; display:block; background:no-repeat right 0; padding:.75em 1.5em 0 1em; height:2.9em; }
div.crumb:first-child { padding-left:1em; }
div.crumb.last { font-weight:bold; }
table tr.mouseOver td { background-color:#eee; }
table th { height:2em; padding:0 .5em; color:#999; }
table th .name { float:left; margin-left:.5em; }

View File

@ -22,14 +22,14 @@
*/
// Init owncloud
// Check if we are a user
OCP\User::checkLoggedIn();
$filename = $_GET["file"];
if(!OC_Filesystem::file_exists($filename)){
if(!OC_Filesystem::file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
$tmpl = new OCP\Template( '', '404', 'guest' );
$tmpl->assign('file',$filename);

View File

@ -31,7 +31,7 @@ OCP\Util::addscript( 'files', 'jquery.fileupload' );
OCP\Util::addscript( 'files', 'files' );
OCP\Util::addscript( 'files', 'filelist' );
OCP\Util::addscript( 'files', 'fileactions' );
if(!isset($_SESSION['timezone'])){
if(!isset($_SESSION['timezone'])) {
OCP\Util::addscript( 'files', 'timezone' );
}
OCP\App::setActiveNavigationEntry( 'files_index' );
@ -44,9 +44,9 @@ if(!OC_Filesystem::is_dir($dir.'/')) {
}
$files = array();
foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
$i['date'] = OCP\Util::formatDate($i['mtime'] );
if($i['type']=='file'){
if($i['type']=='file') {
$fileinfo=pathinfo($i['name']);
$i['basename']=$fileinfo['filename'];
if (!empty($fileinfo['extension'])) {
@ -56,7 +56,7 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
$i['extension']='';
}
}
if($i['directory']=='/'){
if($i['directory']=='/') {
$i['directory']='';
}
$files[] = $i;
@ -65,8 +65,8 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
// Make breadcrumb
$breadcrumb = array();
$pathtohere = '';
foreach( explode( '/', $dir ) as $i ){
if( $i != '' ){
foreach( explode( '/', $dir ) as $i ) {
if( $i != '' ) {
$pathtohere .= '/'.str_replace('+','%20', urlencode($i));
$breadcrumb[] = array( 'dir' => $pathtohere, 'name' => $i );
}
@ -89,11 +89,23 @@ $freeSpace=OC_Filesystem::free_space('/');
$freeSpace=max($freeSpace,0);
$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
$permissions = OCP\Share::PERMISSION_READ;
if (OC_Filesystem::isUpdatable($dir.'/')) {
$permissions |= OCP\Share::PERMISSION_UPDATE;
}
if (OC_Filesystem::isDeletable($dir.'/')) {
$permissions |= OCP\Share::PERMISSION_DELETE;
}
if (OC_Filesystem::isSharable($dir.'/')) {
$permissions |= OCP\Share::PERMISSION_SHARE;
}
$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));

View File

@ -1,9 +1,4 @@
FileActions={
PERMISSION_CREATE:4,
PERMISSION_READ:1,
PERMISSION_UPDATE:2,
PERMISSION_DELETE:8,
PERMISSION_SHARE:16,
var FileActions={
actions:{},
defaults:{},
icons:{},
@ -25,20 +20,20 @@ FileActions={
get:function(mime,type,permissions){
var actions={};
if(FileActions.actions.all){
actions=$.extend( actions, FileActions.actions.all )
actions=$.extend( actions, FileActions.actions.all );
}
if(mime){
if(FileActions.actions[mime]){
actions=$.extend( actions, FileActions.actions[mime] )
actions=$.extend( actions, FileActions.actions[mime] );
}
var mimePart=mime.substr(0,mime.indexOf('/'));
if(FileActions.actions[mimePart]){
actions=$.extend( actions, FileActions.actions[mimePart] )
actions=$.extend( actions, FileActions.actions[mimePart] );
}
}
if(type){//type is 'dir' or 'file'
if(FileActions.actions[type]){
actions=$.extend( actions, FileActions.actions[type] )
actions=$.extend( actions, FileActions.actions[type] );
}
}
var filteredActions = {};
@ -108,7 +103,12 @@ FileActions={
if(img.call){
img=img(file);
}
var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
// NOTE: Temporary fix to allow unsharing of files in root of Shared folder
if ($('#dir').val() == '/Shared') {
var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" style="display:none" />';
} else {
var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
}
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
@ -148,7 +148,7 @@ FileActions={
getCurrentPermissions:function() {
return FileActions.currentFile.parent().data('permissions');
}
}
};
$(document).ready(function(){
if($('#allowZipDownload').val() == 1){
@ -156,12 +156,12 @@ $(document).ready(function(){
} else {
var downloadScope = 'file';
}
FileActions.register(downloadScope,'Download', FileActions.PERMISSION_READ, function(){return OC.imagePath('core','actions/download')},function(filename){
FileActions.register(downloadScope,'Download', OC.PERMISSION_READ, function(){return OC.imagePath('core','actions/download');},function(filename){
window.location=OC.filePath('files', 'ajax', 'download.php') + encodeURIComponent('?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val()));
});
});
FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete')},function(filename){
FileActions.register('all','Delete', OC.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete');},function(filename){
if(Files.cancelUpload(filename)) {
if(filename.substr){
filename=[filename];
@ -179,11 +179,11 @@ FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){r
$('.tipsy').remove();
});
FileActions.register('all','Rename', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename')},function(filename){
FileActions.register('all','Rename', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename');},function(filename){
FileList.rename(filename);
});
FileActions.register('dir','Open', FileActions.PERMISSION_READ, '', function(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);
});

View File

@ -1,11 +1,11 @@
FileList={
var FileList={
useUndo:true,
update:function(fileListHtml) {
$('#fileList').empty().html(fileListHtml);
},
addFile:function(name,size,lastModified,loading){
addFile:function(name,size,lastModified,loading,hidden){
var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png');
var html='<tr data-type="file" data-size="'+size+'">';
var html='<tr data-type="file" data-size="'+size+'" data-permissions="'+$('#permissions').val()+'">';
if(name.indexOf('.')!=-1){
var basename=name.substr(0,name.lastIndexOf('.'));
var extension=name.substr(name.lastIndexOf('.'));
@ -14,7 +14,7 @@ FileList={
var extension=false;
}
html+='<td class="filename" style="background-image:url('+img+')"><input type="checkbox" />';
html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '&lt;').replace(/>/, '&gt;')+'/'+name+'"><span class="nametext">'+basename
html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '&lt;').replace(/>/, '&gt;')+'/'+name+'"><span class="nametext">'+basename;
if(extension){
html+='<span class="extension">'+extension+'</span>';
}
@ -36,9 +36,12 @@ FileList={
}else{
$('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
}
if (hidden) {
$('tr').filterAttr('data-file', name).hide();
}
},
addDir:function(name,size,lastModified){
html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name});
addDir:function(name,size,lastModified,hidden){
html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name, "data-permissions": $('#permissions').val()});
td = $('<td></td>').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' });
td.append('<input type="checkbox" />');
var link_elem = $('<a></a>').attr({ "class": "name", "href": OC.linkTo('files', 'index.php')+"&dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') });
@ -63,6 +66,9 @@ FileList={
FileList.insertElement(name,'dir',html);
$('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
$('tr').filterAttr('data-file',name).find('td.filename').droppable(folderDropOptions);
if (hidden) {
$('tr').filterAttr('data-file', name).hide();
}
},
refresh:function(data) {
result = jQuery.parseJSON(data.responseText);
@ -82,7 +88,7 @@ FileList={
},
insertElement:function(name,type,element){
//find the correct spot to insert the file or folder
var fileElements=$('tr[data-file][data-type="'+type+'"]');
var fileElements=$('tr[data-file][data-type="'+type+'"]:visible');
var pos;
if(name.localeCompare($(fileElements[0]).attr('data-file'))<0){
pos=-1;
@ -137,11 +143,7 @@ FileList={
event.preventDefault();
var newname=input.val();
if (newname != name) {
if ($('tr').filterAttr('data-file', newname).length > 0) {
$('#notification').html(newname+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
$('#notification').data('oldName', name);
$('#notification').data('newName', newname);
$('#notification').fadeIn();
if (FileList.checkName(name, newname, false)) {
newname = name;
} else {
$.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) {
@ -151,7 +153,6 @@ FileList={
}
});
}
}
tr.attr('data-file', newname);
var path = td.children('a.name').attr('href');
@ -179,58 +180,77 @@ FileList={
form.trigger('submit');
});
},
replace:function(oldName, newName) {
checkName:function(oldName, newName, isNewFile) {
if (isNewFile || $('tr').filterAttr('data-file', newName).length > 0) {
if (isNewFile) {
$('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
} else {
$('#notification').html(newName+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
}
$('#notification').data('oldName', oldName);
$('#notification').data('newName', newName);
$('#notification').data('isNewFile', isNewFile);
$('#notification').fadeIn();
return true;
} else {
return false;
}
},
replace:function(oldName, newName, isNewFile) {
// Finish any existing actions
if (FileList.lastAction || !FileList.useUndo) {
FileList.lastAction();
}
var tr = $('tr').filterAttr('data-file', oldName);
tr.hide();
$('tr').filterAttr('data-file', oldName).hide();
$('tr').filterAttr('data-file', newName).hide();
var tr = $('tr').filterAttr('data-file', oldName).clone();
tr.attr('data-replace', 'true');
tr.attr('data-file', newName);
var td = tr.children('td.filename');
td.children('a.name .span').text(newName);
var path = td.children('a.name').attr('href');
td.children('a.name').attr('href', path.replace(encodeURIComponent(oldName), encodeURIComponent(newName)));
if (newName.indexOf('.') > 0) {
var basename = newName.substr(0, newName.lastIndexOf('.'));
} else {
var basename = newName;
}
td.children('a.name').empty();
var span = $('<span class="nametext"></span>');
span.text(basename);
td.children('a.name').append(span);
if (newName.indexOf('.') > 0) {
span.append($('<span class="extension">'+newName.substr(newName.lastIndexOf('.'))+'</span>'));
}
FileList.insertElement(newName, tr.data('type'), tr);
tr.show();
FileList.replaceCanceled = false;
FileList.replaceOldName = oldName;
FileList.replaceNewName = newName;
FileList.replaceIsNewFile = isNewFile;
FileList.lastAction = function() {
FileList.finishReplace();
};
$('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>');
if (isNewFile) {
$('#notification').html(t('files', 'replaced')+' '+newName+'<span class="undo">'+t('files', 'undo')+'</span>');
} else {
$('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>');
}
$('#notification').fadeIn();
},
finishReplace:function() {
if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
// Delete the file being replaced and rename the replacement
FileList.deleteCanceled = false;
FileList.deleteFiles = [FileList.replaceNewName];
FileList.finishDelete(function() {
$.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) {
if (result && result.status == 'success') {
var tr = $('tr').filterAttr('data-file', FileList.replaceOldName);
tr.attr('data-file', FileList.replaceNewName);
var td = tr.children('td.filename');
td.children('a.name .span').text(FileList.replaceNewName);
var path = td.children('a.name').attr('href');
td.children('a.name').attr('href', path.replace(encodeURIComponent(FileList.replaceOldName), encodeURIComponent(FileList.replaceNewName)));
if (FileList.replaceNewName.indexOf('.') > 0) {
var basename = FileList.replaceNewName.substr(0, FileList.replaceNewName.lastIndexOf('.'));
} else {
var basename = FileList.replaceNewName;
}
td.children('a.name').empty();
var span = $('<span class="nametext"></span>');
span.text(basename);
td.children('a.name').append(span);
if (FileList.replaceNewName.indexOf('.') > 0) {
span.append($('<span class="extension">'+FileList.replaceNewName.substr(FileList.replaceNewName.lastIndexOf('.'))+'</span>'));
}
tr.show();
} else {
OC.dialogs.alert(result.data.message, 'Error moving file');
}
FileList.replaceCanceled = true;
FileList.replaceOldName = null;
FileList.replaceNewName = null;
FileList.lastAction = null;
}});
}, true);
$.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) {
if (result && result.status == 'success') {
$('tr').filterAttr('data-replace', 'true').removeAttr('data-replace');
} else {
OC.dialogs.alert(result.data.message, 'Error moving file');
}
FileList.replaceCanceled = true;
FileList.replaceOldName = null;
FileList.replaceNewName = null;
FileList.lastAction = null;
}});
}
},
do_delete:function(files){
@ -243,7 +263,12 @@ FileList={
return;
}
FileList.prepareDeletion(files);
$('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
// NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
if ($('#dir').val() == '/Shared') {
$('#notification').html(t('files', 'unshared')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
} else {
$('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
}
$('#notification').fadeIn();
},
finishDelete:function(ready,sync){
@ -255,7 +280,7 @@ FileList={
data: {dir:$('#dir').val(),files:fileNames},
complete: function(data){
boolOperationFinished(data, function(){
$('#notification').fadeOut();
$('#notification').fadeOut('400');
$.each(FileList.deleteFiles,function(index,file){
FileList.remove(file);
});
@ -299,21 +324,39 @@ $(document).ready(function(){
FileList.deleteCanceled=true;
FileList.deleteFiles=null;
} else if (FileList.replaceOldName && FileList.replaceNewName) {
$('tr').filterAttr('data-file', FileList.replaceOldName).show();
if (FileList.replaceIsNewFile) {
// Delete the new uploaded file
FileList.deleteCanceled = false;
FileList.deleteFiles = [FileList.replaceOldName];
FileList.finishDelete(null, true);
} else {
$('tr').filterAttr('data-file', FileList.replaceOldName).show();
}
$('tr').filterAttr('data-replace', 'true').remove();
$('tr').filterAttr('data-file', FileList.replaceNewName).show();
FileList.replaceCanceled = true;
FileList.replaceOldName = null;
FileList.replaceNewName = null;
FileList.replaceIsNewFile = null;
}
FileList.lastAction = null;
$('#notification').fadeOut();
$('#notification').fadeOut('400');
});
$('#notification .replace').live('click', function() {
$('#notification').fadeOut('400', function() {
FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'));
FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'), $('#notification').data('isNewFile'));
});
});
$('#notification .suggest').live('click', function() {
$('tr').filterAttr('data-file', $('#notification').data('oldName')).show();
$('#notification').fadeOut('400');
});
$('#notification .cancel').live('click', function() {
$('#notification').fadeOut();
if ($('#notification').data('isNewFile')) {
FileList.deleteCanceled = false;
FileList.deleteFiles = [$('#notification').data('oldName')];
FileList.finishDelete(null, true);
}
});
FileList.useUndo=('onbeforeunload' in window)
$(window).bind('beforeunload', function (){

View File

@ -26,7 +26,7 @@ Files={
});
procesSelection();
}
}
};
$(document).ready(function() {
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
@ -40,8 +40,16 @@ $(document).ready(function() {
$('#file_action_panel').attr('activeAction', false);
//drag/drop of files
$('#fileList tr[data-write="true"] td.filename').draggable(dragOptions);
$('#fileList tr[data-type="dir"][data-write="true"] td.filename').droppable(folderDropOptions);
$('#fileList tr td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_DELETE) {
$(e).draggable(dragOptions);
}
});
$('#fileList tr[data-type="dir"] td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE){
$(e).droppable(folderDropOptions);
}
});
$('div.crumb:not(.last)').droppable(crumbDropOptions);
$('ul#apps>li:first-child').data('dir','');
if($('div.crumb').length){
@ -228,7 +236,14 @@ $(document).ready(function() {
var size=t('files','Pending');
}
if(files && !dirName){
FileList.addFile(getUniqueName(files[i].name),size,date,true);
var uniqueName = getUniqueName(files[i].name);
if (uniqueName != files[i].name) {
FileList.checkName(uniqueName, files[i].name, true);
var hidden = true;
} else {
var hidden = false;
}
FileList.addFile(uniqueName,size,date,true,hidden);
} else if(dirName) {
var uploadtext = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName).find('.uploadtext')
var currentUploads = parseInt(uploadtext.attr('currentUploads'));
@ -247,7 +262,14 @@ $(document).ready(function() {
}
}else{
var filename=this.value.split('\\').pop(); //ie prepends C:\fakepath\ in front of the filename
FileList.addFile(getUniqueName(filename),'Pending',date,true);
var uniqueName = getUniqueName(filename);
if (uniqueName != filename) {
FileList.checkName(uniqueName, filename, true);
var hidden = true;
} else {
var hidden = false;
}
FileList.addFile(uniqueName,'Pending',date,true,hidden);
}
if($.support.xhrFileUpload) {
for(var i=0;i<files.length;i++){
@ -379,13 +401,28 @@ $(document).ready(function() {
stop: function(e, data) {
if(data.dataType != 'iframe ') {
$('#upload input.stop').hide();
}
}
$('#uploadprogressbar').progressbar('value',100);
$('#uploadprogressbar').fadeOut();
}
})
});
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// warn user not to leave the page while upload is in progress
$(window).bind('beforeunload', function(e) {
if ($.assocArraySize(uploadingFiles) > 0)
return t('files','File upload is in progress. Leaving the page now will cancel the upload.');
});
//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
if(navigator.userAgent.search(/konqueror/i)==-1){
$('.file_upload_start').attr('multiple','multiple')
@ -452,21 +489,27 @@ $(document).ready(function() {
$(this).append(input);
input.focus();
input.change(function(){
var name=getUniqueName($(this).val());
if(type != 'web' && name.indexOf('/')!=-1){
if(type != 'web' && $(this).val().indexOf('/')!=-1){
$('#notification').text(t('files','Invalid name, \'/\' is not allowed.'));
$('#notification').fadeIn();
return;
}
var name = getUniqueName($(this).val());
if (name != $(this).val()) {
FileList.checkName(name, $(this).val(), true);
var hidden = true;
} else {
var hidden = false;
}
switch(type){
case 'file':
$.post(
OC.filePath('files','ajax','newfile.php'),
{dir:$('#dir').val(),filename:name,content:" \n"},
{dir:$('#dir').val(),filename:name},
function(result){
if (result.status == 'success') {
var date=new Date();
FileList.addFile(name,0,date);
FileList.addFile(name,0,date,false,hidden);
var tr=$('tr').filterAttr('data-file',name);
tr.data('mime','text/plain');
getMimeIcon('text/plain',function(path){
@ -485,7 +528,7 @@ $(document).ready(function() {
function(result){
if (result.status == 'success') {
var date=new Date();
FileList.addDir(name,0,date);
FileList.addDir(name,0,date,hidden);
} else {
OC.dialogs.alert(result.data.message, 'Error');
}
@ -516,7 +559,7 @@ $(document).ready(function() {
eventSource.listen('success',function(mime){
$('#uploadprogressbar').fadeOut();
var date=new Date();
FileList.addFile(localName,0,date);
FileList.addFile(localName,0,date,false,hidden);
var tr=$('tr').filterAttr('data-file',localName);
tr.data('mime',mime);
getMimeIcon(mime,function(path){
@ -542,7 +585,7 @@ $(document).ready(function() {
scanFiles();
}
}, "json");
var lastWidth = 0;
var breadcrumbs = [];
var breadcrumbsWidth = $('#navigation').get(0).offsetWidth;
@ -603,7 +646,7 @@ $(document).ready(function() {
$(window).resize(function() {
resizeBreadcrumbs(false);
});
resizeBreadcrumbs(true);
});

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
"Files" => "Fitxers",
"Unshare" => "Deixa de compartir",
"Delete" => "Suprimeix",
"already exists" => "ja existeix",
"replace" => "substitueix",
"suggest name" => "sugereix un nom",
"cancel" => "cancel·la",
"replaced" => "substituït",
"with" => "per",
"undo" => "desfés",
"with" => "per",
"unshared" => "No compartits",
"deleted" => "esborrat",
"generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
"Upload Error" => "Error en la pujada",
"Pending" => "Pendents",
"Upload cancelled." => "La pujada s'ha cancel·lat.",
"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à.",
"Invalid name, '/' is not allowed." => "El nom no és vàlid, no es permet '/'.",
"Size" => "Mida",
"Modified" => "Modificat",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Activa la baixada ZIP",
"0 is unlimited" => "0 és sense límit",
"Maximum input size for ZIP files" => "Mida màxima d'entrada per fitxers ZIP",
"Save" => "Desa",
"New" => "Nou",
"Text file" => "Fitxer de text",
"Folder" => "Carpeta",

View File

@ -1,51 +1,56 @@
<?php $TRANSLATIONS = array(
"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" => "Odeslaný soubor přesáhl velikostí parametr upload_max_filesize v php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Odeslaný soubor přesáhl velikostí parametr MAX_FILE_SIZE specifikovaný v HTML formuláři",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Odeslaný soubor přesáhl svou velikostí parametr upload_max_filesize v php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný v formuláři HTML",
"The uploaded file was only partially uploaded" => "Soubor byl odeslán pouze částečně",
"No file was uploaded" => "Soubor nebyl odeslán",
"Missing a temporary folder" => "Chybí adresář pro sočasné soubory",
"Failed to write to disk" => "Zápis na disk se nezdařil",
"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",
"Files" => "Soubory",
"Delete" => "Vymazat",
"Unshare" => "Zrušit sdílení",
"Delete" => "Smazat",
"already exists" => "již existuje",
"replace" => "zaměnit",
"cancel" => "storno",
"replaced" => "zaměněno",
"with" => "s",
"replace" => "nahradit",
"suggest name" => "navrhnout název",
"cancel" => "zrušit",
"replaced" => "nahrazeno",
"undo" => "zpět",
"with" => "s",
"unshared" => "sdílení zrušeno",
"deleted" => "smazáno",
"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to chvíli trvat",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemohu nahrát váš soubor neboť to je adresář a nebo má nulovou délku.",
"Upload Error" => "Chyba při nahrávání",
"Pending" => "Očekává se",
"Upload cancelled." => "Nahrávání zrušeno",
"Invalid name, '/' is not allowed." => "Špatné jméno, znak '/' není povolen",
"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to nějakou dobu trvat.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů",
"Upload Error" => "Chyba odesílání",
"Pending" => "Čekající",
"Upload cancelled." => "Odesílání zrušeno.",
"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í.",
"Invalid name, '/' is not allowed." => "Neplatný název, znak '/' není povolen",
"Size" => "Velikost",
"Modified" => "Změněno",
"folder" => "adresář",
"folders" => "adresáře",
"folder" => "složka",
"folders" => "složky",
"file" => "soubor",
"files" => "soubory",
"File handling" => "Nastavení chování k souborům",
"Maximum upload size" => "Maximální velikost ukládaných souborů",
"max. possible: " => "největší možná:",
"Needed for multi-file and folder downloads." => "Potřeba pro vícesoborvé stahování a stahování adresářů",
"File handling" => "Zacházení se soubory",
"Maximum upload size" => "Maximální velikost pro odesílání",
"max. possible: " => "největší možná: ",
"Needed for multi-file and folder downloads." => "Potřebné pro více-souborové stahování a stahování složek.",
"Enable ZIP-download" => "Povolit ZIP-stahování",
"0 is unlimited" => "0 znamená bez omezení",
"Maximum input size for ZIP files" => "Maximální velikost vstupu pro ZIP soubory",
"Save" => "Uložit",
"New" => "Nový",
"Text file" => "Textový soubor",
"Folder" => "Adresář",
"Folder" => "Složka",
"From url" => "Z url",
"Upload" => "Uložit",
"Cancel upload" => "Zrušit upload",
"Nothing in here. Upload something!" => "Žádný obsah. Uložte si něco!",
"Upload" => "Odeslat",
"Cancel upload" => "Zrušit odesílání",
"Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.",
"Name" => "Název",
"Share" => "Sdílet",
"Download" => "Stáhnout",
"Upload too large" => "Příliš velký soubor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte uložit, překračují maximální velikosti uploadu na tomto serveru.",
"Upload too large" => "Odeslaný soubor je příliš velký",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
"Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.",
"Current scanning" => "Aktuální prohledávání"
);

View File

@ -12,14 +12,15 @@
"replace" => "erstat",
"cancel" => "fortryd",
"replaced" => "erstattet",
"with" => "med",
"undo" => "fortryd",
"with" => "med",
"deleted" => "Slettet",
"generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom",
"Upload Error" => "Fejl ved upload",
"Pending" => "Afventer",
"Upload cancelled." => "Upload afbrudt.",
"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.",
"Invalid name, '/' is not allowed." => "Ugyldigt navn, '/' er ikke tilladt.",
"Size" => "Størrelse",
"Modified" => "Ændret",

View File

@ -1,26 +1,30 @@
<?php $TRANSLATIONS = array(
"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 Größe der hochzuladenden Datei überschreitet die upload_max_filesize-Richtlinie in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die Größe der hochzuladenden Datei überschreitet die MAX_FILE_SIZE-Richtlinie, die im HTML-Formular angegeben wurde",
"The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.",
"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",
"Files" => "Dateien",
"Unshare" => "Nicht mehr teilen",
"Delete" => "Löschen",
"already exists" => "ist bereits vorhanden",
"replace" => "ersetzen",
"suggest name" => "Name vorschlagen",
"cancel" => "abbrechen",
"replaced" => "ersetzt",
"with" => "mit",
"undo" => "rückgängig machen",
"with" => "mit",
"unshared" => "Nicht mehr teilen",
"deleted" => "gelöscht",
"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie ein Verzeichnis ist oder 0 Bytes hat.",
"Upload Error" => "Fehler beim Hochladen",
"Pending" => "Ausstehend",
"Upload cancelled." => "Hochladen abgebrochen.",
"Invalid name, '/' is not allowed." => "Ungültiger Name, \"/\" ist nicht erlaubt.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
"Invalid name, '/' is not allowed." => "Ungültiger Name: \"/\" ist nicht erlaubt.",
"Size" => "Größe",
"Modified" => "Bearbeitet",
"folder" => "Ordner",
@ -30,10 +34,11 @@
"File handling" => "Dateibehandlung",
"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
"Needed for multi-file and folder downloads." => "Für Mehrfachdateien- und Ordnerdownloads benötigt:",
"Needed for multi-file and folder downloads." => "Für Mehrfachdatei- und Ordnerdownloads benötigt:",
"Enable ZIP-download" => "ZIP-Download aktivieren",
"0 is unlimited" => "0 bedeutet unbegrenzt",
"Maximum input size for ZIP files" => "Maximale Größe für ZIP Dateien",
"Maximum input size for ZIP files" => "Maximale Größe für ZIP-Dateien",
"Save" => "Speichern",
"New" => "Neu",
"Text file" => "Textdatei",
"Folder" => "Ordner",

View File

@ -12,8 +12,8 @@
"replace" => "αντικατέστησε",
"cancel" => "ακύρωση",
"replaced" => "αντικαταστάθηκε",
"with" => "με",
"undo" => "αναίρεση",
"with" => "με",
"deleted" => "διαγράφηκε",
"generating ZIP-file, it may take some time." => "παραγωγή αρχείου ZIP, ίσως διαρκέσει αρκετά.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην μεταφόρτωση του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Mankas tempa dosierujo",
"Failed to write to disk" => "Malsukcesis skribo al disko",
"Files" => "Dosieroj",
"Unshare" => "Malkunhavigi",
"Delete" => "Forigi",
"already exists" => "jam ekzistas",
"replace" => "anstataŭigi",
"suggest name" => "sugesti nomon",
"cancel" => "nuligi",
"replaced" => "anstataŭigita",
"with" => "kun",
"undo" => "malfari",
"with" => "kun",
"unshared" => "malkunhavigita",
"deleted" => "forigita",
"generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, ĝi povas daŭri iom da tempo",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
"Upload Error" => "Alŝuta eraro",
"Pending" => "Traktotaj",
"Upload cancelled." => "La alŝuto nuliĝis.",
"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.",
"Invalid name, '/' is not allowed." => "Nevalida nomo, “/” ne estas permesata.",
"Size" => "Grando",
"Modified" => "Modifita",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Kapabligi ZIP-elŝuton",
"0 is unlimited" => "0 signifas senlime",
"Maximum input size for ZIP files" => "Maksimuma enirgrando por ZIP-dosieroj",
"Save" => "Konservi",
"New" => "Nova",
"Text file" => "Tekstodosiero",
"Folder" => "Dosierujo",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "La escritura en disco ha fallado",
"Files" => "Archivos",
"Unshare" => "Dejar de compartir",
"Delete" => "Eliminado",
"already exists" => "ya existe",
"replace" => "reemplazar",
"suggest name" => "sugerir nombre",
"cancel" => "cancelar",
"replaced" => "reemplazado",
"with" => "con",
"undo" => "deshacer",
"with" => "con",
"unshared" => "no compartido",
"deleted" => "borrado",
"generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes",
"Upload Error" => "Error al subir el archivo",
"Pending" => "Pendiente",
"Upload cancelled." => "Subida cancelada.",
"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.",
"Invalid name, '/' is not allowed." => "Nombre no válido, '/' no está permitido.",
"Size" => "Tamaño",
"Modified" => "Modificado",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Habilitar descarga en ZIP",
"0 is unlimited" => "0 es ilimitado",
"Maximum input size for ZIP files" => "Tamaño máximo para archivos ZIP de entrada",
"Save" => "Guardar",
"New" => "Nuevo",
"Text file" => "Archivo de texto",
"Folder" => "Carpeta",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Ajutiste failide kaust puudub",
"Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
"Files" => "Failid",
"Unshare" => "Lõpeta jagamine",
"Delete" => "Kustuta",
"already exists" => "on juba olemas",
"replace" => "asenda",
"suggest name" => "soovita nime",
"cancel" => "loobu",
"replaced" => "asendatud",
"with" => "millega",
"undo" => "tagasi",
"with" => "millega",
"unshared" => "jagamata",
"deleted" => "kustutatud",
"generating ZIP-file, it may take some time." => "ZIP-faili loomine, see võib veidi aega võtta.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
"Upload Error" => "Üleslaadimise viga",
"Pending" => "Ootel",
"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.",
"Invalid name, '/' is not allowed." => "Vigane nimi, '/' pole lubatud.",
"Size" => "Suurus",
"Modified" => "Muudetud",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Luba ZIP-ina allalaadimine",
"0 is unlimited" => "0 tähendab piiramatut",
"Maximum input size for ZIP files" => "Maksimaalne ZIP-faili sisestatava faili suurus",
"Save" => "Salvesta",
"New" => "Uus",
"Text file" => "Tekstifail",
"Folder" => "Kaust",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Aldi baterako karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
"Files" => "Fitxategiak",
"Unshare" => "Ez partekatu",
"Delete" => "Ezabatu",
"already exists" => "dagoeneko existitzen da",
"replace" => "ordeztu",
"suggest name" => "aholkatu izena",
"cancel" => "ezeztatu",
"replaced" => "ordeztua",
"with" => "honekin",
"undo" => "desegin",
"with" => "honekin",
"unshared" => "Ez partekatuta",
"deleted" => "ezabatuta",
"generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu",
"Upload Error" => "Igotzean errore bat suertatu da",
"Pending" => "Zain",
"Upload cancelled." => "Igoera ezeztatuta",
"File upload is in progress. Leaving the page now will cancel the upload." => "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
"Invalid name, '/' is not allowed." => "Baliogabeko izena, '/' ezin da erabili. ",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Gaitu ZIP-deskarga",
"0 is unlimited" => "0 mugarik gabe esan nahi du",
"Maximum input size for ZIP files" => "ZIP fitxategien gehienezko tamaina",
"Save" => "Gorde",
"New" => "Berria",
"Text file" => "Testu fitxategia",
"Folder" => "Karpeta",

View File

@ -12,8 +12,8 @@
"replace" => "جایگزین",
"cancel" => "لغو",
"replaced" => "جایگزین‌شده",
"with" => "همراه",
"undo" => "بازگشت",
"with" => "همراه",
"deleted" => "حذف شده",
"generating ZIP-file, it may take some time." => "در حال ساخت فایل فشرده ممکن است زمان زیادی به طول بیانجامد",
"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",

View File

@ -10,16 +10,18 @@
"Delete" => "Poista",
"already exists" => "on jo olemassa",
"replace" => "korvaa",
"suggest name" => "ehdota nimeä",
"cancel" => "peru",
"replaced" => "korvattu",
"with" => "käyttäen",
"undo" => "kumoa",
"with" => "käyttäen",
"deleted" => "poistettu",
"generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio",
"Upload Error" => "Lähetysvirhe.",
"Pending" => "Odottaa",
"Upload cancelled." => "Lähetys peruttu.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
"Invalid name, '/' is not allowed." => "Virheellinen nimi, merkki '/' ei ole sallittu.",
"Size" => "Koko",
"Modified" => "Muutettu",
@ -34,6 +36,7 @@
"Enable ZIP-download" => "Ota ZIP-paketin lataaminen käytöön",
"0 is unlimited" => "0 on rajoittamaton",
"Maximum input size for ZIP files" => "ZIP-tiedostojen enimmäiskoko",
"Save" => "Tallenna",
"New" => "Uusi",
"Text file" => "Tekstitiedosto",
"Folder" => "Kansio",
@ -46,5 +49,6 @@
"Download" => "Lataa",
"Upload too large" => "Lähetettävä tiedosto on liian suuri",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki."
"Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.",
"Current scanning" => "Tämänhetkinen tutkinta"
);

View File

@ -10,16 +10,19 @@
"Delete" => "Supprimer",
"already exists" => "existe déjà",
"replace" => "remplacer",
"suggest name" => "Suggérer un nom",
"cancel" => "annuler",
"replaced" => "remplacé",
"with" => "avec",
"undo" => "annuler",
"with" => "avec",
"unshared" => "non partagée",
"deleted" => "supprimé",
"generating ZIP-file, it may take some time." => "Générer un fichier ZIP, cela peut prendre du temps",
"generating ZIP-file, it may take some time." => "Fichier ZIP en cours d'assemblage ; cela peut prendre du temps.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.",
"Upload Error" => "Erreur de chargement",
"Pending" => "En cours",
"Upload cancelled." => "Chargement annulé",
"Upload cancelled." => "Chargement annulé.",
"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.",
"Invalid name, '/' is not allowed." => "Nom invalide, '/' n'est pas autorisé.",
"Size" => "Taille",
"Modified" => "Modifié",
@ -34,18 +37,19 @@
"Enable ZIP-download" => "Activer le téléchargement ZIP",
"0 is unlimited" => "0 est illimité",
"Maximum input size for ZIP files" => "Taille maximale pour les fichiers ZIP",
"Save" => "Sauvegarder",
"New" => "Nouveau",
"Text file" => "Fichier texte",
"Folder" => "Dossier",
"From url" => "Depuis URL",
"Upload" => "Envoyer",
"Cancel upload" => "Annuler envoi",
"Cancel upload" => "Annuler l'envoi",
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
"Name" => "Nom",
"Share" => "Partager",
"Download" => "Téléchargement",
"Upload too large" => "Fichier trop volumineux",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
"Files are being scanned, please wait." => "Les fichiers sont analysés, patientez svp.",
"Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.",
"Current scanning" => "Analyse en cours"
);

View File

@ -12,8 +12,8 @@
"replace" => "substituír",
"cancel" => "cancelar",
"replaced" => "substituído",
"with" => "con",
"undo" => "desfacer",
"with" => "con",
"deleted" => "eliminado",
"generating ZIP-file, it may take some time." => "xerando ficheiro ZIP, pode levar un anaco.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes",

View File

@ -12,8 +12,8 @@
"replace" => "zamjeni",
"cancel" => "odustani",
"replaced" => "zamjenjeno",
"with" => "sa",
"undo" => "vrati",
"with" => "sa",
"deleted" => "izbrisano",
"generating ZIP-file, it may take some time." => "generiranje ZIP datoteke, ovo može potrajati.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij",

View File

@ -12,8 +12,8 @@
"replace" => "cserél",
"cancel" => "mégse",
"replaced" => "kicserélve",
"with" => "-val/-vel",
"undo" => "visszavon",
"with" => "-val/-vel",
"deleted" => "törölve",
"generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",

View File

@ -1,13 +1,32 @@
<?php $TRANSLATIONS = array(
"There is no error, the file uploaded with success" => "Tidak ada galat, berkas sukses diunggah",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "File yang diunggah melampaui directive upload_max_filesize di php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "File yang diunggah melampaui directive MAX_FILE_SIZE yang disebutan dalam form HTML.",
"The uploaded file was only partially uploaded" => "Berkas hanya diunggah sebagian",
"No file was uploaded" => "Tidak ada berkas yang diunggah",
"Missing a temporary folder" => "Kehilangan folder temporer",
"Failed to write to disk" => "Gagal menulis ke disk",
"Files" => "Berkas",
"Delete" => "Hapus",
"already exists" => "sudah ada",
"replace" => "mengganti",
"cancel" => "batalkan",
"replaced" => "diganti",
"undo" => "batal dikerjakan",
"with" => "dengan",
"deleted" => "dihapus",
"generating ZIP-file, it may take some time." => "membuat berkas ZIP, ini mungkin memakan waktu.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte",
"Upload Error" => "Terjadi Galat Pengunggahan",
"Pending" => "Menunggu",
"Upload cancelled." => "Pengunggahan dibatalkan.",
"Invalid name, '/' is not allowed." => "Kesalahan nama, '/' tidak diijinkan.",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
"folder" => "folder",
"folders" => "folder-folder",
"file" => "berkas",
"files" => "berkas-berkas",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran unggah maksimum",
"max. possible: " => "Kemungkinan maks:",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Cartella temporanea mancante",
"Failed to write to disk" => "Scrittura su disco non riuscita",
"Files" => "File",
"Unshare" => "Rimuovi condivisione",
"Delete" => "Elimina",
"already exists" => "esiste già",
"replace" => "sostituisci",
"suggest name" => "suggerisci nome",
"cancel" => "annulla",
"replaced" => "sostituito",
"with" => "con",
"undo" => "annulla",
"with" => "con",
"unshared" => "condivisione rimossa",
"deleted" => "eliminati",
"generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte",
"Upload Error" => "Errore di invio",
"Pending" => "In corso",
"Upload cancelled." => "Invio annullato",
"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.",
"Invalid name, '/' is not allowed." => "Nome non valido",
"Size" => "Dimensione",
"Modified" => "Modificato",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Abilita scaricamento ZIP",
"0 is unlimited" => "0 è illimitato",
"Maximum input size for ZIP files" => "Dimensione massima per i file ZIP",
"Save" => "Salva",
"New" => "Nuovo",
"Text file" => "File di testo",
"Folder" => "Cartella",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "テンポラリフォルダが見つかりません",
"Failed to write to disk" => "ディスクへの書き込みに失敗しました",
"Files" => "ファイル",
"Unshare" => "共有しない",
"Delete" => "削除",
"already exists" => "既に存在します",
"replace" => "置き換え",
"suggest name" => "推奨名称",
"cancel" => "キャンセル",
"replaced" => "置換:",
"with" => "",
"undo" => "元に戻す",
"with" => "",
"unshared" => "未共有",
"deleted" => "削除",
"generating ZIP-file, it may take some time." => "ZIPファイルを生成中です、しばらくお待ちください。",
"Unable to upload your file as it is a directory or has 0 bytes" => "アップロード使用としているファイルがディレクトリ、もしくはサイズが0バイトのため、アップロードできません。",
"Upload Error" => "アップロードエラー",
"Pending" => "保留",
"Upload cancelled." => "アップロードはキャンセルされました。",
"File upload is in progress. Leaving the page now will cancel the upload." => "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
"Invalid name, '/' is not allowed." => "無効な名前、'/' は使用できません。",
"Size" => "サイズ",
"Modified" => "更新日時",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "ZIP形式のダウンロードを有効にする",
"0 is unlimited" => "0を指定した場合は無制限",
"Maximum input size for ZIP files" => "ZIPファイルへの最大入力サイズ",
"Save" => "保存",
"New" => "新規",
"Text file" => "テキストファイル",
"Folder" => "フォルダ",

View File

@ -8,7 +8,15 @@
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Files" => "파일",
"Delete" => "삭제",
"already exists" => "이미 존재 합니다",
"replace" => "대체",
"cancel" => "취소",
"replaced" => "대체됨",
"undo" => "복구",
"with" => "",
"deleted" => "삭제",
"generating ZIP-file, it may take some time." => "ZIP파일 생성에 시간이 걸릴 수 있습니다.",
"Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉토리이거나 0 바이트이기 때문에 업로드 할 수 없습니다.",
"Upload Error" => "업로드 에러",
"Pending" => "보류 중",
"Upload cancelled." => "업로드 취소.",

View File

@ -8,8 +8,25 @@
"Failed to write to disk" => "Konnt net op den Disk schreiwen",
"Files" => "Dateien",
"Delete" => "Läschen",
"already exists" => "existéiert schonn",
"replace" => "ersetzen",
"cancel" => "ofbriechen",
"replaced" => "ersat",
"undo" => "réckgängeg man",
"with" => "mat",
"deleted" => "geläscht",
"generating ZIP-file, it may take some time." => "Et gëtt eng ZIP-File generéiert, dëst ka bëssen daueren.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss ass.",
"Upload Error" => "Fehler beim eroplueden",
"Upload cancelled." => "Upload ofgebrach.",
"File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
"Invalid name, '/' is not allowed." => "Ongültege Numm, '/' net erlaabt.",
"Size" => "Gréisst",
"Modified" => "Geännert",
"folder" => "Dossier",
"folders" => "Dossieren",
"file" => "Datei",
"files" => "Dateien",
"File handling" => "Fichier handling",
"Maximum upload size" => "Maximum Upload Gréisst ",
"max. possible: " => "max. méiglech:",

View File

@ -1,6 +1,17 @@
<?php $TRANSLATIONS = array(
"No file was uploaded" => "Neviens fails netika augšuplādēts",
"Failed to write to disk" => "Nav iespējams saglabāt",
"Files" => "Faili",
"Delete" => "Izdzēst",
"already exists" => "tāds fails jau eksistē",
"replace" => "aizvietot",
"cancel" => "atcelt",
"replaced" => "aizvietots",
"undo" => "vienu soli atpakaļ",
"with" => "ar",
"deleted" => "izdzests",
"generating ZIP-file, it may take some time." => "lai uzģenerētu ZIP failu, kāds brīdis ir jāpagaida",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nav iespējams augšuplādēt jūsu failu, jo tāds jau eksistē vai arī failam nav izmēra (0 baiti)",
"Upload Error" => "Augšuplādēšanas laikā radās kļūda",
"Pending" => "Gaida savu kārtu",
"Upload cancelled." => "Augšuplāde ir atcelta",
@ -12,9 +23,20 @@
"file" => "fails",
"files" => "faili",
"Maximum upload size" => "Maksimālais failu augšuplādes apjoms",
"max. possible: " => "maksīmālais iespējamais:",
"Enable ZIP-download" => "Iespējot ZIP lejuplādi",
"0 is unlimited" => "0 ir neierobežots",
"New" => "Jauns",
"Text file" => "Teksta fails",
"Folder" => "Mape",
"From url" => "No URL saites",
"Upload" => "Augšuplādet",
"Cancel upload" => "Atcelt augšuplādi",
"Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšuplādēt",
"Name" => "Nosaukums",
"Share" => "Līdzdalīt",
"Download" => "Lejuplādēt",
"Upload too large" => "Fails ir par lielu lai to augšuplādetu"
"Upload too large" => "Fails ir par lielu lai to augšuplādetu",
"Files are being scanned, please wait." => "Faili šobrīd tiek caurskatīti, nedaudz jāpagaida.",
"Current scanning" => "Šobrīd tiek pārbaudīti"
);

View File

@ -12,8 +12,8 @@
"replace" => "erstatt",
"cancel" => "avbryt",
"replaced" => "erstattet",
"with" => "med",
"undo" => "angre",
"with" => "med",
"deleted" => "slettet",
"generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
@ -34,6 +34,7 @@
"Enable ZIP-download" => "Aktiver nedlasting av ZIP",
"0 is unlimited" => "0 er ubegrenset",
"Maximum input size for ZIP files" => "Maksimal størrelse på ZIP-filer",
"Save" => "Lagre",
"New" => "Ny",
"Text file" => "Tekstfil",
"Folder" => "Mappe",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Een tijdelijke map mist",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
"Files" => "Bestanden",
"Unshare" => "Stop delen",
"Delete" => "Verwijder",
"already exists" => "bestaat al",
"replace" => "vervang",
"suggest name" => "Stel een naam voor",
"cancel" => "annuleren",
"replaced" => "vervangen",
"with" => "door",
"undo" => "ongedaan maken",
"with" => "door",
"unshared" => "niet gedeeld",
"deleted" => "verwijderd",
"generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.",
"Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes",
"Upload Error" => "Upload Fout",
"Pending" => "Wachten",
"Upload cancelled." => "Uploaden geannuleerd.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Bestands upload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
"Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.",
"Size" => "Bestandsgrootte",
"Modified" => "Laatst aangepast",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Zet ZIP-download aan",
"0 is unlimited" => "0 is ongelimiteerd",
"Maximum input size for ZIP files" => "Maximale grootte voor ZIP bestanden",
"Save" => "Opslaan",
"New" => "Nieuw",
"Text file" => "Tekstbestand",
"Folder" => "Map",

View File

@ -10,16 +10,18 @@
"Delete" => "Usuwa element",
"already exists" => "Już istnieje",
"replace" => "zastap",
"suggest name" => "zasugeruj nazwę",
"cancel" => "anuluj",
"replaced" => "zastąpione",
"with" => "z",
"undo" => "wróć",
"with" => "z",
"deleted" => "skasuj",
"generating ZIP-file, it may take some time." => "Generowanie pliku ZIP, może potrwać pewien czas.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów",
"Upload Error" => "Błąd wczytywania",
"Pending" => "Oczekujące",
"Upload cancelled." => "Wczytywanie anulowane.",
"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.",
"Invalid name, '/' is not allowed." => "Nieprawidłowa nazwa '/' jest niedozwolone.",
"Size" => "Rozmiar",
"Modified" => "Czas modyfikacji",
@ -34,6 +36,7 @@
"Enable ZIP-download" => "Włącz pobieranie ZIP-paczki",
"0 is unlimited" => "0 jest nielimitowane",
"Maximum input size for ZIP files" => "Maksymalna wielkość pliku wejściowego ZIP ",
"Save" => "Zapisz",
"New" => "Nowy",
"Text file" => "Plik tekstowy",
"Folder" => "Katalog",

View File

@ -12,8 +12,8 @@
"replace" => "substituir",
"cancel" => "cancelar",
"replaced" => "substituido ",
"with" => "com",
"undo" => "desfazer",
"with" => "com",
"deleted" => "deletado",
"generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.",
"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.",

View File

@ -12,8 +12,8 @@
"replace" => "substituir",
"cancel" => "cancelar",
"replaced" => "substituido",
"with" => "com",
"undo" => "desfazer",
"with" => "com",
"deleted" => "apagado",
"generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Невозможно найти временную папку",
"Failed to write to disk" => "Ошибка записи на диск",
"Files" => "Файлы",
"Unshare" => "Отменить публикацию",
"Delete" => "Удалить",
"already exists" => "уже существует",
"replace" => "заменить",
"suggest name" => "предложить название",
"cancel" => "отмена",
"replaced" => "заменён",
"with" => "с",
"undo" => "отмена",
"with" => "с",
"unshared" => "публикация отменена",
"deleted" => "удален",
"generating ZIP-file, it may take some time." => "создание ZIP-файла, это может занять некоторое время.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог",
"Upload Error" => "Ошибка загрузки",
"Pending" => "Ожидание",
"Upload cancelled." => "Загрузка отменена.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку.",
"Invalid name, '/' is not allowed." => "Неверное имя, '/' не допускается.",
"Size" => "Размер",
"Modified" => "Изменён",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Включить ZIP-скачивание",
"0 is unlimited" => "0 - без ограничений",
"Maximum input size for ZIP files" => "Максимальный исходный размер для ZIP файлов",
"Save" => "Сохранить",
"New" => "Новый",
"Text file" => "Текстовый файл",
"Folder" => "Папка",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Manjka začasna mapa",
"Failed to write to disk" => "Pisanje na disk je spodletelo",
"Files" => "Datoteke",
"Unshare" => "Odstrani iz souporabe",
"Delete" => "Izbriši",
"already exists" => "že obstaja",
"replace" => "nadomesti",
"suggest name" => "predlagaj ime",
"cancel" => "ekliči",
"replaced" => "nadomeščen",
"with" => "z",
"undo" => "razveljavi",
"with" => "z",
"unshared" => "odstranjeno iz souporabe",
"deleted" => "izbrisano",
"generating ZIP-file, it may take some time." => "Ustvarjam ZIP datoteko. To lahko traja nekaj časa.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nalaganje ni mogoče, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov.",
"Upload Error" => "Napaka pri nalaganju",
"Pending" => "Na čakanju",
"Upload cancelled." => "Nalaganje je bilo preklicano.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Nalaganje datoteke je v teku. Če zapustite to stran zdaj, boste nalaganje preklicali.",
"Invalid name, '/' is not allowed." => "Neveljavno ime. Znak '/' ni dovoljen.",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Omogoči ZIP-prejemanje",
"0 is unlimited" => "0 je neskončno",
"Maximum input size for ZIP files" => "Največja vhodna velikost za ZIP datoteke",
"Save" => "Shrani",
"New" => "Nova",
"Text file" => "Besedilna datoteka",
"Folder" => "Mapa",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "Saknar en tillfällig mapp",
"Failed to write to disk" => "Misslyckades spara till disk",
"Files" => "Filer",
"Unshare" => "Sluta dela",
"Delete" => "Radera",
"already exists" => "finns redan",
"replace" => "ersätt",
"suggest name" => "föreslå namn",
"cancel" => "avbryt",
"replaced" => "ersatt",
"with" => "med",
"undo" => "ångra",
"with" => "med",
"unshared" => "Ej delad",
"deleted" => "raderad",
"generating ZIP-file, it may take some time." => "genererar ZIP-fil, det kan ta lite tid.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.",
"Upload Error" => "Uppladdningsfel",
"Pending" => "Väntar",
"Upload cancelled." => "Uppladdning avbruten.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
"Invalid name, '/' is not allowed." => "Ogiltigt namn, '/' är inte tillåten.",
"Size" => "Storlek",
"Modified" => "Ändrad",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "Aktivera ZIP-nerladdning",
"0 is unlimited" => "0 är oändligt",
"Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer",
"Save" => "Spara",
"New" => "Ny",
"Text file" => "Textfil",
"Folder" => "Mapp",

View File

@ -7,19 +7,23 @@
"Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย",
"Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
"Files" => "ไฟล์",
"Unshare" => "ยกเลิกการแชร์ข้อมูล",
"Delete" => "ลบ",
"already exists" => "มีอยู่แล้ว",
"replace" => "แทนที่",
"suggest name" => "แนะนำชื่อ",
"cancel" => "ยกเลิก",
"replaced" => "แทนที่แล้ว",
"with" => "กับ",
"undo" => "เลิกทำ",
"with" => "กับ",
"unshared" => "ยกเลิกการแชร์ข้อมูลแล้ว",
"deleted" => "ลบแล้ว",
"generating ZIP-file, it may take some time." => "กำลังสร้างไฟล์บีบอัด ZIP อาจใช้เวลาสักครู่",
"Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์",
"Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด",
"Pending" => "อยู่ระหว่างดำเนินการ",
"Upload cancelled." => "การอัพโหลดถูกยกเลิก",
"File upload is in progress. Leaving the page now will cancel the upload." => "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูกต้อง '/' ไม่อนุญาตให้ใช้งาน",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
@ -34,6 +38,7 @@
"Enable ZIP-download" => "อนุญาตให้ดาวน์โหลดเป็นไฟล์ ZIP ได้",
"0 is unlimited" => "0 หมายถึงไม่จำกัด",
"Maximum input size for ZIP files" => "ขนาดไฟล์ ZIP สูงสุด",
"Save" => "บันทึก",
"New" => "อัพโหลดไฟล์ใหม่",
"Text file" => "ไฟล์ข้อความ",
"Folder" => "แฟ้มเอกสาร",

View File

@ -8,13 +8,19 @@
"Failed to write to disk" => "Diske yazılamadı",
"Files" => "Dosyalar",
"Delete" => "Sil",
"already exists" => "zaten mevcut",
"replace" => "değiştir",
"cancel" => "iptal",
"replaced" => "değiştirildi",
"undo" => "geri al",
"with" => "ile",
"deleted" => "silindi",
"generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi",
"Upload Error" => "Yükleme hatası",
"Pending" => "Bekliyor",
"Upload cancelled." => "Yükleme iptal edildi.",
"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.",
"Invalid name, '/' is not allowed." => "Geçersiz isim, '/' işaretine izin verilmiyor.",
"Size" => "Boyut",
"Modified" => "Değiştirilme",

View File

@ -1,9 +1,28 @@
<?php $TRANSLATIONS = array(
"There is no error, the file uploaded with success" => "Không có lỗi, các tập tin đã được tải lên thành công",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Những tập tin được tải lên vượt quá upload_max_filesize được chỉ định trong php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Kích thước những tập tin tải lên vượt quá MAX_FILE_SIZE đã được quy định",
"The uploaded file was only partially uploaded" => "Tập tin tải lên mới chỉ tải lên được một phần",
"No file was uploaded" => "Không có tập tin nào được tải lên",
"Missing a temporary folder" => "Không tìm thấy thư mục tạm",
"Failed to write to disk" => "Không thể ghi vào đĩa cứng",
"Files" => "Tập tin",
"Unshare" => "Không chia sẽ",
"Delete" => "Xóa",
"already exists" => "đã tồn tại",
"replace" => "thay thế",
"suggest name" => "tên gợi ý",
"cancel" => "hủy",
"replaced" => "đã được thay thế",
"undo" => "lùi lại",
"with" => "với",
"deleted" => "đã xóa",
"generating ZIP-file, it may take some time." => "Tạo tập tinh ZIP, điều này có thể mất một ít thời gian",
"Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
"Upload Error" => "Tải lên lỗi",
"Pending" => "Chờ",
"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.",
"Invalid name, '/' is not allowed." => "Tên không hợp lệ ,không được phép dùng '/'",
"Size" => "Kích cỡ",
"Modified" => "Thay đổi",
@ -13,9 +32,11 @@
"files" => "files",
"File handling" => "Xử lý tập tin",
"Maximum upload size" => "Kích thước tối đa ",
"Needed for multi-file and folder downloads." => "Cần thiết cho tải nhiều tập tin và thư mục.",
"Enable ZIP-download" => "Cho phép ZIP-download",
"0 is unlimited" => "0 là không giới hạn",
"Maximum input size for ZIP files" => "Kích thước tối đa cho các tập tin ZIP",
"Save" => "Lưu",
"New" => "Mới",
"Text file" => "Tập tin văn bản",
"Folder" => "Folder",
@ -27,5 +48,7 @@
"Share" => "Chia sẻ",
"Download" => "Tải xuống",
"Upload too large" => "File tải lên quá lớn",
"Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ."
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Các tập tin bạn đang cố gắng tải lên vượt quá kích thước tối đa cho phép trên máy chủ này.",
"Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ.",
"Current scanning" => "Hiện tại đang quét"
);

View File

@ -12,8 +12,8 @@
"replace" => "替换",
"cancel" => "取消",
"replaced" => "替换过了",
"with" => "随着",
"undo" => "撤销",
"with" => "随着",
"deleted" => "删除",
"generating ZIP-file, it may take some time." => "正在生成ZIP文件,这可能需要点时间",
"Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0",

View File

@ -10,16 +10,18 @@
"Delete" => "删除",
"already exists" => "已经存在",
"replace" => "替换",
"suggest name" => "建议名称",
"cancel" => "取消",
"replaced" => "已经替换",
"with" => "随着",
"undo" => "撤销",
"with" => "随着",
"deleted" => "已经删除",
"generating ZIP-file, it may take some time." => "正在生成 ZIP 文件,可能需要一些时间",
"Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大小为 0 字节",
"Upload Error" => "上传错误",
"Pending" => "操作等待中",
"Upload cancelled." => "上传已取消",
"File upload is in progress. Leaving the page now will cancel the upload." => "文件正在上传中。现在离开此页会导致上传动作被取消。",
"Invalid name, '/' is not allowed." => "非法的名称,不允许使用‘/’。",
"Size" => "大小",
"Modified" => "修改日期",
@ -34,6 +36,7 @@
"Enable ZIP-download" => "启用 ZIP 下载",
"0 is unlimited" => "0 为无限制",
"Maximum input size for ZIP files" => "ZIP 文件的最大输入大小",
"Save" => "保存",
"New" => "新建",
"Text file" => "文本文件",
"Folder" => "文件夹",

View File

@ -8,6 +8,15 @@
"Failed to write to disk" => "寫入硬碟失敗",
"Files" => "檔案",
"Delete" => "刪除",
"already exists" => "已經存在",
"replace" => "取代",
"cancel" => "取消",
"generating ZIP-file, it may take some time." => "產生壓縮檔, 它可能需要一段時間.",
"Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0",
"Upload Error" => "上傳發生錯誤",
"Upload cancelled." => "上傳取消",
"File upload is in progress. Leaving the page now will cancel the upload." => "檔案上傳中. 離開此頁面將會取消上傳.",
"Invalid name, '/' is not allowed." => "無效的名稱, '/'是不被允許的",
"Size" => "大小",
"Modified" => "修改",
"File handling" => "檔案處理",

View File

@ -23,7 +23,7 @@
// Init owncloud
// Check if we are a user
OCP\User::checkLoggedIn();
@ -36,7 +36,7 @@ OCP\Util::addscript( "files", "files" );
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$files = array();
foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
$i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] );
$files[] = $i;
}
@ -44,8 +44,8 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
// Make breadcrumb
$breadcrumb = array();
$pathtohere = "/";
foreach( explode( "/", $dir ) as $i ){
if( $i != "" ){
foreach( explode( "/", $dir ) as $i ) {
if( $i != "" ) {
$pathtohere .= "$i/";
$breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
}

View File

@ -11,9 +11,6 @@
<input name="maxZipInputSize" id="maxZipInputSize" style="width:180px;" value='<?php echo $_['maxZipInputSize'] ?>' title="<?php echo $l->t( '0 is unlimited' ); ?>"<?php if (!$_['allowZipDownload']) echo ' disabled="disabled"'; ?> />
<label for="maxZipInputSize"><?php echo $l->t( 'Maximum input size for ZIP files' ); ?> </label><br />
<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="Save"/>
<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="<?php echo $l->t( 'Save' ); ?>"/>
</fieldset>
</form>

View File

@ -32,6 +32,7 @@
<?php else:?>
<input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
<?php endif;?>
<input type="hidden" name="permissions" value="<?php echo $_['permissions']; ?>" id="permissions">
</div>
<div id='notification'></div>
@ -53,7 +54,17 @@
</span>
</th>
<th id="headerSize"><?php echo $l->t( 'Size' ); ?></th>
<th id="headerDate"><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span></th>
<th id="headerDate">
<span id="modified"><?php echo $l->t( 'Modified' ); ?></span>
<?php if ($_['permissions'] & OCP\Share::PERMISSION_DELETE): ?>
<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder -->
<?php if ($_['dir'] == '/Shared'): ?>
<span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Unshare')?> <img class="svg" alt="<?php echo $l->t('Unshare')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span>
<?php else: ?>
<span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span>
<?php endif; ?>
<?php endif; ?>
</th>
</tr>
</thead>
<tbody id="fileList">

View File

@ -1,6 +1,6 @@
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
$crumb = $_["breadcrumb"][$i]; ?>
<div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg" data-dir='<?php echo $crumb["dir"];?>' style='background-image:url("<?php echo OCP\image_path('core','breadcrumb.png');?>")'>
<a href="<?php echo $_['baseURL'].$crumb["dir"]; ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
<a href="<?php echo $_['baseURL'].$crumb["dir"]; ?>"><?php echo OCP\Util::sanitizeHTML($crumb["name"]); ?></a>
</div>
<?php endfor;?>

View File

@ -10,7 +10,7 @@ OCP\Util::connectHook('OC_User','post_login','OC_Crypt','loginListener');
stream_wrapper_register('crypt','OC_CryptStream');
if(!isset($_SESSION['enckey']) and OCP\User::isLoggedIn()){//force the user to re-loggin if the encryption key isn't unlocked (happens when a user is logged in before the encryption app is enabled)
if(!isset($_SESSION['enckey']) and OCP\User::isLoggedIn()) {//force the user to re-loggin if the encryption key isn't unlocked (happens when a user is logged in before the encryption app is enabled)
OCP\User::logout();
header("Location: ".OC::$WEBROOT.'/');
exit();

View File

@ -11,7 +11,7 @@ $(document).ready(function(){
onuncheck:blackListChange,
createText:'...',
});
function blackListChange(){
var blackList=$('#encryption_blacklist').val().join(',');
OC.AppConfig.setValue('files_encryption','type_blacklist',blackList);
@ -20,5 +20,5 @@ $(document).ready(function(){
$('#enable_encryption').change(function(){
var checked=$('#enable_encryption').is(':checked');
OC.AppConfig.setValue('files_encryption','enable_encryption',(checked)?'true':'false');
})
})
});
});

View File

@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Kryptování",
"Exclude the following file types from encryption" => "Při kryptování vynechat následující typy souborů",
"None" => "Žádný",
"Enable Encryption" => "Povolit kryptování"
"Encryption" => "Šifrování",
"Exclude the following file types from encryption" => "Při šifrování vynechat následující typy souborů",
"None" => "Žádné",
"Enable Encryption" => "Povolit šifrování"
);

View File

@ -0,0 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Šifrovanie",
"Exclude the following file types from encryption" => "Vynechať nasledujúce súbory pri šifrovaní",
"None" => "Žiadne",
"Enable Encryption" => "Zapnúť šifrovanie"
);

View File

@ -0,0 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "Mã hóa",
"Exclude the following file types from encryption" => "Loại trừ các loại tập tin sau đây từ mã hóa",
"None" => "none",
"Enable Encryption" => "BẬT mã hóa"
);

View File

@ -0,0 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "加密",
"Exclude the following file types from encryption" => "从加密中排除列出的文件类型",
"None" => "None",
"Enable Encryption" => "开启加密"
);

View File

@ -0,0 +1,6 @@
<?php $TRANSLATIONS = array(
"Encryption" => "加密",
"Exclude the following file types from encryption" => "下列的檔案類型不加密",
"None" => "",
"Enable Encryption" => "啟用加密"
);

View File

@ -31,7 +31,7 @@
// - IMPORTANT! Check if the block lenght of the encrypted data stays the same
require_once('Crypt_Blowfish/Blowfish.php');
require_once 'Crypt_Blowfish/Blowfish.php';
/**
* This class is for crypting and decrypting
@ -39,18 +39,18 @@ require_once('Crypt_Blowfish/Blowfish.php');
class OC_Crypt {
static private $bf = null;
public static function loginListener($params){
public static function loginListener($params) {
self::init($params['uid'],$params['password']);
}
public static function init($login,$password) {
$view=new OC_FilesystemView('/');
if(!$view->file_exists('/'.$login)){
if(!$view->file_exists('/'.$login)) {
$view->mkdir('/'.$login);
}
OC_FileProxy::$enabled=false;
if(!$view->file_exists('/'.$login.'/encryption.key')){// does key exist?
if(!$view->file_exists('/'.$login.'/encryption.key')) {// does key exist?
OC_Crypt::createkey($login,$password);
}
$key=$view->file_get_contents('/'.$login.'/encryption.key');
@ -66,14 +66,14 @@ class OC_Crypt {
*
* if the key is left out, the default handeler will be used
*/
public static function getBlowfish($key=''){
if($key){
public static function getBlowfish($key='') {
if($key) {
return new Crypt_Blowfish($key);
}else{
if(!isset($_SESSION['enckey'])){
if(!isset($_SESSION['enckey'])) {
return false;
}
if(!self::$bf){
if(!self::$bf) {
self::$bf=new Crypt_Blowfish($_SESSION['enckey']);
}
return self::$bf;
@ -96,7 +96,7 @@ class OC_Crypt {
}
public static function changekeypasscode($oldPassword, $newPassword) {
if(OCP\User::isLoggedIn()){
if(OCP\User::isLoggedIn()) {
$username=OCP\USER::getUser();
$view=new OC_FilesystemView('/'.$username);
@ -179,7 +179,7 @@ class OC_Crypt {
while (!feof($handleread)) {
$content = fread($handleread, 8192);
$enccontent=OC_CRYPT::decrypt( $content, $key);
if(feof($handleread)){
if(feof($handleread)) {
$enccontent=rtrim($enccontent, "\0");
}
fwrite($handlewrite, $enccontent);
@ -188,29 +188,29 @@ class OC_Crypt {
fclose($handleread);
}
}
/**
* encrypt data in 8192b sized blocks
*/
public static function blockEncrypt($data, $key=''){
public static function blockEncrypt($data, $key='') {
$result='';
while(strlen($data)){
while(strlen($data)) {
$result.=self::encrypt(substr($data,0,8192),$key);
$data=substr($data,8192);
}
return $result;
}
/**
* decrypt data in 8192b sized blocks
*/
public static function blockDecrypt($data, $key='',$maxLength=0){
public static function blockDecrypt($data, $key='',$maxLength=0) {
$result='';
while(strlen($data)){
while(strlen($data)) {
$result.=self::decrypt(substr($data,0,8192),$key);
$data=substr($data,8192);
}
if($maxLength>0){
if($maxLength>0) {
return substr($result,0,$maxLength);
}else{
return rtrim($result, "\0");

View File

@ -36,18 +36,18 @@ class OC_CryptStream{
private $size;
private static $rootView;
public function stream_open($path, $mode, $options, &$opened_path){
if(!self::$rootView){
public function stream_open($path, $mode, $options, &$opened_path) {
if(!self::$rootView) {
self::$rootView=new OC_FilesystemView('');
}
$path=str_replace('crypt://','',$path);
if(dirname($path)=='streams' and isset(self::$sourceStreams[basename($path)])){
if(dirname($path)=='streams' and isset(self::$sourceStreams[basename($path)])) {
$this->source=self::$sourceStreams[basename($path)]['stream'];
$this->path=self::$sourceStreams[basename($path)]['path'];
$this->size=self::$sourceStreams[basename($path)]['size'];
}else{
$this->path=$path;
if($mode=='w' or $mode=='w+' or $mode=='wb' or $mode=='wb+'){
if($mode=='w' or $mode=='w+' or $mode=='wb' or $mode=='wb+') {
$this->size=0;
}else{
$this->size=self::$rootView->filesize($path,$mode);
@ -55,55 +55,55 @@ class OC_CryptStream{
OC_FileProxy::$enabled=false;//disable fileproxies so we can open the source file
$this->source=self::$rootView->fopen($path,$mode);
OC_FileProxy::$enabled=true;
if(!is_resource($this->source)){
if(!is_resource($this->source)) {
OCP\Util::writeLog('files_encryption','failed to open '.$path,OCP\Util::ERROR);
}
}
if(is_resource($this->source)){
if(is_resource($this->source)) {
$this->meta=stream_get_meta_data($this->source);
}
return is_resource($this->source);
}
public function stream_seek($offset, $whence=SEEK_SET){
public function stream_seek($offset, $whence=SEEK_SET) {
$this->flush();
fseek($this->source,$offset,$whence);
}
public function stream_tell(){
public function stream_tell() {
return ftell($this->source);
}
public function stream_read($count){
public function stream_read($count) {
//$count will always be 8192 https://bugs.php.net/bug.php?id=21641
//This makes this function a lot simpler but will breake everything the moment it's fixed
$this->writeCache='';
if($count!=8192){
if($count!=8192) {
OCP\Util::writeLog('files_encryption','php bug 21641 no longer holds, decryption will not work',OCP\Util::FATAL);
die();
}
$pos=ftell($this->source);
$data=fread($this->source,8192);
if(strlen($data)){
if(strlen($data)) {
$result=OC_Crypt::decrypt($data);
}else{
$result='';
}
$length=$this->size-$pos;
if($length<8192){
if($length<8192) {
$result=substr($result,0,$length);
}
return $result;
}
public function stream_write($data){
public function stream_write($data) {
$length=strlen($data);
$currentPos=ftell($this->source);
if($this->writeCache){
if($this->writeCache) {
$data=$this->writeCache.$data;
$this->writeCache='';
}
if($currentPos%8192!=0){
if($currentPos%8192!=0) {
//make sure we always start on a block start
fseek($this->source,-($currentPos%8192),SEEK_CUR);
$encryptedBlock=fread($this->source,8192);
@ -113,8 +113,8 @@ class OC_CryptStream{
fseek($this->source,-($currentPos%8192),SEEK_CUR);
}
$currentPos=ftell($this->source);
while($remainingLength=strlen($data)>0){
if($remainingLength<8192){
while($remainingLength=strlen($data)>0) {
if($remainingLength<8192) {
$this->writeCache=$data;
$data='';
}else{
@ -127,8 +127,8 @@ class OC_CryptStream{
return $length;
}
public function stream_set_option($option,$arg1,$arg2){
switch($option){
public function stream_set_option($option,$arg1,$arg2) {
switch($option) {
case STREAM_OPTION_BLOCKING:
stream_set_blocking($this->source,$arg1);
break;
@ -140,33 +140,33 @@ class OC_CryptStream{
}
}
public function stream_stat(){
public function stream_stat() {
return fstat($this->source);
}
public function stream_lock($mode){
public function stream_lock($mode) {
flock($this->source,$mode);
}
public function stream_flush(){
public function stream_flush() {
return fflush($this->source);
}
public function stream_eof(){
public function stream_eof() {
return feof($this->source);
}
private function flush(){
if($this->writeCache){
private function flush() {
if($this->writeCache) {
$encrypted=OC_Crypt::encrypt($this->writeCache);
fwrite($this->source,$encrypted);
$this->writeCache='';
}
}
public function stream_close(){
public function stream_close() {
$this->flush();
if($this->meta['mode']!='r' and $this->meta['mode']!='rb'){
if($this->meta['mode']!='r' and $this->meta['mode']!='rb') {
OC_FileCache::put($this->path,array('encrypted'=>true,'size'=>$this->size),'');
}
return fclose($this->source);

View File

@ -28,27 +28,27 @@
class OC_FileProxy_Encryption extends OC_FileProxy{
private static $blackList=null; //mimetypes blacklisted from encryption
private static $enableEncryption=null;
/**
* check if a file should be encrypted during write
* @param string $path
* @return bool
*/
private static function shouldEncrypt($path){
if(is_null(self::$enableEncryption)){
private static function shouldEncrypt($path) {
if(is_null(self::$enableEncryption)) {
self::$enableEncryption=(OCP\Config::getAppValue('files_encryption','enable_encryption','true')=='true');
}
if(!self::$enableEncryption){
if(!self::$enableEncryption) {
return false;
}
if(is_null(self::$blackList)){
if(is_null(self::$blackList)) {
self::$blackList=explode(',',OCP\Config::getAppValue('files_encryption','type_blacklist','jpg,png,jpeg,avi,mpg,mpeg,mkv,mp3,oga,ogv,ogg'));
}
if(self::isEncrypted($path)){
if(self::isEncrypted($path)) {
return true;
}
$extension=substr($path,strrpos($path,'.')+1);
if(array_search($extension,self::$blackList)===false){
if(array_search($extension,self::$blackList)===false) {
return true;
}
}
@ -58,13 +58,13 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
* @param string $path
* @return bool
*/
private static function isEncrypted($path){
private static function isEncrypted($path) {
$metadata=OC_FileCache_Cached::get($path,'');
return isset($metadata['encrypted']) and (bool)$metadata['encrypted'];
}
public function preFile_put_contents($path,&$data){
if(self::shouldEncrypt($path)){
public function preFile_put_contents($path,&$data) {
if(self::shouldEncrypt($path)) {
if (!is_resource($data)) {//stream put contents should have been converter to fopen
$size=strlen($data);
$data=OC_Crypt::blockEncrypt($data);
@ -72,25 +72,25 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
}
}
}
public function postFile_get_contents($path,$data){
if(self::isEncrypted($path)){
public function postFile_get_contents($path,$data) {
if(self::isEncrypted($path)) {
$cached=OC_FileCache_Cached::get($path,'');
$data=OC_Crypt::blockDecrypt($data,'',$cached['size']);
}
return $data;
}
public function postFopen($path,&$result){
if(!$result){
public function postFopen($path,&$result) {
if(!$result) {
return $result;
}
$meta=stream_get_meta_data($result);
if(self::isEncrypted($path)){
if(self::isEncrypted($path)) {
fclose($result);
$result=fopen('crypt://'.$path,$meta['mode']);
}elseif(self::shouldEncrypt($path) and $meta['mode']!='r' and $meta['mode']!='rb'){
if(OC_Filesystem::file_exists($path) and OC_Filesystem::filesize($path)>0){
}elseif(self::shouldEncrypt($path) and $meta['mode']!='r' and $meta['mode']!='rb') {
if(OC_Filesystem::file_exists($path) and OC_Filesystem::filesize($path)>0) {
//first encrypt the target file so we don't end up with a half encrypted file
OCP\Util::writeLog('files_encryption','Decrypting '.$path.' before writing',OCP\Util::DEBUG);
$tmp=fopen('php://temp');
@ -104,23 +104,23 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
return $result;
}
public function postGetMimeType($path,$mime){
if(self::isEncrypted($path)){
public function postGetMimeType($path,$mime) {
if(self::isEncrypted($path)) {
$mime=OCP\Files::getMimeType('crypt://'.$path,'w');
}
return $mime;
}
public function postStat($path,$data){
if(self::isEncrypted($path)){
public function postStat($path,$data) {
if(self::isEncrypted($path)) {
$cached=OC_FileCache_Cached::get($path,'');
$data['size']=$cached['size'];
}
return $data;
}
public function postFileSize($path,$size){
if(self::isEncrypted($path)){
public function postFileSize($path,$size) {
if(self::isEncrypted($path)) {
$cached=OC_FileCache_Cached::get($path,'');
return $cached['size'];
}else{

View File

@ -7,6 +7,6 @@
<option selected="selected" value="<?php echo $type;?>"><?php echo $type;?></option>
<?php endforeach;?>
</select>
<input type='checkbox' id='enable_encryption' <?php if($_['encryption_enabled']){echo 'checked="checked"';} ?>></input><label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label>
<input type='checkbox' id='enable_encryption' <?php if($_['encryption_enabled']) {echo 'checked="checked"';} ?>></input><label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label>
</fieldset>
</form>

View File

@ -7,7 +7,7 @@
*/
class Test_Encryption extends UnitTestCase {
function testEncryption(){
function testEncryption() {
$key=uniqid();
$file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
$source=file_get_contents($file); //nice large text file
@ -23,7 +23,7 @@ class Test_Encryption extends UnitTestCase {
$decrypted=OC_Crypt::decrypt($encrypted,$key);
$decrypted=rtrim($decrypted, "\0");
$this->assertEqual($decrypted,$chunk);
$encrypted=OC_Crypt::blockEncrypt($source,$key);
$decrypted=OC_Crypt::blockDecrypt($encrypted,$key);
$this->assertNotEqual($encrypted,$source);
@ -54,9 +54,9 @@ class Test_Encryption extends UnitTestCase {
}
function testBinary(){
function testBinary() {
$key=uniqid();
$file=__DIR__.'/binary';
$source=file_get_contents($file); //binary file
$encrypted=OC_Crypt::encrypt($source,$key);

View File

@ -9,18 +9,18 @@
class Test_CryptProxy extends UnitTestCase {
private $oldConfig;
private $oldKey;
public function setUp(){
public function setUp() {
$user=OC_User::getUser();
$this->oldConfig=OCP\Config::getAppValue('files_encryption','enable_encryption','true');
OCP\Config::setAppValue('files_encryption','enable_encryption','true');
$this->oldKey=isset($_SESSION['enckey'])?$_SESSION['enckey']:null;
//set testing key
$_SESSION['enckey']=md5(time());
//clear all proxies and hooks so we can do clean testing
OC_FileProxy::clearProxies();
OC_Hook::clear('OC_Filesystem');
@ -40,23 +40,23 @@ class Test_CryptProxy extends UnitTestCase {
$rootView->mkdir('/'.$user.'/files');
}
public function tearDown(){
public function tearDown() {
OCP\Config::setAppValue('files_encryption','enable_encryption',$this->oldConfig);
if(!is_null($this->oldKey)){
if(!is_null($this->oldKey)) {
$_SESSION['enckey']=$this->oldKey;
}
}
public function testSimple(){
public function testSimple() {
$file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
$original=file_get_contents($file);
OC_Filesystem::file_put_contents('/file',$original);
OC_FileProxy::$enabled=false;
$stored=OC_Filesystem::file_get_contents('/file');
OC_FileProxy::$enabled=true;
$fromFile=OC_Filesystem::file_get_contents('/file');
$this->assertNotEqual($original,$stored);
$this->assertEqual(strlen($original),strlen($fromFile));
@ -64,7 +64,7 @@ class Test_CryptProxy extends UnitTestCase {
}
public function testView(){
public function testView() {
$file=OC::$SERVERROOT.'/3rdparty/MDB2.php';
$original=file_get_contents($file);
@ -86,7 +86,7 @@ class Test_CryptProxy extends UnitTestCase {
$this->assertEqual($original,$fromFile);
}
public function testBinary(){
public function testBinary() {
$file=__DIR__.'/binary';
$original=file_get_contents($file);

View File

@ -8,8 +8,8 @@
class Test_CryptStream extends UnitTestCase {
private $tmpFiles=array();
function testStream(){
function testStream() {
$stream=$this->getStream('test1','w',strlen('foobar'));
fwrite($stream,'foobar');
fclose($stream);
@ -40,11 +40,11 @@ class Test_CryptStream extends UnitTestCase {
* @param int size
* @return resource
*/
function getStream($id,$mode,$size){
if($id===''){
function getStream($id,$mode,$size) {
if($id==='') {
$id=uniqid();
}
if(!isset($this->tmpFiles[$id])){
if(!isset($this->tmpFiles[$id])) {
$file=OCP\Files::tmpFile();
$this->tmpFiles[$id]=$file;
}else{
@ -55,7 +55,7 @@ class Test_CryptStream extends UnitTestCase {
return fopen('crypt://streams/'.$id,$mode);
}
function testBinary(){
function testBinary() {
$file=__DIR__.'/binary';
$source=file_get_contents($file);

View File

@ -14,7 +14,7 @@ $fh = fopen($to, 'r');
$data = fread($fh, filesize($to));
fclose($fh);
if (!strpos($data, 'BEGIN CERTIFICATE')) {
$pem = chunk_split(base64_encode($data), 64, "\n");
$pem = chunk_split(base64_encode($data), 64, "\n");
$pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
$fh = fopen($to, 'w');
fwrite($fh, $pem);
@ -25,4 +25,3 @@ OC_Mount_Config::createCertificateBundle();
header("Location: settings/personal.php");
exit;
?>

View File

@ -37,5 +37,3 @@ if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
} else {
OCP\JSON::error(array('data' => array('message' => 'Please provide a valid Dropbox app key and secret.')));
}
?>

View File

@ -47,5 +47,3 @@ if (isset($_POST['step'])) {
break;
}
}
?>

View File

@ -9,4 +9,3 @@ $cert = $_POST['cert'];
$file = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/'.$cert;
unlink($file);
OC_Mount_Config::createCertificateBundle();
?>

View File

@ -10,7 +10,7 @@ $(document).ready(function() {
var app_secret = $(this).find('.configuration [data-parameter="app_secret"]').val();
var config = $(this).find('.configuration');
if (app_key != '' && app_secret != '') {
var pos = window.location.search.indexOf('oauth_token') + 12
var pos = window.location.search.indexOf('oauth_token') + 12;
var token = $(this).find('.configuration [data-parameter="token"]');
if (pos != -1 && window.location.search.substr(pos, $(token).val().length) == $(token).val()) {
var token_secret = $(this).find('.configuration [data-parameter="token_secret"]');
@ -73,7 +73,7 @@ $(document).ready(function() {
}
});
} else {
OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage')
OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage');
}
});

View File

@ -66,11 +66,11 @@ OC.MountConfig={
return true;
}
}
}
};
$(document).ready(function() {
$('.chzn-select').chosen();
$('#selectBackend').live('change', function() {
var tr = $(this).parent().parent();
$('#externalStorage tbody').append($(tr).clone());
@ -133,7 +133,7 @@ $(document).ready(function() {
}
}
return defaultMountPoint+append;
}
}
$('#externalStorage td').live('change', function() {
OC.MountConfig.saveStorage($(this).parent());
@ -179,4 +179,4 @@ $(document).ready(function() {
}
});
});
});

View File

@ -1,13 +1,18 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Externí úložiště",
"Mount point" => "Přípojný bod",
"Configuration" => "Konfigurace",
"Options" => "Nastavení",
"Add mount point" => "Přidat přípojný bod",
"Backend" => "Podpůrná vrstva",
"Configuration" => "Nastavení",
"Options" => "Možnosti",
"Applicable" => "Platný",
"Add mount point" => "Přidat bod připojení",
"None set" => "Nenastaveno",
"All Users" => "Všichni uživatelé",
"Groups" => "Skupiny",
"Users" => "Uživatelé",
"Delete" => "Smazat",
"Enable User External Storage" => "Zapnout uživatelské externí úložiště",
"Allow users to mount their own external storage" => "Povolit uživatelů připojit jejich vlastní externí úložiště"
"SSL root certificates" => "Kořenové certifikáty SSL",
"Import Root Certificate" => "Importovat kořenového certifikátu",
"Enable User External Storage" => "Zapnout externí uživatelské úložiště",
"Allow users to mount their own external storage" => "Povolit uživatelům připojení jejich vlastních externích úložišť"
);

View File

@ -1,5 +1,6 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Almacenamiento externo",
"Mount point" => "Punto de montaje",
"Backend" => "Motor",
"Configuration" => "Configuración",
"Options" => "Opciones",
@ -9,5 +10,9 @@
"All Users" => "Todos los usuarios",
"Groups" => "Grupos",
"Users" => "Usuarios",
"Delete" => "Eliiminar"
"Delete" => "Eliiminar",
"SSL root certificates" => "Raíz de certificados SSL ",
"Import Root Certificate" => "Importar certificado raíz",
"Enable User External Storage" => "Habilitar almacenamiento de usuario externo",
"Allow users to mount their own external storage" => "Permitir a los usuarios montar su propio almacenamiento externo"
);

View File

@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Väline salvestuskoht",
"Mount point" => "Ühenduspunkt",
"Backend" => "Admin",
"Configuration" => "Seadistamine",
"Options" => "Valikud",
"Applicable" => "Rakendatav",
"Add mount point" => "Lisa ühenduspunkt",
"None set" => "Pole määratud",
"All Users" => "Kõik kasutajad",
"Groups" => "Grupid",
"Users" => "Kasutajad",
"Delete" => "Kustuta"
"Delete" => "Kustuta",
"SSL root certificates" => "SSL root sertifikaadid",
"Import Root Certificate" => "Impordi root sertifikaadid",
"Enable User External Storage" => "Luba kasutajatele väline salvestamine",
"Allow users to mount their own external storage" => "Luba kasutajatel ühendada külge nende enda välised salvestusseadmed"
);

View File

@ -1,8 +1,10 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Kanpoko Biltegiratzea",
"Mount point" => "Montatze puntua",
"Backend" => "Motorra",
"Configuration" => "Konfigurazioa",
"Options" => "Aukerak",
"Applicable" => "Aplikagarria",
"Add mount point" => "Gehitu muntatze puntua",
"None set" => "Ezarri gabe",
"All Users" => "Erabiltzaile guztiak",

View File

@ -4,6 +4,7 @@
"Backend" => "Taustaosa",
"Configuration" => "Asetukset",
"Options" => "Valinnat",
"Applicable" => "Sovellettavissa",
"Add mount point" => "Lisää liitospiste",
"None set" => "Ei asetettu",
"All Users" => "Kaikki käyttäjät",
@ -12,5 +13,6 @@
"Delete" => "Poista",
"SSL root certificates" => "SSL-juurivarmenteet",
"Import Root Certificate" => "Tuo juurivarmenne",
"Enable User External Storage" => "Ota käyttöön ulkopuoliset tallennuspaikat",
"Allow users to mount their own external storage" => "Salli käyttäjien liittää omia erillisiä tallennusvälineitä"
);

View File

@ -0,0 +1,13 @@
<?php $TRANSLATIONS = array(
"External Storage" => "אחסון חיצוני",
"Configuration" => "הגדרות",
"Options" => "אפשרויות",
"All Users" => "כל המשתמשים",
"Groups" => "קבוצות",
"Users" => "משתמשים",
"Delete" => "מחיקה",
"SSL root certificates" => "שורש אישורי אבטחת SSL ",
"Import Root Certificate" => "ייבוא אישור אבטחת שורש",
"Enable User External Storage" => "הפעלת אחסון חיצוני למשתמשים",
"Allow users to mount their own external storage" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם"
);

View File

@ -11,8 +11,8 @@
"Groups" => "Gruppi",
"Users" => "Utenti",
"Delete" => "Elimina",
"SSL root certificates" => "Certificato principale per SSL",
"Import Root Certificate" => "Importa certificato principale",
"SSL root certificates" => "Certificati SSL radice",
"Import Root Certificate" => "Importa certificato radice",
"Enable User External Storage" => "Abilita la memoria esterna dell'utente",
"Allow users to mount their own external storage" => "Consente agli utenti di montare la propria memoria esterna"
"Allow users to mount their own external storage" => "Consenti agli utenti di montare la propria memoria esterna"
);

View File

@ -0,0 +1,18 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Externé úložisko",
"Mount point" => "Prípojný bod",
"Backend" => "Backend",
"Configuration" => "Nastavenia",
"Options" => "Možnosti",
"Applicable" => "Aplikovateľné",
"Add mount point" => "Pridať prípojný bod",
"None set" => "Žiadne nastavené",
"All Users" => "Všetci užívatelia",
"Groups" => "Skupiny",
"Users" => "Užívatelia",
"Delete" => "Odstrániť",
"SSL root certificates" => "Koreňové SSL certifikáty",
"Import Root Certificate" => "Importovať koreňový certifikát",
"Enable User External Storage" => "Povoliť externé úložisko",
"Allow users to mount their own external storage" => "Povoliť užívateľom pripojiť ich vlastné externé úložisko"
);

View File

@ -0,0 +1,5 @@
<?php $TRANSLATIONS = array(
"Groups" => "Групи",
"Users" => "Користувачі",
"Delete" => "Видалити"
);

View File

@ -0,0 +1,18 @@
<?php $TRANSLATIONS = array(
"External Storage" => "Lưu trữ ngoài",
"Mount point" => "Điểm gắn",
"Backend" => "phụ trợ",
"Configuration" => "Cấu hình",
"Options" => "Tùy chọn",
"Applicable" => "Áp dụng",
"Add mount point" => "Thêm điểm lắp",
"None set" => "không",
"All Users" => "Tất cả người dùng",
"Groups" => "Nhóm",
"Users" => "Người dùng",
"Delete" => "Xóa",
"SSL root certificates" => "Chứng chỉ SSL root",
"Import Root Certificate" => "Nhập Root Certificate",
"Enable User External Storage" => "Kích hoạt tính năng lưu trữ ngoài",
"Allow users to mount their own external storage" => "Cho phép người dùng kết nối với lưu trữ riêng bên ngoài của họ"
);

View File

@ -29,7 +29,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
private $objects = array();
private static $tempFiles = array();
// TODO options: storage class, encryption server side, encrypt before upload?
public function __construct($params) {
@ -216,7 +216,7 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
}
public function free_space($path) {
// Infinite?
// Infinite?
return false;
}
@ -232,5 +232,3 @@ class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
}
}
?>

View File

@ -1,283 +1,281 @@
<?php
/**
* 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 <http://www.gnu.org/licenses/>.
*/
/**
* Class to configure the config/mount.php and data/$user/mount.php files
*/
class OC_Mount_Config {
const MOUNT_TYPE_GLOBAL = 'global';
const MOUNT_TYPE_GROUP = 'group';
const MOUNT_TYPE_USER = 'user';
/**
* Get details on each of the external storage backends, used for the mount config UI
* If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
* If the configuration parameter should be secret, add a '*' to the beginning of the value
* If the configuration parameter is a boolean, add a '!' to the beginning of the value
* If the configuration parameter is optional, add a '&' to the beginning of the value
* If the configuration parameter is hidden, add a '#' to the begining of the value
* @return array
*/
public static function getBackends() {
return array(
'OC_Filestorage_Local' => array('backend' => 'Local', 'configuration' => array('datadir' => 'Location')),
'OC_Filestorage_AmazonS3' => array('backend' => 'Amazon S3', 'configuration' => array('key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')),
'OC_Filestorage_Dropbox' => array('backend' => 'Dropbox', 'configuration' => array('configured' => '#configured','app_key' => 'App key', 'app_secret' => 'App secret', 'token' => '#token', 'token_secret' => '#token_secret'), 'custom' => 'dropbox'),
'OC_Filestorage_FTP' => array('backend' => 'FTP', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure ftps://')),
'OC_Filestorage_Google' => array('backend' => 'Google Drive', 'configuration' => array('configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'),
'OC_Filestorage_SWIFT' => array('backend' => 'OpenStack Swift', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')),
'OC_Filestorage_SMB' => array('backend' => 'SMB', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')),
'OC_Filestorage_DAV' => array('backend' => 'WebDAV', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure https://'))
);
}
/**
* Get the system mount points
* The returned array is not in the same format as getUserMountPoints()
* @return array
*/
public static function getSystemMountPoints() {
$mountPoints = self::readData(false);
$backends = self::getBackends();
$system = array();
if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
$system[$mountPoint]['applicable']['groups'] = array_merge($system[$mountPoint]['applicable']['groups'], array($group));
} else {
$system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array($group), 'users' => array()));
}
}
}
}
if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
$system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user));
} else {
$system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array(), 'users' => array($user)));
}
}
}
}
return $system;
}
/**
* Get the personal mount points of the current user
* The returned array is not in the same format as getUserMountPoints()
* @return array
*/
public static function getPersonalMountPoints() {
$mountPoints = self::readData(true);
$backends = self::getBackends();
$uid = OCP\User::getUser();
$personal = array();
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
// Remove '/uid/files/' from mount point
$personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options']);
}
}
return $personal;
}
/**
* Add a mount point to the filesystem
* @param string Mount point
* @param string Backend class
* @param array Backend parameters for the class
* @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
* @param string User or group to apply mount to
* @param bool Personal or system mount point i.e. is this being called from the personal or admin page
* @return bool
*/
public static function addMountPoint($mountPoint, $class, $classOptions, $mountType, $applicable, $isPersonal = false) {
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') {
return false;
}
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
$mountPoints = self::readData($isPersonal);
// Merge the new mount point into the current mount points
if (isset($mountPoints[$mountType])) {
if (isset($mountPoints[$mountType][$applicable])) {
$mountPoints[$mountType][$applicable] = array_merge($mountPoints[$mountType][$applicable], $mount[$applicable]);
} else {
$mountPoints[$mountType] = array_merge($mountPoints[$mountType], $mount);
}
} else {
$mountPoints[$mountType] = $mount;
}
self::writeData($isPersonal, $mountPoints);
return true;
}
/**
*
* @param string Mount point
* @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
* @param string User or group to remove mount from
* @param bool Personal or system mount point
* @return bool
*/
public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
// Verify that the mount point applies for the current user
if ($isPersonal) {
if ($applicable != OCP\User::getUser()) {
return false;
}
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mountPoints = self::readData($isPersonal);
// Remove mount point
unset($mountPoints[$mountType][$applicable][$mountPoint]);
// Unset parent arrays if empty
if (empty($mountPoints[$mountType][$applicable])) {
unset($mountPoints[$mountType][$applicable]);
if (empty($mountPoints[$mountType])) {
unset($mountPoints[$mountType]);
}
}
self::writeData($isPersonal, $mountPoints);
return true;
}
/**
* Read the mount points in the config file into an array
* @param bool Personal or system config file
* @return array
*/
private static function readData($isPersonal) {
if ($isPersonal) {
$file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
} else {
$file = OC::$SERVERROOT.'/config/mount.php';
}
if (is_file($file)) {
$mountPoints = include($file);
if (is_array($mountPoints)) {
return $mountPoints;
}
}
return array();
}
/**
* Write the mount points to the config file
* @param bool Personal or system config file
* @param array Mount points
*/
private static function writeData($isPersonal, $data) {
if ($isPersonal) {
$file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
} else {
$file = OC::$SERVERROOT.'/config/mount.php';
}
$content = "<?php return array (\n";
if (isset($data[self::MOUNT_TYPE_GROUP])) {
$content .= "\t'group' => array (\n";
foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
$content .= "\t\t'".$group."' => array (\n";
foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
}
$content .= "\t\t),\n";
}
$content .= "\t),\n";
}
if (isset($data[self::MOUNT_TYPE_USER])) {
$content .= "\t'user' => array (\n";
foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
$content .= "\t\t'".$user."' => array (\n";
foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
}
$content .= "\t\t),\n";
}
$content .= "\t),\n";
}
$content .= ");\n?>";
@file_put_contents($file, $content);
}
/**
* Returns all user uploaded ssl root certificates
* @return array
*/
public static function getCertificates() {
$view = \OCP\Files::getStorage('files_external');
$path=\OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
if (!is_dir($path)) mkdir($path);
$result = array();
$handle = opendir($path);
while (false !== ($file = readdir($handle))) {
if($file != '.' && $file != '..') $result[] = $file;
}
return $result;
}
/**
* creates certificate bundle
*/
public static function createCertificateBundle() {
$view = \OCP\Files::getStorage("files_external");
$path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("");
$certs = OC_Mount_Config::getCertificates();
$fh_certs = fopen($path."/rootcerts.crt", 'w');
foreach ($certs as $cert) {
$file=$path.'/uploads/'.$cert;
$fh = fopen($file, "r");
$data = fread($fh, filesize($file));
fclose($fh);
if (strpos($data, 'BEGIN CERTIFICATE')) {
fwrite($fh_certs, $data);
}
}
fclose($fh_certs);
return true;
}
}
?>
<?php
/**
* 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 <http://www.gnu.org/licenses/>.
*/
/**
* Class to configure the config/mount.php and data/$user/mount.php files
*/
class OC_Mount_Config {
const MOUNT_TYPE_GLOBAL = 'global';
const MOUNT_TYPE_GROUP = 'group';
const MOUNT_TYPE_USER = 'user';
/**
* Get details on each of the external storage backends, used for the mount config UI
* If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
* If the configuration parameter should be secret, add a '*' to the beginning of the value
* If the configuration parameter is a boolean, add a '!' to the beginning of the value
* If the configuration parameter is optional, add a '&' to the beginning of the value
* If the configuration parameter is hidden, add a '#' to the begining of the value
* @return array
*/
public static function getBackends() {
return array(
'OC_Filestorage_Local' => array('backend' => 'Local', 'configuration' => array('datadir' => 'Location')),
'OC_Filestorage_AmazonS3' => array('backend' => 'Amazon S3', 'configuration' => array('key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')),
'OC_Filestorage_Dropbox' => array('backend' => 'Dropbox', 'configuration' => array('configured' => '#configured','app_key' => 'App key', 'app_secret' => 'App secret', 'token' => '#token', 'token_secret' => '#token_secret'), 'custom' => 'dropbox'),
'OC_Filestorage_FTP' => array('backend' => 'FTP', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure ftps://')),
'OC_Filestorage_Google' => array('backend' => 'Google Drive', 'configuration' => array('configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'),
'OC_Filestorage_SWIFT' => array('backend' => 'OpenStack Swift', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')),
'OC_Filestorage_SMB' => array('backend' => 'SMB', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')),
'OC_Filestorage_DAV' => array('backend' => 'WebDAV', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure https://'))
);
}
/**
* Get the system mount points
* The returned array is not in the same format as getUserMountPoints()
* @return array
*/
public static function getSystemMountPoints() {
$mountPoints = self::readData(false);
$backends = self::getBackends();
$system = array();
if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
$system[$mountPoint]['applicable']['groups'] = array_merge($system[$mountPoint]['applicable']['groups'], array($group));
} else {
$system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array($group), 'users' => array()));
}
}
}
}
if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
foreach ($mounts as $mountPoint => $mount) {
// Remove '/$user/files/' from mount point
$mountPoint = substr($mountPoint, 13);
// Merge the mount point into the current mount points
if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
$system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user));
} else {
$system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array(), 'users' => array($user)));
}
}
}
}
return $system;
}
/**
* Get the personal mount points of the current user
* The returned array is not in the same format as getUserMountPoints()
* @return array
*/
public static function getPersonalMountPoints() {
$mountPoints = self::readData(true);
$backends = self::getBackends();
$uid = OCP\User::getUser();
$personal = array();
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
// Remove '/uid/files/' from mount point
$personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options']);
}
}
return $personal;
}
/**
* Add a mount point to the filesystem
* @param string Mount point
* @param string Backend class
* @param array Backend parameters for the class
* @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
* @param string User or group to apply mount to
* @param bool Personal or system mount point i.e. is this being called from the personal or admin page
* @return bool
*/
public static function addMountPoint($mountPoint, $class, $classOptions, $mountType, $applicable, $isPersonal = false) {
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') {
return false;
}
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
$mountPoints = self::readData($isPersonal);
// Merge the new mount point into the current mount points
if (isset($mountPoints[$mountType])) {
if (isset($mountPoints[$mountType][$applicable])) {
$mountPoints[$mountType][$applicable] = array_merge($mountPoints[$mountType][$applicable], $mount[$applicable]);
} else {
$mountPoints[$mountType] = array_merge($mountPoints[$mountType], $mount);
}
} else {
$mountPoints[$mountType] = $mount;
}
self::writeData($isPersonal, $mountPoints);
return true;
}
/**
*
* @param string Mount point
* @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
* @param string User or group to remove mount from
* @param bool Personal or system mount point
* @return bool
*/
public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
// Verify that the mount point applies for the current user
if ($isPersonal) {
if ($applicable != OCP\User::getUser()) {
return false;
}
$mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
} else {
$mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
}
$mountPoints = self::readData($isPersonal);
// Remove mount point
unset($mountPoints[$mountType][$applicable][$mountPoint]);
// Unset parent arrays if empty
if (empty($mountPoints[$mountType][$applicable])) {
unset($mountPoints[$mountType][$applicable]);
if (empty($mountPoints[$mountType])) {
unset($mountPoints[$mountType]);
}
}
self::writeData($isPersonal, $mountPoints);
return true;
}
/**
* Read the mount points in the config file into an array
* @param bool Personal or system config file
* @return array
*/
private static function readData($isPersonal) {
if ($isPersonal) {
$file = OC_User::getHome(OCP\User::getUser()).'/mount.php';
} else {
$file = OC::$SERVERROOT.'/config/mount.php';
}
if (is_file($file)) {
$mountPoints = include($file);
if (is_array($mountPoints)) {
return $mountPoints;
}
}
return array();
}
/**
* Write the mount points to the config file
* @param bool Personal or system config file
* @param array Mount points
*/
private static function writeData($isPersonal, $data) {
if ($isPersonal) {
$file = OC_User::getHome(OCP\User::getUser()).'/mount.php';
} else {
$file = OC::$SERVERROOT.'/config/mount.php';
}
$content = "<?php return array (\n";
if (isset($data[self::MOUNT_TYPE_GROUP])) {
$content .= "\t'group' => array (\n";
foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
$content .= "\t\t'".$group."' => array (\n";
foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
}
$content .= "\t\t),\n";
}
$content .= "\t),\n";
}
if (isset($data[self::MOUNT_TYPE_USER])) {
$content .= "\t'user' => array (\n";
foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
$content .= "\t\t'".$user."' => array (\n";
foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
}
$content .= "\t\t),\n";
}
$content .= "\t),\n";
}
$content .= ");\n?>";
@file_put_contents($file, $content);
}
/**
* Returns all user uploaded ssl root certificates
* @return array
*/
public static function getCertificates() {
$view = \OCP\Files::getStorage('files_external');
$path=\OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
if (!is_dir($path)) mkdir($path);
$result = array();
$handle = opendir($path);
while (false !== ($file = readdir($handle))) {
if($file != '.' && $file != '..') $result[] = $file;
}
return $result;
}
/**
* creates certificate bundle
*/
public static function createCertificateBundle() {
$view = \OCP\Files::getStorage("files_external");
$path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("");
$certs = OC_Mount_Config::getCertificates();
$fh_certs = fopen($path."/rootcerts.crt", 'w');
foreach ($certs as $cert) {
$file=$path.'/uploads/'.$cert;
$fh = fopen($file, "r");
$data = fread($fh, filesize($file));
fclose($fh);
if (strpos($data, 'BEGIN CERTIFICATE')) {
fwrite($fh_certs, $data);
}
}
fclose($fh_certs);
return true;
}
}

View File

@ -251,5 +251,3 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
}
}
?>

View File

@ -14,14 +14,14 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
private $root;
private static $tempFiles=array();
public function __construct($params){
public function __construct($params) {
$this->host=$params['host'];
$this->user=$params['user'];
$this->password=$params['password'];
$this->secure=isset($params['secure'])?(bool)$params['secure']:false;
$this->root=isset($params['root'])?$params['root']:'/';
if(!$this->root || $this->root[0]!='/'){
if(!$this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
//create the root folder if necesary
@ -35,16 +35,16 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
* @param string path
* @return string
*/
public function constructUrl($path){
public function constructUrl($path) {
$url='ftp';
if($this->secure){
if($this->secure) {
$url.='s';
}
$url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path;
return $url;
}
public function fopen($path,$mode){
switch($mode){
public function fopen($path,$mode) {
switch($mode) {
case 'r':
case 'rb':
case 'w':
@ -63,14 +63,14 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
case 'c':
case 'c+':
//emulate these
if(strrpos($path,'.')!==false){
if(strrpos($path,'.')!==false) {
$ext=substr($path,strrpos($path,'.'));
}else{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack');
if($this->file_exists($path)){
if($this->file_exists($path)) {
$this->getFile($path,$tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
@ -78,8 +78,8 @@ class OC_FileStorage_FTP extends OC_FileStorage_StreamWrapper{
}
}
public function writeBack($tmpFile){
if(isset(self::$tempFiles[$tmpFile])){
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
$this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}

View File

@ -119,7 +119,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
}
}
return false;
return false;
}
private function getFeed($feedUri, $httpMethod, $postData = null) {
@ -174,7 +174,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
return 'html';
}
}
public function mkdir($path) {
$collection = dirname($path);
@ -254,7 +254,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
} else if ($entry = $this->getResource($path)) {
// NOTE: Native resources don't have a file size
$stat['size'] = $entry->getElementsByTagNameNS('http://schemas.google.com/g/2005', 'quotaBytesUsed')->item(0)->nodeValue;
// if (isset($atime = $entry->getElementsByTagNameNS('http://schemas.google.com/g/2005', 'lastViewed')->item(0)->nodeValue))
// if (isset($atime = $entry->getElementsByTagNameNS('http://schemas.google.com/g/2005', 'lastViewed')->item(0)->nodeValue))
// $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);
@ -304,7 +304,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
return false;
}
public function file_exists($path) {
if ($path == '' || $path == '/') {
return true;
@ -313,7 +313,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
return false;
}
public function unlink($path) {
// Get resource self link to trash resource
if ($entry = $this->getResource($path)) {
@ -482,7 +482,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
// TODO Wait for resource entry
}
}
public function getMimeType($path, $entry = null) {
// Entry can be passed, because extension is required for opendir and the entry can't be cached without the extension
if ($entry == null) {
@ -522,7 +522,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
return false;
}
public function free_space($path) {
if ($dom = $this->getFeed('https://docs.google.com/feeds/metadata/default', 'GET')) {
// NOTE: Native Google Docs resources don't count towards quota
@ -532,9 +532,9 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
return false;
}
public function touch($path, $mtime = null) {
}
}

View File

@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
require_once('smb4php/smb.php');
require_once 'smb4php/smb.php';
class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
private $password;
@ -15,40 +15,40 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
private $root;
private $share;
public function __construct($params){
public function __construct($params) {
$this->host=$params['host'];
$this->user=$params['user'];
$this->password=$params['password'];
$this->share=$params['share'];
$this->root=isset($params['root'])?$params['root']:'/';
if(!$this->root || $this->root[0]!='/'){
if(!$this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
if(substr($this->root,-1,1)!='/'){
if(substr($this->root,-1,1)!='/') {
$this->root.='/';
}
if(!$this->share || $this->share[0]!='/'){
if(!$this->share || $this->share[0]!='/') {
$this->share='/'.$this->share;
}
if(substr($this->share,-1,1)=='/'){
if(substr($this->share,-1,1)=='/') {
$this->share=substr($this->share,0,-1);
}
//create the root folder if necesary
if(!$this->is_dir('')){
if(!$this->is_dir('')) {
$this->mkdir('');
}
}
public function constructUrl($path){
if(substr($path,-1)=='/'){
public function constructUrl($path) {
if(substr($path,-1)=='/') {
$path=substr($path,0,-1);
}
return 'smb://'.$this->user.':'.$this->password.'@'.$this->host.$this->share.$this->root.$path;
}
public function stat($path){
if(!$path and $this->root=='/'){//mtime doesn't work for shares
public function stat($path) {
if(!$path and $this->root=='/') {//mtime doesn't work for shares
$mtime=$this->shareMTime();
$stat=stat($this->constructUrl($path));
$stat['mtime']=$mtime;
@ -58,7 +58,7 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
}
}
public function filetype($path){
public function filetype($path) {
return (bool)@$this->opendir($path);//using opendir causes the same amount of requests and caches the content of the folder in one go
}
@ -67,8 +67,8 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
* @param int $time
* @return bool
*/
public function hasUpdated($path,$time){
if(!$path and $this->root=='/'){
public function hasUpdated($path,$time) {
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;
}else{
@ -80,13 +80,13 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
/**
* get the best guess for the modification time of the share
*/
private function shareMTime(){
private function shareMTime() {
$dh=$this->opendir('');
$lastCtime=0;
while($file=readdir($dh)){
if($file!='.' and $file!='..'){
while($file=readdir($dh)) {
if($file!='.' and $file!='..') {
$ctime=$this->filemtime($file);
if($ctime>$lastCtime){
if($ctime>$lastCtime) {
$lastCtime=$ctime;
}
}

View File

@ -10,12 +10,12 @@
abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
abstract public function constructUrl($path);
public function mkdir($path){
public function mkdir($path) {
return mkdir($this->constructUrl($path));
}
public function rmdir($path){
if($this->file_exists($path)){
public function rmdir($path) {
if($this->file_exists($path)) {
$succes=rmdir($this->constructUrl($path));
clearstatcache();
return $succes;
@ -24,42 +24,42 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
}
public function opendir($path){
public function opendir($path) {
return opendir($this->constructUrl($path));
}
public function filetype($path){
public function filetype($path) {
return filetype($this->constructUrl($path));
}
public function isReadable($path){
public function isReadable($path) {
return true;//not properly supported
}
public function isUpdatable($path){
public function isUpdatable($path) {
return true;//not properly supported
}
public function file_exists($path){
public function file_exists($path) {
return file_exists($this->constructUrl($path));
}
public function unlink($path){
public function unlink($path) {
$succes=unlink($this->constructUrl($path));
clearstatcache();
return $succes;
}
public function fopen($path,$mode){
public function fopen($path,$mode) {
return fopen($this->constructUrl($path),$mode);
}
public function free_space($path){
public function free_space($path) {
return 0;
}
public function touch($path,$mtime=null){
if(is_null($mtime)){
public function touch($path,$mtime=null) {
if(is_null($mtime)) {
$fh=$this->fopen($path,'a');
fwrite($fh,'');
fclose($fh);
@ -68,19 +68,19 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
}
}
public function getFile($path,$target){
public function getFile($path,$target) {
return copy($this->constructUrl($path),$target);
}
public function uploadFile($path,$target){
public function uploadFile($path,$target) {
return copy($path,$this->constructUrl($target));
}
public function rename($path1,$path2){
public function rename($path1,$path2) {
return rename($this->constructUrl($path1),$this->constructUrl($path2));
}
public function stat($path){
public function stat($path) {
return stat($this->constructUrl($path));
}

View File

@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
require_once('php-cloudfiles/cloudfiles.php');
require_once 'php-cloudfiles/cloudfiles.php';
class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
private $host;
@ -38,7 +38,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return string
*/
private function getContainerName($path){
private function getContainerName($path) {
$path=trim($this->root.$path,'/');
return str_replace('/','\\',$path);
}
@ -48,18 +48,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return CF_Container
*/
private function getContainer($path){
if($path=='' or $path=='/'){
private function getContainer($path) {
if($path=='' or $path=='/') {
return $this->rootContainer;
}
if(isset($this->containers[$path])){
if(isset($this->containers[$path])) {
return $this->containers[$path];
}
try{
$container=$this->conn->get_container($this->getContainerName($path));
$this->containers[$path]=$container;
return $container;
}catch(NoSuchContainerException $e){
}catch(NoSuchContainerException $e) {
return null;
}
}
@ -69,15 +69,15 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return CF_Container
*/
private function createContainer($path){
if($path=='' or $path=='/'){
private function createContainer($path) {
if($path=='' or $path=='/') {
return $this->conn->create_container($this->getContainerName($path));
}
$parent=dirname($path);
if($parent=='' or $parent=='/'){
if($parent=='' or $parent=='/') {
$parentContainer=$this->rootContainer;
}else{
if(!$this->containerExists($parent)){
if(!$this->containerExists($parent)) {
$parentContainer=$this->createContainer($parent);
}else{
$parentContainer=$this->getContainer($parent);
@ -92,19 +92,19 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return CF_Object
*/
private function getObject($path){
if(isset($this->objects[$path])){
private function getObject($path) {
if(isset($this->objects[$path])) {
return $this->objects[$path];
}
$container=$this->getContainer(dirname($path));
if(is_null($container)){
if(is_null($container)) {
return null;
}else{
try{
$obj=$container->get_object(basename($path));
$this->objects[$path]=$obj;
return $obj;
}catch(NoSuchObjectException $e){
}catch(NoSuchObjectException $e) {
return null;
}
}
@ -115,12 +115,12 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param CF_Container
* @return array
*/
private function getObjects($container){
if(is_null($container)){
private function getObjects($container) {
if(is_null($container)) {
return array();
}else{
$files=$container->get_objects();
foreach($files as &$file){
foreach($files as &$file) {
$file=$file->name;
}
return $files;
@ -132,9 +132,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return CF_Object
*/
private function createObject($path){
private function createObject($path) {
$container=$this->getContainer(dirname($path));
if(!is_null($container)){
if(!is_null($container)) {
$container=$this->createContainer($path);
}
return $container->create_object(basename($path));
@ -145,7 +145,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string
* @return bool
*/
private function objectExists($path){
private function objectExists($path) {
return !is_null($this->getObject($path));
}
@ -154,7 +154,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string path
* @return bool
*/
private function containerExists($path){
private function containerExists($path) {
return !is_null($this->getContainer($path));
}
@ -163,18 +163,18 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param CF_Container container
* @return array
*/
private function getSubContainers($container){
private function getSubContainers($container) {
$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);
$containers=file($tmpFile);
unlink($tmpFile);
foreach($containers as &$sub){
foreach($containers as &$sub) {
$sub=trim($sub);
}
return $containers;
@ -186,8 +186,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string name
* @return bool
*/
private function addSubContainer($container,$name){
if(!$name){
private function addSubContainer($container,$name) {
if(!$name) {
return false;
}
$tmpFile=OCP\Files::tmpFile();
@ -195,17 +195,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
try{
$obj->save_to_filename($tmpFile);
$containers=file($tmpFile);
foreach($containers as &$sub){
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");
}
}catch(Exception $e){
}catch(Exception $e) {
$containers=array();
file_put_contents($tmpFile,$name."\n");
}
@ -221,8 +221,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param string name
* @return bool
*/
private function removeSubContainer($container,$name){
if(!$name){
private function removeSubContainer($container,$name) {
if(!$name) {
return false;
}
$tmpFile=OCP\Files::tmpFile();
@ -230,14 +230,14 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
try{
$obj->save_to_filename($tmpFile);
$containers=file($tmpFile);
}catch(Exception $e){
}catch(Exception $e) {
return false;
}
foreach($containers as &$sub){
foreach($containers as &$sub) {
$sub=trim($sub);
}
$i=array_search($name,$containers);
if($i===false){
if($i===false) {
unlink($tmpFile);
return false;
}else{
@ -255,29 +255,29 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* @param CF_Container container
* @return CF_Object
*/
private function getSubContainerFile($container){
private function getSubContainerFile($container) {
try{
return $container->get_object(self::SUBCONTAINER_FILE);
}catch(NoSuchObjectException $e){
}catch(NoSuchObjectException $e) {
return $container->create_object(self::SUBCONTAINER_FILE);
}
}
public function __construct($params){
public function __construct($params) {
$this->token=$params['token'];
$this->host=$params['host'];
$this->user=$params['user'];
$this->root=isset($params['root'])?$params['root']:'/';
$this->secure=isset($params['secure'])?(bool)$params['secure']:true;
if(!$this->root || $this->root[0]!='/'){
if(!$this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
$this->auth = new CF_Authentication($this->user, $this->token, null, $this->host);
$this->auth->authenticate();
$this->conn = new CF_Connection($this->auth);
if(!$this->containerExists($this->root)){
if(!$this->containerExists($this->root)) {
$this->rootContainer=$this->createContainer('/');
}else{
$this->rootContainer=$this->getContainer('/');
@ -285,8 +285,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
public function mkdir($path){
if($this->containerExists($path)){
public function mkdir($path) {
if($this->containerExists($path)) {
return false;
}else{
$this->createContainer($path);
@ -294,30 +294,30 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
public function rmdir($path){
if(!$this->containerExists($path)){
public function rmdir($path) {
if(!$this->containerExists($path)) {
return false;
}else{
$this->emptyContainer($path);
if($path!='' and $path!='/'){
if($path!='' and $path!='/') {
$parentContainer=$this->getContainer(dirname($path));
$this->removeSubContainer($parentContainer,basename($path));
}
$this->conn->delete_container($this->getContainerName($path));
unset($this->containers[$path]);
return true;
}
}
private function emptyContainer($path){
private function emptyContainer($path) {
$container=$this->getContainer($path);
if(is_null($container)){
if(is_null($container)) {
return;
}
$subContainers=$this->getSubContainers($container);
foreach($subContainers as $sub){
if($sub){
foreach($subContainers as $sub) {
if($sub) {
$this->emptyContainer($path.'/'.$sub);
$this->conn->delete_container($this->getContainerName($path.'/'.$sub));
unset($this->containers[$path.'/'.$sub]);
@ -325,17 +325,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
$objects=$this->getObjects($container);
foreach($objects as $object){
foreach($objects as $object) {
$container->delete_object($object);
unset($this->objects[$path.'/'.$object]);
}
}
public function opendir($path){
public function opendir($path) {
$container=$this->getContainer($path);
$files=$this->getObjects($container);
$i=array_search(self::SUBCONTAINER_FILE,$files);
if($i!==false){
if($i!==false) {
unset($files[$i]);
}
$subContainers=$this->getSubContainers($container);
@ -345,43 +345,43 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
return opendir('fakedir://'.$id);
}
public function filetype($path){
if($this->containerExists($path)){
public function filetype($path) {
if($this->containerExists($path)) {
return 'dir';
}else{
return 'file';
}
}
public function isReadable($path){
public function isReadable($path) {
return true;
}
public function isUpdatable($path){
public function isUpdatable($path) {
return true;
}
public function file_exists($path){
if($this->is_dir($path)){
public function file_exists($path) {
if($this->is_dir($path)) {
return true;
}else{
return $this->objectExists($path);
}
}
public function file_get_contents($path){
public function file_get_contents($path) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
return false;
}
return $obj->read();
}
public function file_put_contents($path,$content){
public function file_put_contents($path,$content) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
$container=$this->getContainer(dirname($path));
if(is_null($container)){
if(is_null($container)) {
return false;
}
$obj=$container->create_object(basename($path));
@ -390,8 +390,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
return $obj->write($content);
}
public function unlink($path){
if($this->objectExists($path)){
public function unlink($path) {
if($this->objectExists($path)) {
$container=$this->getContainer(dirname($path));
$container->delete_object(basename($path));
unset($this->objects[$path]);
@ -400,17 +400,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
public function fopen($path,$mode){
public function fopen($path,$mode) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
return false;
}
switch($mode){
switch($mode) {
case 'r':
case 'rb':
$fp = fopen('php://temp', 'r+');
$obj->stream($fp);
rewind($fp);
return $fp;
case 'w':
@ -432,61 +432,61 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
public function writeBack($tmpFile){
if(isset(self::$tempFiles[$tmpFile])){
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
$this->fromTmpFile($tmpFile,self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}
}
public function free_space($path){
public function free_space($path) {
return 0;
}
public function touch($path,$mtime=null){
public function touch($path,$mtime=null) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
return false;
}
if(is_null($mtime)){
if(is_null($mtime)) {
$mtime=time();
}
//emulate setting mtime with metadata
$obj->metadata['Mtime']=$mtime;
$obj->sync_metadata();
}
public function rename($path1,$path2){
public function rename($path1,$path2) {
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2));
unset($this->objects[$path1]);
if($result){
if($result) {
$targetObj=$this->getObject($path2);
$this->resetMTime($targetObj);
}
return $result;
}
public function copy($path1,$path2){
public function copy($path1,$path2) {
$sourceContainer=$this->getContainer(dirname($path1));
$targetContainer=$this->getContainer(dirname($path2));
$result=$sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2));
if($result){
if($result) {
$targetObj=$this->getObject($path2);
$this->resetMTime($targetObj);
}
return $result;
}
public function stat($path){
public function stat($path) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
return false;
}
if(isset($obj->metadata['Mtime']) and $obj->metadata['Mtime']>-1){
if(isset($obj->metadata['Mtime']) and $obj->metadata['Mtime']>-1) {
$mtime=$obj->metadata['Mtime'];
}else{
$mtime=strtotime($obj->last_modified);
@ -498,9 +498,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
);
}
private function getTmpFile($path){
private function getTmpFile($path) {
$obj=$this->getObject($path);
if(!is_null($obj)){
if(!is_null($obj)) {
$tmpFile=OCP\Files::tmpFile();
$obj->save_to_filename($tmpFile);
return $tmpFile;
@ -509,9 +509,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
private function fromTmpFile($tmpFile,$path){
private function fromTmpFile($tmpFile,$path) {
$obj=$this->getObject($path);
if(is_null($obj)){
if(is_null($obj)) {
$obj=$this->createObject($path);
}
$obj->load_from_filename($tmpFile);
@ -522,8 +522,8 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
* remove custom mtime metadata
* @param CF_Object obj
*/
private function resetMTime($obj){
if(isset($obj->metadata['Mtime'])){
private function resetMTime($obj) {
if(isset($obj->metadata['Mtime'])) {
$obj->metadata['Mtime']=-1;
$obj->sync_metadata();
}

View File

@ -18,8 +18,8 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
private $client;
private static $tempFiles=array();
public function __construct($params){
public function __construct($params) {
$host = $params['host'];
//remove leading http[s], will be generated in createBaseUri()
if (substr($host,0,8) == "https://") $host = substr($host, 8);
@ -29,13 +29,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$this->password=$params['password'];
$this->secure=(isset($params['secure']) && $params['secure'] == 'true')?true:false;
$this->root=isset($params['root'])?$params['root']:'/';
if(!$this->root || $this->root[0]!='/'){
if(!$this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
if(substr($this->root,-1,1)!='/'){
if(substr($this->root,-1,1)!='/') {
$this->root.='/';
}
$settings = array(
'baseUri' => $this->createBaseUri(),
'userName' => $this->user,
@ -43,7 +43,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
);
$this->client = new OC_Connector_Sabre_Client($settings);
if($caview = \OCP\Files::getStorage('files_external')) {
$certPath=\OCP\Config::getSystemValue('datadirectory').$caview->getAbsolutePath("").'rootcerts.crt';
if (file_exists($certPath)) {
@ -54,26 +54,26 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$this->mkdir('');
}
private function createBaseUri(){
private function createBaseUri() {
$baseUri='http';
if($this->secure){
if($this->secure) {
$baseUri.='s';
}
$baseUri.='://'.$this->host.$this->root;
return $baseUri;
}
public function mkdir($path){
public function mkdir($path) {
$path=$this->cleanPath($path);
return $this->simpleResponse('MKCOL',$path,null,201);
}
public function rmdir($path){
public function rmdir($path) {
$path=$this->cleanPath($path);
return $this->simpleResponse('DELETE',$path,null,204);
}
public function opendir($path){
public function opendir($path) {
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array(),1);
@ -81,54 +81,54 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
OC_FakeDirStream::$dirs[$id]=array();
$files=array_keys($response);
array_shift($files);//the first entry is the current directory
foreach($files as $file){
foreach($files as $file) {
$file = urldecode(basename($file));
OC_FakeDirStream::$dirs[$id][]=$file;
}
return opendir('fakedir://'.$id);
}catch(Exception $e){
}catch(Exception $e) {
return false;
}
}
public function filetype($path){
public function filetype($path) {
$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;
}
}
public function isReadable($path){
public function isReadable($path) {
return true;//not properly supported
}
public function isUpdatable($path){
public function isUpdatable($path) {
return true;//not properly supported
}
public function file_exists($path){
public function file_exists($path) {
$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){
public function unlink($path) {
return $this->simpleResponse('DELETE',$path,null,204);
}
public function fopen($path,$mode){
public function fopen($path,$mode) {
$path=$this->cleanPath($path);
switch($mode){
switch($mode) {
case 'r':
case 'rb':
//straight up curl instead of sabredav here, sabredav put's the entire get result in memory
@ -155,14 +155,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
case 'c':
case 'c+':
//emulate these
if(strrpos($path,'.')!==false){
if(strrpos($path,'.')!==false) {
$ext=substr($path,strrpos($path,'.'));
}else{
$ext='';
}
$tmpFile=OCP\Files::tmpFile($ext);
OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack');
if($this->file_exists($path)){
if($this->file_exists($path)) {
$this->getFile($path,$tmpFile);
}
self::$tempFiles[$tmpFile]=$path;
@ -170,41 +170,41 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
}
public function writeBack($tmpFile){
if(isset(self::$tempFiles[$tmpFile])){
public function writeBack($tmpFile) {
if(isset(self::$tempFiles[$tmpFile])) {
$this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]);
unlink($tmpFile);
}
}
public function free_space($path){
public function free_space($path) {
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array('{DAV:}quota-available-bytes'));
if(isset($response['{DAV:}quota-available-bytes'])){
if(isset($response['{DAV:}quota-available-bytes'])) {
return (int)$response['{DAV:}quota-available-bytes'];
}else{
return 0;
}
}catch(Exception $e){
}catch(Exception $e) {
return 0;
}
}
public function touch($path,$mtime=null){
if(is_null($mtime)){
public function touch($path,$mtime=null) {
if(is_null($mtime)) {
$mtime=time();
}
$path=$this->cleanPath($path);
$this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
}
public function getFile($path,$target){
public function getFile($path,$target) {
$source=$this->fopen($path,'r');
file_put_contents($target,$source);
}
public function uploadFile($path,$target){
public function uploadFile($path,$target) {
$source=fopen($path,'r');
$curl = curl_init();
@ -218,13 +218,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
curl_close ($curl);
}
public function rename($path1,$path2){
public function rename($path1,$path2) {
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try{
$response=$this->client->request('MOVE',$path1,null,array('Destination'=>$path2));
return true;
}catch(Exception $e){
}catch(Exception $e) {
echo $e;
echo 'fail';
var_dump($response);
@ -232,13 +232,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
}
public function copy($path1,$path2){
public function copy($path1,$path2) {
$path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2);
try{
$response=$this->client->request('COPY',$path1,null,array('Destination'=>$path2));
return true;
}catch(Exception $e){
}catch(Exception $e) {
echo $e;
echo 'fail';
var_dump($response);
@ -246,7 +246,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
}
}
public function stat($path){
public function stat($path) {
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array('{DAV:}getlastmodified','{DAV:}getcontentlength'));
@ -255,45 +255,44 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
'ctime'=>-1,
);
}catch(Exception $e){
}catch(Exception $e) {
return array();
}
}
public function getMimeType($path){
public function getMimeType($path) {
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array('{DAV:}getcontenttype','{DAV:}resourcetype'));
$responseType=$response["{DAV:}resourcetype"]->resourceType;
$type=(count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file';
if($type=='dir'){
if($type=='dir') {
return 'httpd/unix-directory';
}elseif(isset($response['{DAV:}getcontenttype'])){
}elseif(isset($response['{DAV:}getcontenttype'])) {
return $response['{DAV:}getcontenttype'];
}else{
return false;
}
}catch(Exception $e){
}catch(Exception $e) {
return false;
}
}
private function cleanPath($path){
if(!$path || $path[0]=='/'){
private function cleanPath($path) {
if(!$path || $path[0]=='/') {
return substr($path,1);
}else{
return $path;
}
}
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;
}
}
}

Some files were not shown because too many files have changed in this diff Show More