зеркало из https://github.com/nextcloud/server.git
Merge branch 'master' into share_expiration
Conflicts: core/js/share.js lib/util.php
This commit is contained in:
Коммит
60feaf9abf
|
@ -19,10 +19,12 @@ _darcs/*
|
|||
CVS/*
|
||||
.svn/*
|
||||
RCS/*
|
||||
*.backup*
|
||||
|
||||
# kdevelop
|
||||
.kdev
|
||||
*.kdev4
|
||||
*.kate-swp
|
||||
|
||||
# Lokalize
|
||||
*lokalize*
|
||||
|
|
182
.tx/config
182
.tx/config
|
@ -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
|
3
AUTHORS
3
AUTHORS
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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" )));
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -3,4 +3,3 @@
|
|||
// see lib/base.php for an example
|
||||
//session_start();
|
||||
$_SESSION['timezone'] = $_GET['time'];
|
||||
|
|
@ -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';
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
|
@ -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(/</, '<').replace(/>/, '>')+'/'+name+'"><span class="nametext">'+basename
|
||||
html+='<a class="name" href="download.php?file='+$('#dir').val().replace(/</, '<').replace(/>/, '>')+'/'+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 (){
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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í"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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بایت دارد",
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ű",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "フォルダ",
|
||||
|
|
|
@ -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." => "업로드 취소.",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "Папка",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "แฟ้มเอกสาร",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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" => "文件夹",
|
||||
|
|
|
@ -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" => "檔案處理",
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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;?>
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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');
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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í"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
|
@ -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"
|
||||
);
|
|
@ -0,0 +1,6 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Encryption" => "加密",
|
||||
"Exclude the following file types from encryption" => "从加密中排除列出的文件类型",
|
||||
"None" => "None",
|
||||
"Enable Encryption" => "开启加密"
|
||||
);
|
|
@ -0,0 +1,6 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Encryption" => "加密",
|
||||
"Exclude the following file types from encryption" => "下列的檔案類型不加密",
|
||||
"None" => "無",
|
||||
"Enable Encryption" => "啟用加密"
|
||||
);
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
?>
|
|
@ -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.')));
|
||||
}
|
||||
|
||||
?>
|
|
@ -47,5 +47,3 @@ if (isset($_POST['step'])) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -9,4 +9,3 @@ $cert = $_POST['cert'];
|
|||
$file = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/'.$cert;
|
||||
unlink($file);
|
||||
OC_Mount_Config::createCertificateBundle();
|
||||
?>
|
|
@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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() {
|
|||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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šť"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ä"
|
||||
);
|
||||
|
|
|
@ -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" => "יאפשר למשתמשים לעגן את האחסון החיצוני שלהם"
|
||||
);
|
|
@ -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"
|
||||
);
|
||||
|
|
|
@ -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"
|
||||
);
|
|
@ -0,0 +1,5 @@
|
|||
<?php $TRANSLATIONS = array(
|
||||
"Groups" => "Групи",
|
||||
"Users" => "Користувачі",
|
||||
"Delete" => "Видалити"
|
||||
);
|
|
@ -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ọ"
|
||||
);
|
|
@ -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 {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -251,5 +251,3 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче