mirror of https://git.48k.eu/ogcp
Add confirmation page when deleting image
User can confirm when deleting an image by double checking the information displayed on this page. Adds a new optional field in GenericForm: 'ids'. Used when dealing with ids instead of ips.multi-ogserver
parent
b566528012
commit
31b1e92077
|
@ -17,6 +17,7 @@ from flask_babel import _
|
|||
|
||||
class GenericForm(FlaskForm):
|
||||
ips = HiddenField()
|
||||
ids = HiddenField()
|
||||
submit = SubmitField(label=_l('Submit'))
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
{% extends 'images.html' %}
|
||||
{% import "bootstrap/wtf.html" as wtf %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ args }}
|
||||
|
||||
<h1 class="m-5">
|
||||
{{ _('Delete image %(image_name)s', image_name=image_name) }}
|
||||
</h1>
|
||||
|
||||
{{ wtf.quick_form(form,
|
||||
action=url_for('action_image_delete'),
|
||||
method='post',
|
||||
button_map={'submit': 'primary'},
|
||||
extra_classes="mx-5") }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
@ -28,6 +28,6 @@
|
|||
<input class="btn btn-light" type="submit" value="{{ _('Image details') }}"
|
||||
form="imagesForm" formaction="{{ url_for('action_image_info') }}" formmethod="get">
|
||||
<input class="btn btn-light" type="submit" value="{{ _('Delete image') }}"
|
||||
form="imagesForm" formaction="{{ url_for('action_image_delete') }}" formmethod="post">
|
||||
form="imagesForm" formaction="{{ url_for('action_image_delete') }}" formmethod="get">
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: opengnsys@soleta.eu\n"
|
||||
"POT-Creation-Date: 2022-01-20 13:33+0100\n"
|
||||
"POT-Creation-Date: 2022-01-27 15:17+0100\n"
|
||||
"PO-Revision-Date: 2021-12-23 16:47+0100\n"
|
||||
"Last-Translator: Soleta Networks <opengnsys@soleta.eu>\n"
|
||||
"Language: es\n"
|
||||
|
@ -102,7 +102,7 @@ msgstr "ogServer: error al reiniciar cliente"
|
|||
msgid "Client rebooted successfully"
|
||||
msgstr "Cliente reiniciado con éxito"
|
||||
|
||||
#: views.py:835 views.py:967
|
||||
#: views.py:835 views.py:968
|
||||
msgid "OgServer replied with a non ok status code"
|
||||
msgstr "OgServer respondió con un código de estado de error"
|
||||
|
||||
|
@ -142,182 +142,186 @@ msgstr "El servidor respondió con el código de error al eliminar la sala."
|
|||
msgid "Room deleted successfully"
|
||||
msgstr "Sala eliminada con éxito"
|
||||
|
||||
#: views.py:969
|
||||
msgid "Delete client request processed successfully"
|
||||
msgstr "Solicitud de eliminar cliente procesada con éxito"
|
||||
#: views.py:970
|
||||
msgid "Image deletion request sent successfully"
|
||||
msgstr "La imagen ha sido borrada"
|
||||
|
||||
#: forms/action_forms.py:20 forms/action_forms.py:28 forms/action_forms.py:137
|
||||
#: forms/action_forms.py:142 forms/action_forms.py:151
|
||||
#: forms/action_forms.py:156
|
||||
#: views.py:977
|
||||
msgid "Please select one image to delete"
|
||||
msgstr "Solo puede seleccionar una imagen para borrar"
|
||||
|
||||
#: forms/action_forms.py:21 forms/action_forms.py:29 forms/action_forms.py:138
|
||||
#: forms/action_forms.py:143 forms/action_forms.py:152
|
||||
#: forms/action_forms.py:157
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
#: forms/action_forms.py:25 forms/action_forms.py:33 forms/action_forms.py:63
|
||||
#: forms/action_forms.py:26 forms/action_forms.py:34 forms/action_forms.py:64
|
||||
#: templates/actions/hardware.html:14
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: forms/action_forms.py:31 forms/action_forms.py:76 forms/action_forms.py:87
|
||||
#: forms/action_forms.py:32 forms/action_forms.py:77 forms/action_forms.py:88
|
||||
msgid "Partition"
|
||||
msgstr "Partición"
|
||||
|
||||
#: forms/action_forms.py:49
|
||||
#: forms/action_forms.py:50
|
||||
msgid "Filesystem"
|
||||
msgstr "Sistema de ficheros"
|
||||
|
||||
#: forms/action_forms.py:57
|
||||
#: forms/action_forms.py:58
|
||||
msgid "Size (KB)"
|
||||
msgstr "Tamaño (KB)"
|
||||
|
||||
#: forms/action_forms.py:58
|
||||
#: forms/action_forms.py:59
|
||||
msgid "Format"
|
||||
msgstr "Formatear"
|
||||
|
||||
#: forms/action_forms.py:72 templates/commands.html:25
|
||||
#: forms/action_forms.py:73 templates/commands.html:25
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: forms/action_forms.py:77
|
||||
#: forms/action_forms.py:78
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
|
||||
#: forms/action_forms.py:78
|
||||
#: forms/action_forms.py:79
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: forms/action_forms.py:82
|
||||
#: forms/action_forms.py:83
|
||||
msgid "Session"
|
||||
msgstr "Sesión"
|
||||
|
||||
#: forms/action_forms.py:83
|
||||
#: forms/action_forms.py:84
|
||||
msgid "Run"
|
||||
msgstr "Lanzar"
|
||||
|
||||
#: forms/action_forms.py:88
|
||||
#: forms/action_forms.py:89
|
||||
msgid "Image"
|
||||
msgstr "Imagen"
|
||||
|
||||
#: forms/action_forms.py:89
|
||||
#: forms/action_forms.py:90
|
||||
msgid "Method"
|
||||
msgstr "Método"
|
||||
|
||||
#: forms/action_forms.py:91
|
||||
#: forms/action_forms.py:92
|
||||
msgid "Restore"
|
||||
msgstr "Restaurar"
|
||||
|
||||
#: forms/action_forms.py:94 forms/action_forms.py:160
|
||||
#: forms/action_forms.py:95 forms/action_forms.py:161
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: forms/action_forms.py:95
|
||||
#: forms/action_forms.py:96
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: forms/action_forms.py:96
|
||||
#: forms/action_forms.py:97
|
||||
msgid "MAC"
|
||||
msgstr "MAC"
|
||||
|
||||
#: forms/action_forms.py:97
|
||||
#: forms/action_forms.py:98
|
||||
msgid "Serial Number"
|
||||
msgstr "Número de serie"
|
||||
|
||||
#: forms/action_forms.py:98 forms/action_forms.py:149
|
||||
#: forms/action_forms.py:99 forms/action_forms.py:150
|
||||
msgid "Netmask"
|
||||
msgstr "Máscara de red"
|
||||
|
||||
#: forms/action_forms.py:99 forms/action_forms.py:122
|
||||
#: forms/action_forms.py:100 forms/action_forms.py:123
|
||||
msgid "ogLive"
|
||||
msgstr "ogLive"
|
||||
|
||||
#: forms/action_forms.py:101
|
||||
#: forms/action_forms.py:102
|
||||
msgid "Remote"
|
||||
msgstr "Remoto"
|
||||
|
||||
#: forms/action_forms.py:102
|
||||
#: forms/action_forms.py:103
|
||||
msgid "Maintenance"
|
||||
msgstr "Mantenimiento"
|
||||
|
||||
#: forms/action_forms.py:103
|
||||
#: forms/action_forms.py:104
|
||||
msgid "Interface"
|
||||
msgstr "Interfaz"
|
||||
|
||||
#: forms/action_forms.py:107
|
||||
#: forms/action_forms.py:108
|
||||
msgid "Driver"
|
||||
msgstr "Controlador"
|
||||
|
||||
#: forms/action_forms.py:109
|
||||
#: forms/action_forms.py:110
|
||||
msgid "Repository"
|
||||
msgstr "Repositorio"
|
||||
|
||||
#: forms/action_forms.py:111 forms/action_forms.py:154
|
||||
#: forms/action_forms.py:112 forms/action_forms.py:155
|
||||
msgid "Room"
|
||||
msgstr "Sala"
|
||||
|
||||
#: forms/action_forms.py:112
|
||||
#: forms/action_forms.py:113
|
||||
msgid "Boot Mode"
|
||||
msgstr "Modo de arranque"
|
||||
|
||||
#: forms/action_forms.py:113 forms/action_forms.py:131
|
||||
#: forms/action_forms.py:114 forms/action_forms.py:132
|
||||
msgid "Create"
|
||||
msgstr "Crear"
|
||||
|
||||
#: forms/action_forms.py:117
|
||||
#: forms/action_forms.py:118
|
||||
msgid "Boot mode"
|
||||
msgstr "Modo de arranque"
|
||||
|
||||
#: forms/action_forms.py:118 forms/action_forms.py:123
|
||||
#: forms/action_forms.py:119 forms/action_forms.py:124
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#: forms/action_forms.py:127
|
||||
#: forms/action_forms.py:128
|
||||
msgid "OS"
|
||||
msgstr "SO"
|
||||
|
||||
#: forms/action_forms.py:128
|
||||
#: forms/action_forms.py:129
|
||||
msgid "Image name"
|
||||
msgstr "Nombre de la imagen"
|
||||
|
||||
#: forms/action_forms.py:130
|
||||
#: forms/action_forms.py:131
|
||||
msgid "Description"
|
||||
msgstr "Descripción"
|
||||
|
||||
#: forms/action_forms.py:134
|
||||
#: forms/action_forms.py:135
|
||||
msgid "Center name"
|
||||
msgstr "Nombre del centro"
|
||||
|
||||
#: forms/action_forms.py:136
|
||||
#: forms/action_forms.py:137
|
||||
msgid "Comment"
|
||||
msgstr "Comentario"
|
||||
|
||||
#: forms/action_forms.py:140 forms/action_forms.py:145
|
||||
#: forms/action_forms.py:141 forms/action_forms.py:146
|
||||
msgid "Center"
|
||||
msgstr "Centro"
|
||||
|
||||
#: forms/action_forms.py:147
|
||||
#: forms/action_forms.py:148
|
||||
msgid "Room name"
|
||||
msgstr "Nombre de la sala"
|
||||
|
||||
#: forms/action_forms.py:159
|
||||
#: forms/action_forms.py:160
|
||||
msgid "Id"
|
||||
msgstr "Id"
|
||||
|
||||
#: forms/action_forms.py:161
|
||||
#: forms/action_forms.py:162
|
||||
msgid "Size (GiB)"
|
||||
msgstr "Tamaño (GiB)"
|
||||
|
||||
#: forms/action_forms.py:162
|
||||
#: forms/action_forms.py:163
|
||||
msgid "Datasize (GiB)"
|
||||
msgstr "Tamaño de los datos (GiB)"
|
||||
|
||||
#: forms/action_forms.py:163
|
||||
#: forms/action_forms.py:164
|
||||
msgid "Modified"
|
||||
msgstr "Modificado"
|
||||
|
||||
#: forms/action_forms.py:164
|
||||
#: forms/action_forms.py:165
|
||||
msgid "Permissions"
|
||||
msgstr "Permisos"
|
||||
|
||||
#: forms/action_forms.py:165
|
||||
#: forms/action_forms.py:166
|
||||
msgid "Software id"
|
||||
msgstr "ID de software"
|
||||
|
||||
|
@ -506,6 +510,11 @@ msgstr "Formulario para eliminar un centro"
|
|||
msgid "Delete %(ip_count)d client(s)"
|
||||
msgstr "Elimina %(ip_count)d cliente(s)"
|
||||
|
||||
#: templates/actions/delete_image.html:9
|
||||
#, python-format
|
||||
msgid "Delete image %(image_name)s"
|
||||
msgstr "Borrar imagen %(image_name)s"
|
||||
|
||||
#: templates/actions/delete_room.html:6
|
||||
msgid "Delete room form"
|
||||
msgstr "Formulario para eliminar una sala"
|
||||
|
@ -559,4 +568,3 @@ msgstr "Inventario de software"
|
|||
#: templates/actions/legacy/log.html:6
|
||||
msgid "Client log"
|
||||
msgstr "Registro de clientes"
|
||||
|
||||
|
|
|
@ -953,21 +953,35 @@ def action_image_info():
|
|||
|
||||
return render_template('actions/image_details.html', form=form)
|
||||
|
||||
@app.route('/action/image/delete', methods=['POST'])
|
||||
@app.route('/action/image/delete', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def action_image_delete():
|
||||
ids = parse_elements(request.form.to_dict())
|
||||
if not validate_elements(ids, max_len=1):
|
||||
form = GenericForm(request.form)
|
||||
if request.method == 'POST':
|
||||
ids = form.ids.data.split(' ')
|
||||
if not validate_elements(ids, max_len=1):
|
||||
return redirect(url_for('images'))
|
||||
id = ids.pop()
|
||||
payload = {'image': id}
|
||||
r = g.server.post('/image/delete', payload)
|
||||
if r.status_code != requests.codes.ok:
|
||||
flash(_('OgServer replied with a non ok status code'), category='error')
|
||||
else:
|
||||
flash(_('Image deletion request sent successfully'), category='info')
|
||||
return redirect(url_for('images'))
|
||||
|
||||
id = ids.pop()
|
||||
payload = {'image': id}
|
||||
r = g.server.post('/image/delete', payload)
|
||||
if r.status_code != requests.codes.ok:
|
||||
flash(_('OgServer replied with a non ok status code'), category='error')
|
||||
else:
|
||||
flash(_('Delete client request processed successfully'), category='info')
|
||||
return redirect(url_for('images'))
|
||||
images = [(name, imgid) for name, imgid in request.args.to_dict().items() if name != "csrf_token"]
|
||||
if not validate_elements(images, max_len=1):
|
||||
return redirect(url_for('images'))
|
||||
image_name, image_id = images[0]
|
||||
r = g.server.get('/images')
|
||||
form.ids.data = image_id
|
||||
if not validate_elements(images, max_len=1):
|
||||
flash(_('Please select one image to delete'), category='error')
|
||||
return redirect(url_for('images'))
|
||||
return render_template('actions/delete_image.html', form=form,
|
||||
image_name=image_name.split('_', 1)[0], image_id=image_id,
|
||||
images=r.json()['images'])
|
||||
|
||||
@app.route('/action/log', methods=['GET'])
|
||||
@login_required
|
||||
|
|
Loading…
Reference in New Issue