Skip to content

Commit

Permalink
Added rename folder action
Browse files Browse the repository at this point in the history
  • Loading branch information
ignacionelson committed Nov 6, 2022
1 parent d577367 commit e7457d4
Show file tree
Hide file tree
Showing 10 changed files with 202 additions and 73 deletions.
110 changes: 96 additions & 14 deletions assets/src/js/parts/folders_admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@

// Drop an element inside
draggable_destinations[i].addEventListener("drop", function(e) {
let url;
e.preventDefault();
draggable_destinations[i].classList.remove("drop_forbidden");
draggable_destinations[i].classList.remove("drop_ready");
Expand All @@ -167,9 +168,10 @@

switch (dragged_type) {
case 'folder':
url = document.getElementById('folder_context_menu__links').dataset.urlFolderOndrop;
data.append('folder_id', dragged_item.dataset.folderId);
dragged_item.classList.add('d-none');
axios.post(destiny.dataset.ondropUrl, data)
axios.post(url, data)
.then(function (response) {
dragged_item.remove();
})
Expand All @@ -180,9 +182,10 @@
});
break;
case 'file':
url = document.getElementById('folder_context_menu__links').dataset.urlFileOndrop;
data.append('file_id', dragged_item.dataset.fileId);
dragged_item.classList.add('d-none');
axios.post(dragged_item.dataset.ondropUrl, data)
axios.post(url, data)
.then(function (response) {
dragged_item.remove();
})
Expand All @@ -196,27 +199,106 @@
}

// Context menu
const context_menu = document.getElementById("folder_context_menu");
let folders_items = document.querySelectorAll('.folder');

for (let i = 0; i < folders_items.length; i++) {
folders_items[i].addEventListener("contextmenu", function(e) {
e.preventDefault();
const { clientX: mouseX, clientY: mouseY } = e;
context_menu.style.top = `${mouseY}px`;
context_menu.style.left = `${mouseX}px`;
context_menu.classList.add("visible");
const can_edit = folders_items[i].dataset.canEdit;
const can_delete = folders_items[i].dataset.canDelete;

let menu_items = [];

menu_items.push({
label: 'Navigate',
iconClass: 'fa fa-arrow-right',
callback: async () => {
folderNavigate(folders_items[i]);
}
});
menu_items.push('hr');

if (can_edit == 'true') {
menu_items.push({
label: 'Rename',
iconClass: 'fa fa-pencil',
callback: async () => {
folderRename(folders_items[i]);
}
});
menu_items.push('hr');
}

if (can_delete == 'true') {
menu_items.push({
label: 'Delete',
iconClass: 'fa fa-trash-o',
callback: async () => {
folderDelete(folders_items[i]);
}
});
}

new VanillaContextMenu({
scope: folders_items[i],
customThemeClass: 'context-menu-orange-theme',
customClass: 'custom-context-menu-cls',
menuItems: menu_items
});
}
}
}

function folderNavigate(folder)
{
window.location = folder.querySelectorAll('a')[0].href;
}

// function folderShare(folder)
// {
// const url = document.getElementById('folder_context_menu__links').dataset.urlShare;
// }

