diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index c30f1bcddd8396feaeb194d65a28441db35e4010..af3fc483910a616a39a4ac0319798bc195c27a74 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -115,6 +115,8 @@ var FileActions = { // NOTE: Temporary fix to allow unsharing of files in root of Shared folder if ($('#dir').val() == '/Shared') { var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" />'; + } else if (typeof trashBinApp !== 'undefined' && trashBinApp) { + var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete" />'; } else { var html = '<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" />'; } diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php new file mode 100644 index 0000000000000000000000000000000000000000..fe41f53d49e6c749f892ce1570e5d0b03a92e8c5 --- /dev/null +++ b/apps/files_trashbin/ajax/delete.php @@ -0,0 +1,24 @@ +<?php + +OCP\JSON::checkLoggedIn(); +OCP\JSON::callCheck(); + +$file = $_REQUEST['file']; + +$path_parts = pathinfo($file); +if ($path_parts['dirname'] == '.') { + $delimiter = strrpos($file, '.d'); + $filename = substr($file, 0, $delimiter); + $timestamp = substr($file, $delimiter+2); +} else { + $filename = $file; + $timestamp = null; +} +sleep(5); +if (OCA_Trash\Trashbin::delete($filename, $timestamp)) { + error_log("feinifeini"); + OCP\JSON::success(array("data" => array("filename" => $file))); +} else { + OCP\JSON::error(array("data" => array("message" => "Couldn't delete ".$file. " permanently"))); +} + diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js index 56b95407dd34cb105f90f8f00776dfffd5b185f5..27c3e13db4d12d05a8c8e9796b031d72c1232247 100644 Binary files a/apps/files_trashbin/js/disableDefaultActions.js and b/apps/files_trashbin/js/disableDefaultActions.js differ diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index f1241fce51e2b9e6fcdedb106bae72667e95e006..6c810e4c2bd017ac92e8ad1b2e62f1c3ebd2c31b 100644 Binary files a/apps/files_trashbin/js/trash.js and b/apps/files_trashbin/js/trash.js differ diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index a7eff3d44e0bdf1539e2b6f8515242d2b328427e..bf98b6dfe805aed237d4e49a8d7e0e4d051e073b 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -150,6 +150,45 @@ class Trashbin { return false; } + /** + * delete file from trash bin permanently + * @param $filename path to the file + * @param $timestamp of deletion time + * @return true/false + */ + public static function delete($filename, $timestamp=null) { + + $user = \OCP\User::getUser(); + $view = new \OC_FilesystemView('/'.$user); + + if ( $timestamp ) { + $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?'); + $query->execute(array($user,$filename,$timestamp))->fetchAll(); + $file = $filename.'.d'.$timestamp; + } else { + $file = $filename; + } + + if ( \OCP\App::isEnabled('files_versions') ) { + if ($view->is_dir('versions_trashbin/'.$file)) { + $view->unlink('versions_trashbin/'.$file); + } else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) { + foreach ($versions as $v) { + if ($timestamp ) { + $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp); + } else { + $view->unlink('versions_trashbin/'.$file.'.v'.$v); + } + } + } + } + + $view->unlink('/files_trashbin/'.$file); + + return true; + } + + /** * clean up the trash bin */