Skip to content

Commit 6dd03af

Browse files
committed
feat/ Implémentation de la modification des dossiers
1 parent ef53bc3 commit 6dd03af

File tree

5 files changed

+181
-16
lines changed

5 files changed

+181
-16
lines changed

app/administration/routes.py

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def create_folder(data):
210210
db.session.commit()
211211
except Exception as e:
212212
db.session.rollback()
213-
socketio.emit('folder_creation_failed', {'error': str(e)}, namespace='/administration')
213+
socketio.emit('folder_not_created', {'error': str(e)}, namespace='/administration')
214214
return
215215
try:
216216
db.session.execute(A_ACCES.insert().values(id_Role=1, id_Dossier=folder.id_Dossier))
@@ -221,7 +221,7 @@ def create_folder(data):
221221
db.session.rollback()
222222
db.session.delete(folder)
223223
db.session.commit()
224-
socketio.emit('folder_creation_failed', {'error': str(e)}, namespace='/administration')
224+
socketio.emit('folder_not_created', {'error': str(e)}, namespace='/administration')
225225
return
226226
try:
227227
if parent_folder_id != 0:
@@ -234,6 +234,47 @@ def create_folder(data):
234234
db.session.execute(A_ACCES.delete().where(A_ACCES.c.id_Role == role).where(A_ACCES.c.id_Dossier == folder.id_Dossier))
235235
db.session.delete(folder)
236236
db.session.commit()
237-
socketio.emit('folder_creation_failed', {'error': str(e)}, namespace='/administration')
237+
socketio.emit('folder_not_created', {'error': str(e)}, namespace='/administration')
238238
return
239-
socketio.emit('folder_created', {'folderId': folder.id_Dossier, 'folderName': folder_name, 'folderColor': folder.couleur_Dossier, 'parentFolderId': parent_folder_id}, namespace='/administration')
239+
socketio.emit('folder_created', {'folderId': folder.id_Dossier, 'folderName': folder_name, 'folderColor': folder.couleur_Dossier, 'parentFolderId': parent_folder_id}, namespace='/administration')
240+
241+
@socketio.on('modify_folder', namespace='/administration')
242+
def modify_folder(data):
243+
folder_id = data.get('folderId')
244+
folder_name = data.get('folderName')
245+
parent_folder_id = data.get('parentFolderId')
246+
folder_roles = data.get('folderRoles')
247+
folder_color = data.get('folderColor')
248+
folder = DOSSIER.query.get(folder_id)
249+
folder.nom_Dossier = folder_name
250+
folder.couleur_Dossier = folder_color
251+
try:
252+
if parent_folder_id != 0:
253+
db.session.execute(SOUS_DOSSIER.delete().where(SOUS_DOSSIER.c.id_Dossier_Enfant == folder_id))
254+
db.session.execute(SOUS_DOSSIER.insert().values(id_Dossier_Parent=parent_folder_id, id_Dossier_Enfant=folder_id))
255+
db.session.commit()
256+
else:
257+
db.session.execute(SOUS_DOSSIER.delete().where(SOUS_DOSSIER.c.id_Dossier_Enfant == folder_id))
258+
db.session.commit()
259+
except Exception as e:
260+
db.session.rollback()
261+
socketio.emit('folder_not_modified', {'error': str(e)}, namespace='/administration')
262+
return
263+
try:
264+
db.session.execute(A_ACCES.delete().where(A_ACCES.c.id_Dossier == folder_id))
265+
db.session.commit()
266+
except Exception as e:
267+
db.session.rollback()
268+
socketio.emit('folder_not_modified', {'error': str(e)}, namespace='/administration')
269+
return
270+
try:
271+
db.session.execute(A_ACCES.insert().values(id_Role=1, id_Dossier=folder_id))
272+
for role in folder_roles:
273+
db.session.execute(A_ACCES.insert().values(id_Role=role, id_Dossier=folder_id))
274+
db.session.commit()
275+
except Exception as e:
276+
db.session.rollback()
277+
socketio.emit('folder_not_modified', {'error': str(e)}, namespace='/administration')
278+
return
279+
db.session.commit()
280+
socketio.emit('folder_modified', {'folderId': folder_id, 'folderName': folder_name, 'folderColor': folder_color}, namespace='/administration')

app/home/routes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def home():
3131
if form.validate_on_submit():
3232
add_research(current_user.id_Utilisateur, form.search.data)
3333
return redirect(url_for("search.search", query=form.search.data))
34-
print(current_user.NOTIFICATION)
3534
return render_template(
3635
"home/index.html",
3736
is_authenticated=True,

app/static/js/administration.js

Lines changed: 80 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,22 +252,57 @@ document.addEventListener('DOMContentLoaded', function () {
252252
});
253253
});
254254