// Hide menu
document.addEventListener("click", (e) => {
if (e.target.offsetParent != context_menu) {
context_menu.classList.remove("visible");
async function folderRename(folder)
{
const url = document.getElementById('folder_context_menu__links').dataset.urlRename;
const name_container = folder.querySelectorAll('a span')[0];
const previous_name = name_container.innerHTML;
const { value: new_name } = await Swal.fire({
title: null,
input: 'text',
inputValue: previous_name,
showCancelButton: true,
inputAttributes: {
maxlength: 100,
autocapitalize: 'off',
autocorrect: 'off'
},
inputValidator: (value) => {
if (!value) {
return 'Name is not valid'
}
}
})

if (new_name) {
var data = new FormData();
data.append('csrf_token', document.getElementById('csrf_token').value);
data.append('folder_id', folder.dataset.folderId);
data.append('name', new_name);
name_container.innerHTML = new_name;

axios.post(url, data)
.then(function (response) {
})
.catch(function (error) {
name_container.innerHTML = previous_name;
new Toast(error.response.data.error, Toast.TYPE_ERROR, Toast.TIME_NORMAL);
});
}
}

function folderDelete(folder)
{
const url = document.getElementById('folder_context_menu__links').dataset.urlDelete;
}
};
})();
45 changes: 15 additions & 30 deletions assets/src/scss/parts/_context_menu.scss
Original file line number Diff line number Diff line change
@@ -1,38 +1,23 @@
.context_menu {
position: fixed;
z-index: 999999;
width: 150px;
.context-menu-orange-theme {
background-color: white;
box-shadow: var(--global_box_shadow);
display: none;

&.visible {
display: block;
hr {
background-color: #eee;
}

ul {
list-style: none;
margin: 0;
padding: 0;

li {
button {
display: block;
padding: .75rem 1.5rem .75rem 1rem;
border: none;
background-color: transparent;
width: 100%;
text-align: left;

i {
margin-right: .5rem;
}
// text color for each item
& > *:not(hr) {
color: #222;

&:hover {
background-color: #f0f0f0;
color: var(--main_color);
}
}
&:hover {
background: #f0f0f0;
color: var(--main_color);
}
}
}
}

.custom-context-menu-cls {
width: 150px;
font-family: "Roboto", sans-serif;
}
1 change: 1 addition & 0 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ let assetsJs = [
'node_modules/sjcl/sjcl.js',
'node_modules/toastr/build/toastr.min.js',
'node_modules/codemirror-minified/lib/codemirror.js',
'node_modules/vanilla-context-menu/dist/vanilla-context-menu.js',
'vendor/moxiecode/plupload/js/plupload.full.min.js',
'vendor/moxiecode/plupload/js/jquery.plupload.queue/jquery.plupload.queue.min.js',
];
Expand Down
18 changes: 18 additions & 0 deletions includes/Classes/Folder.php
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,26 @@ public function setNewParent($user_id, $new_parent_id)
$this->parent = $new_parent_id;
return true;
}
}

return false;
}

public function rename($name)
{
if (empty($this->id)) {
return false;
}

if ($this->userCanEdit(CURRENT_USER_ID)) {
$statement = $this->dbh->prepare("UPDATE " . TABLE_FOLDERS . " SET name=:name WHERE id=:id");
$statement->bindParam(':id', $this->id);
$statement->bindParam(':name', $name);
if ($statement->execute()) {
return true;
}
}

return false;
}
}
15 changes: 15 additions & 0 deletions includes/ajax.process.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,21 @@
break;

case 'folder_rename':
$folder = new \ProjectSend\Classes\Folder($_POST['folder_id']);
$rename = $folder->rename($_POST['name']);

if ($rename) {
echo json_encode([
'status' => 'success',
]);
} else {
echo json_encode([
'status' => 'error',
]);
die_with_error_code(500);
}

exit;
break;

case 'folder_delete':
Expand Down
47 changes: 21 additions & 26 deletions includes/layout/folders-nav.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
$parent_data = $get_parent->getData();
$up_link = modify_url_with_parameters($current_url, ['folder_id' => $parent_data['parent']], ['folder_id']);
?>
<div class="folder folder_up folder_destination" data-folder-id="<?php echo $parent_data['parent']; ?>" data-ondrop-url="<?php echo $ondrop_url; ?>">
<div class="folder folder_up folder_destination" data-folder-id="<?php echo $parent_data['parent']; ?>">
<a href="<?php echo $up_link; ?>">
<i class="fa fa-folder-o" aria-hidden="true"></i>
<span>
Expand All @@ -22,14 +22,20 @@
$key = array_keys($folders)[0];

