Locked files feature
This commit is contained in:
parent
8e35815204
commit
f5cd4fc507
|
@ -7,7 +7,6 @@ $options = [
|
|||
'base_uri' => "/",
|
||||
#'base_uploads' => "/var/spool/piratebox/public/uploads/",
|
||||
#'base_chat' => "/var/spool/piratebox/public/chat/",
|
||||
'base_uploads' => "/home/ju/tmp/toto/public/uploads/",
|
||||
|
||||
'allow_renaming' => true,
|
||||
'allow_deleting' => true,
|
||||
|
|
|
@ -23,6 +23,7 @@ require_once('functions.php');
|
|||
dispatch('/', function() {
|
||||
set('files', getFiles('/'));
|
||||
set('tab', 'files');
|
||||
set('locked', true);
|
||||
set('cdir', '/');
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
@ -40,20 +41,26 @@ dispatch('/get', function() {
|
|||
header('Content-Type: text/html; charset=utf-8');
|
||||
}
|
||||
|
||||
if($ajax && !is_dir(UPLOADS_PATH.$dir)) {
|
||||
exit('ERR:'.T_("Invalid destination."));
|
||||
}
|
||||
|
||||
if(empty($dir) || !is_dir(UPLOADS_PATH.$dir)) {
|
||||
$dir = '/';
|
||||
if($ajax) {
|
||||
exit('ERR:'.T_("Invalid destination."));
|
||||
|
||||
} else {
|
||||
header('Location: '.ROOT_DIR);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
if($ajax) {
|
||||
return getFiles($dir, true);
|
||||
}
|
||||
|
||||
$perms = fileperms(UPLOADS_PATH.$dir);
|
||||
$locked = !($perms & 0x0080) || $dir == '/';
|
||||
|
||||
set('files', getFiles($dir));
|
||||
set('tab', 'files');
|
||||
set('locked', $locked);
|
||||
set('cdir', $dir);
|
||||
|
||||
return render('home.html.php');
|
||||
|
@ -96,6 +103,7 @@ dispatch_post('/rename', function() {
|
|||
);
|
||||
|
||||
set('folder', $folder);
|
||||
set('locked', false);
|
||||
set('newfolder', true);
|
||||
|
||||
echo partial('_folder.html.php');
|
||||
|
@ -111,6 +119,7 @@ dispatch_post('/rename', function() {
|
|||
);
|
||||
|
||||
set('file', $file);
|
||||
set('locked', false);
|
||||
set('newfile', true);
|
||||
|
||||
echo partial('_file.html.php');
|
||||
|
@ -195,6 +204,7 @@ dispatch_post('/upload', function() {
|
|||
);
|
||||
|
||||
set('file', $file);
|
||||
set('locked', false);
|
||||
set('newfile', true);
|
||||
|
||||
echo partial('_file.html.php');
|
||||
|
@ -235,6 +245,7 @@ dispatch_post('/createfolder', function() {
|
|||
);
|
||||
|
||||
set('folder', $folder);
|
||||
set('locked', false);
|
||||
set('newfolder', true);
|
||||
|
||||
echo partial('_folder.html.php');
|
||||
|
@ -249,6 +260,7 @@ dispatch('/chat', function() {
|
|||
|
||||
set('files', getFiles('/'));
|
||||
set('tab', 'chat');
|
||||
set('locked', true);
|
||||
set('cdir', '/');
|
||||
|
||||
return render('home.html.php');
|
||||
|
|
|
@ -203,6 +203,11 @@ function getFiles($dir, $newfiles = false) {
|
|||
continue;
|
||||
}
|
||||
|
||||
$perms = fileperms($filepath);
|
||||
$locked = !($perms & 0x0080);
|
||||
|
||||
set('locked', $locked);
|
||||
|
||||
if(is_dir($filepath)) {
|
||||
$folder = array(
|
||||
'name' => $name,
|
||||
|
|
|
@ -55,6 +55,7 @@ div#infiles {
|
|||
|
||||
div.file, div.folder {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 14.7em;
|
||||
margin: .4em .3em;
|
||||
text-align: center;
|
||||
|
@ -335,6 +336,24 @@ span.folderdelete {
|
|||
font-style: normal;
|
||||
}
|
||||
|
||||
span.lockedaction {
|
||||
background-color: #ccc;
|
||||
color: #999;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
span.pinnedfile {
|
||||
position: absolute;
|
||||
right: 69px;
|
||||
top: 44px;
|
||||
color: #11b211;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
div.activefile span.pinnedfile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
span.filedate, span.filesize, span.filerename, span.filedelete {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,6 @@ $(document).ready(function() {
|
|||
|
||||
uploadArea.event('send', upload);
|
||||
|
||||
setDownloadEvents();
|
||||
setFileEvents($('.file'));
|
||||
setFolderEvents($('.folder'));
|
||||
|
||||
|
@ -74,10 +73,6 @@ $(document).ready(function() {
|
|||
$('a[data-tab=chat]').click();
|
||||
}
|
||||
}
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-deleting') == 'true') {
|
||||
$('.folderdelete').click(deleteFolderBtn);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
@ -145,7 +140,7 @@ $(document).keypress(function(e) {
|
|||
|
||||
// Del
|
||||
if(e.keyCode == 46) {
|
||||
if(isTabActive('files') && $('#tabfiles').attr('data-opt-allow-deleting') == 'true') {
|
||||
if(isTabActive('files') && $('#tabfiles').attr('data-opt-allow-deleting') == 'true' && $('.activefile').attr('data-locked') == 'false') {
|
||||
deleteFile($('.activefile'));
|
||||
|
||||
return false;
|
||||
|
@ -154,7 +149,7 @@ $(document).keypress(function(e) {
|
|||
|
||||
// F2
|
||||
if(e.keyCode == 113) {
|
||||
if(isTabActive('files') && $('#tabfiles').attr('data-opt-allow-renaming') == 'true') {
|
||||
if(isTabActive('files') && $('#tabfiles').attr('data-opt-allow-renaming') == 'true' && $('.activefile').attr('data-locked') == 'false') {
|
||||
renameFile($('.activefile'));
|
||||
|
||||
return false;
|
||||
|
|
|
@ -35,21 +35,19 @@ function setFolderEvents(folders) {
|
|||
folders.click(clickFolder);
|
||||
}
|
||||
|
||||
// Set download panel events
|
||||
function setDownloadEvents() {
|
||||
if($('#tabfiles').attr('data-opt-allow-renaming') == 'true') {
|
||||
$('#download').find('.filerename').click(renameFileBtn);
|
||||
}
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-deleting') == 'true') {
|
||||
$('#download').find('.filedelete').click(deleteFileBtn);
|
||||
}
|
||||
}
|
||||
|
||||
// Show no file notice with the folder delete button (or not)
|
||||
// fade: use animations or not
|
||||
function showNoFile(fade = false) {
|
||||
if($('#tabfiles').attr('data-opt-allow-deleting') == 'true' && $('#nav').attr('data-cdir') != '%2F') {
|
||||
if($('#nav').attr('data-locked') == 'true') {
|
||||
$('.folderdelete').addClass('lockedaction');
|
||||
$('.folderdelete').off('clicked');
|
||||
|
||||
} else {
|
||||
$('.folderdelete').removeClass('lockedaction');
|
||||
$('.folderdelete').click(deleteFolderBtn);
|
||||
}
|
||||
|
||||
$('.folderdelete').show();
|
||||
|
||||
} else {
|
||||
|
@ -111,7 +109,19 @@ function changeDirectory(newcdir, updateHistory = true) {
|
|||
return;
|
||||
}
|
||||
|
||||
var folderWithLocation = $('.folder[data-dir="' + encodeURIComponent(newcdir) + '"]');
|
||||
var locked = false;
|
||||
|
||||
if(newcdir == '/') {
|
||||
locked = true;
|
||||
|
||||
} else if(folderWithLocation.length > 0) {
|
||||
locked = (folderWithLocation.attr('data-locked') == 'true');
|
||||
}
|
||||
|
||||
$('#nav').attr('data-cdir', encodeURIComponent(newcdir));
|
||||
$('#nav').attr('data-locked', locked ? 'true' : 'false');
|
||||
|
||||
$('#infiles').empty();
|
||||
$('#infiles').append(data);
|
||||
|
||||
|
@ -504,6 +514,10 @@ function deleteFile(file = false) {
|
|||
});
|
||||
}
|
||||
|
||||
function isFileLocked() {
|
||||
return ($(this).attr('data-locked') == 'true');
|
||||
}
|
||||
|
||||
// Create context menus for files and folders
|
||||
function createContextMenus() {
|
||||
var fileMenuItems = {
|
||||
|
@ -521,12 +535,12 @@ function createContextMenus() {
|
|||
}
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-renaming')== 'true') {
|
||||
fileMenuItems['rename'] = { name: $('#tabfiles').attr('data-txt-rename') };
|
||||
folderMenuItems['rename'] = { name: $('#tabfiles').attr('data-txt-rename') };
|
||||
fileMenuItems['rename'] = { name: $('#tabfiles').attr('data-txt-rename'), disabled: isFileLocked };
|
||||
folderMenuItems['rename'] = { name: $('#tabfiles').attr('data-txt-rename'), disabled: isFileLocked };
|
||||
}
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-deleting') == 'true') {
|
||||
fileMenuItems['delete'] = { name: $('#tabfiles').attr('data-txt-delete') };
|
||||
fileMenuItems['delete'] = { name: $('#tabfiles').attr('data-txt-delete'), disabled: isFileLocked };
|
||||
}
|
||||
|
||||
$('#files').contextMenu({
|
||||
|
@ -829,6 +843,28 @@ function clickFile() {
|
|||
$('.itemfile').removeClass('activefile');
|
||||
$(this).addClass('activefile');
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-renaming') == 'true') {
|
||||
if($(this).attr('data-locked') == 'true') {
|
||||
$('#download .filerename').addClass('lockedaction');
|
||||
$('#download .filerename').off('click');
|
||||
|
||||
} else {
|
||||
$('#download .filerename').removeClass('lockedaction');
|
||||
$('#download .filerename').click(renameFileBtn);
|
||||
}
|
||||
}
|
||||
|
||||
if($('#tabfiles').attr('data-opt-allow-deleting') == 'true') {
|
||||
if($(this).attr('data-locked') == 'true') {
|
||||
$('#download .filedelete').addClass('lockedaction');
|
||||
$('#download .filedelete').off('click');
|
||||
|
||||
} else {
|
||||
$('#download .filedelete').removeClass('lockedaction');
|
||||
$('#download .filedelete').click(deleteFileBtn);
|
||||
}
|
||||
}
|
||||
|
||||
$('#download .filename').text($(this).attr('data-name'));
|
||||
$('#download .downloadfile').attr('href', ($(this).attr('data-filename')));
|
||||
$('#download .filesize').text($(this).attr('data-size'));
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
?>
|
||||
|
||||
<div class="itemfile file <?= $newfile ? 'newfile' : '' ?>" <?= $newfile ? 'style="display: none"' : '' ?>
|
||||
data-locked="<?= $locked ? 'true' : 'false' ?>"
|
||||
data-name="<?= htmlentities($file['name']) ?>"
|
||||
data-filename="<?= htmlentities(preg_replace('|/+|', '/', $file['filename'])) ?>"
|
||||
data-size="<?= $file['size'] ?>"
|
||||
|
@ -26,6 +27,10 @@
|
|||
|
||||
<img src="<?= ROOT_DIR.PUBLIC_DIR ?>img/extensions/<?= urlencode($file['img']) ?>" />
|
||||
|
||||
<?php if($locked): ?>
|
||||
<span class="pinnedfile glyphicon glyphicon-star"></span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if($file['shortname'] != $file['name']): ?>
|
||||
<span class="shortname label label-default" data-toggle="tooltip" data-title="<?= htmlentities($file['name']) ?>"><?= str_replace('...', '…', htmlentities($file['shortname'])) ?></span>
|
||||
<?php else: ?>
|
||||
|
|
|
@ -18,7 +18,15 @@
|
|||
*/
|
||||
?>
|
||||
|
||||
<div class="itemfile folder <?= $newfolder ? 'newfolder' : '' ?>" <?= $newfolder ? 'style="display: none"' : '' ?> data-dir="<?= rawurlencode($folder['dir']) ?>">
|
||||
<div class="itemfile folder <?= $newfolder ? 'newfolder' : '' ?>" <?= $newfolder ? 'style="display: none"' : '' ?>
|
||||
data-locked="<?= $locked ? 'true' : 'false' ?>"
|
||||
data-dir="<?= rawurlencode($folder['dir']) ?>">
|
||||
|
||||
<img src="<?= ROOT_DIR.PUBLIC_DIR ?>img/extensions/folder-page.png" />
|
||||
|
||||
<?php if($locked): ?>
|
||||
<span class="pinnedfile glyphicon glyphicon-star"></span>
|
||||
<?php endif; ?>
|
||||
|
||||
<span class="shortname label label-default"><?= htmlentities($folder['name']) ?></span>
|
||||
</div>
|
||||
|
|
|
@ -53,9 +53,7 @@
|
|||
data-txt-delete="<?= T_("Delete") ?>"
|
||||
data-opt-allow-renaming="<?= option('allow_renaming') ? 'true' : 'false' ?>"
|
||||
data-opt-allow-deleting="<?= option('allow_deleting') ? 'true' : 'false' ?>"
|
||||
data-opt-allow-newfolders="<?= option('allow_newfolders') ? 'true' : 'false' ?>"
|
||||
|
||||
>
|
||||
data-opt-allow-newfolders="<?= option('allow_newfolders') ? 'true' : 'false' ?>">
|
||||
|
||||
<div id="download">
|
||||
<span id="closedownload" class="glyphicon glyphicon-remove"></span>
|
||||
|
@ -73,7 +71,7 @@
|
|||
</div>
|
||||
|
||||
<div id="files" class="panel-body">
|
||||
<ol class="breadcrumb" id="nav" data-cdir="<?= rawurlencode($cdir) ?>">
|
||||
<ol class="breadcrumb" id="nav" data-cdir="<?= rawurlencode($cdir) ?>" data-locked="<?= $locked ? 'true' : 'false' ?>">
|
||||
<li class="active"><?= T_("Root") ?></li>
|
||||
</ol>
|
||||
|
||||
|
@ -83,7 +81,7 @@
|
|||
|
||||
<span id="nofile" <?= empty($files) ? '' : 'style="display: none"' ?>>
|
||||
<?= T_("No files yet.") ?>
|
||||
<div><span class="folderdelete label label-danger" <?= option('allow_deleting') && $cdir != '/' ? '' : 'style="display: none"' ?>><span class="glyphicon glyphicon-trash"></span> <?= T_("Delete this folder") ?></span></div>
|
||||
<div><span class="folderdelete label label-danger <?= $locked ? 'lockedaction' : '' ?>" <?= option('allow_deleting') && $cdir != '/' ? '' : 'style="display: none"' ?>><span class="glyphicon glyphicon-trash"></span> <?= T_("Delete this folder") ?></span></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue