mirror of
https://github.com/ae-utbm/sith.git
synced 2025-02-27 09:57:09 +00:00
Add possibility to de-moderate news through api and calendar widget
This commit is contained in:
parent
a1bf86dabf
commit
92d282f4ba
12
com/api.py
12
com/api.py
@ -65,6 +65,18 @@ class NewsController(ControllerBase):
|
|||||||
news.moderator = self.context.request.user
|
news.moderator = self.context.request.user
|
||||||
news.save()
|
news.save()
|
||||||
|
|
||||||
|
@route.patch(
|
||||||
|
"/{int:news_id}/remove",
|
||||||
|
permissions=[HasPerm("com.moderate_news")],
|
||||||
|
url_name="remove_news",
|
||||||
|
)
|
||||||
|
def remove_news(self, news_id: int):
|
||||||
|
news = self.get_object_or_exception(News, id=news_id)
|
||||||
|
if news.is_moderated:
|
||||||
|
news.is_moderated = False
|
||||||
|
news.moderator = self.context.request.user
|
||||||
|
news.save()
|
||||||
|
|
||||||
@route.delete(
|
@route.delete(
|
||||||
"/{int:news_id}",
|
"/{int:news_id}",
|
||||||
permissions=[HasPerm("com.delete_news")],
|
permissions=[HasPerm("com.delete_news")],
|
||||||
|
@ -13,6 +13,7 @@ import {
|
|||||||
calendarCalendarUnmoderated,
|
calendarCalendarUnmoderated,
|
||||||
newsDeleteNews,
|
newsDeleteNews,
|
||||||
newsModerateNews,
|
newsModerateNews,
|
||||||
|
newsRemoveNews,
|
||||||
} from "#openapi";
|
} from "#openapi";
|
||||||
|
|
||||||
@registerComponent("ics-calendar")
|
@registerComponent("ics-calendar")
|
||||||
@ -86,7 +87,7 @@ export class IcsCalendar extends inheritHtmlElement("div") {
|
|||||||
this.calendar.refetchEvents();
|
this.calendar.refetchEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
async moderate(id: number) {
|
async moderateNews(id: number) {
|
||||||
await newsModerateNews({
|
await newsModerateNews({
|
||||||
path: {
|
path: {
|
||||||
// biome-ignore lint/style/useNamingConvention: python API
|
// biome-ignore lint/style/useNamingConvention: python API
|
||||||
@ -96,7 +97,17 @@ export class IcsCalendar extends inheritHtmlElement("div") {
|
|||||||
await this.refreshEvents();
|
await this.refreshEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(id: number) {
|
async removeNews(id: number) {
|
||||||
|
await newsRemoveNews({
|
||||||
|
path: {
|
||||||
|
// biome-ignore lint/style/useNamingConvention: python API
|
||||||
|
news_id: id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await this.refreshEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteNews(id: number) {
|
||||||
await newsDeleteNews({
|
await newsDeleteNews({
|
||||||
path: {
|
path: {
|
||||||
// biome-ignore lint/style/useNamingConvention: python API
|
// biome-ignore lint/style/useNamingConvention: python API
|
||||||
@ -195,24 +206,33 @@ export class IcsCalendar extends inheritHtmlElement("div") {
|
|||||||
}
|
}
|
||||||
const newsId = this.getNewsId(event);
|
const newsId = this.getNewsId(event);
|
||||||
const div = document.createElement("div");
|
const div = document.createElement("div");
|
||||||
|
if (this.canModerate) {
|
||||||
if (
|
if (
|
||||||
this.canModerate &&
|
|
||||||
event.source.internalEventSource.ui.classNames.indexOf("unmoderated") >= 0
|
event.source.internalEventSource.ui.classNames.indexOf("unmoderated") >= 0
|
||||||
) {
|
) {
|
||||||
const button = document.createElement("button");
|
const button = document.createElement("button");
|
||||||
button.innerHTML = `<i class="fa fa-check"></i>${gettext("Moderate")}`;
|
button.innerHTML = `<i class="fa fa-check"></i>${gettext("Moderate")}`;
|
||||||
button.setAttribute("class", "btn btn-green");
|
button.setAttribute("class", "btn btn-green");
|
||||||
button.onclick = () => {
|
button.onclick = () => {
|
||||||
this.moderate(newsId);
|
this.moderateNews(newsId);
|
||||||
};
|
};
|
||||||
div.appendChild(button);
|
div.appendChild(button);
|
||||||
|
} else {
|
||||||
|
const button = document.createElement("button");
|
||||||
|
button.innerHTML = `<i class="fa fa-times"></i>${gettext("Remove")}`;
|
||||||
|
button.setAttribute("class", "btn btn-orange");
|
||||||
|
button.onclick = () => {
|
||||||
|
this.removeNews(newsId);
|
||||||
|
};
|
||||||
|
div.appendChild(button);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (this.canDelete) {
|
if (this.canDelete) {
|
||||||
const button = document.createElement("button");
|
const button = document.createElement("button");
|
||||||
button.innerHTML = `<i class="fa fa-trash-can"></i>${gettext("Delete")}`;
|
button.innerHTML = `<i class="fa fa-trash-can"></i>${gettext("Delete")}`;
|
||||||
button.setAttribute("class", "btn btn-red");
|
button.setAttribute("class", "btn btn-red");
|
||||||
button.onclick = () => {
|
button.onclick = () => {
|
||||||
this.delete(newsId);
|
this.deleteNews(newsId);
|
||||||
};
|
};
|
||||||
div.appendChild(button);
|
div.appendChild(button);
|
||||||
}
|
}
|
||||||
|
@ -272,6 +272,20 @@ body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.btn-orange {
|
||||||
|
background-color: #fcbf81;
|
||||||
|
color: black;
|
||||||
|
|
||||||
|
&:not(:disabled):hover {
|
||||||
|
background-color: darken(#fcbf81, 15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
background-color: lighten(#fcbf81, 15%);
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:not(.btn-no-text) {
|
&:not(.btn-no-text) {
|
||||||
i {
|
i {
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-02-25 11:05+0100\n"
|
"POT-Creation-Date: 2025-02-25 14:38+0100\n"
|
||||||
"PO-Revision-Date: 2024-09-17 11:54+0200\n"
|
"PO-Revision-Date: 2024-09-17 11:54+0200\n"
|
||||||
"Last-Translator: Sli <antoine@bartuccio.fr>\n"
|
"Last-Translator: Sli <antoine@bartuccio.fr>\n"
|
||||||
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
||||||
@ -21,6 +21,19 @@ msgstr ""
|
|||||||
msgid "More info"
|
msgid "More info"
|
||||||
msgstr "Plus d'informations"
|
msgstr "Plus d'informations"
|
||||||
|
|
||||||
|
#: com/static/bundled/com/components/ics-calendar-index.ts
|
||||||
|
msgid "Moderate"
|
||||||
|
msgstr "Modérer"
|
||||||
|
|
||||||
|
#: com/static/bundled/com/components/ics-calendar-index.ts
|
||||||
|
#: core/static/bundled/core/components/ajax-select-base.ts
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Retirer"
|
||||||
|
|
||||||
|
#: com/static/bundled/com/components/ics-calendar-index.ts
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr "Supprimer"
|
||||||
|
|
||||||
#: com/static/bundled/com/components/moderation-alert-index.ts
|
#: com/static/bundled/com/components/moderation-alert-index.ts
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -32,10 +45,6 @@ msgstr ""
|
|||||||
"modérez ou supprimez cet événement, il sera également modéré (ou supprimé) "
|
"modérez ou supprimez cet événement, il sera également modéré (ou supprimé) "
|
||||||
"pour les semaines suivantes."
|
"pour les semaines suivantes."
|
||||||
|
|
||||||
#: core/static/bundled/core/components/ajax-select-base.ts
|
|
||||||
msgid "Remove"
|
|
||||||
msgstr "Retirer"
|
|
||||||
|
|
||||||
#: core/static/bundled/core/components/ajax-select-base.ts
|
#: core/static/bundled/core/components/ajax-select-base.ts
|
||||||
msgid "You need to type %(number)s more characters"
|
msgid "You need to type %(number)s more characters"
|
||||||
msgstr "Vous devez taper %(number)s caractères de plus"
|
msgstr "Vous devez taper %(number)s caractères de plus"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user