aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
authorGeorg Ehrke <dev@georgswebsite.de>2012-04-18 17:27:34 +0200
committerGeorg Ehrke <dev@georgswebsite.de>2012-04-18 17:27:34 +0200
commit45de7ad221f9e505abdabcc5084dd12c80851469 (patch)
tree9afe2994fe01d35cf7aa2e16389c04bb3e298faf /apps/files
parentdfc92675e0d76ad9550a274b712e084e1738831c (diff)
downloadnextcloud-server-45de7ad221f9e505abdabcc5084dd12c80851469.tar.gz
nextcloud-server-45de7ad221f9e505abdabcc5084dd12c80851469.zip
move files to app folder
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/admin.php60
-rw-r--r--apps/files/ajax/autocomplete.php56
-rw-r--r--apps/files/ajax/delete.php29
-rw-r--r--apps/files/ajax/download.php37
-rw-r--r--apps/files/ajax/list.php46
-rw-r--r--apps/files/ajax/mimeicon.php11
-rw-r--r--apps/files/ajax/move.php20
-rw-r--r--apps/files/ajax/newfile.php47
-rw-r--r--apps/files/ajax/newfolder.php22
-rw-r--r--apps/files/ajax/rawlist.php26
-rw-r--r--apps/files/ajax/rename.php21
-rw-r--r--apps/files/ajax/scan.php38
-rw-r--r--apps/files/ajax/timezone.php6
-rw-r--r--apps/files/ajax/upload.php64
-rw-r--r--apps/files/appinfo/app.php10
-rw-r--r--apps/files/css/files.css87
-rw-r--r--apps/files/download.php49
-rw-r--r--apps/files/index.php104
-rw-r--r--apps/files/js/admin.js23
-rw-r--r--apps/files/js/fileactions.js154
-rw-r--r--apps/files/js/filelist.js232
-rw-r--r--apps/files/js/files.js591
-rw-r--r--apps/files/js/timezone.js12
-rw-r--r--apps/files/l10n/ar.php23
-rw-r--r--apps/files/l10n/bg_BG.php19
-rw-r--r--apps/files/l10n/ca.php23
-rw-r--r--apps/files/l10n/cs_CZ.php23
-rw-r--r--apps/files/l10n/da.php23
-rw-r--r--apps/files/l10n/de.php23
-rw-r--r--apps/files/l10n/el.php23
-rw-r--r--apps/files/l10n/eo.php19
-rw-r--r--apps/files/l10n/es.php23
-rw-r--r--apps/files/l10n/et_EE.php23
-rw-r--r--apps/files/l10n/eu.php19
-rw-r--r--apps/files/l10n/fr.php23
-rw-r--r--apps/files/l10n/gl.php23
-rw-r--r--apps/files/l10n/he.php19
-rw-r--r--apps/files/l10n/hr.php19
-rw-r--r--apps/files/l10n/hu_HU.php19
-rw-r--r--apps/files/l10n/ia.php17
-rw-r--r--apps/files/l10n/id.php13
-rw-r--r--apps/files/l10n/it.php23
-rw-r--r--apps/files/l10n/ja_JP.php23
-rw-r--r--apps/files/l10n/lb.php19
-rw-r--r--apps/files/l10n/lt_LT.php19
-rw-r--r--apps/files/l10n/ms_MY.php13
-rw-r--r--apps/files/l10n/nb_NO.php13
-rw-r--r--apps/files/l10n/nl.php23
-rw-r--r--apps/files/l10n/nn_NO.php19
-rw-r--r--apps/files/l10n/pl.php23
-rw-r--r--apps/files/l10n/pt_BR.php19
-rw-r--r--apps/files/l10n/ro.php23
-rw-r--r--apps/files/l10n/ru.php23
-rw-r--r--apps/files/l10n/sk_SK.php23
-rw-r--r--apps/files/l10n/sl.php19
-rw-r--r--apps/files/l10n/sr.php23
-rw-r--r--apps/files/l10n/sr@latin.php19
-rw-r--r--apps/files/l10n/sv.php19
-rw-r--r--apps/files/l10n/th_TH.php23
-rw-r--r--apps/files/l10n/tr.php19
-rw-r--r--apps/files/l10n/xgettextfiles5
-rw-r--r--apps/files/l10n/zh_CN.php23
-rw-r--r--apps/files/settings.php60
-rw-r--r--apps/files/templates/admin.php15
-rw-r--r--apps/files/templates/index.php74
-rw-r--r--apps/files/templates/part.breadcrumb.php6
-rw-r--r--apps/files/templates/part.list.php29
-rw-r--r--apps/files/webdav.php51
68 files changed, 2767 insertions, 0 deletions
diff --git a/apps/files/admin.php b/apps/files/admin.php
new file mode 100644
index 00000000000..4ae3ee51236
--- /dev/null
+++ b/apps/files/admin.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.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/>.
+*
+*/
+
+
+// Init owncloud
+require_once('../lib/base.php');
+
+OC_Util::checkAdminUser();
+
+$htaccessWorking=(getenv('htaccessWorking')=='true');
+
+$upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'));
+$post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
+$maxUploadFilesize = OC_Helper::humanFileSize(min($upload_max_filesize, $post_max_size));
+if($_POST) {
+ if(isset($_POST['maxUploadSize'])){
+ if(($setMaxSize = OC_Files::setUploadLimit(OC_Helper::computerFileSize($_POST['maxUploadSize']))) !== false) {
+ $maxUploadFilesize = OC_Helper::humanFileSize($setMaxSize);
+ }
+ }
+ if(isset($_POST['maxZipInputSize'])) {
+ $maxZipInputSize=$_POST['maxZipInputSize'];
+ OC_Config::setValue('maxZipInputSize', OC_Helper::computerFileSize($maxZipInputSize));
+ }
+ if(isset($_POST['submitFilesAdminSettings'])) {
+ OC_Config::setValue('allowZipDownload', isset($_POST['allowZipDownload']));
+ }
+}
+$maxZipInputSize = OC_Helper::humanFileSize(OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB')));
+$allowZipDownload = intval(OC_Config::getValue('allowZipDownload', true));
+
+OC_App::setActiveNavigationEntry( "files_administration" );
+
+$tmpl = new OC_Template( 'files', 'admin' );
+$tmpl->assign( 'htaccessWorking', $htaccessWorking );
+$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
+$tmpl->assign( 'maxPossibleUploadSize', OC_Helper::humanFileSize(PHP_INT_MAX));
+$tmpl->assign( 'allowZipDownload', $allowZipDownload);
+$tmpl->assign( 'maxZipInputSize', $maxZipInputSize);
+return $tmpl->fetchPage(); \ No newline at end of file
diff --git a/apps/files/ajax/autocomplete.php b/apps/files/ajax/autocomplete.php
new file mode 100644
index 00000000000..8cdb6188a02
--- /dev/null
+++ b/apps/files/ajax/autocomplete.php
@@ -0,0 +1,56 @@
+<?php
+//provide auto completion of paths for use with jquer ui autocomplete
+
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get data
+$query = $_GET['term'];
+$dirOnly=(isset($_GET['dironly']))?($_GET['dironly']=='true'):false;
+
+if($query[0]!='/'){
+ $query='/'.$query;
+}
+
+if(substr($query,-1,1)=='/'){
+ $base=$query;
+}else{
+ $base=dirname($query);
+}
+
+$query=substr($query,strlen($base));
+
+if($base!='/'){
+ $query=substr($query,1);
+}
+$queryLen=strlen($query);
+$query=strtolower($query);
+
+// echo "$base - $query";
+
+$files=array();
+
+if(OC_Filesystem::file_exists($base) and OC_Filesystem::is_dir($base)){
+ $dh = OC_Filesystem::opendir($base);
+ if($dh){
+ if(substr($base,-1,1)!='/'){
+ $base=$base.'/';
+ }
+ while (($file = readdir($dh)) !== false) {
+ if ($file != "." && $file != ".."){
+ if(substr(strtolower($file),0,$queryLen)==$query){
+ $item=$base.$file;
+ if((!$dirOnly or OC_Filesystem::is_dir($item))){
+ $files[]=(object)array('id'=>$item,'label'=>$item,'name'=>$item);
+ }
+ }
+ }
+ }
+ }
+}
+OC_JSON::encodedPrint($files);
+
+?>
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
new file mode 100644
index 00000000000..d8a01d7acf1
--- /dev/null
+++ b/apps/files/ajax/delete.php
@@ -0,0 +1,29 @@
+<?php
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get data
+$dir = stripslashes($_GET["dir"]);
+$files = isset($_GET["file"]) ? stripslashes($_GET["file"]) : stripslashes($_GET["files"]);
+
+$files = explode(';', $files);
+$filesWithError = '';
+$success = true;
+//Now delete
+foreach($files as $file) {
+ if( !OC_Files::delete( $dir, $file )){
+ $filesWithError .= $file . "\n";
+ $success = false;
+ }
+}
+
+if($success) {
+ OC_JSON::success(array("data" => array( "dir" => $dir, "files" => $files )));
+} else {
+ OC_JSON::error(array("data" => array( "message" => "Could not delete:\n" . $filesWithError )));
+}
+
+?>
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
new file mode 100644
index 00000000000..65c04c36faf
--- /dev/null
+++ b/apps/files/ajax/download.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.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/>.
+*
+*/
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
+// Init owncloud
+
+
+// Check if we are a user
+OC_Util::checkLoggedIn();
+
+$files = $_GET["files"];
+$dir = $_GET["dir"];
+
+OC_Files::get($dir,$files);
+?>
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
new file mode 100644
index 00000000000..83914332a7d
--- /dev/null
+++ b/apps/files/ajax/list.php
@@ -0,0 +1,46 @@
+<?php
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Load the files
+$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+$doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false;
+$data = array();
+
+// Make breadcrumb
+if($doBreadcrumb){
+ $breadcrumb = array();
+ $pathtohere = "/";
+ foreach( explode( "/", $dir ) as $i ){
+ if( $i != "" ){
+ $pathtohere .= "$i/";
+ $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
+ }
+ }
+
+ $breadcrumbNav = new OC_Template( "files", "part.breadcrumb", "" );
+ $breadcrumbNav->assign( "breadcrumb", $breadcrumb );
+
+ $data['breadcrumb'] = $breadcrumbNav->fetchPage();
+}
+
+// make filelist
+$files = array();
+foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
+ $i["date"] = OC_Util::formatDate($i["mtime"] );
+ $files[] = $i;
+}
+
+$list = new OC_Template( "files", "part.list", "" );
+$list->assign( "files", $files );
+$data = array('files' => $list->fetchPage());
+
+OC_JSON::success(array('data' => $data));
+
+?>
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
new file mode 100644
index 00000000000..57898cd82d9
--- /dev/null
+++ b/apps/files/ajax/mimeicon.php
@@ -0,0 +1,11 @@
+<?php
+
+// no need for apps
+$RUNTIME_NOAPPS=false;
+
+// Init owncloud
+
+
+print OC_Helper::mimetypeIcon($_GET['mime']);
+
+?>
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
new file mode 100644
index 00000000000..0ad314f873c
--- /dev/null
+++ b/apps/files/ajax/move.php
@@ -0,0 +1,20 @@
+<?php
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get data
+$dir = stripslashes($_GET["dir"]);
+$file = stripslashes($_GET["file"]);
+$target = stripslashes($_GET["target"]);
+
+
+if(OC_Files::move($dir,$file,$target,$file)){
+ OC_JSON::success(array("data" => array( "dir" => $dir, "files" => $file )));
+}else{
+ OC_JSON::error(array("data" => array( "message" => "Could not move $file" )));
+}
+
+?>
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
new file mode 100644
index 00000000000..472b577a32a
--- /dev/null
+++ b/apps/files/ajax/newfile.php
@@ -0,0 +1,47 @@
+<?php
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get the params
+$dir = isset( $_POST['dir'] ) ? stripslashes($_POST['dir']) : '';
+$filename = isset( $_POST['filename'] ) ? stripslashes($_POST['filename']) : '';
+$content = isset( $_POST['content'] ) ? $_POST['content'] : '';
+$source = isset( $_POST['source'] ) ? stripslashes($_POST['source']) : '';
+
+if($filename == '') {
+ OC_JSON::error(array("data" => array( "message" => "Empty Filename" )));
+ exit();
+}
+
+if($source){
+ if(substr($source,0,8)!='https://' and substr($source,0,7)!='http://'){
+ OC_JSON::error(array("data" => array( "message" => "Not a valid source" )));
+ exit();
+ }
+ $sourceStream=fopen($source,'rb');
+ $target=$dir.'/'.$filename;
+ $result=OC_Filesystem::file_put_contents($target,$sourceStream);
+ if($result){
+ $mime=OC_Filesystem::getMimetype($target);
+ OC_JSON::success(array("data" => array('mime'=>$mime)));
+ exit();
+ }else{
+ OC_JSON::error(array("data" => array( "message" => "Error while downloading ".$source. ' to '.$target )));
+ exit();
+ }
+}
+
+
+if(OC_Files::newFile($dir, $filename, 'file')) {
+ if($content){
+ OC_Filesystem::file_put_contents($dir.'/'.$filename,$content);
+ }
+ OC_JSON::success(array("data" => array('content'=>$content)));
+ exit();
+}
+
+
+OC_JSON::error(array("data" => array( "message" => "Error when creating the file" )));
diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php
new file mode 100644
index 00000000000..2aff95e5b35
--- /dev/null
+++ b/apps/files/ajax/newfolder.php
@@ -0,0 +1,22 @@
+<?php
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get the params
+$dir = isset( $_POST['dir'] ) ? stripslashes($_POST['dir']) : '';
+$foldername = isset( $_POST['foldername'] ) ? stripslashes($_POST['foldername']) : '';
+
+if(trim($foldername) == '') {
+ OC_JSON::error(array("data" => array( "message" => "Empty Foldername" )));
+ exit();
+}
+
+if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) {
+ OC_JSON::success(array("data" => array()));
+ exit();
+}
+
+OC_JSON::error(array("data" => array( "message" => "Error when creating the folder" )));
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
new file mode 100644
index 00000000000..8f1990d1b8f
--- /dev/null
+++ b/apps/files/ajax/rawlist.php
@@ -0,0 +1,26 @@
+<?php
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
+// Init owncloud
+
+require_once('../../lib/template.php');
+
+OC_JSON::checkLoggedIn();
+
+// Load the files
+$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+$mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
+
+// make filelist
+$files = array();
+foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ){
+ $i["date"] = OC_Util::formatDate($i["mtime"] );
+ $i['mimetype_icon'] = $i['type'] == 'dir' ? mimetype_icon('dir'): mimetype_icon($i['mimetype']);
+ $files[] = $i;
+}
+
+OC_JSON::success(array('data' => $files));
+
+?>
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
new file mode 100644
index 00000000000..dc5d3962abd
--- /dev/null
+++ b/apps/files/ajax/rename.php
@@ -0,0 +1,21 @@
+<?php
+
+// Init owncloud
+
+
+OC_JSON::checkLoggedIn();
+
+// Get data
+$dir = stripslashes($_GET["dir"]);
+$file = stripslashes($_GET["file"]);
+$newname = stripslashes($_GET["newname"]);
+
+// Delete
+if( OC_Files::move( $dir, $file, $dir, $newname )) {
+ OC_JSON::success(array("data" => array( "dir" => $dir, "file" => $file, "newname" => $newname )));
+}
+else{
+ OC_JSON::error(array("data" => array( "message" => "Unable to rename file" )));
+}
+
+?>
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
new file mode 100644
index 00000000000..db09b7d5c64
--- /dev/null
+++ b/apps/files/ajax/scan.php
@@ -0,0 +1,38 @@
+<?php
+
+require_once '../../lib/base.php';
+
+set_time_limit(0);//scanning can take ages
+
+$force=isset($_GET['force']) and $_GET['force']=='true';
+$checkOnly=isset($_GET['checkonly']) and $_GET['checkonly']=='true';
+
+if(!$checkOnly){
+ $eventSource=new OC_EventSource();
+}
+
+
+//create the file cache if necesary
+if($force or !OC_FileCache::inCache('')){
+ if(!$checkOnly){
+ OC_DB::beginTransaction();
+ OC_FileCache::scan('',$eventSource);
+ OC_FileCache::clean();
+ OC_DB::commit();
+ $eventSource->send('success',true);
+ }else{
+ OC_JSON::success(array('data'=>array('done'=>true)));
+ exit;
+ }
+}else{
+ if($checkOnly){
+ OC_JSON::success(array('data'=>array('done'=>false)));
+ exit;
+ }
+ if(isset($eventSource)){
+ $eventSource->send('success',false);
+ }else{
+ exit;
+ }
+}
+$eventSource->close(); \ No newline at end of file
diff --git a/apps/files/ajax/timezone.php b/apps/files/ajax/timezone.php
new file mode 100644
index 00000000000..8e1d2aa1ec1
--- /dev/null
+++ b/apps/files/ajax/timezone.php
@@ -0,0 +1,6 @@
+<?php
+ // FIXME: this should start a secure session if forcessl is enabled
+ // see lib/base.php for an example
+ session_start();
+ $_SESSION['timezone'] = $_GET['time'];
+?>
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
new file mode 100644
index 00000000000..c60e1a3752a
--- /dev/null
+++ b/apps/files/ajax/upload.php
@@ -0,0 +1,64 @@
+<?php
+
+// Init owncloud
+
+
+// Firefox and Konqueror tries to download application/json for me. --Arthur
+OC_JSON::setContentTypeHeader('text/plain');
+
+OC_JSON::checkLoggedIn();
+
+if (!isset($_FILES['files'])) {
+ OC_JSON::error(array("data" => array( "message" => "No file was uploaded. Unknown error" )));
+ exit();
+}
+foreach ($_FILES['files']['error'] as $error) {
+ if ($error != 0) {
+ $l=OC_L10N::get('files');
+ $errors = array(
+ UPLOAD_ERR_OK=>$l->t("There is no error, the file uploaded with success"),
+ UPLOAD_ERR_INI_SIZE=>$l->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
+ UPLOAD_ERR_FORM_SIZE=>$l->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
+ UPLOAD_ERR_PARTIAL=>$l->t("The uploaded file was only partially uploaded"),
+ UPLOAD_ERR_NO_FILE=>$l->t("No file was uploaded"),
+ UPLOAD_ERR_NO_TMP_DIR=>$l->t("Missing a temporary folder"),
+ UPLOAD_ERR_CANT_WRITE=>$l->t('Failed to write to disk'),
+ );
+ OC_JSON::error(array("data" => array( "message" => $errors[$error] )));
+ exit();
+ }
+}
+$files=$_FILES['files'];
+
+$dir = $_POST['dir'];
+$dir .= '/';
+$error='';
+
+$totalSize=0;
+foreach($files['size'] as $size){
+ $totalSize+=$size;
+}
+if($totalSize>OC_Filesystem::free_space('/')){
+ OC_JSON::error(array("data" => array( "message" => "Not enough space available" )));
+ exit();
+}
+
+$result=array();
+if(strpos($dir,'..') === false){
+ $fileCount=count($files['name']);
+ for($i=0;$i<$fileCount;$i++){
+ $target = OC_Helper::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
+ if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i],$target)){
+ $meta=OC_FileCache::getCached($target);
+ $result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'],'name'=>basename($target));
+ }
+ }
+ OC_JSON::encodedPrint($result);
+ exit();
+}else{
+ $error='invalid dir';
+}
+
+OC_JSON::error(array('data' => array('error' => $error, "file" => $fileName)));
+
+?>
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
new file mode 100644
index 00000000000..c4a2ee7407a
--- /dev/null
+++ b/apps/files/appinfo/app.php
@@ -0,0 +1,10 @@
+<?php
+
+
+$l=OC_L10N::get('files');
+
+OC_App::register( array( "order" => 2, "id" => "files", "name" => "Files" ));
+
+OC_App::addNavigationEntry( array( "id" => "files_index", "order" => 0, "href" => OC_Helper::linkTo( "files", "index.php" ), "icon" => OC_Helper::imagePath( "core", "places/home.svg" ), "name" => $l->t("Files") ));
+
+OC_Search::registerProvider('OC_Search_Provider_File');
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
new file mode 100644
index 00000000000..713adf7b5fd
--- /dev/null
+++ b/apps/files/css/files.css
@@ -0,0 +1,87 @@
+/* Copyright (c) 2011, Jan-Christoph Borchardt
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+
+/* FILE MENU */
+.actions { padding:.3em; float:left; height:2em; }
+.actions input, .actions button, .actions .button { margin:0; }
+#file_menu { right:0; position:absolute; top:0; }
+#file_menu a { display:block; float:left; background-image:none; text-decoration:none; }
+.file_upload_form, #file_newfolder_form { display:inline; float: left; margin-left:0; }
+#fileSelector, #file_upload_submit, #file_newfolder_submit { display:none; }
+.file_upload_wrapper, #file_newfolder_name { background-repeat:no-repeat; background-position:.5em .5em; padding-left:2em; }
+.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:0;}
+.file_upload_wrapper .file_upload_button_wrapper { position:absolute; top:0; left:0; width:100%; height:100%; cursor:pointer; z-index:1000; }
+#new { float:left; border-top-right-radius:0; border-bottom-right-radius:0; margin:0 0 0 1em; border-right:none; z-index:1010; height:1.3em; }
+#new.active { border-bottom-left-radius:0; border-bottom:none; background:#f8f8f8 }
+#new>a{ padding-left:1em; padding-right:1em; }
+#new>ul { display:none; position:fixed; text-align:left; padding:.5em; background:#f8f8f8; margin-top:0.075em; border:1px solid #ddd; min-width:7em; margin-left:-.5em; z-index:-1; }
+#new>ul>li { margin:.3em; padding-left:2em; background-repeat:no-repeat; cursor:pointer; padding-bottom:0.1em }
+#new>ul>li>p { cursor:pointer; }
+#new>ul>li>input { padding:0.3em; margin:-0.3em; }
+
+#file_newfolder_name { background-image:url('../../core/img/places/folder.svg'); font-weight:normal; width:7em; }
+.file_upload_start, .file_upload_filename { font-size:1em; }
+#file_newfolder_submit, #file_upload_submit { width:3em; }
+.file_upload_target { display:none; }
+
+.file_upload_start { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; z-index:1; position:absolute; left:0; top:0; width:100%; cursor:pointer;}
+.file_upload_filename.active { border-bottom-right-radius:0 }
+.file_upload_filename { position: relative; z-index:100; padding-left: 0.8em; padding-right: 0.8em; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; }
+.file_upload_filename img { position: absolute; top: 0.4em; left: 0.4em; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+
+
+.file_upload_form, .file_upload_wrapper, .file_upload_start, .file_upload_filename, #file_upload_submit { cursor:pointer; }
+
+/* FILE TABLE */
+#emptyfolder { position:absolute; margin:10em 0 0 10em; font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0; }
+.emptyfolder #new, .emptyfolder .file_upload_filename { background:#66f866; border:1px solid #5e5; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; }
+table { position:relative; top:37px; width:100%; }
+tbody tr { background-color:#fff; height:2.5em; }
+tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#f8f8f8; }
+tbody tr.selected { background-color:#eee; }
+tbody a { color:#000; }
+span.extension, td.date { color:#999; }
+span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; -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; }
+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; }
+table th.multiselect { background:#ddd; color:#000; font-weight:bold; }
+table th, table td { border-bottom:1px solid #ddd; text-align:left; font-weight:normal; }
+table td { border-bottom:1px solid #eee; font-style:normal; background-position:1em .5em; background-repeat:no-repeat; }
+table th#headerSize, table td.filesize { width:3em; padding:0 1em; text-align:right; }
+table th#headerDate, table td.date { width:11em; padding:0 .1em 0 1em; text-align:left; }
+table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
+table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
+table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
+table td.filename a.name input, table td.filename a.name form { width:100%; cursor:text; }
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 0; }
+table td.filename .nametext, .modified { float:left; padding:.3em 0; }
+table td.filename .nametext { width:70%; overflow:hidden; }
+table td.filename form { float:left; font-size:.85em; }
+table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; }
+table thead.fixed { height:2em; }
+#fileList tr td.filename>input[type=checkbox]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; }
+#fileList tr td.filename>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
+#fileList tr td.filename>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+#fileList tr td.filename { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; }
+#select_all { float:left; margin:.3em 0.6em 0 .5em; }
+#uploadsize-message,#delete-confirm { display:none; }
+.fileactions { position:relative; top:.3em; right:-4em; font-size:.8em; }
+#fileList .fileactions a.action img { position:relative; top:.2em; }
+#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
+a.action.delete { float:right; }
+a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
+.selectedActions { display:none; float:right; }
+.selectedActions a { display:inline; margin:-.5em 0; padding:.5em !important; }
+.selectedActions a img { position:relative; top:.3em; }
+
+/* add breadcrumb divider to the File item in navigation panel */
+#navigation>ul>li:first-child { background:url('../../core/img/breadcrumb-start.svg') no-repeat 12.5em 0px; width:12.5em; padding-right:1em; position:fixed; }
+#navigation>ul>li:first-child+li { padding-top:2.9em; }
+
+#scanning-message{ top:40%; left:40%; position:absolute; display:none }
diff --git a/apps/files/download.php b/apps/files/download.php
new file mode 100644
index 00000000000..d1f5ba486d7
--- /dev/null
+++ b/apps/files/download.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.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/>.
+*
+*/
+
+// Init owncloud
+require_once('../lib/base.php');
+
+// Check if we are a user
+OC_Util::checkLoggedIn();
+
+$filename = $_GET["file"];
+
+if(!OC_Filesystem::file_exists($filename)){
+ header("HTTP/1.0 404 Not Found");
+ $tmpl = new OC_Template( '', '404', 'guest' );
+ $tmpl->assign('file',$filename);
+ $tmpl->printPage();
+ exit;
+}
+
+$ftype=OC_Filesystem::getMimeType( $filename );
+
+header('Content-Type:'.$ftype);
+header('Content-Disposition: attachment; filename="'.basename($filename).'"');
+OC_Response::disableCaching();
+header('Content-Length: '.OC_Filesystem::filesize($filename));
+
+@ob_end_clean();
+OC_Filesystem::readfile( $filename );
+?>
diff --git a/apps/files/index.php b/apps/files/index.php
new file mode 100644
index 00000000000..aea91542db6
--- /dev/null
+++ b/apps/files/index.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.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/>.
+*
+*/
+
+
+// Init owncloud
+require_once('../lib/base.php');
+
+// Check if we are a user
+OC_Util::checkLoggedIn();
+
+// Load the files we need
+OC_Util::addStyle( "files", "files" );
+OC_Util::addScript( "files", "files" );
+OC_Util::addScript( 'files', 'filelist' );
+OC_Util::addScript( 'files', 'fileactions' );
+if(!isset($_SESSION['timezone'])){
+ OC_Util::addScript( 'files', 'timezone' );
+}
+OC_App::setActiveNavigationEntry( "files_index" );
+// Load the files
+$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
+// Redirect if directory does not exist
+if(!OC_Filesystem::is_dir($dir.'/')) {
+ header("Location: ".$_SERVER['PHP_SELF']."");
+}
+
+$files = array();
+foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
+ $i["date"] = OC_Util::formatDate($i["mtime"] );
+ if($i['type']=='file'){
+ $fileinfo=pathinfo($i['name']);
+ $i['basename']=$fileinfo['filename'];
+ if (!empty($fileinfo['extension'])) {
+ $i['extension']='.' . $fileinfo['extension'];
+ }
+ else {
+ $i['extension']='';
+ }
+ }
+ if($i['directory']=='/'){
+ $i['directory']='';
+ }
+ $files[] = $i;
+}
+
+// Make breadcrumb
+$breadcrumb = array();
+$pathtohere = "";
+foreach( explode( "/", $dir ) as $i ){
+ if( $i != "" ){
+ $pathtohere .= "/".str_replace('+','%20', urlencode($i));
+ $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
+ }
+}
+
+// make breadcrumb und filelist markup
+$list = new OC_Template( "files", "part.list", "" );
+$list->assign( "files", $files );
+$list->assign( "baseURL", OC_Helper::linkTo("files", "index.php")."?dir=");
+$list->assign( "downloadURL", OC_Helper::linkTo("files", "download.php")."?file=");
+$breadcrumbNav = new OC_Template( "files", "part.breadcrumb", "" );
+$breadcrumbNav->assign( "breadcrumb", $breadcrumb );
+$breadcrumbNav->assign( "baseURL", OC_Helper::linkTo("files", "index.php")."?dir=");
+
+$upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'));
+$post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
+$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+
+$freeSpace=OC_Filesystem::free_space('/');
+$freeSpace=max($freeSpace,0);
+$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+
+$tmpl = new OC_Template( "files", "index", "user" );
+$tmpl->assign( "fileList", $list->fetchPage() );
+$tmpl->assign( "breadcrumb", $breadcrumbNav->fetchPage() );
+$tmpl->assign( 'dir', $dir);
+$tmpl->assign( 'readonly', !OC_Filesystem::is_writable($dir));
+$tmpl->assign( "files", $files );
+$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
+$tmpl->assign( 'uploadMaxHumanFilesize', OC_Helper::humanFileSize($maxUploadFilesize));
+$tmpl->assign( 'allowZipDownload', intval(OC_Config::getValue('allowZipDownload', true)));
+$tmpl->printPage();
+
+?>
diff --git a/apps/files/js/admin.js b/apps/files/js/admin.js
new file mode 100644
index 00000000000..bfa96670635
--- /dev/null
+++ b/apps/files/js/admin.js
@@ -0,0 +1,23 @@
+function switchPublicFolder()
+{
+ var publicEnable = $('#publicEnable').is(':checked');
+ var sharingaimGroup = $('input:radio[name=sharingaim]'); //find all radiobuttons of that group
+ $.each(sharingaimGroup, function(index, sharingaimItem) {
+ sharingaimItem.disabled = !publicEnable; //set all buttons to the correct state
+ });
+}
+
+$(document).ready(function(){
+ switchPublicFolder(); // Execute the function after loading DOM tree
+ $('#publicEnable').click(function(){
+ switchPublicFolder(); // To get rid of onClick()
+ });
+
+ $('#allowZipDownload').bind('change', function() {
+ if($('#allowZipDownload').attr('checked')) {
+ $('#maxZipInputSize').removeAttr('disabled');
+ } else {
+ $('#maxZipInputSize').attr('disabled', 'disabled');
+ }
+ });
+});
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
new file mode 100644
index 00000000000..80e918a455c
--- /dev/null
+++ b/apps/files/js/fileactions.js
@@ -0,0 +1,154 @@
+FileActions={
+ actions:{},
+ defaults:{},
+ icons:{},
+ currentFile:null,
+ register:function(mime,name,icon,action){
+ if(!FileActions.actions[mime]){
+ FileActions.actions[mime]={};
+ }
+ FileActions.actions[mime][name]=action;
+ FileActions.icons[name]=icon;
+ },
+ setDefault:function(mime,name){
+ FileActions.defaults[mime]=name;
+ },
+ get:function(mime,type){
+ var actions={};
+ if(FileActions.actions.all){
+ actions=$.extend( actions, FileActions.actions.all )
+ }
+ if(mime){
+ if(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] )
+ }
+ }
+ if(type){//type is 'dir' or 'file'
+ if(FileActions.actions[type]){
+ actions=$.extend( actions, FileActions.actions[type] )
+ }
+ }
+ return actions;
+ },
+ getDefault:function(mime,type){
+ if(mime){
+ var mimePart=mime.substr(0,mime.indexOf('/'));
+ }
+ var name=false;
+ if(mime && FileActions.defaults[mime]){
+ name=FileActions.defaults[mime];
+ }else if(mime && FileActions.defaults[mimePart]){
+ name=FileActions.defaults[mimePart];
+ }else if(type && FileActions.defaults[type]){
+ name=FileActions.defaults[type];
+ }else{
+ name=FileActions.defaults.all;
+ }
+ var actions=this.get(mime,type);
+ return actions[name];
+ },
+ display:function(parent){
+ FileActions.currentFile=parent;
+ $('#fileList span.fileactions, #fileList td.date a.action').remove();
+ var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+ var file=FileActions.getCurrentFile();
+ if($('tr').filterAttr('data-file',file).data('renaming')){
+ return;
+ }
+ parent.children('a.name').append('<span class="fileactions" />');
+ var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+ for(name in actions){
+ if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){
+ var img=FileActions.icons[name];
+ if(img.call){
+ img=img(file);
+ }
+ var html='<a href="#" class="action" style="display:none">';
+ if(img) { html+='<img src="'+img+'"/> '; }
+ html += name+'</a>';
+ var element=$(html);
+ element.data('action',name);
+ element.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var action=actions[$(this).data('action')];
+ var currentFile=FileActions.getCurrentFile();
+ FileActions.hide();
+ action(currentFile);
+ });
+ element.hide();
+ parent.find('a.name>span.fileactions').append(element);
+ }
+ }
+ if(actions['Delete']){
+ var img=FileActions.icons['Delete'];
+ if(img.call){
+ img=img(file);
+ }
+ var html='<a href="#" original-title="Delete" class="action delete" style="display:none" />';
+ var element=$(html);
+ if(img){
+ element.append($('<img src="'+img+'"/>'));
+ }
+ element.data('action','Delete');
+ element.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var action=actions[$(this).data('action')];
+ var currentFile=FileActions.getCurrentFile();
+ FileActions.hide();
+ action(currentFile);
+ });
+ element.hide();
+ parent.parent().children().last().append(element);
+ }
+ $('#fileList .action').css('-o-transition-property','none');//temporarly disable
+ $('#fileList .action').fadeIn(200,function(){
+ $('#fileList .action').css('-o-transition-property','opacity');
+ });
+ return false;
+ },
+ hide:function(){
+ $('#fileList span.fileactions, #fileList td.date a.action').fadeOut(200,function(){
+ $(this).remove();
+ });
+ },
+ getCurrentFile:function(){
+ return FileActions.currentFile.parent().attr('data-file');
+ },
+ getCurrentMimeType:function(){
+ return FileActions.currentFile.parent().attr('data-mime');
+ },
+ getCurrentType:function(){
+ return FileActions.currentFile.parent().attr('data-type');
+ }
+}
+
+$(document).ready(function(){
+ if($('#allowZipDownload').val() == 1){
+ var downloadScope = 'all';
+ } else {
+ var downloadScope = 'file';
+ }
+ FileActions.register(downloadScope,'Download',function(){return OC.imagePath('core','actions/download')},function(filename){
+ window.location='ajax/download.php?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val());
+ });
+});
+
+FileActions.register('all','Delete',function(){return OC.imagePath('core','actions/delete')},function(filename){
+ FileList.do_delete(filename);
+});
+
+FileActions.register('all','Rename',function(){return OC.imagePath('core','actions/rename')},function(filename){
+ FileList.rename(filename);
+});
+
+FileActions.register('dir','Open','',function(filename){
+ window.location='index.php?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
+});
+
+FileActions.setDefault('dir','Open');
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
new file mode 100644
index 00000000000..5bd85fc29ef
--- /dev/null
+++ b/apps/files/js/filelist.js
@@ -0,0 +1,232 @@
+FileList={
+ useUndo:true,
+ update:function(fileListHtml) {
+ $('#fileList').empty().html(fileListHtml);
+ },
+ addFile:function(name,size,lastModified,loading){
+ var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png');
+ var html='<tr data-type="file" data-size="'+size+'">';
+ if(name.indexOf('.')!=-1){
+ var basename=name.substr(0,name.lastIndexOf('.'));
+ var extension=name.substr(name.lastIndexOf('.'));
+ }else{
+ var basename=name;
+ 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()+'/'+name+'"><span class="nametext">'+basename
+ if(extension){
+ html+='<span class="extension">'+extension+'</span>';
+ }
+ html+='</span></a></td>';
+ if(size!='Pending'){
+ simpleSize=simpleFileSize(size);
+ }else{
+ simpleSize='Pending';
+ }
+ sizeColor = Math.round(200-size/(1024*1024)*2);
+ lastModifiedTime=Math.round(lastModified.getTime() / 1000);
+ modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*14);
+ html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
+ html+='<td class="date"><span class="modified" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</span></td>';
+ html+='</tr>';
+ FileList.insertElement(name,'file',$(html).attr('data-file',name));
+ if(loading){
+ $('tr').filterAttr('data-file',name).data('loading',true);
+ }else{
+ $('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
+ }
+ },
+ addDir:function(name,size,lastModified){
+ html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name});
+ 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": "index.php?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/') });
+ link_elem.append($('<span></span>').addClass('nametext').text(name));
+ td.append(link_elem);
+ html.append(td);
+ if(size!='Pending'){
+ simpleSize=simpleFileSize(size);
+ }else{
+ simpleSize='Pending';
+ }
+ sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
+ lastModifiedTime=Math.round(lastModified.getTime() / 1000);
+ modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
+ td = $('<td></td>').attr({ "class": "filesize", "title": humanFileSize(size), "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'}).text(simpleSize);
+ html.append(td);
+
+ td = $('<td></td>').attr({ "class": "date" });
+ td.append($('<span></span>').attr({ "class": "modified", "title": formatDate(lastModified), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' }).text( relative_modified_date(lastModified.getTime() / 1000) ));
+ html.append(td);
+ 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);
+ },
+ refresh:function(data) {
+ result = jQuery.parseJSON(data.responseText);
+ if(typeof(result.data.breadcrumb) != 'undefined'){
+ updateBreadcrumb(result.data.breadcrumb);
+ }
+ FileList.update(result.data.files);
+ resetFileActionPanel();
+ },
+ remove:function(name){
+ $('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
+ $('tr').filterAttr('data-file',name).remove();
+ if($('tr[data-file]').length==0){
+ $('#emptyfolder').show();
+ $('.file_upload_filename').addClass('highlight');
+ }
+ },
+ insertElement:function(name,type,element){
+ //find the correct spot to insert the file or folder
+ var fileElements=$('tr[data-file][data-type="'+type+'"]');
+ var pos;
+ if(name.localeCompare($(fileElements[0]).attr('data-file'))<0){
+ pos=-1;
+ }else if(name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file'))>0){
+ pos=fileElements.length-1;
+ }else{
+ for(var pos=0;pos<fileElements.length-1;pos++){
+ if(name.localeCompare($(fileElements[pos]).attr('data-file'))>0 && name.localeCompare($(fileElements[pos+1]).attr('data-file'))<0){
+ break;
+ }
+ }
+ }
+ if(fileElements.length){
+ if(pos==-1){
+ $(fileElements[0]).before(element);
+ }else{
+ $(fileElements[pos]).after(element);
+ }
+ }else if(type=='dir' && $('tr[data-file]').length>0){
+ $('tr[data-file]').first().before(element);
+ }else{
+ $('#fileList').append(element);
+ }
+ $('#emptyfolder').hide();
+ $('.file_upload_filename').removeClass('highlight');
+ },
+ loadingDone:function(name){
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.data('loading',false);
+ var mime=tr.data('mime');
+ tr.attr('data-mime',mime);
+ getMimeIcon(mime,function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ tr.find('td.filename').draggable(dragOptions);
+ },
+ isLoading:function(name){
+ return $('tr').filterAttr('data-file',name).data('loading');
+ },
+ rename:function(name){
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.data('renaming',true);
+ var td=tr.children('td.filename');
+ var input=$('<input class="filename"></input>').val(name);
+ var form=$('<form></form>')
+ form.append(input);
+ td.children('a.name').text('');
+ td.children('a.name').append(form)
+ input.focus();
+ form.submit(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var newname=input.val();
+ tr.attr('data-file',newname);
+ td.children('a.name').empty();
+ var path = td.children('a.name').attr('href');
+ td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname)));
+ if(newname.indexOf('.')>0){
+ basename=newname.substr(0,newname.lastIndexOf('.'));
+ }else{
+ basename=newname;
+ }
+ 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>'));
+ }
+ $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(){
+ tr.data('renaming',false);
+ });
+ return false;
+ });
+ input.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ });
+ input.blur(function(){
+ form.trigger('submit');
+ });
+ },
+ do_delete:function(files){
+ if(FileList.deleteFiles || !FileList.useUndo){//finish any ongoing deletes first
+ FileList.finishDelete(function(){
+ FileList.do_delete(files);
+ });
+ return;
+ }
+ if(files.substr){
+ files=[files];
+ }
+ $.each(files,function(index,file){
+ var files = $('tr').filterAttr('data-file',file);
+ files.hide();
+ files.find('input[type="checkbox"]').removeAttr('checked');
+ files.removeClass('selected');
+ });
+ procesSelection();
+ FileList.deleteCanceled=false;
+ FileList.deleteFiles=files;
+ $('#notification').text(t('files','undo deletion'));
+ $('#notification').data('deletefile',true);
+ $('#notification').fadeIn();
+ },
+ finishDelete:function(ready,sync){
+ if(!FileList.deleteCanceled && FileList.deleteFiles){
+ var fileNames=FileList.deleteFiles.join(';');
+ $.ajax({
+ url: 'ajax/delete.php',
+ async:!sync,
+ data: "dir="+$('#dir').val()+"&files="+encodeURIComponent(fileNames),
+ complete: function(data){
+ boolOperationFinished(data, function(){
+ $('#notification').fadeOut();
+ $.each(FileList.deleteFiles,function(index,file){
+ FileList.remove(file);
+ });
+ FileList.deleteCanceled=true;
+ FileList.deleteFiles=null;
+ if(ready){
+ ready();
+ }
+ });
+ }
+ });
+ }
+ }
+}
+
+$(document).ready(function(){
+ $('#notification').hide();
+ $('#notification').click(function(){
+ if($('#notification').data('deletefile'))
+ {
+ $.each(FileList.deleteFiles,function(index,file){
+ $('tr').filterAttr('data-file',file).show();
+// alert(file);
+ });
+ FileList.deleteCanceled=true;
+ FileList.deleteFiles=null;
+ }
+ $('#notification').fadeOut();
+ });
+ FileList.useUndo=('onbeforeunload' in window)
+ $(window).bind('beforeunload', function (){
+ FileList.finishDelete(null,true);
+ });
+});
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
new file mode 100644
index 00000000000..3ce95f992d0
--- /dev/null
+++ b/apps/files/js/files.js
@@ -0,0 +1,591 @@
+$(document).ready(function() {
+ $('#fileList tr').each(function(){
+ //little hack to set unescape filenames in attribute
+ $(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
+ });
+
+ if($('tr[data-file]').length==0){
+ $('.file_upload_filename').addClass('highlight');
+ }
+
+ $('#file_action_panel').attr('activeAction', false);
+
+ //drag/drop of files
+ $('#fileList tr td.filename').draggable(dragOptions);
+ $('#fileList tr[data-type="dir"][data-write="true"] td.filename').droppable(folderDropOptions);
+ $('div.crumb:not(.last)').droppable(crumbDropOptions);
+ $('ul#apps>li:first-child').data('dir','');
+ if($('div.crumb').length){
+ $('ul#apps>li:first-child').droppable(crumbDropOptions);
+ }
+
+ // Triggers invisible file input
+ $('.file_upload_button_wrapper').live('click', function() {
+ $(this).parent().children('.file_upload_start').trigger('click');
+ return false;
+ });
+
+ // Sets the file-action buttons behaviour :
+ $('tr').live('mouseenter',function(event) {
+ FileActions.display($(this).children('td.filename'));
+ });
+ $('tr').live('mouseleave',function(event) {
+ FileActions.hide();
+ });
+
+ var lastChecked;
+
+ // Sets the file link behaviour :
+ $('td.filename a').live('click',function(event) {
+ event.preventDefault();
+ if (event.ctrlKey || event.shiftKey) {
+ if (event.shiftKey) {
+ var last = $(lastChecked).parent().parent().prevAll().length;
+ var first = $(this).parent().parent().prevAll().length;
+ var start = Math.min(first, last);
+ var end = Math.max(first, last);
+ var rows = $(this).parent().parent().parent().children('tr');
+ for (var i = start; i < end; i++) {
+ $(rows).each(function(index) {
+ if (index == i) {
+ var checkbox = $(this).children().children('input:checkbox');
+ $(checkbox).attr('checked', 'checked');
+ $(checkbox).parent().parent().addClass('selected');
+ }
+ });
+ }
+ }
+ var checkbox = $(this).parent().children('input:checkbox');
+ lastChecked = checkbox;
+ if ($(checkbox).attr('checked')) {
+ $(checkbox).removeAttr('checked');
+ $(checkbox).parent().parent().removeClass('selected');
+ $('#select_all').removeAttr('checked');
+ } else {
+ $(checkbox).attr('checked', 'checked');
+ $(checkbox).parent().parent().toggleClass('selected');
+ var selectedCount=$('td.filename input:checkbox:checked').length;
+ if (selectedCount == $('td.filename input:checkbox').length) {
+ $('#select_all').attr('checked', 'checked');
+ }
+ }
+ procesSelection();
+ } else {
+ var filename=$(this).parent().parent().attr('data-file');
+ var tr=$('tr').filterAttr('data-file',filename);
+ var renaming=tr.data('renaming');
+ if(!renaming && !FileList.isLoading(filename)){
+ var mime=$(this).parent().parent().data('mime');
+ var type=$(this).parent().parent().data('type');
+ var action=FileActions.getDefault(mime,type);
+ if(action){
+ action(filename);
+ }
+ }
+ }
+
+ });
+
+ // Sets the select_all checkbox behaviour :
+ $('#select_all').click(function() {
+ if($(this).attr('checked')){
+ // Check all
+ $('td.filename input:checkbox').attr('checked', true);
+ $('td.filename input:checkbox').parent().parent().addClass('selected');
+ }else{
+ // Uncheck all
+ $('td.filename input:checkbox').attr('checked', false);
+ $('td.filename input:checkbox').parent().parent().removeClass('selected');
+ }
+ procesSelection();
+ });
+
+ $('td.filename input:checkbox').live('change',function(event) {
+ if (event.shiftKey) {
+ var last = $(lastChecked).parent().parent().prevAll().length;
+ var first = $(this).parent().parent().prevAll().length;
+ var start = Math.min(first, last);
+ var end = Math.max(first, last);
+ var rows = $(this).parent().parent().parent().children('tr');
+ for (var i = start; i < end; i++) {
+ $(rows).each(function(index) {
+ if (index == i) {
+ var checkbox = $(this).children().children('input:checkbox');
+ $(checkbox).attr('checked', 'checked');
+ $(checkbox).parent().parent().addClass('selected');
+ }
+ });
+ }
+ }
+ var selectedCount=$('td.filename input:checkbox:checked').length;
+ $(this).parent().parent().toggleClass('selected');
+ if(!$(this).attr('checked')){
+ $('#select_all').attr('checked',false);
+ }else{
+ if(selectedCount==$('td.filename input:checkbox').length){
+ $('#select_all').attr('checked',true);
+ }
+ }
+ procesSelection();
+ });
+
+ $('#file_newfolder_name').click(function(){
+ if($('#file_newfolder_name').val() == 'New Folder'){
+ $('#file_newfolder_name').val('');
+ }
+ });
+
+ $('.download').click('click',function(event) {
+ var files=getSelectedFiles('name').join(';');
+ var dir=$('#dir').val()||'/';
+ $('#notification').text(t('files','generating ZIP-file, it may take some time.'));
+ $('#notification').fadeIn();
+ window.location='ajax/download.php?files='+encodeURIComponent(files)+'&dir='+encodeURIComponent(dir);
+ return false;
+ });
+
+ $('.delete').click(function(event) {
+ var files=getSelectedFiles('name');
+ event.preventDefault();
+ FileList.do_delete(files);
+ return false;
+ });
+
+ $('.file_upload_start').live('change',function(){
+ var form=$(this).closest('form');
+ var that=this;
+ var uploadId=form.attr('data-upload-id');
+ var files=this.files;
+ var target=form.children('iframe');
+ var totalSize=0;
+ if(files){
+ for(var i=0;i<files.length;i++){
+ totalSize+=files[i].size;
+ if(FileList.deleteFiles && FileList.deleteFiles.indexOf(files[i].name)!=-1){//finish delete if we are uploading a deleted file
+ FileList.finishDelete(function(){
+ $(that).change();
+ });
+ return;
+ }
+ }
+ }
+ if(totalSize>$('#max_upload').val()){
+ $( "#uploadsize-message" ).dialog({
+ modal: true,
+ buttons: {
+ Close: function() {
+ $( this ).dialog( "close" );
+ }
+ }
+ });
+ }else{
+ target.load(function(){
+ var response=jQuery.parseJSON(target.contents().find('body').text());
+ //set mimetype and if needed filesize
+ if(response){
+ if(response[0] != undefined && response[0].status == 'success'){
+ for(var i=0;i<response.length;i++){
+ var file=response[i];
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ if(size=='Pending'){
+ $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
+ }
+ FileList.loadingDone(file.name);
+ }
+ }
+ else{
+ $('#notification').text(t('files',response.data.message));
+ $('#notification').fadeIn();
+ $('#fileList > tr').not('[data-mime]').fadeOut();
+ $('#fileList > tr').not('[data-mime]').remove();
+ }
+ }
+ });
+ form.submit();
+ var date=new Date();
+ if(files){
+ for(var i=0;i<files.length;i++){
+ if(files[i].size>0){
+ var size=files[i].size;
+ }else{
+ var size=t('files','Pending');
+ }
+ if(files){
+ FileList.addFile(getUniqueName(files[i].name),size,date,true);
+ }
+ }
+ }else{
+ var filename=this.value.split('\\').pop(); //ie prepends C:\fakepath\ in front of the filename
+ FileList.addFile(getUniqueName(filename),'Pending',date,true);
+ }
+
+ //clone the upload form and hide the new one to allow users to start a new upload while the old one is still uploading
+ var clone=form.clone();
+ uploadId++;
+ clone.attr('data-upload-id',uploadId);
+ clone.attr('target','file_upload_target_'+uploadId);
+ clone.children('iframe').attr('name','file_upload_target_'+uploadId)
+ clone.insertBefore(form);
+ form.hide();
+ }
+ });
+
+ //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')
+ }
+
+ //if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
+ var crumb=$('div.crumb').first();
+ while($('div.controls').height()>40 && crumb.next('div.crumb').length>0){
+ crumb.children('a').text('...');
+ crumb=crumb.next('div.crumb');
+ }
+ //if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent
+ var crumb=$('div.crumb').first();
+ var next=crumb.next('div.crumb');
+ while($('div.controls').height()>40 && next.next('div.crumb').length>0){
+ crumb.remove();
+ crumb=next;
+ next=crumb.next('div.crumb');
+ }
+ //still not enough, start shorting down the current folder name
+ var crumb=$('div.crumb>a').last();
+ while($('div.controls').height()>40 && crumb.text().length>6){
+ var text=crumb.text()
+ text=text.substr(0,text.length-6)+'...';
+ crumb.text(text);
+ }
+
+ $(window).click(function(){
+ $('#new>ul').hide();
+ $('#new').removeClass('active');
+ $('button.file_upload_filename').removeClass('active');
+ $('#new li').each(function(i,element){
+ if($(element).children('p').length==0){
+ $(element).children('input').remove();
+ $(element).append('<p>'+$(element).data('text')+'</p>');
+ }
+ });
+ });
+ $('#new').click(function(event){
+ event.stopPropagation();
+ });
+ $('#new>a').click(function(){
+ $('#new>ul').toggle();
+ $('#new').toggleClass('active');
+ $('button.file_upload_filename').toggleClass('active');
+ });
+ $('#new li').click(function(){
+ if($(this).children('p').length==0){
+ return;
+ }
+
+ $('#new li').each(function(i,element){
+ if($(element).children('p').length==0){
+ $(element).children('input').remove();
+ $(element).append('<p>'+$(element).data('text')+'</p>');
+ }
+ });
+
+ var type=$(this).data('type');
+ var text=$(this).children('p').text();
+ $(this).data('text',text);
+ $(this).children('p').remove();
+ var input=$('<input>');
+ $(this).append(input);
+ input.focus();
+ input.change(function(){
+ var name=$(this).val();
+ switch(type){
+ case 'file':
+ $.post(
+ OC.filePath('files','ajax','newfile.php'),
+ {dir:$('#dir').val(),filename:name,content:" \n"},
+ function(data){
+ var date=new Date();
+ FileList.addFile(name,0,date);
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.data('mime','text/plain');
+ getMimeIcon('text/plain',function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ }
+ );
+ break;
+ case 'folder':
+ $.post(
+ OC.filePath('files','ajax','newfolder.php'),
+ {dir:$('#dir').val(),foldername:name},
+ function(data){
+ var date=new Date();
+ FileList.addDir(name,0,date);
+ }
+ );
+ break;
+ case 'web':
+ if(name.substr(0,8)!='https://' && name.substr(0,7)!='http://'){
+ name='http://'.name;
+ }
+ var localName=name;
+ if(localName.substr(localName.length-1,1)=='/'){//strip /
+ localName=localName.substr(0,localName.length-1)
+ }
+ if(localName.indexOf('/')){//use last part of url
+ localName=localName.split('/').pop();
+ }else{//or the domain
+ localName=(localName.match(/:\/\/(.[^/]+)/)[1]).replace('www.','');
+ }
+ $.post(
+ OC.filePath('files','ajax','newfile.php'),
+ {dir:$('#dir').val(),source:name,filename:localName},
+ function(result){
+ if(result.status == 'success'){
+ var date=new Date();
+ FileList.addFile(localName,0,date);
+ var tr=$('tr').filterAttr('data-file',localName);
+ tr.data('mime',result.data.mime);
+ getMimeIcon(result.data.mime,function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ }else{
+
+ }
+ }
+ );
+ break;
+ }
+ var li=$(this).parent();
+ $(this).remove();
+ li.append('<p>'+li.data('text')+'</p>');
+ $('#new>a').click();
+ });
+ });
+
+ //check if we need to scan the filesystem
+ $.get(OC.filePath('files','ajax','scan.php'),{checkonly:'true'}, function(response) {
+ if(response.data.done){
+ scanFiles();
+ }
+ }, "json");
+});
+
+function scanFiles(force){
+ force=!!force; //cast to bool
+ scanFiles.scanning=true;
+ $('#scanning-message').show();
+ $('#fileList').remove();
+ var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force});
+ scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource);
+ scannerEventSource.listen('scanning',function(data){
+ $('#scan-count').text(data.count+' files scanned');
+ $('#scan-current').text(data.file+'/');
+ });
+ scannerEventSource.listen('success',function(success){
+ scanFiles.scanning=false;
+ if(success){
+ window.location.reload();
+ }else{
+ alert('error while scanning');
+ }
+ });
+}
+scanFiles.scanning=false;
+
+function boolOperationFinished(data, callback) {
+ result = jQuery.parseJSON(data.responseText);
+ if(result.status == 'success'){
+ callback.call();
+ } else {
+ alert(result.data.message);
+ }
+}
+
+function updateBreadcrumb(breadcrumbHtml) {
+ $('p.nav').empty().html(breadcrumbHtml);
+}
+
+//options for file drag/dropp
+var dragOptions={
+ distance: 20, revert: 'invalid', opacity: 0.7,
+ stop: function(event, ui) {
+ $('#fileList tr td.filename').addClass('ui-draggable');
+ }
+};
+var folderDropOptions={
+ drop: function( event, ui ) {
+ var file=ui.draggable.parent().data('file');
+ var target=$(this).text().trim();
+ var dir=$('#dir').val();
+ $.ajax({
+ url: 'ajax/move.php',
+ data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(dir)+'/'+encodeURIComponent(target),
+ complete: function(data){boolOperationFinished(data, function(){
+ var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename');
+ el.draggable('destroy');
+ FileList.remove(file);
+ });}
+ });
+ }
+}
+var crumbDropOptions={
+ drop: function( event, ui ) {
+ var file=ui.draggable.text().trim();
+ var target=$(this).data('dir');
+ var dir=$('#dir').val();
+ while(dir.substr(0,1)=='/'){//remove extra leading /'s
+ dir=dir.substr(1);
+ }
+ dir='/'+dir;
+ if(dir.substr(-1,1)!='/'){
+ dir=dir+'/';
+ }
+ if(target==dir || target+'/'==dir){
+ return;
+ }
+ $.ajax({
+ url: 'ajax/move.php',
+ data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(target),
+ complete: function(data){boolOperationFinished(data, function(){
+ FileList.remove(file);
+ });}
+ });
+ },
+ tolerance: 'pointer'
+}
+
+function procesSelection(){
+ var selected=getSelectedFiles();
+ var selectedFiles=selected.filter(function(el){return el.type=='file'});
+ var selectedFolders=selected.filter(function(el){return el.type=='dir'});
+ if(selectedFiles.length==0 && selectedFolders.length==0){
+ $('#headerName>span.name').text(t('files','Name'));
+ $('#headerSize').text(t('files','Size'));
+ $('#modified').text(t('files','Modified'));
+ $('th').removeClass('multiselect');
+ $('.selectedActions').hide();
+ $('thead').removeClass('fixed');
+ $('#headerName').css('width','auto');
+ $('#headerSize').css('width','auto');
+ $('#headerDate').css('width','auto');
+ $('table').css('padding-top','0');
+ }else{
+ var width={name:$('#headerName').css('width'),size:$('#headerSize').css('width'),date:$('#headerDate').css('width')};
+ $('#headerName').css('width',width.name);
+ $('#headerSize').css('width',width.size);
+ $('#headerDate').css('width',width.date);
+ $('.selectedActions').show();
+ var totalSize=0;
+ for(var i=0;i<selectedFiles.length;i++){
+ totalSize+=selectedFiles[i].size;
+ };
+ for(var i=0;i<selectedFolders.length;i++){
+ totalSize+=selectedFolders[i].size;
+ };
+ simpleSize=simpleFileSize(totalSize);
+ $('#headerSize').text(simpleSize);
+ $('#headerSize').attr('title',humanFileSize(totalSize));
+ var selection='';
+ if(selectedFolders.length>0){
+ if(selectedFolders.length==1){
+ selection+='1 '+t('files','folder');
+ }else{
+ selection+=selectedFolders.length+' '+t('files','folders');
+ }
+ if(selectedFiles.length>0){
+ selection+=' & ';
+ }
+ }
+ if(selectedFiles.length>0){
+ if(selectedFiles.length==1){
+ selection+='1 '+t('files','file');
+ }else{
+ selection+=selectedFiles.length+' '+t('files','files');
+ }
+ }
+ $('#headerName>span.name').text(selection);
+ $('#modified').text('');
+ $('th').addClass('multiselect');
+ }
+}
+
+/**
+ * @brief get a list of selected files
+ * @param string property (option) the property of the file requested
+ * @return array
+ *
+ * possible values for property: name, mime, size and type
+ * if property is set, an array with that property for each file is returnd
+ * if it's ommited an array of objects with all properties is returned
+ */
+function getSelectedFiles(property){
+ var elements=$('td.filename input:checkbox:checked').parent().parent();
+ var files=[];
+ elements.each(function(i,element){
+ var file={
+ name:$(element).attr('data-file'),
+ mime:$(element).data('mime'),
+ type:$(element).data('type'),
+ size:$(element).data('size'),
+ };
+ if(property){
+ files.push(file[property]);
+ }else{
+ files.push(file);
+ }
+ });
+ return files;
+}
+
+function relative_modified_date(timestamp) {
+ var timediff = Math.round((new Date()).getTime() / 1000) - timestamp;
+ var diffminutes = Math.round(timediff/60);
+ var diffhours = Math.round(diffminutes/60);
+ var diffdays = Math.round(diffhours/24);
+ var diffmonths = Math.round(diffdays/31);
+ var diffyears = Math.round(diffdays/365);
+ if(timediff < 60) { return t('files','seconds ago'); }
+ else if(timediff < 120) { return '1 '+t('files','minute ago'); }
+ else if(timediff < 3600) { return diffminutes+' '+t('files','minutes ago'); }
+ //else if($timediff < 7200) { return '1 hour ago'; }
+ //else if($timediff < 86400) { return $diffhours.' hours ago'; }
+ else if(timediff < 86400) { return t('files','today'); }
+ else if(timediff < 172800) { return t('files','yesterday'); }
+ else if(timediff < 2678400) { return diffdays+' '+t('files','days ago'); }
+ else if(timediff < 5184000) { return t('files','last month'); }
+ //else if($timediff < 31556926) { return $diffmonths.' months ago'; }
+ else if(timediff < 31556926) { return t('files','months ago'); }
+ else if(timediff < 63113852) { return t('files','last year'); }
+ else { return diffyears+' '+t('files','years ago'); }
+}
+
+function getMimeIcon(mime, ready){
+ if(getMimeIcon.cache[mime]){
+ ready(getMimeIcon.cache[mime]);
+ }else{
+ $.get( OC.filePath('files','ajax','mimeicon.php')+'?mime='+mime, function(path){
+ getMimeIcon.cache[mime]=path;
+ ready(getMimeIcon.cache[mime]);
+ });
+ }
+}
+getMimeIcon.cache={};
+
+function getUniqueName(name){
+ if($('tr').filterAttr('data-file',name).length>0){
+ var parts=name.split('.');
+ var extension=parts.pop();
+ var base=parts.join('.');
+ numMatch=base.match(/\((\d+)\)/);
+ var num=2;
+ if(numMatch && numMatch.length>0){
+ num=parseInt(numMatch[numMatch.length-1])+1;
+ base=base.split('(')
+ base.pop();
+ base=base.join('(').trim();
+ }
+ name=base+' ('+num+').'+extension;
+ return getUniqueName(name);
+ }
+ return name;
+}
diff --git a/apps/files/js/timezone.js b/apps/files/js/timezone.js
new file mode 100644
index 00000000000..d569683f210
--- /dev/null
+++ b/apps/files/js/timezone.js
@@ -0,0 +1,12 @@
+//send the clients time zone to the server
+$(document).ready(function() {
+ var visitortimezone = (-new Date().getTimezoneOffset()/60);
+ $.ajax({
+ type: "GET",
+ url: "ajax/timezone.php",
+ data: 'time='+ visitortimezone,
+ success: function(){
+ location.reload();
+ }
+ });
+}); \ No newline at end of file
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
new file mode 100644
index 00000000000..50edc0d6979
--- /dev/null
+++ b/apps/files/l10n/ar.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "تم ترفيع الملفات بنجاح.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "حجم الملف الذي تريد ترفيعه أعلى مما upload_max_filesize يسمح به في ملف php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "حجم الملف الذي تريد ترفيعه أعلى مما MAX_FILE_SIZE يسمح به في واجهة ال HTML.",
+"The uploaded file was only partially uploaded" => "تم ترفيع جزء من الملفات الذي تريد ترفيعها فقط",
+"No file was uploaded" => "لم يتم ترفيع أي من الملفات",
+"Missing a temporary folder" => "المجلد المؤقت غير موجود",
+"Files" => "الملفات",
+"Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها",
+"New" => "جديد",
+"Text file" => "ملف",
+"Folder" => "مجلد",
+"From the web" => "من الوب",
+"Upload" => "إرفع",
+"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
+"Name" => "الاسم",
+"Download" => "تحميل",
+"Size" => "حجم",
+"Modified" => "معدل",
+"Delete" => "محذوف",
+"Upload too large" => "حجم الترفيع أعلى من المسموح",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
+);
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
new file mode 100644
index 00000000000..027a7698203
--- /dev/null
+++ b/apps/files/l10n/bg_BG.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Файлът е качен успешно",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Файлът който се опитвате да качите, надвишава зададените стойности в upload_max_filesize в PHP.INI",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Файлът който се опитвате да качите надвишава стойностите в MAX_FILE_SIZE в HTML формата.",
+"The uploaded file was only partially uploaded" => "Файлът е качен частично",
+"No file was uploaded" => "Фахлът не бе качен",
+"Missing a temporary folder" => "Липсва временната папка",
+"Files" => "Файлове",
+"Maximum upload size" => "Макс. размер за качване",
+"Upload" => "Качване",
+"Nothing in here. Upload something!" => "Няма нищо, качете нещо!",
+"Name" => "Име",
+"Download" => "Изтегляне",
+"Size" => "Размер",
+"Modified" => "Променено",
+"Delete" => "Изтриване",
+"Upload too large" => "Файлът е прекалено голям",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файловете които се опитвате да качите са по-големи от позволеното за сървъра."
+);
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
new file mode 100644
index 00000000000..b85b36f5c02
--- /dev/null
+++ b/apps/files/l10n/ca.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El fitxer de pujada excedeix la directiva upload_max_filesize establerta a php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El fitxer de pujada excedeix la directiva MAX_FILE_SIZE especificada al formulari HTML",
+"The uploaded file was only partially uploaded" => "El fitxer només s'ha pujat parcialment",
+"No file was uploaded" => "El fitxer no s'ha pujat",
+"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
+"Files" => "Fitxers",
+"Maximum upload size" => "Mida màxima de pujada",
+"New" => "Nou",
+"Text file" => "Fitxer de text",
+"Folder" => "Carpeta",
+"From the web" => "Des de la web",
+"Upload" => "Puja",
+"Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
+"Name" => "Nom",
+"Download" => "Baixa",
+"Size" => "Mida",
+"Modified" => "Modificat",
+"Delete" => "Esborra",
+"Upload too large" => "La pujada és massa gran",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
+);
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
new file mode 100644
index 00000000000..5d26b26604a
--- /dev/null
+++ b/apps/files/l10n/cs_CZ.php
@@ -0,0 +1,23 @@
+<?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 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",
+"Files" => "Soubory",
+"Maximum upload size" => "Maximální velikost ukládaných souborů",
+"New" => "Nový",
+"Text file" => "Textový soubor",
+"Folder" => "Adresář",
+"From the web" => "Z webu",
+"Upload" => "Uložit",
+"Nothing in here. Upload something!" => "Žádný obsah. Uložte si něco!",
+"Name" => "Název",
+"Download" => "Stáhnout",
+"Size" => "Velikost",
+"Modified" => "Změněno",
+"Delete" => "Vymazat",
+"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."
+);
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
new file mode 100644
index 00000000000..f86a98d44c1
--- /dev/null
+++ b/apps/files/l10n/da.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den uploadede fil overskrider upload_max_filesize direktivet i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uploadede fil overskrider MAX_FILE_SIZE -direktivet som er specificeret i HTML-formularen",
+"The uploaded file was only partially uploaded" => "Den uploadede file blev kun delvist uploadet",
+"No file was uploaded" => "Ingen fil blev uploadet",
+"Missing a temporary folder" => "Mangler en midlertidig mappe",
+"Files" => "Filer",
+"Maximum upload size" => "Maksimal upload-størrelse",
+"New" => "Ny",
+"Text file" => "Tekstfil",
+"Folder" => "Mappe",
+"From the web" => "Fra nettet",
+"Upload" => "Upload",
+"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
+"Name" => "Navn",
+"Download" => "Download",
+"Size" => "Størrelse",
+"Modified" => "Ændret",
+"Delete" => "Slet",
+"Upload too large" => "Upload for stor",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
+);
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
new file mode 100644
index 00000000000..94d312c3e9e
--- /dev/null
+++ b/apps/files/l10n/de.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Datei hochgeladen.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Die hochgeladene Datei ist zu groß.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die hochgeladene Datei ist zu groß.",
+"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.",
+"Files" => "Dateien",
+"Maximum upload size" => "Maximale Größe",
+"New" => "Neu",
+"Text file" => "Text Datei",
+"Folder" => "Ordner",
+"From the web" => "Aus dem Netz",
+"Upload" => "Hochladen",
+"Nothing in here. Upload something!" => "Alles leer. Lad’ was hoch!",
+"Name" => "Name",
+"Download" => "Herunterladen",
+"Size" => "Größe",
+"Modified" => "Bearbeitet",
+"Delete" => "Löschen",
+"Upload too large" => "Upload zu groß",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server."
+);
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
new file mode 100644
index 00000000000..27a80fcc98c
--- /dev/null
+++ b/apps/files/l10n/el.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Δεν υπάρχει λάθος, το αρχείο που μεταφορτώθηκε επιτυχώς",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Το αρχείο που μεταφορτώθηκε υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"upload_max_filesize\" του php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Το αρχείο υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"MAX_FILE_SIZE\" που έχει οριστεί στην html φόρμα",
+"The uploaded file was only partially uploaded" => "Το αρχείο μεταφορώθηκε μόνο εν μέρει",
+"No file was uploaded" => "Το αρχείο δεν μεταφορτώθηκε",
+"Missing a temporary folder" => "Λείπει ένας προσωρινός φάκελος",
+"Files" => "Αρχεία",
+"Maximum upload size" => "Μέγιστο μέγεθος μεταφόρτωσης",
+"New" => "Νέο",
+"Text file" => "Αρχείο κειμένου",
+"Folder" => "Φάκελος",
+"From the web" => "Από τον ιστό",
+"Upload" => "Μεταφόρτωση",
+"Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!",
+"Name" => "Όνομα",
+"Download" => "Λήψη",
+"Size" => "Μέγεθος",
+"Modified" => "Τροποποιήθηκε",
+"Delete" => "Διαγραφή",
+"Upload too large" => "Πολύ μεγάλο το αρχείο προς μεταφόρτωση",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος μεταφόρτωσης αρχείων σε αυτόν το διακομιστή."
+);
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
new file mode 100644
index 00000000000..42dc4f1280e
--- /dev/null
+++ b/apps/files/l10n/eo.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alŝutiĝis sukcese",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "La dosiero alŝutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo",
+"The uploaded file was only partially uploaded" => "La alŝutita dosiero nur parte alŝutiĝis",
+"No file was uploaded" => "Neniu dosiero estas alŝutita",
+"Missing a temporary folder" => "Mankas tempa dosierujo",
+"Files" => "Dosieroj",
+"Maximum upload size" => "Maksimuma alŝutogrando",
+"Upload" => "Alŝuti",
+"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
+"Name" => "Nomo",
+"Download" => "Elŝuti",
+"Size" => "Grando",
+"Modified" => "Modifita",
+"Delete" => "Forigi",
+"Upload too large" => "Elŝuto tro larĝa",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo."
+);
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
new file mode 100644
index 00000000000..11665ac3c32
--- /dev/null
+++ b/apps/files/l10n/es.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "No hubo ningún error, el archivo se subió con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo que intentas subir sobrepasa el tamaño definido por la variable MAX_FILE_SIZE especificada en el formulario HTML",
+"The uploaded file was only partially uploaded" => "El archivo que intentas subir solo se subió parcialmente",
+"No file was uploaded" => "No se subió ningún archivo",
+"Missing a temporary folder" => "Falta un directorio temporal",
+"Files" => "Archivos",
+"Maximum upload size" => "Tamaño máximo de subida",
+"New" => "Nuevo",
+"Text file" => "Archivo de texto",
+"Folder" => "Carpeta",
+"From the web" => "Desde la web",
+"Upload" => "Subir",
+"Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!",
+"Name" => "Nombre",
+"Download" => "Descargar",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"Delete" => "Eliminado",
+"Upload too large" => "El archivo es demasiado grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor."
+);
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
new file mode 100644
index 00000000000..415eb632312
--- /dev/null
+++ b/apps/files/l10n/et_EE.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ühtegi viga pole, fail on üles laetud",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Üles laetud faili suurus ületab php.ini määratud upload_max_filesize suuruse",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Üles laetud faili suurus ületab HTML vormis määratud upload_max_filesize suuruse",
+"The uploaded file was only partially uploaded" => "Fail laeti üles ainult osaliselt",
+"No file was uploaded" => "Ühtegi faili ei laetud üles",
+"Missing a temporary folder" => "Ajutiste failide kaust puudub",
+"Files" => "Failid",
+"Maximum upload size" => "Maksimaalne üleslaadimise suurus",
+"New" => "Uus",
+"Text file" => "Tekstifail",
+"Folder" => "Kaust",
+"From the web" => "Veebist",
+"Upload" => "Lae üles",
+"Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
+"Name" => "Nimi",
+"Download" => "Lae alla",
+"Size" => "Suurus",
+"Modified" => "Muudetud",
+"Delete" => "Kustuta",
+"Upload too large" => "Üleslaadimine on liiga suur",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse."
+);
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
new file mode 100644
index 00000000000..b9873e6c3fa
--- /dev/null
+++ b/apps/files/l10n/eu.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Igotako fitxategiaren tamaina php.ini-ko upload_max_filesize direktiban adierazitakoa baino handiagoa da",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Igotako fitxategiaren tamaina HTML inprimakiko MAX_FILESIZE direktiban adierazitakoa baino handiagoa da",
+"The uploaded file was only partially uploaded" => "Igotako fitxategiaren zati bat baino gehiago ez da igo",
+"No file was uploaded" => "Ez da fitxategirik igo",
+"Missing a temporary folder" => "Aldi baterako karpeta falta da",
+"Files" => "Fitxategiak",
+"Maximum upload size" => "Igo daitekeen gehienezko tamaina",
+"Upload" => "Igo",
+"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
+"Name" => "Izena",
+"Download" => "Deskargatu",
+"Size" => "Tamaina",
+"Modified" => "Aldatuta",
+"Delete" => "Ezabatu",
+"Upload too large" => "Igotakoa handiegia da",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira."
+);
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
new file mode 100644
index 00000000000..cf90223a06a
--- /dev/null
+++ b/apps/files/l10n/fr.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Le fichier téléversé excède la valeur de upload_max_filesize spécifiée dans php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Le fichier téléversé excède la valeur de MAX_FILE_SIZE spécifiée dans le formulaire HTML",
+"The uploaded file was only partially uploaded" => "Le fichier n'a été que partiellement téléversé",
+"No file was uploaded" => "Aucun fichier n'a été téléversé",
+"Missing a temporary folder" => "Il manque un répertoire temporaire",
+"Files" => "Fichiers",
+"Maximum upload size" => "Taille max. d'envoi",
+"New" => "Nouveau",
+"Text file" => "Fichier texte",
+"Folder" => "Dossier",
+"From the web" => "Depuis le web",
+"Upload" => "Envoyer",
+"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
+"Name" => "Nom",
+"Download" => "Téléchargement",
+"Size" => "Taille",
+"Modified" => "Modifié",
+"Delete" => "Supprimer",
+"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."
+);
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
new file mode 100644
index 00000000000..83cf93be795
--- /dev/null
+++ b/apps/files/l10n/gl.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Non hai erros, o ficheiro subeuse con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O ficheiro subido supera a directiva upload_max_filesize no php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro subido supera a directiva MAX_FILE_SIZE que foi indicada no formulario HTML",
+"The uploaded file was only partially uploaded" => "O ficheiro subido foi só parcialmente subido",
+"No file was uploaded" => "Non se subeu ningún ficheiro",
+"Missing a temporary folder" => "Falta un cartafol temporal",
+"Files" => "Ficheiros",
+"Maximum upload size" => "Tamaño máximo de subida",
+"New" => "Novo",
+"Text file" => "Ficheiro de texto",
+"Folder" => "Cartafol",
+"From the web" => "Desde a rede",
+"Upload" => "Subir",
+"Nothing in here. Upload something!" => "Nada por aquí. Sube algo!",
+"Name" => "Nome",
+"Download" => "Baixar",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"Delete" => "Eliminar",
+"Upload too large" => "Subida demasiado grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que tratas de subir superan o tamaño máximo permitido neste servidor"
+);
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
new file mode 100644
index 00000000000..79ae1edb7a5
--- /dev/null
+++ b/apps/files/l10n/he.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "לא אירעה תקלה, הקבצים הועלו בהצלחה",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "הקובץ שהועלה חרג מההנחיה upload_max_filesize בקובץ php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "הקובץ שהועלה חרג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML",
+"The uploaded file was only partially uploaded" => "הקובץ שהועלה הועלה בצורה חלקית",
+"No file was uploaded" => "לא הועלו קבצים",
+"Missing a temporary folder" => "תיקייה זמנית חסרה",
+"Files" => "קבצים",
+"Maximum upload size" => "גודל העלאה מקסימלי",
+"Upload" => "העלאה",
+"Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
+"Name" => "שם",
+"Download" => "הורדה",
+"Size" => "גודל",
+"Modified" => "זמן שינוי",
+"Delete" => "מחיקה",
+"Upload too large" => "העלאה גדולה מידי",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה."
+);
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
new file mode 100644
index 00000000000..670e87f6557
--- /dev/null
+++ b/apps/files/l10n/hr.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Datoteka je poslana uspješno i bez pogrešaka",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Poslana datoteka izlazi iz okvira upload_max_size direktive postavljene u php.ini konfiguracijskoj datoteci",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslana datoteka izlazi iz okvira MAX_FILE_SIZE direktive postavljene u HTML obrascu",
+"The uploaded file was only partially uploaded" => "Datoteka je poslana samo djelomično",
+"No file was uploaded" => "Ni jedna datoteka nije poslana",
+"Missing a temporary folder" => "Nedostaje privremena mapa",
+"Files" => "Datoteke",
+"Maximum upload size" => "Maksimalna veličina prijenosa",
+"Upload" => "Pošalji",
+"Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!",
+"Name" => "Naziv",
+"Download" => "Preuzmi",
+"Size" => "Veličina",
+"Modified" => "Zadnja promjena",
+"Delete" => "Briši",
+"Upload too large" => "Prijenos je preobiman",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju."
+);
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
new file mode 100644
index 00000000000..a176ffce647
--- /dev/null
+++ b/apps/files/l10n/hu_HU.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nincs hiba, a fájl sikeresen feltöltve.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "A feltöltött file meghaladja az upload_max_filesize direktívát a php.ini-ben.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "A feltöltött fájl meghaladja a MAX_FILE_SIZE direktívát ami meghatározott a HTML form-ban.",
+"The uploaded file was only partially uploaded" => "Az eredeti fájl csak részlegesen van feltöltve.",
+"No file was uploaded" => "Nem lett fájl feltöltve.",
+"Missing a temporary folder" => "Hiányzik az ideiglenes könyvtár",
+"Files" => "Fájlok",
+"Maximum upload size" => "Maximális feltölthető fájlméret",
+"Upload" => "Feltöltés",
+"Nothing in here. Upload something!" => "Töltsön fel egy fájlt.",
+"Name" => "Név",
+"Download" => "Letöltés",
+"Size" => "Méret",
+"Modified" => "Módosítva",
+"Delete" => "Törlés",
+"Upload too large" => "Feltöltés túl nagy",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen a szerveren."
+);
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
new file mode 100644
index 00000000000..8753b871c9e
--- /dev/null
+++ b/apps/files/l10n/ia.php
@@ -0,0 +1,17 @@
+<?php $TRANSLATIONS = array(
+"The uploaded file was only partially uploaded" => "Le file incargate solmente esseva incargate partialmente",
+"No file was uploaded" => "Nulle file esseva incargate",
+"Files" => "Files",
+"Maximum upload size" => "Dimension maxime de incargamento",
+"New" => "Nove",
+"Text file" => "File de texto",
+"Folder" => "Dossier",
+"Upload" => "Incargar",
+"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
+"Name" => "Nomine",
+"Download" => "Discargar",
+"Size" => "Dimension",
+"Modified" => "Modificate",
+"Delete" => "Deler",
+"Upload too large" => "Incargamento troppo longe"
+);
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
new file mode 100644
index 00000000000..902eeeb4ec2
--- /dev/null
+++ b/apps/files/l10n/id.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Files" => "Berkas",
+"Maximum upload size" => "Ukuran unggah maksimum",
+"Upload" => "Unggah",
+"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
+"Name" => "Nama",
+"Download" => "Unduh",
+"Size" => "Ukuran",
+"Modified" => "Dimodifikasi",
+"Delete" => "Hapus",
+"Upload too large" => "Unggahan terlalu besar",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini."
+);
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
new file mode 100644
index 00000000000..919ff0b5aae
--- /dev/null
+++ b/apps/files/l10n/it.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Il file caricato supera il valore upload_max_filesize in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Il file caricato supera il valore MAX_FILE_SIZE definito nel form HTML",
+"The uploaded file was only partially uploaded" => "Il file è stato parzialmente caricato",
+"No file was uploaded" => "Nessun file è stato caricato",
+"Missing a temporary folder" => "Cartella temporanea mancante",
+"Files" => "File",
+"Maximum upload size" => "Dimensione massima upload",
+"New" => "Nuovo",
+"Text file" => "File di testo",
+"Folder" => "Cartella",
+"From the web" => "Dal web",
+"Upload" => "Carica",
+"Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
+"Name" => "Nome",
+"Download" => "Scarica",
+"Size" => "Dimensione",
+"Modified" => "Modificato",
+"Delete" => "Cancella",
+"Upload too large" => "Il file caricato è troppo grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server."
+);
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
new file mode 100644
index 00000000000..24c4e36ee6e
--- /dev/null
+++ b/apps/files/l10n/ja_JP.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました。",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "アップロードされたファイルはphp.iniのupload_max_filesizeに設定されたサイズを超えています",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "アップロードされたファイルはHTMLのフォームに設定されたMAX_FILE_SIZEに設定されたサイズを超えています",
+"The uploaded file was only partially uploaded" => "ファイルは一部分しかアップロードされませんでした",
+"No file was uploaded" => "ファイルはアップロードされませんでした",
+"Missing a temporary folder" => "テンポラリフォルダが見つかりません",
+"Files" => "ファイル",
+"Maximum upload size" => "最大アップロードサイズ",
+"New" => "新規作成",
+"Text file" => "テキストファイル",
+"Folder" => "フォルダ",
+"From the web" => "ウェブ経由",
+"Upload" => "アップロード",
+"Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。",
+"Name" => "名前",
+"Download" => "ダウンロード",
+"Size" => "サイズ",
+"Modified" => "更新日時",
+"Delete" => "削除",
+"Upload too large" => "ファイルサイズが大きすぎます",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルはサーバで規定された最大サイズを超えています"
+);
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
new file mode 100644
index 00000000000..43956fcd63e
--- /dev/null
+++ b/apps/files/l10n/lb.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Keen Feeler, Datei ass komplett ropgelueden ginn",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Déi ropgelueden Datei ass méi grouss wei d'upload_max_filesize Eegenschaft an der php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass",
+"The uploaded file was only partially uploaded" => "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn",
+"No file was uploaded" => "Et ass keng Datei ropgelueden ginn",
+"Missing a temporary folder" => "Et feelt en temporären Dossier",
+"Files" => "Dateien",
+"Maximum upload size" => "Maximum Upload Gréisst ",
+"Upload" => "Eroplueden",
+"Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
+"Name" => "Numm",
+"Download" => "Eroflueden",
+"Size" => "Gréisst",
+"Modified" => "Geännert",
+"Delete" => "Läschen",
+"Upload too large" => "Upload ze grouss",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass."
+);
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
new file mode 100644
index 00000000000..1bec35e0f8c
--- /dev/null
+++ b/apps/files/l10n/lt_LT.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Klaidų nėra, failas įkeltas sėkmingai",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Įkeliamo failo dydis viršija upload_max_filesize parametrą php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Įkeliamo failo dydis viršija MAX_FILE_SIZE parametrą, kuris yra nustatytas HTML formoje",
+"The uploaded file was only partially uploaded" => "Failas buvo įkeltas tik dalinai",
+"No file was uploaded" => "Nebuvo įkeltas nė vienas failas",
+"Missing a temporary folder" => "Nėra laikinojo katalogo",
+"Files" => "Failai",
+"Maximum upload size" => "Maksimalus failo dydis",
+"Upload" => "Įkelti",
+"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
+"Name" => "Pavadinimas",
+"Download" => "Atsisiųsti",
+"Size" => "Dydis",
+"Modified" => "Pakeista",
+"Delete" => "Ištrinti",
+"Upload too large" => "Įkėlimui failas per didelis",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
+);
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
new file mode 100644
index 00000000000..038ffd521a0
--- /dev/null
+++ b/apps/files/l10n/ms_MY.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Files" => "fail",
+"Maximum upload size" => "Saiz maksimum muat naik",
+"Upload" => "Muat naik",
+"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
+"Name" => "Nama ",
+"Download" => "Muat turun",
+"Size" => "Saiz",
+"Modified" => "Dimodifikasi",
+"Delete" => "Padam",
+"Upload too large" => "Muat naik terlalu besar",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
+);
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
new file mode 100644
index 00000000000..c4ef4989a58
--- /dev/null
+++ b/apps/files/l10n/nb_NO.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Files" => "Filer",
+"Maximum upload size" => "Maksimum opplastingsstørrelse",
+"Upload" => "Last opp",
+"Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
+"Name" => "Navn",
+"Download" => "Last ned",
+"Size" => "Størrelse",
+"Modified" => "Endret",
+"Delete" => "Slett",
+"Upload too large" => "Opplasting for stor",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren."
+);
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
new file mode 100644
index 00000000000..36b4695a476
--- /dev/null
+++ b/apps/files/l10n/nl.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Het geüploade bestand is groter dan de upload_max_filesize instelling in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Het geüploade bestand is groter dan de MAX_FILE_SIZE richtlijn die is opgegeven in de HTML-formulier",
+"The uploaded file was only partially uploaded" => "Het bestand is slechts gedeeltelijk geupload",
+"No file was uploaded" => "Geen bestand geüpload",
+"Missing a temporary folder" => "Een tijdelijke map mist",
+"Files" => "Bestanden",
+"Maximum upload size" => "Maximale bestandsgrootte voor uploads",
+"New" => "Nieuw",
+"Text file" => "Tekstbestand",
+"Folder" => "Map",
+"From the web" => "Van het internet",
+"Upload" => "Upload",
+"Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
+"Name" => "Naam",
+"Download" => "Download",
+"Size" => "Bestandsgrootte",
+"Modified" => "Laatst aangepast",
+"Delete" => "Verwijder",
+"Upload too large" => "Bestanden te groot",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server."
+);
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
new file mode 100644
index 00000000000..34f2f6be960
--- /dev/null
+++ b/apps/files/l10n/nn_NO.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ingen feil, fila vart lasta opp",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den opplasta fila er større enn variabelen upload_max_filesize i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den opplasta fila er større enn variabelen MAX_FILE_SIZE i HTML-skjemaet",
+"The uploaded file was only partially uploaded" => "Fila vart berre delvis lasta opp",
+"No file was uploaded" => "Ingen filer vart lasta opp",
+"Missing a temporary folder" => "Manglar ei mellombels mappe",
+"Files" => "Filer",
+"Maximum upload size" => "Maksimal opplastingsstorleik",
+"Upload" => "Last opp",
+"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
+"Name" => "Namn",
+"Download" => "Last ned",
+"Size" => "Storleik",
+"Modified" => "Endra",
+"Delete" => "Slett",
+"Upload too large" => "For stor opplasting",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
+);
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
new file mode 100644
index 00000000000..d110f52ab1d
--- /dev/null
+++ b/apps/files/l10n/pl.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Brak błędu, plik przesłany z sukcesem",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Przesłany plik przekracza ustawienie upload_max_filesize w pliku php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Przesłany plik przekracza MAX_FILE_SIZE ustawienia, które zostało określono w formularzu HTML",
+"The uploaded file was only partially uploaded" => "Plik został przesłany tylko częściowo.",
+"No file was uploaded" => "Żaden plik nie został przesłany",
+"Missing a temporary folder" => "Brakuje folderu tymczasowego",
+"Files" => "Pliki",
+"Maximum upload size" => "Maksymalna wielkość przesyłanego pliku",
+"New" => "Nowy",
+"Text file" => "Plik tekstowy",
+"Folder" => "Katalog",
+"From the web" => "Z Internetu",
+"Upload" => "Prześlij",
+"Nothing in here. Upload something!" => "Nic tu nie ma. Prześlij jakieś pliki!",
+"Name" => "Nazwa",
+"Download" => "Ściąganie",
+"Size" => "Wielkość",
+"Modified" => "Zmodyfikowano",
+"Delete" => "Skasuj",
+"Upload too large" => "Przesyłany plik jest za duży",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość."
+);
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
new file mode 100644
index 00000000000..57b1af2ae6d
--- /dev/null
+++ b/apps/files/l10n/pt_BR.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Não houve nenhum erro, o arquivo foi transferido com sucesso",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O tamanho do arquivo excede o limed especifiicado em upload_max_filesize no php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O arquivo carregado excede o MAX_FILE_SIZE que foi especificado no formulário HTML",
+"The uploaded file was only partially uploaded" => "O arquivo foi transferido parcialmente",
+"No file was uploaded" => "Nenhum arquivo foi transferido",
+"Missing a temporary folder" => "Pasta temporária não encontrada",
+"Files" => "Arquivos",
+"Maximum upload size" => "Tamanho máximo para carregar",
+"Upload" => "Carregar",
+"Nothing in here. Upload something!" => "Nada aqui.Carregar alguma coisa!",
+"Name" => "Nome",
+"Download" => "Baixar",
+"Size" => "Tamanho",
+"Modified" => "Modificado",
+"Delete" => "Excluir",
+"Upload too large" => "Arquivo muito grande",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor."
+);
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
new file mode 100644
index 00000000000..9d8d6e2d5df
--- /dev/null
+++ b/apps/files/l10n/ro.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nu am întâmpinat nici eroare, fișierul a fost încărcat cu success",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Fișierul are o dimensiune mai mare decât cea specificată în variabila upload_max_filesize din php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Fișierul are o dimensiune mai mare decât variabile MAX_FILE_SIZE specificată în formularul HTML",
+"The uploaded file was only partially uploaded" => "Fișierul a fost încărcat doar parțial",
+"No file was uploaded" => "Nu a fost încărcat nici un fișier",
+"Missing a temporary folder" => "Lipsă folder temporar",
+"Files" => "Fișiere",
+"Maximum upload size" => "Dimensiunea maximă",
+"New" => "Nou",
+"Text file" => "Fișier text",
+"Folder" => "Dosar",
+"From the web" => "De pe internet",
+"Upload" => "Încarcă",
+"Nothing in here. Upload something!" => "Nici un fișier, încarcă ceva!",
+"Name" => "Nume",
+"Download" => "Descarcă",
+"Size" => "Dimensiune",
+"Modified" => "Modificat",
+"Delete" => "Șterge",
+"Upload too large" => "Fișierul este prea mare",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fost depășită limita maximă pentru încărcare."
+);
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
new file mode 100644
index 00000000000..88a6d8ee19c
--- /dev/null
+++ b/apps/files/l10n/ru.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Файл успешно загружен",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Файл превышает допустимые размеры (описаны как upload_max_filesize в php.ini)",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Файл превышает размер MAX_FILE_SIZE, указаный в HTML-форме",
+"The uploaded file was only partially uploaded" => "Файл был частично загружен",
+"No file was uploaded" => "Файл не был загружен",
+"Missing a temporary folder" => "Невозможно найти временную директорию",
+"Files" => "Файлы",
+"Maximum upload size" => "Максимальный размер файла",
+"New" => "Новый",
+"Text file" => "Текстовый файл",
+"Folder" => "Папка",
+"From the web" => "Из интернета",
+"Upload" => "Закачать",
+"Nothing in here. Upload something!" => "Здесь ничего нет. Закачайте что-нибудь!",
+"Name" => "Название",
+"Download" => "Скачать",
+"Size" => "Размер",
+"Modified" => "Изменен",
+"Delete" => "Удалить",
+"Upload too large" => "Файл слишком большой",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файлы, которые Вы пытаетесь закачать, превышают лимит для файлов на этом сервере."
+);
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
new file mode 100644
index 00000000000..0d91ae35a51
--- /dev/null
+++ b/apps/files/l10n/sk_SK.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Nahraný súbor presiahol direktívu upload_max_filesize v php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Nahrávaný súbor presiahol MAX_FILE_SIZE direktívu, ktorá bola špecifikovaná v HTML formulári",
+"The uploaded file was only partially uploaded" => "Nahrávaný súbor bol iba čiastočne nahraný",
+"No file was uploaded" => "Žiaden súbor nebol nahraný",
+"Missing a temporary folder" => "Chýbajúci dočasný priečinok",
+"Files" => "Súbory",
+"Maximum upload size" => "Maximálna veľkosť nahratia",
+"New" => "Nový",
+"Text file" => "Textový súbor",
+"Folder" => "Priečinok",
+"From the web" => "Z webu",
+"Upload" => "Nahrať",
+"Nothing in here. Upload something!" => "Nič tu nie je. Nahrakte niečo!",
+"Name" => "Meno",
+"Download" => "Stiahnuť",
+"Size" => "Veľkosť",
+"Modified" => "Upravené",
+"Delete" => "Odstrániť",
+"Upload too large" => "Nahrávanie príliš veľké",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie súborov na tento server."
+);
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
new file mode 100644
index 00000000000..5a09e0fe20b
--- /dev/null
+++ b/apps/files/l10n/sl.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "datoteka je bila naložena uspešno.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Velikost željene naložene datoteke je prevelika. (upload_max_filesize - php.ini) Kontaktirajte Administratorja.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Velikost željene naložene datoteke je prevelika. (MAX_FILE_SIZE - html formi) Kontaktirajte Administratorja.",
+"The uploaded file was only partially uploaded" => "Datoteka je bila le delno naložena.",
+"No file was uploaded" => "Naloženih ni bilo nič Datotek.",
+"Missing a temporary folder" => "Ni potrebne začasne datoteke. (temporary folder)",
+"Files" => "Datoteke",
+"Maximum upload size" => "Maksimalna velikost",
+"Upload" => "Naloži gor",
+"Nothing in here. Upload something!" => "Naloženih še ni bilo nič datotek.",
+"Name" => "Ime",
+"Download" => "Naloži dol",
+"Size" => "Velikost",
+"Modified" => "Urejeno",
+"Delete" => "Izbriši",
+"Upload too large" => "Nalaganje ni mogoče, ker je preveliko.",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke ki jih želiš naložiti presegajo maksimalno velikost na tem strežniku. Kontaktirajte Administratorja."
+);
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
new file mode 100644
index 00000000000..7e2ac3b1366
--- /dev/null
+++ b/apps/files/l10n/sr.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Нема грешке, фајл је успешно послат",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Послати фајл превазилази директиву upload_max_filesize из ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Послати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ форми",
+"The uploaded file was only partially uploaded" => "Послати фајл је само делимично отпремљен!",
+"No file was uploaded" => "Ниједан фајл није послат",
+"Missing a temporary folder" => "Недостаје привремена фасцикла",
+"Files" => "Фајлови",
+"Maximum upload size" => "Максимална величина пошиљке",
+"New" => "Нови",
+"Text file" => "текстуални фајл",
+"Folder" => "фасцикла",
+"From the web" => "са веба",
+"Upload" => "Пошаљи",
+"Nothing in here. Upload something!" => "Овде нема ничег. Пошаљите нешто!",
+"Name" => "Име",
+"Download" => "Преузми",
+"Size" => "Величина",
+"Modified" => "Задња измена",
+"Delete" => "Обриши",
+"Upload too large" => "Пошиљка је превелика",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Фајлови које желите да пошаљете превазилазе ограничење максималне величине пошиљке на овом серверу."
+);
diff --git a/apps/files/l10n/sr@latin.php b/apps/files/l10n/sr@latin.php
new file mode 100644
index 00000000000..1b5addbc571
--- /dev/null
+++ b/apps/files/l10n/sr@latin.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nema greške, fajl je uspešno poslat",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Poslati fajl prevazilazi direktivu upload_max_filesize iz ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi",
+"The uploaded file was only partially uploaded" => "Poslati fajl je samo delimično otpremljen!",
+"No file was uploaded" => "Nijedan fajl nije poslat",
+"Missing a temporary folder" => "Nedostaje privremena fascikla",
+"Files" => "Fajlovi",
+"Maximum upload size" => "Maksimalna veličina pošiljke",
+"Upload" => "Pošalji",
+"Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!",
+"Name" => "Ime",
+"Download" => "Preuzmi",
+"Size" => "Veličina",
+"Modified" => "Zadnja izmena",
+"Delete" => "Obriši",
+"Upload too large" => "Pošiljka je prevelika",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru."
+);
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
new file mode 100644
index 00000000000..dfd32f3f5c2
--- /dev/null
+++ b/apps/files/l10n/sv.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-formulär",
+"The uploaded file was only partially uploaded" => "Den uppladdade filen var endast delvist uppladdad",
+"No file was uploaded" => "Ingen fil blev uppladdad",
+"Missing a temporary folder" => "Saknar en tillfällig mapp",
+"Files" => "Filer",
+"Maximum upload size" => "Maximal storlek att lägga upp",
+"Upload" => "Ladda upp",
+"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
+"Name" => "Namn",
+"Download" => "Ladda ned",
+"Size" => "Storlek",
+"Modified" => "Ändrad",
+"Delete" => "Ta bort",
+"Upload too large" => "För stor uppladdning",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern."
+);
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
new file mode 100644
index 00000000000..e7e2fb94b1e
--- /dev/null
+++ b/apps/files/l10n/th_TH.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "ไฟล์ที่อัพโหลดมีขนาดเกินคำสั่ง upload_max_filesize ที่ระบุเอาไว้ในไฟล์ php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "ไฟล์ที่อัพโหลดมีขนาดเกินคำสั่ง MAX_FILE_SIZE ที่ระบุเอาไว้ในรูปแบบคำสั่งในภาษา HTML",
+"The uploaded file was only partially uploaded" => "ไฟล์ที่อัพโหลดยังไม่ได้ถูกอัพโหลดอย่างสมบูรณ์",
+"No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด",
+"Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย",
+"Files" => "ไฟล์",
+"Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
+"New" => "อัพโหลดไฟล์ใหม่",
+"Text file" => "ไฟล์ข้อความ",
+"Folder" => "แฟ้มเอกสาร",
+"From the web" => "จากเวป",
+"Upload" => "อัพโหลด",
+"Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
+"Name" => "ชื่อ",
+"Download" => "ดาวน์โหลด",
+"Size" => "ขนาด",
+"Modified" => "ปรับปรุงล่าสุด",
+"Delete" => "ลบ",
+"Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
+);
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
new file mode 100644
index 00000000000..5fc46056175
--- /dev/null
+++ b/apps/files/l10n/tr.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Yüklenen dosya php.ini de belirtilen upload_max_filesize sınırını aşıyor",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Yüklenen dosya HTML formundaki MAX_FILE_SIZE sınırını aşıyor",
+"The uploaded file was only partially uploaded" => "Yüklenen dosyanın sadece bir kısmı yüklendi",
+"No file was uploaded" => "Hiç dosya yüklenmedi",
+"Missing a temporary folder" => "Geçici bir klasör eksik",
+"Files" => "Dosyalar",
+"Maximum upload size" => "Maksimum yükleme boyutu",
+"Upload" => "Yükle",
+"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
+"Name" => "Ad",
+"Download" => "İndir",
+"Size" => "Boyut",
+"Modified" => "Değiştirilme",
+"Delete" => "Sil",
+"Upload too large" => "Yüklemeniz çok büyük",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor."
+);
diff --git a/apps/files/l10n/xgettextfiles b/apps/files/l10n/xgettextfiles
new file mode 100644
index 00000000000..9e22680e455
--- /dev/null
+++ b/apps/files/l10n/xgettextfiles
@@ -0,0 +1,5 @@
+../appinfo/app.php
+../templates/index.php
+../templates/part.list.php
+../js/filelist.js
+../js/files.js
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
new file mode 100644
index 00000000000..ab23a55d29e
--- /dev/null
+++ b/apps/files/l10n/zh_CN.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "没有发生错误,文件上传成功。",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "上传的文件大小超过了php.ini 中指定的upload_max_filesize",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上传的文件超过了在HTML 表单中指定的MAX_FILE_SIZE",
+"The uploaded file was only partially uploaded" => "只上传了文件的一部分",
+"No file was uploaded" => "文件没有上传",
+"Missing a temporary folder" => "缺少临时目录",
+"Files" => "文件",
+"Maximum upload size" => "最大上传大小",
+"New" => "新建",
+"Text file" => "文本文件",
+"Folder" => "文件夹",
+"From the web" => "来自网络",
+"Upload" => "上传",
+"Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!",
+"Name" => "名称",
+"Download" => "下载",
+"Size" => "大小",
+"Modified" => "修改日期",
+"Delete" => "删除",
+"Upload too large" => "上传文件过大",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大大小"
+);
diff --git a/apps/files/settings.php b/apps/files/settings.php
new file mode 100644
index 00000000000..c47eb130095
--- /dev/null
+++ b/apps/files/settings.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+* ownCloud - ajax frontend
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.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/>.
+*
+*/
+
+
+// Init owncloud
+require_once('../lib/base.php');
+
+// Check if we are a user
+OC_Util::checkLoggedIn();
+
+// Load the files we need
+OC_Util::addStyle( "files", "files" );
+OC_Util::addScript( "files", "files" );
+
+// Load the files
+$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+
+$files = array();
+foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
+ $i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] );
+ $files[] = $i;
+}
+
+// Make breadcrumb
+$breadcrumb = array();
+$pathtohere = "/";
+foreach( explode( "/", $dir ) as $i ){
+ if( $i != "" ){
+ $pathtohere .= "$i/";
+ $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
+ }
+}
+
+// return template
+$tmpl = new OC_Template( "files", "index", "user" );
+$tmpl->assign( 'files', $files );
+$tmpl->assign( "breadcrumb", $breadcrumb );
+$tmpl->printPage();
+
+?>
diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php
new file mode 100644
index 00000000000..9bcc40e9361
--- /dev/null
+++ b/apps/files/templates/admin.php
@@ -0,0 +1,15 @@
+<?php OC_Util::addScript('files','admin'); ?>
+
+<form name="filesForm" action='#' method='post'>
+ <fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('File handling');?></strong></legend>
+ <?php if($_['htaccessWorking']):?>
+ <label for="maxUploadSize"><?php echo $l->t( 'Maximum upload size' ); ?> </label><input name='maxUploadSize' id="maxUploadSize" value='<?php echo $_['uploadMaxFilesize'] ?>'/>(<?php echo $l->t('max. possible: '); echo $_['maxPossibleUploadSize'] ?>)<br/>
+ <?php endif;?>
+ <input type="checkbox" name="allowZipDownload" id="allowZipDownload" value="1" title="<?php echo $l->t( 'Needed for multi-file and folder downloads.' ); ?>"<?php if ($_['allowZipDownload']) echo ' checked="checked"'; ?> /> <label for="allowZipDownload"><?php echo $l->t( 'Enable ZIP-download' ); ?></label> <br/>
+ <fieldset class="personalblock">
+ <label for="maxZipInputSize"><?php echo $l->t( 'Maximum input size for ZIP files:' ); ?> </label><input name="maxZipInputSize" id="maxZipInputSize" value='<?php echo $_['maxZipInputSize'] ?>' title="<?php echo $l->t( '0 is unlimited' ); ?>"<?php if (!$_['allowZipDownload']) echo ' disabled="disabled"'; ?> /><br/>
+ </fieldset>
+ <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" value="Save"/>
+ </fieldset>
+</form>
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
new file mode 100644
index 00000000000..b21cf0aeb02
--- /dev/null
+++ b/apps/files/templates/index.php
@@ -0,0 +1,74 @@
+<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
+<div id="controls">
+ <?php echo($_['breadcrumb']); ?>
+ <?php if (!isset($_['readonly']) || !$_['readonly']):?>
+ <div class="actions <?php if (isset($_['files']) and ! $_['readonly'] and count($_['files'])==0):?>emptyfolder<?php endif; ?>">
+ <div id='new' class='button'>
+ <a><?php echo $l->t('New');?></a>
+ <ul class="popup popupTop">
+ <li style="background-image:url('<?php echo mimetype_icon('text/plain') ?>')" data-type='file'><p><?php echo $l->t('Text file');?></p></li>
+ <li style="background-image:url('<?php echo mimetype_icon('dir') ?>')" data-type='folder'><p><?php echo $l->t('Folder');?></p></li>
+ <li style="background-image:url('<?php echo image_path('core','actions/public.png') ?>')" data-type='web'><p><?php echo $l->t('From url');?></p></li>
+ </ul>
+ </div>
+ <div class="file_upload_wrapper svg">
+ <form data-upload-id='1' class="file_upload_form" action="ajax/upload.php" method="post" enctype="multipart/form-data" target="file_upload_target_1">
+ <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
+ <input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
+ <input type="hidden" name="dir" value="<?php echo htmlentities($_['dir']) ?>" id="dir">
+ <button class="file_upload_filename">&nbsp;<img class='svg action' alt="Upload" src="<?php echo image_path("core", "actions/upload.svg"); ?>" /></button>
+ <input class="file_upload_start" type="file" name='files[]'/>
+ <a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo $l->t('Upload'); echo ' max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
+ <iframe name="file_upload_target_1" class='file_upload_target' src=""></iframe>
+ </form>
+ </div>
+ </div>
+ <div id="file_action_panel"></div>
+ <?php else:?>
+ <input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
+ <?php endif;?>
+</div>
+<div id='notification'></div>
+
+<?php if (isset($_['files']) and ! $_['readonly'] and count($_['files'])==0):?>
+ <div id="emptyfolder"><?php echo $l->t('Nothing in here. Upload something!')?></div>
+<?php endif; ?>
+
+<table>
+ <thead>
+ <tr>
+ <th id='headerName'>
+ <?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" id="select_all" /><?php } ?>
+ <span class='name'><?php echo $l->t( 'Name' ); ?></span>
+ <span class='selectedActions'>
+ <a href="" class="share"><img class='svg' alt="Share" src="<?php echo image_path("core", "actions/share.svg"); ?>" /> <?php echo $l->t('Share')?></a>
+ <?php if($_['allowZipDownload']) : ?>
+ <a href="" class="download"><img class='svg' alt="Download" src="<?php echo image_path("core", "actions/download.svg"); ?>" /> <?php echo $l->t('Download')?></a>
+ <?php endif; ?>
+ </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 all')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo image_path("core", "actions/delete.svg"); ?>" /></a></span></th>
+ </tr>
+ </thead>
+ <tbody id="fileList" data-readonly="<?php echo $_['readonly'];?>">
+ <?php echo($_['fileList']); ?>
+ </tbody>
+</table>
+<div id="editor"></div>
+<div id="uploadsize-message" title="<?php echo $l->t('Upload too large')?>">
+ <p>
+ <?php echo $l->t('The files you are trying to upload exceed the maximum size for file uploads on this server.');?>
+ </p>
+</div>
+<div id="scanning-message">
+ <h3>
+ <?php echo $l->t('Files are being scanned, please wait.');?> <span id='scan-count'></span>
+ </h3>
+ <p>
+ <?php echo $l->t('Current scanning');?> <span id='scan-current'></span>
+ </p>
+</div>
+
+<!-- config hints for javascript -->
+<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php echo $_['allowZipDownload']; ?>" />
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
new file mode 100644
index 00000000000..16da6bb97b4
--- /dev/null
+++ b/apps/files/templates/part.breadcrumb.php
@@ -0,0 +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 image_path('core','breadcrumb.png');?>")'>
+ <a href="<?php echo $_['baseURL'].$crumb["dir"]; ?>"><?php echo htmlentities($crumb["name"]); ?></a>
+ </div>
+ <?php endfor;?> \ No newline at end of file
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
new file mode 100644
index 00000000000..5a5941fc7ae
--- /dev/null
+++ b/apps/files/templates/part.list.php
@@ -0,0 +1,29 @@
+ <?php foreach($_['files'] as $file):
+ $write = ($file['writable']) ? 'true' : 'false';
+ $simple_file_size = simple_file_size($file['size']);
+ $simple_size_color = intval(200-$file['size']/(1024*1024)*2); // the bigger the file, the darker the shade of grey; megabytes*2
+ if($simple_size_color<0) $simple_size_color = 0;
+ $relative_modified_date = relative_modified_date($file['mtime']);
+ $relative_date_color = round((time()-$file['mtime'])/60/60/24*14); // the older the file, the brighter the shade of grey; days*14
+ if($relative_date_color>200) $relative_date_color = 200;
+ $name = str_replace('+','%20',urlencode($file['name']));
+ $name = str_replace('%2F','/', $name);
+ $directory = str_replace('+','%20',urlencode($file['directory']));
+ $directory = str_replace('%2F','/', $directory); ?>
+ <tr data-file="<?php echo $name;?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mimetype']?>" data-size='<?php echo $file['size'];?>' data-write='<?php echo $write;?>'>
+ <td class="filename svg" style="background-image:url(<?php if($file['type'] == 'dir') echo mimetype_icon('dir'); else echo mimetype_icon($file['mimetype']); ?>)">
+ <?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" /><?php } ?>
+ <a class="name" href="<?php if($file['type'] == 'dir') echo $_['baseURL'].$directory.'/'.$name; else echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
+ <span class="nametext">
+ <?php if($file['type'] == 'dir'):?>
+ <?php echo htmlspecialchars($file['name']);?>
+ <?php else:?>
+ <?php echo htmlspecialchars($file['basename']);?><span class='extension'><?php echo $file['extension'];?></span>
+ <?php endif;?>
+ </span>
+ </a>
+ </td>
+ <td class="filesize" title="<?php echo human_file_size($file['size']); ?>" style="color:rgb(<?php echo $simple_size_color.','.$simple_size_color.','.$simple_size_color ?>)"><?php echo $simple_file_size; ?></td>
+ <td class="date"><span class="modified" title="<?php echo $file['date']; ?>" style="color:rgb(<?php echo $relative_date_color.','.$relative_date_color.','.$relative_date_color ?>)"><?php echo $relative_modified_date; ?></span></td>
+ </tr>
+ <?php endforeach; ?>
diff --git a/apps/files/webdav.php b/apps/files/webdav.php
new file mode 100644
index 00000000000..25e33024470
--- /dev/null
+++ b/apps/files/webdav.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Frank Karlitschek
+ * @author Jakob Sack
+ * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @copyright 2011 Jakob Sack kde@jakobsack.de
+ *
+ * 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/>.
+ *
+ */
+
+// Do not load FS ...
+$RUNTIME_NOSETUPFS = true;
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem','authentication');
+
+require_once('../lib/base.php');
+
+// Backends
+$authBackend = new OC_Connector_Sabre_Auth();
+$lockBackend = new OC_Connector_Sabre_Locks();
+
+// Create ownCloud Dir
+$publicDir = new OC_Connector_Sabre_Directory('');
+
+// Fire up server
+$server = new Sabre_DAV_Server($publicDir);
+$server->setBaseUri(OC::$WEBROOT.'/files/webdav.php');
+
+// Load plugins
+$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud'));
+$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
+$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
+
+// And off we go!
+$server->exec();