Skip to content

Commit

Permalink
feat: Add further check to edit a lang (#36)
Browse files Browse the repository at this point in the history
* chore: wip add check when a lang is edited

* fix: set published language as default only if it is published

* chore: remove unnecessary print statements in update_lang function

---------

Co-authored-by: Jules Jean-Louis <[email protected]>
  • Loading branch information
jules-jean-louis1 and Jules Jean-Louis authored Nov 12, 2024
1 parent 31ee873 commit 0693d18
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 30 deletions.
5 changes: 3 additions & 2 deletions admin/src/app/form-languages/form-languages.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,10 @@
<div class="col-6">
<div class="inner-checkbox form-group" *ngIf="this.id_language">
<div class="label">
{{ 'LANG_MNGMT.DEFAULT_LANGUAGE' | translate }} ?:
{{ 'LANG_MNGMT.DEFAULT_LANGUAGE' | translate }}
<span *ngIf="!this.language.is_default">?:</span>
</div>
<label class="switch">
<label *ngIf="!this.language.is_default" class="switch">
<input
formControlName="is_default"
type="checkbox"
Expand Down
1 change: 0 additions & 1 deletion admin/src/app/form-languages/form-languages.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { ToastrService } from 'ngx-toastr';
import { AuthService } from '../services/auth.service';
import { NgxSpinnerService } from 'ngx-spinner';
import { Language, LanguagePatchType, LibLocales } from '../types';
import * as io from 'jsts/org/locationtech/jts/io';
import { TranslateService } from '@ngx-translate/core';
import { combineLatest, Observable } from 'rxjs';
import { LanguageService } from '../services/language.service';
Expand Down
1 change: 1 addition & 0 deletions admin/src/assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
"MUST_GET_ONE_DEFAULT_LANG": "No other default language exists, you must have at least one default language.",
"MUST_HAVE_ONE_SITE_IN_LANG": "You must have at least one published site in this language.",
"MUST_HAVE_ONE_OBSERVATORY_IN_LANG": "You must have at least one published observatory in this language.",
"LANG_MUST_BE_PUBLISHED": "The language must be published to be set as default.",
"FORMS": {
"REQUIRED": "This field is required.",
"INVALID_DEFAULT": "\"{{ field_default }}\" cannot be set to true if \" {{ field_published }}\" is set to false."
Expand Down
1 change: 1 addition & 0 deletions admin/src/assets/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
"MUST_GET_ONE_DEFAULT_LANG": "Aucune autre langue par défaut existe, vous devez avoir au moins une langue par défaut.",
"MUST_HAVE_ONE_SITE_IN_LANG": "Vous devez avoir au moins un site publié dans cette langue.",
"MUST_HAVE_ONE_OBSERVATORY_IN_LANG": "Vous devez avoir au moins un observatoire publié dans cette langue.",
"LANG_MUST_BE_PUBLISHED": "La langue doit être publiée pour être définie comme langue par défaut.",
"FORMS": {
"REQUIRED": "Ce champs est requis.",
"INVALID_DEFAULT": "\"{{ field_default }}\" ne peut pas être activé si \"{{ field_published }}\" est désactivé."
Expand Down
47 changes: 20 additions & 27 deletions backend/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -703,35 +703,28 @@ def add_langs():
def update_lang(lang_id):
data = request.get_json()
try:
# Vérifiez si la langue mise à jour a is_default à True
lang_to_update = models.Lang.query.get(lang_id)
if not lang_to_update:
return jsonify({"error_message": "ERRORS.LANG_NOT_FOUND"}), 404

# Si is_default est envoyé avec la valeur True
if "is_default" in data and data["is_default"] is True:
# Vérifiez s'il y a d'autres langues qui sont déjà marquées comme is_default
existing_default = models.Lang.query.filter(
models.Lang.is_default.is_(True)
).all()
# Si aucune langue n'est par défaut, cela signifie que c'est la première langue par défaut
if existing_default:
# Si c'est une mise à jour d'une langue différente, réinitialisez is_default pour les autres
if (
all(lang.id != lang_id for lang in existing_default)
and models.Lang.query.count() > 1
):
# Mettez is_default à False pour toutes les autres langues
models.Lang.query.filter(models.Lang.id != lang_id).update(
{"is_default": False}
)
else:
no_default_exists = (
models.Lang.query.filter(
# Vérifiez que la langue est déjà publiée
if not lang_to_update.is_published:
return jsonify({"error_message": "ERRORS.LANG_MUST_BE_PUBLISHED"}), 400

# Mettez is_default à False pour toutes les autres langues
models.Lang.query.filter(models.Lang.id != lang_id).update({"is_default": False})

# Si is_default est envoyé avec la valeur False
elif "is_default" in data and data["is_default"] is False:
# Vérifiez qu'il existe au moins une autre langue avec is_default à True
if lang_to_update.is_default:
other_default_exists = models.Lang.query.filter(
and_(models.Lang.is_default.is_(True), models.Lang.id != lang_id)
).count()
== 0
)
if no_default_exists:
return (
jsonify({"error_message": "ERRORS.MUST_GET_ONE_DEFAULT_LANG"}),
405,
)
).count() > 0
if not other_default_exists:
return jsonify({"error_message": "ERRORS.MUST_GET_ONE_DEFAULT_LANG"}), 405

if "is_published" in data and data["is_published"] is True:
has_one_site = (
Expand Down

0 comments on commit 0693d18

Please sign in to comment.