summaryrefslogtreecommitdiffstats
path: root/apps/files_trashbin
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_trashbin')
-rw-r--r--apps/files_trashbin/ajax/list.php51
-rw-r--r--apps/files_trashbin/index.php91
-rw-r--r--apps/files_trashbin/js/filelist.js29
-rw-r--r--apps/files_trashbin/js/trash.js14
-rw-r--r--apps/files_trashbin/lib/helper.php97
-rw-r--r--apps/files_trashbin/templates/index.php3
-rw-r--r--apps/files_trashbin/templates/part.breadcrumb.php4
-rw-r--r--apps/files_trashbin/templates/part.list.php3
8 files changed, 209 insertions, 83 deletions
diff --git a/apps/files_trashbin/ajax/list.php b/apps/files_trashbin/ajax/list.php
new file mode 100644
index 00000000000..e72e67b01d7
--- /dev/null
+++ b/apps/files_trashbin/ajax/list.php
@@ -0,0 +1,51 @@
+<?php
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
+// Init owncloud
+
+
+OCP\JSON::checkLoggedIn();
+
+// Load the files
+$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+$doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false;
+$data = array();
+
+// Make breadcrumb
+if($doBreadcrumb) {
+ $breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
+
+ $breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
+ $breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
+ $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=');
+ $breadcrumbNav->assign('home', OCP\Util::linkTo('files', 'index.php'));
+
+ $data['breadcrumb'] = $breadcrumbNav->fetchPage();
+}
+
+// make filelist
+$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
+
+if ($files === null){
+ header("HTTP/1.0 404 Not Found");
+ exit();
+}
+
+$dirlisting = false;
+if ($dir && $dir !== '/') {
+ $dirlisting = true;
+}
+
+$encodedDir = \OCP\Util::encodePath($dir);
+$list = new OCP\Template('files_trashbin', 'part.list', '');
+$list->assign('files', $files, false);
+$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir);
+$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
+$list->assign('dirlisting', $dirlisting);
+$list->assign('disableDownloadActions', true);
+$data['files'] = $list->fetchPage();
+
+OCP\JSON::success(array('data' => $data));
+
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
index b7d0ef012f4..c28a88d541a 100644
--- a/apps/files_trashbin/index.php
+++ b/apps/files_trashbin/index.php
@@ -10,92 +10,27 @@ OCP\Util::addScript('files_trashbin', 'disableDefaultActions');
OCP\Util::addScript('files', 'fileactions');
$tmpl = new OCP\Template('files_trashbin', 'index', 'user');
-$user = \OCP\User::getUser();
-$view = new OC_Filesystemview('/'.$user.'/files_trashbin/files');
-
OCP\Util::addStyle('files', 'files');
OCP\Util::addScript('files', 'filelist');
+// filelist overrides
+OCP\Util::addScript('files_trashbin', 'filelist');
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
-$result = array();
-if ($dir) {
- $dirlisting = true;
- $dirContent = $view->opendir($dir);
- $i = 0;
- if(is_resource($dirContent)) {
- while(($entryName = readdir($dirContent)) !== false) {
- if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
- $pos = strpos($dir.'/', '/', 1);
- $tmp = substr($dir, 0, $pos);
- $pos = strrpos($tmp, '.d');
- $timestamp = substr($tmp, $pos+2);
- $result[] = array(
- 'id' => $entryName,
- 'timestamp' => $timestamp,
- 'mime' => $view->getMimeType($dir.'/'.$entryName),
- 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
- 'location' => $dir,
- );
- }
- }
- closedir($dirContent);
- }
-} else {
- $dirlisting = false;
- $query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE `user` = ?');
- $result = $query->execute(array($user))->fetchAll();
-}
+$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
-$files = array();
-foreach ($result as $r) {
- $i = array();
- $i['name'] = $r['id'];
- $i['date'] = OCP\Util::formatDate($r['timestamp']);
- $i['timestamp'] = $r['timestamp'];
- $i['mimetype'] = $r['mime'];
- $i['type'] = $r['type'];
- if ($i['type'] === 'file') {
- $fileinfo = pathinfo($r['id']);
- $i['basename'] = $fileinfo['filename'];
- $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
- }
- $i['directory'] = $r['location'];
- if ($i['directory'] === '/') {
- $i['directory'] = '';
- }
- $i['permissions'] = OCP\PERMISSION_READ;
- $i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
- $i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
- $files[] = $i;
+// Redirect if directory does not exist
+if ($files === null){
+ header('Location: ' . OCP\Util::linkTo('files_trashbin', 'index.php'));
+ exit();
}
-function fileCmp($a, $b) {
- if ($a['type'] === 'dir' and $b['type'] !== 'dir') {
- return -1;
- } elseif ($a['type'] !== 'dir' and $b['type'] === 'dir') {
- return 1;
- } else {
- return strnatcasecmp($a['name'], $b['name']);
- }
+$dirlisting = false;
+if ($dir && $dir !== '/') {
+ $dirlisting = true;
}
-usort($files, "fileCmp");
-
-// Make breadcrumb
-$pathtohere = '';
-$breadcrumb = array();
-foreach (explode('/', $dir) as $i) {
- if ($i !== '') {
- if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
- $name = $match[1];
- } else {
- $name = $i;
- }
- $pathtohere .= '/' . $i;
- $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
- }
-}
+$breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
$breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
@@ -108,7 +43,6 @@ $list->assign('files', $files);
$encodedDir = \OCP\Util::encodePath($dir);
$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir);
$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$encodedDir);
-$list->assign('disableSharing', true);
$list->assign('dirlisting', $dirlisting);
$list->assign('disableDownloadActions', true);
@@ -116,6 +50,7 @@ $tmpl->assign('dirlisting', $dirlisting);
$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage());
$tmpl->assign('fileList', $list->fetchPage());
$tmpl->assign('files', $files);
-$tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($view->getAbsolutePath()));
+$tmpl->assign('dir', $dir);
+$tmpl->assign('disableSharing', true);
$tmpl->printPage();
diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js
new file mode 100644
index 00000000000..ff3a846d860
--- /dev/null
+++ b/apps/files_trashbin/js/filelist.js
@@ -0,0 +1,29 @@
+// override reload with own ajax call
+FileList.reload = function(){
+ FileList.showMask();
+ if (FileList._reloadCall){
+ FileList._reloadCall.abort();
+ }
+ $.ajax({
+ url: OC.filePath('files_trashbin','ajax','list.php'),
+ data: {
+ dir : $('#dir').val(),
+ breadcrumb: true
+ },
+ error: function(result) {
+ FileList.reloadCallback(result);
+ },
+ success: function(result) {
+ FileList.reloadCallback(result);
+ }
+ });
+}
+
+FileList.setCurrentDir = function(targetDir, changeUrl){
+ $('#dir').val(targetDir);
+ // Note: IE8 handling ignored for now
+ if (window.history.pushState && changeUrl !== false){
+ url = OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(targetDir).replace(/%2F/g, '/'),
+ window.history.pushState({dir: targetDir}, '', url);
+ }
+}
diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js
index 40c0bdb3829..d73eadb6011 100644
--- a/apps/files_trashbin/js/trash.js
+++ b/apps/files_trashbin/js/trash.js
@@ -171,9 +171,15 @@ $(document).ready(function() {
action(filename);
}
}
+
+ // event handlers for breadcrumb items
+ $('#controls').delegate('.crumb:not(.home) a', 'click', onClickBreadcrumb);
});
- FileActions.actions.dir = {};
+ FileActions.actions.dir = {
+ // only keep 'Open' action for navigation
+ 'Open': FileActions.actions.dir.Open
+ };
});
function processSelection(){
@@ -246,3 +252,9 @@ function disableActions() {
$(".action").css("display", "none");
$(":input:checkbox").css("display", "none");
}
+function onClickBreadcrumb(e){
+ var $el = $(e.target).closest('.crumb');
+ e.preventDefault();
+ FileList.changeDirectory(decodeURIComponent($el.data('dir')));
+}
+
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
new file mode 100644
index 00000000000..098fc0b54b7
--- /dev/null
+++ b/apps/files_trashbin/lib/helper.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace OCA\files_trashbin\lib;
+
+class Helper
+{
+ /**
+ * Retrieves the contents of a trash bin directory.
+ * @param string $dir path to the directory inside the trashbin
+ * or empty to retrieve the root of the trashbin
+ * @return array of files
+ */
+ public static function getTrashFiles($dir){
+ $result = array();
+ $user = \OCP\User::getUser();
+
+ if ($dir && $dir !== '/') {
+ $view = new \OC_Filesystemview('/'.$user.'/files_trashbin/files');
+ $dirContent = $view->opendir($dir);
+ if ($dirContent === false){
+ return null;
+ }
+ if(is_resource($dirContent)){
+ while(($entryName = readdir($dirContent)) !== false) {
+ if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
+ $pos = strpos($dir.'/', '/', 1);
+ $tmp = substr($dir, 0, $pos);
+ $pos = strrpos($tmp, '.d');
+ $timestamp = substr($tmp, $pos+2);
+ $result[] = array(
+ 'id' => $entryName,
+ 'timestamp' => $timestamp,
+ 'mime' => $view->getMimeType($dir.'/'.$entryName),
+ 'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
+ 'location' => $dir,
+ );
+ }
+ }
+ closedir($dirContent);
+ }
+ } else {
+ $query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE `user` = ?');
+ $result = $query->execute(array($user))->fetchAll();
+ }
+
+ $files = array();
+ foreach ($result as $r) {
+ $i = array();
+ $i['name'] = $r['id'];
+ $i['date'] = \OCP\Util::formatDate($r['timestamp']);
+ $i['timestamp'] = $r['timestamp'];
+ $i['mimetype'] = $r['mime'];
+ $i['type'] = $r['type'];
+ if ($i['type'] === 'file') {
+ $fileinfo = pathinfo($r['id']);
+ $i['basename'] = $fileinfo['filename'];
+ $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
+ }
+ $i['directory'] = $r['location'];
+ if ($i['directory'] === '/') {
+ $i['directory'] = '';
+ }
+ $i['permissions'] = \OCP\PERMISSION_READ;
+ $i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
+ $i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
+ $files[] = $i;
+ }
+
+ usort($files, array('\OCA\files\lib\Helper', 'fileCmp'));
+
+ return $files;
+ }
+
+ /**
+ * Splits the given path into a breadcrumb structure.
+ * @param string $dir path to process
+ * @return array where each entry is a hash of the absolute
+ * directory path and its name
+ */
+ public static function makeBreadcrumb($dir){
+ // Make breadcrumb
+ $pathtohere = '';
+ $breadcrumb = array();
+ foreach (explode('/', $dir) as $i) {
+ if ($i !== '') {
+ if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
+ $name = $match[1];
+ } else {
+ $name = $i;
+ }
+ $pathtohere .= '/' . $i;
+ $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
+ }
+ }
+ return $breadcrumb;
+ }
+}
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
index 88c32b1f3eb..daae7753aeb 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -9,6 +9,9 @@
<div id="emptycontent"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
<?php endif; ?>
+<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
+<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
+
<table id="filestable">
<thead>
<tr>
diff --git a/apps/files_trashbin/templates/part.breadcrumb.php b/apps/files_trashbin/templates/part.breadcrumb.php
index 8ecab58e5c8..4acc298adbe 100644
--- a/apps/files_trashbin/templates/part.breadcrumb.php
+++ b/apps/files_trashbin/templates/part.breadcrumb.php
@@ -1,11 +1,11 @@
-<div class="crumb">
+<div class="crumb home">
<a href="<?php print_unescaped($_['home']); ?>">
<img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
</a>
</div>
<?php if(count($_["breadcrumb"])):?>
<div class="crumb svg"
- data-dir='<?php print_unescaped($_['baseURL']); ?>'>
+ data-dir='/'>
<a href="<?php p($_['baseURL']); ?>"><?php p($l->t("Deleted Files")); ?></a>
</div>
<?php endif;?>
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php
index f7cc6b01bbb..78709d986ae 100644
--- a/apps/files_trashbin/templates/part.list.php
+++ b/apps/files_trashbin/templates/part.list.php
@@ -1,4 +1,3 @@
-<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
<?php foreach($_['files'] as $file):
$relative_deleted_date = OCP\relative_modified_date($file['timestamp']);
// the older the file, the brighter the shade of grey; days*14
@@ -12,7 +11,7 @@
data-permissions='<?php p($file['permissions']); ?>'
<?php if ( $_['dirlisting'] ): ?>
id="<?php p($file['directory'].'/'.$file['name']);?>"
- data-file="<?php p($file['directory'].'/'.$file['name']);?>"
+ data-file="<?php p($name);?>"
data-timestamp=''
data-dirlisting=1
<?php else: ?>