255-
const modalParentFolder = document.querySelector('#parentFolder');
255+
const modalParentFolders = document.querySelectorAll('#parentFolder');
256+
const modalExistingFolders = document.querySelector('#existingFolder');
256257
folders.forEach((folder) => {
257-
modalParentFolder.innerHTML += `<option value="${folder.dataset.folder}">${folder.dataset.name}</option>`;
258+
modalParentFolders.forEach((select) => {
259+
select.innerHTML += `<option value="${folder.dataset.folder}">${folder.dataset.name}</option>`;
260+
});
261+
modalExistingFolders.innerHTML += `<option value="${folder.dataset.folder}">${folder.dataset.name}</option>`;
262+
});
263+
264+
const modifyFolderModal = document.querySelector('#modifyFolderModal');
265+
modalExistingFolders.addEventListener('change', function (event) {
266+
let folderId = event.target.value;
267+
if (folderId == '0') {
268+
modifyFolderModal.querySelector('#folderName').value = '';
269+
modifyFolderModal.querySelector('#parentFolder').value = '0';
270+
modifyFolderModal.querySelectorAll('.role-checkbox:checked').forEach((cb) => {
271+
cb.checked = false;
272+
});
273+
modifyFolderModal.querySelector('#folderColor').value = '#000000';
274+
return;
275+
}
276+
let folderArray = Array.from(folders);
277+
let folder = folderArray.find(f => f.dataset.folder == folderId);
278+
modifyFolderModal.querySelector('#folderName').value = folder.dataset.name;
279+
modifyFolderModal.querySelector('#parentFolder').value = folder.dataset.parent;
280+
folder.dataset.roles.split(',').forEach((role) => {
281+
if (role !== '1') {
282+
modifyFolderModal.querySelector(`#role${role}`).checked = true;
283+
}
284+
});
285+
modifyFolderModal.querySelector('#folderColor').value = folder.dataset.color;
258286
});
259287

288+
const addFolderModal = document.querySelector('#addFolderModal');
260289
const createFolderButton = document.querySelector('#createFolderButton');
261290
createFolderButton.addEventListener('click', function (event) {
262291
if (fileTotal != fileUploadTotal) {
263292
return;
264293
}
265-
let folderName = document.querySelector('#folderName').value;
266-
let parentFolderId = document.querySelector('#parentFolder').value;
267-
let folderRoles = Array.from(document.querySelectorAll('.role-checkbox:checked')).map(cb => cb.value);
268-
let folderColor = document.querySelector('#folderColor').value;
294+
let folderName = addFolderModal.querySelector('#folderName').value;
295+
let parentFolderId = addFolderModal.querySelector('#parentFolder').value;
296+
let folderRoles = Array.from(addFolderModal.querySelectorAll('.role-checkbox:checked')).map(cb => cb.value);
297+
let folderColor = addFolderModal.querySelector('#folderColor').value;
269298
createFolderButton.disabled = true;
270-
socket.emit('create_folder', { folderName: folderName, parentFolderId: parentFolderId, folderRoles: folderRoles, folderColor: folderColor });
299+
if (folderName !== '') {
300+
socket.emit('create_folder', { folderName: folderName, parentFolderId: parentFolderId, folderRoles: folderRoles, folderColor: folderColor });
301+
}
302+
else {
303+
alert('Veuillez remplir tous les champs.');
304+
createFolderButton.disabled = false;
305+
}
271306
});
272307

273308
socket.on('folder_created', function (data) {
@@ -287,4 +322,42 @@ document.addEventListener('DOMContentLoaded', function () {
287322
return;
288323
}
289324
});
325+
326+
const modifyFolderButton = document.querySelector('#modifyFolderButton');
327+
modifyFolderButton.addEventListener('click', function (event) {
328+
if (fileTotal != fileUploadTotal) {
329+
return;
330+
}
331+
let folderId = modifyFolderModal.querySelector('#existingFolder').value;
332+
let folderName = modifyFolderModal.querySelector('#folderName').value;
333+
let parentFolderId = modifyFolderModal.querySelector('#parentFolder').value;
334+
let folderRoles = Array.from(modifyFolderModal.querySelectorAll('.role-checkbox:checked')).map(cb => cb.value);
335+
let folderColor = modifyFolderModal.querySelector('#folderColor').value;
336+
modifyFolderButton.disabled = true;
337+
if (folderName !== '' && folderId !== '0') {
338+
socket.emit('modify_folder', { folderId: folderId, folderName: folderName, parentFolderId: parentFolderId, folderRoles: folderRoles, folderColor: folderColor });
339+
}
340+
else {
341+
alert('Veuillez remplir tous les champs.');
342+
modifyFolderButton.disabled = false;
343+
}
344+
});
345+
346+
socket.on('folder_modified', function (data) {
347+
window.location.reload();
348+
});
349+
350+
socket.on('folder_not_modified', function (data) {
351+
alert(`La modification du dossier a échoué: ${data.error}`);
352+
modifyFolderButton.disabled = false;
353+
});
354+
355+
const formModifyFolder = document.querySelector('#modifyFolderModal').querySelector('form');
356+
formModifyFolder.addEventListener('submit', function (event) {
357+
if (fileTotal != fileUploadTotal) {
358+
event.preventDefault();
359+
alert('Veuillez attendre la fin du téléversement des fichiers avant de modifier un dossier.');
360+
return;
361+
}
362+
});
290363
});

