mirror of https://git.48k.eu/ogcp
views: Add delete folder
Add functionality to allow the user to delete a folder. Show a confirmation page to the user listing the content of the folder that is about to deletemaster
parent
695fcfe625
commit
2509cacc00
|
@ -106,6 +106,7 @@ class RepoForm(FlaskForm):
|
|||
submit = SubmitField(label=_l('Submit'))
|
||||
|
||||
class FolderForm(FlaskForm):
|
||||
folder_id = HiddenField()
|
||||
server = HiddenField()
|
||||
room = HiddenField()
|
||||
center = HiddenField()
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
{% extends 'scopes.html' %}
|
||||
{% import "bootstrap/wtf.html" as wtf %}
|
||||
|
||||
{% set sidebar_state = 'disabled' %}
|
||||
{% set btn_back = true %}
|
||||
|
||||
{% block nav_folder %} active{% endblock %}
|
||||
{% block nav_folder_delete %} active{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<h1 class="m-5">{{_('Delete folder')}}</h1>
|
||||
|
||||
<table class="table">
|
||||
<tbody>
|
||||
{% for content in folder_content %}
|
||||
<tr>
|
||||
<th scope="row">{{ content['type'] }}</th>
|
||||
<td>{{ content['name'] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ wtf.quick_form(form,
|
||||
method='post',
|
||||
button_map={'submit': 'danger'},
|
||||
extra_classes="mx-5") }}
|
||||
|
||||
{% endblock %}
|
|
@ -47,6 +47,12 @@
|
|||
{% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %}
|
||||
{% if scope.get("selected", False) %}checked{% endif %}
|
||||
name="scope-room" />
|
||||
{% elif scope["type"] == "folder" %}
|
||||
<input class="form-check-input" type="checkbox" form="scopesForm"
|
||||
value="{{ scope["id"] }}"
|
||||
{% if state %}style="filter: grayscale(100%);" onclick="return false;"{% endif %}
|
||||
{% if scope.get("selected", False) %}checked{% endif %}
|
||||
name="folder" />
|
||||
{% elif " ".join(scope["ip"]) %}
|
||||
<input class="form-check-input" type="checkbox" form="scopesForm"
|
||||
value="{{ " ".join(scope["ip"]) }}" data-parent-room="{{ parent_room }}"
|
||||
|
|
|
@ -64,6 +64,8 @@
|
|||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<input class="btn btn-light dropdown-item {% block nav_folder_add %}{% endblock %}" type="submit" value="{{ _('Add folder') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_folder_add') }}" formmethod="get">
|
||||
<input class="btn btn-light dropdown-item {% block nav_folder_delete %}{% endblock %}" type="submit" value="{{ _('Delete folder') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_folder_delete') }}" formmethod="get">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import hashlib
|
|||
import json
|
||||
import os
|
||||
import re
|
||||
from collections import deque
|
||||
|
||||
FS_CODES = {
|
||||
0: 'DISK',
|
||||
|
@ -990,6 +991,54 @@ def action_client_update():
|
|||
return render_template('actions/client_details.html', form=form,
|
||||
parent="scopes.html", scopes=scopes)
|
||||
|
||||
def find_folder(folder_id, scopes):
|
||||
scopes = deque([scopes['scope']])
|
||||
while scopes:
|
||||
scope_ls = scopes.popleft()
|
||||
if not scope_ls:
|
||||
continue
|
||||
else:
|
||||
for scope in scope_ls:
|
||||
if scope['type'] == 'folder' and scope['id'] == folder_id:
|
||||
return scope
|
||||
else:
|
||||
scopes.append(scope['scope'])
|
||||
return None
|
||||
|
||||
@app.route('/action/folder/delete', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def action_folder_delete():
|
||||
form = FolderForm(request.form)
|
||||
if request.method == 'POST':
|
||||
payload = {"id": int(form.folder_id.data)}
|
||||
server = get_server_from_ip_port(form.server.data)
|
||||
r = server.post('/folder/delete', payload)
|
||||
if r.status_code != requests.codes.ok:
|
||||
flash(('ogServer: error deleting folder'),
|
||||
category='error')
|
||||
else:
|
||||
flash(('Folder deleted successfully'), category='info')
|
||||
return redirect(url_for("scopes"))
|
||||
else:
|
||||
params = request.args.to_dict()
|
||||
folder_id = params.get('folder')
|
||||
if not folder_id:
|
||||
flash(('Please, select a folder'), category='error')
|
||||
return redirect(url_for('scopes'))
|
||||
form.folder_id.data = folder_id
|
||||
form.server.data = params['scope-server']
|
||||
form.submit.render_kw = {"formaction": url_for('action_folder_delete')}
|
||||
|
||||
scopes, _ = get_scopes()
|
||||
folder = find_folder(int(folder_id), scopes)
|
||||
if not folder:
|
||||
flash(('Folder was not found'), category='info')
|
||||
return redirect(url_for("scopes"))
|
||||
form.name.data = folder['name']
|
||||
form.name.render_kw = {'readonly': True}
|
||||
return render_template('actions/folder_delete.html', form=form,
|
||||
parent="scopes.html", scopes=scopes, folder_content=folder['scope'])
|
||||
|
||||
@app.route('/action/folder/add', methods=['GET'])
|
||||
@login_required
|
||||
def action_folder_add():
|
||||
|
|
Loading…
Reference in New Issue