aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/js/filelist.js5
-rwxr-xr-xapps/files_external/lib/dropbox.php6
-rw-r--r--apps/files_external/lib/swift.php4
-rw-r--r--apps/files_external/lib/webdav.php1
-rw-r--r--apps/files_trashbin/ajax/delete.php39
-rw-r--r--apps/files_trashbin/js/filelist.js7
-rw-r--r--apps/files_trashbin/js/trash.js48
-rw-r--r--apps/files_trashbin/templates/index.php4
-rw-r--r--core/css/styles.css2
-rw-r--r--lib/base.php27
-rw-r--r--lib/private/connector/sabre/filesplugin.php12
11 files changed, 119 insertions, 36 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 5cab0707bda..66453740f5d 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -691,8 +691,9 @@ var FileList={
var $fileList = $('#fileList');
var permissions = $('#permissions').val();
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
- $('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').exists());
- $('#filestable th').toggleClass('hidden', $fileList.find('tr').exists() === false);
+ var exists = $fileList.find('tr:first').exists();
+ $('#emptycontent').toggleClass('hidden', !isCreatable || exists);
+ $('#filestable th').toggleClass('hidden', !exists);
},
showMask: function() {
// in case one was shown before
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 6e464f4e287..5f603b7fe43 100755
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -269,7 +269,11 @@ class Dropbox extends \OC\Files\Storage\Common {
}
public function touch($path, $mtime = null) {
- return false;
+ if ($this->file_exists($path)) {
+ return false;
+ } else {
+ $this->file_put_contents($path, '');
+ }
}
}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index 86938ef3bb9..b615d24ce76 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -364,7 +364,7 @@ class Swift extends \OC\Files\Storage\Common {
'X-Object-Meta-Timestamp' => $mtime
)
);
- $object->Update($settings);
+ return $object->Update($settings);
} else {
$object = $this->container->DataObject();
if (is_null($mtime)) {
@@ -377,7 +377,7 @@ class Swift extends \OC\Files\Storage\Common {
'X-Object-Meta-Timestamp' => $mtime
)
);
- $object->Create($settings);
+ return $object->Create($settings);
}
}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 0837222e511..02f6cb5fc4f 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -234,6 +234,7 @@ class DAV extends \OC\Files\Storage\Common{
} else {
$this->file_put_contents($path, '');
}
+ return true;
}
public function getFile($path, $target) {
diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php
index 92361b65f63..5498250dbf5 100644
--- a/apps/files_trashbin/ajax/delete.php
+++ b/apps/files_trashbin/ajax/delete.php
@@ -3,10 +3,19 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
-$files = $_POST['files'];
-$dirlisting = $_POST['dirlisting'];
-$list = json_decode($files);
-
+// "empty trash" command
+$deleteAll = false;
+if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true'){
+ $user = \OCP\User::getUser();
+ $list = OCA\Files_Trashbin\Helper::getTrashFiles('/');
+ $deleteAll = true;
+ $dirlisting = '0';
+}
+else {
+ $files = $_POST['files'];
+ $dirlisting = $_POST['dirlisting'];
+ $list = json_decode($files);
+}
$error = array();
$success = array();
@@ -14,22 +23,30 @@ $success = array();
$i = 0;
foreach ($list as $file) {
if ( $dirlisting === '0') {
- $delimiter = strrpos($file, '.d');
- $filename = substr($file, 0, $delimiter);
- $timestamp = substr($file, $delimiter+2);
+ if ($deleteAll) {
+ $filename = $file['name'];
+ $timestamp = $file['timestamp'];
+ }
+ else {
+ $delimiter = strrpos($file, '.d');
+ $filename = substr($file, 0, $delimiter);
+ $timestamp = substr($file, $delimiter+2);
+ }
} else {
$filename = $file;
$timestamp = null;
}
OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp);
- if (!OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) {
+ if (OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) {
+ $error[] = $filename;
+ OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR);
+ }
+ // only list deleted files if not deleting everything
+ else if (!$deleteAll) {
$success[$i]['filename'] = $file;
$success[$i]['timestamp'] = $timestamp;
$i++;
- } else {
- $error[] = $filename;
- OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR);
}
}
diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js
index cd5a67ddfe0..f42abb6d029 100644
--- a/apps/files_trashbin/js/filelist.js
+++ b/apps/files_trashbin/js/filelist.js
@@ -22,3 +22,10 @@ FileList.reload = function(){
FileList.linkTo = function(dir){
return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
}
+
+FileList.updateEmptyContent = function(){
+ var $fileList = $('#fileList');
+ var exists = $fileList.find('tr:first').exists();
+ $('#emptycontent').toggleClass('hidden', exists);
+ $('#filestable th').toggleClass('hidden', !exists);
+}
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
index 4e6a1e93fa4..84c23d66992 100644
--- a/apps/files_trashbin/js/trash.js
+++ b/apps/files_trashbin/js/trash.js
@@ -19,6 +19,7 @@ $(document).ready(function() {
}
enableActions();
FileList.updateFileSummary();
+ FileList.updateEmptyContent();
}
);
@@ -45,6 +46,7 @@ $(document).ready(function() {
}
enableActions();
FileList.updateFileSummary();
+ FileList.updateEmptyContent();
}
);
@@ -122,34 +124,60 @@ $(document).ready(function() {
}
enableActions();
FileList.updateFileSummary();
+ FileList.updateEmptyContent();
}
);
});
$('.delete').click('click', function(event) {
event.preventDefault();
- var files = getSelectedFiles('file');
- var fileslist = JSON.stringify(files);
- var dirlisting = getSelectedFiles('dirlisting')[0];
+ var allFiles = $('#select_all').is(':checked');
+ var files = [];
+ var params = {};
+ if (allFiles) {
+ params = {
+ allfiles: true
+ };
+ }
+ else {
+ files = getSelectedFiles('file');
+ params = {
+ files: JSON.stringify(files),
+ dirlisting: getSelectedFiles('dirlisting')[0]
+ };
+ };
disableActions();
- for (var i = 0; i < files.length; i++) {
- var deleteAction = $('tr').filterAttr('data-file', files[i]).children("td.date").children(".action.delete");
- deleteAction.removeClass('delete-icon').addClass('progress-icon');
+ if (allFiles) {
+ FileList.showMask();
+ }
+ else {
+ for (var i = 0; i < files.length; i++) {
+ var deleteAction = $('tr').filterAttr('data-file', files[i]).children("td.date").children(".action.delete");
+ deleteAction.removeClass('delete-icon').addClass('progress-icon');
+ }
}
$.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'),
- {files: fileslist, dirlisting: dirlisting},
+ params,
function(result) {
- for (var i = 0; i < result.data.success.length; i++) {
- var row = document.getElementById(result.data.success[i].filename);
- row.parentNode.removeChild(row);
+ if (allFiles) {
+ FileList.hideMask();
+ // simply remove all files
+ $('#fileList').empty();
+ }
+ else {
+ for (var i = 0; i < result.data.success.length; i++) {
+ var row = document.getElementById(result.data.success[i].filename);
+ row.parentNode.removeChild(row);
+ }
}
if (result.status !== 'success') {
OC.dialogs.alert(result.data.message, t('core', 'Error'));
}
enableActions();
FileList.updateFileSummary();
+ FileList.updateEmptyContent();
}
);
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
index 15ba074e45e..f9264d4352c 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -4,9 +4,7 @@
</div>
<div id='notification'></div>
-<?php if (isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false && !$_['ajaxLoad']):?>
- <div id="emptycontent"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
-<?php endif; ?>
+<div id="emptycontent" <?php if (!(isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false && !$_['ajaxLoad'])):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
<input type="hidden" name="ajaxLoad" id="ajaxLoad" value="<?php p($_['ajaxLoad']); ?>" />
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
diff --git a/core/css/styles.css b/core/css/styles.css
index 938b522a90f..5c0aa1fedc2 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -561,7 +561,7 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
/* NAVIGATION ------------------------------------------------------------- */
#navigation {
- position: absolute;
+ position: fixed;
top: 0;
bottom: 0;
left: 0;
diff --git a/lib/base.php b/lib/base.php
index 865d174d212..187cedf9422 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -178,11 +178,19 @@ class OC {
if (file_exists(OC::$SERVERROOT . "/config/config.php")
and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
$defaults = new OC_Defaults();
- OC_Template::printErrorPage(
- "Can't write into config directory!",
- 'This can usually be fixed by '
- .'<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">giving the webserver write access to the config directory</a>.'
- );
+ if (self::$CLI) {
+ echo "Can't write into config directory!\n";
+ echo "This can usually be fixed by giving the webserver write access to the config directory\n";
+ echo "\n";
+ echo "See " . \OC_Helper::linkToDocs('admin-dir_permissions') . "\n";
+ exit;
+ } else {
+ OC_Template::printErrorPage(
+ "Can't write into config directory!",
+ 'This can usually be fixed by '
+ .'<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">giving the webserver write access to the config directory</a>.'
+ );
+ }
}
}
@@ -480,7 +488,14 @@ class OC {
$errors = OC_Util::checkServer();
if (count($errors) > 0) {
- OC_Template::printGuestPage('', 'error', array('errors' => $errors));
+ if (self::$CLI) {
+ foreach ($errors as $error) {
+ echo $error['error']."\n";
+ echo $error['hint'] . "\n\n";
+ }
+ } else {
+ OC_Template::printGuestPage('', 'error', array('errors' => $errors));
+ }
exit;
}
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 1c80ebe8044..65231040fb5 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -78,7 +78,19 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin
* @throws Sabre_DAV_Exception_BadRequest
*/
public function sendFileIdHeader($filePath, Sabre_DAV_INode $node = null) {
+ // chunked upload handling
+ if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
+ list($path, $name) = \Sabre_DAV_URLUtil::splitPath($filePath);
+ $info = OC_FileChunking::decodeName($name);
+ if (!empty($info)) {
+ $filePath = $path . '/' . $info['name'];
+ }
+ }
+
// we get the node for the given $filePath here because in case of afterCreateFile $node is the parent folder
+ if (!$this->server->tree->nodeExists($filePath)) {
+ return;
+ }
$node = $this->server->tree->getNodeForPath($filePath);
if ($node instanceof OC_Connector_Sabre_Node) {
$fileId = $node->getFileId();