app/templates/administration/index.html

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
{% macro render_folder(folder) %}
2424
<div id="folder" data-folder="{{ folder.id_Dossier }}" class="accordion-item folder-{{ folder.id_Dossier }}"
2525
style="background-color: {{ folder.couleur_Dossier }}; border: 1px solid black;"
26-
data-name="{{ folder.nom_Dossier }}">
26+
data-name="{{ folder.nom_Dossier }}" {% if folder.DOSSIER[0] %}data-parent="{{ folder.DOSSIER[0].id_Dossier }}"{% else %}data-parent="0"{% endif %}
27+
data-color="{{ folder.couleur_Dossier }}" data-roles="{% for role in folder.ROLE %}{{ role.id_Role }}{% if not loop.last %},{% endif %}{% endfor %}">
2728
<h2 class="accordion-header" id="heading{{ folder.id_Dossier }}">
2829
<button class="accordion-button collapsed" type="button" aria-expanded="false"
2930
aria-controls="collapse{{ folder.id_Dossier }}" style="background-color: {{ folder.couleur_Dossier }};"
@@ -202,8 +203,10 @@ <h5 class="mb-0">Worker #2</h5>
202203
{{ render_folder(folder) }}
203204
{% endfor %}
204205
<div class="text-end">
205-
<button class="position-relative btn btn-primary mt-2" id="addFolderButton" data-bs-toggle="modal"
206+
<button class="position-relative btn btn-primary mt-2" data-bs-toggle="modal"
206207
data-bs-target="#addFolderModal">Créer un dossier</button>
208+
<button class="position-relative btn btn-primary mt-2" data-bs-toggle="modal"
209+
data-bs-target="#modifyFolderModal">Modifier un dossier</button>
207210
</div>
208211
</div>
209212
<h3 class="text-center">Gestion des utilisateurs</h3>
@@ -223,7 +226,7 @@ <h3 class="text-center">Gestion des utilisateurs</h3>
223226
<div class="modal-content">
224227
<div class="modal-header">
225228
<h5 class="modal-title" id="addFolderModalLabel">Créer un dossier</h5>
226-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
229+
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
227230
</div>
228231
<div class="modal-body">
229232
<form>
@@ -262,5 +265,55 @@ <h5 class="modal-title" id="addFolderModalLabel">Créer un dossier</h5>
262265
</div>
263266
</div>
264267
</div>
268+
<div class="modal fade" id="modifyFolderModal" tabindex="-1" aria-labelledby="modifyFolderModalLabel" aria-hidden="true">
269+
<div class="modal-dialog">
270+
<div class="modal-content">
271+
<div class="modal-header">
272+
<h5 class="modal-title" id="modifyFolderModalLabel">Modifier un dossier</h5>
273+
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
274+
</div>
275+
<div class="modal-body">
276+
<form>
277+
<div class="mb-3">
278+
<label for="existingFolder" class="form-label">Dossier à modifier</label>
279+
<select class="form-control" id="existingFolder">
280+
<option value="0">Aucun</option>
281+
</select>
282+
</div>
283+
<div class="mb-3">
284+
<label for="folderName" class="form-label">Nom du dossier</label>
285+
<input type="text" class="form-control" id="folderName" required>
286+
</div>
287+
<div class="mb-3">
288+
<label for="parentFolder" class="form-label">Dossier parent</label>
289+
<select class="form-control" id="parentFolder">
290+
<option value="0">Aucun</option>
291+
</select>
292+
</div>
293+
<div class="mb-3">
294+
<label class="form-label">Rôles autorisés</label>
295+
{% for role in roles %}
296+
{% if role.id_Role != 1 %}
297+
<div class="form-check">
298+
<input class="form-check-input role-checkbox" type="checkbox" value="{{ role.id_Role }}" id="role{{ role.id_Role }}">
299+
<label class="form-check-label" for="role{{ role.id_Role }}">
300+
{{ role.nom_Role }}
301+
</label>
302+
</div>
303+
{% endif %}
304+
{% endfor %}
305+
</div>
306+
<div class="mb-3">
307+
<label for="folderColor" class="form-label">Couleur du dossier</label>
308+
<input type="color" class="form-control" id="folderColor" required>
309+
</div>
310+
<div class="text-end">
311+
<button type="submit" class="btn btn-primary" id="modifyFolderButton">Modifier le dossier</button>
312+
</div>
313+
</form>
314+
</div>
315+
</div>
316+
</div>
317+
</div>
265318
{% include 'components/preview.html' %}
266319
{% endblock %}

app/utils.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ def search(self, query, path=None):
8181
query = "* " + query
8282
while re.search(r'([&|])\s*([&|]|$)', query):
8383
query = re.sub(r'([&|])\s*([&|]|$)', r'\1 * \2', query)
84-
print(query)
8584
or_conditions = [cond.strip() for cond in query.split("|")]
8685
conditions = [[cond.strip() for cond in condition.split('&')] for condition in or_conditions]
8786
if path is not None:

0 commit comments

Comments
 (0)