foreach ($folders as $folder) {
$link = modify_url_with_parameters($current_url, ['folder_id' => $folder['id']], ['folder_id']);
$folder = new \ProjectSend\Classes\Folder($folder['id']);
$folder_data = $folder->getData();
$link = modify_url_with_parameters($current_url, ['folder_id' => $folder_data['id']], ['folder_id']);
?>
<div class="folder folder_draggable folder_destination" data-folder-id="<?php echo $folder['id']; ?>" draggable="true" data-draggable-type="folder" data-ondrop-url="<?php echo $ondrop_url; ?>">
<div class="folder folder_draggable folder_destination"
data-folder-id="<?php echo $folder_data['id']; ?>"
draggable="true"
data-draggable-type="folder"
data-can-edit="<?php echo var_export($folder->userCanEdit(CURRENT_USER_ID), true); ?>"
data-can-delete="<?php echo var_export($folder->userCanDelete(CURRENT_USER_ID), true); ?>"
>
<a href="<?php echo $link; ?>">
<i class="fa fa-folder-o" aria-hidden="true"></i>
<span>
<?php echo $folder['name']; ?>
</span>
<span><?php echo $folder->name; ?></span>
</a>
</div>
<?php
Expand All @@ -38,30 +44,19 @@
?>

<template id="new_folder">
<div class="folder folder_draggable folder_destination" data-folder-id="" draggable="true" data-draggable-type="folder" data-ondrop-url="<?php echo $ondrop_url; ?>">
<div class="folder folder_draggable folder_destination" data-folder-id="" draggable="true" data-draggable-type="folder">
<a href="{url}">
<i class="fa fa-folder-o" aria-hidden="true"></i>
<span>
{name}
</span>
<span>{name}</span>
</a>
</div>
</template>
</div>

<div id="folder_context_menu" class="context_menu">
<ul>
<li>
<button id="folder_menu__go"><i class="fa fa-arrow-right" aria-hidden="true"></i> <?php _e('Navigate','cftp_admin'); ?></button>
</li>
<li>
<button id="folder_menu__share"><i class="fa fa-share" aria-hidden="true"></i> <?php _e('Share','cftp_admin'); ?></button>
</li>
<li>
<button id="folder_menu__rename"><i class="fa fa-pencil" aria-hidden="true"></i> <?php _e('Rename','cftp_admin'); ?></button>
</li>
<li>
<button id="folder_menu__delete"><i class="fa fa-ban" aria-hidden="true"></i> <?php _e('Delete','cftp_admin'); ?></button>
</li>
</ul>
</div>
<span id="folder_context_menu__links"
data-url-share="<?php echo AJAX_PROCESS_URL.'?do=folder_share'; ?>"
data-url-rename="<?php echo AJAX_PROCESS_URL.'?do=folder_rename'; ?>"
data-url-delete="<?php echo AJAX_PROCESS_URL.'?do=folder_delete'; ?>"
data-url-folder-ondrop="<?php echo AJAX_PROCESS_URL.'?do=folder_move'; ?>"
data-url-file-ondrop="<?php echo AJAX_PROCESS_URL.'?do=file_move'; ?>"
></span>
6 changes: 6 additions & 0 deletions includes/upgrades/2022110501.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php
function upgrade_2022110501()
{
global $dbh;
$dbh->query("ALTER TABLE `" . TABLE_FOLDERS . "` ADD public tinyint(1) NOT NULL default '0' AFTER `name`");
}
1 change: 0 additions & 1 deletion manage-files.php
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,6 @@
'data-attributes' => [
'draggable-type' => 'file',
'file-id' => $row['id'],
'ondrop-url' => AJAX_PROCESS_URL.'?do=file_move',
],
]);
$file = new \ProjectSend\Classes\Files($row['id']);
Expand Down
Loading

0 comments on commit e7457d4

Please sign in to comment.