diff --git a/frontend/public/images/List_of_Logs_Image.png b/frontend/public/images/List_of_Logs_Image.png
new file mode 100644
index 0000000000..93d5c57e49
Binary files /dev/null and b/frontend/public/images/List_of_Logs_Image.png differ
diff --git a/frontend/src/AuthenticatedSwitch.jsx b/frontend/src/AuthenticatedSwitch.jsx
index 63945cca6c..2d8823a385 100644
--- a/frontend/src/AuthenticatedSwitch.jsx
+++ b/frontend/src/AuthenticatedSwitch.jsx
@@ -10,12 +10,14 @@ import useGetMe from "./models/auth/users/useGetMe";
import AlertBanner from "./components/AlertBanner";
import EncounterSearch from "./pages/EncounterSearch";
import Citation from "./pages/Citation";
+import AdminLogs from "./pages/AdminLogs";
import ReportEncounter from "./pages/ReportsAndManagamentPages/ReportEncounter";
import ReportConfirm from "./pages/ReportsAndManagamentPages/ReportConfirm";
export default function AuthenticatedSwitch({ showAlert, setShowAlert, showclassicsubmit }) {
const { data } = useGetMe();
const username = data?.username;
+ // eslint-disable-next-line no-undef
const avatar =
data?.imageURL || `${process.env.PUBLIC_URL}/images/Avatar.png`;
const [header, setHeader] = React.useState(true);
@@ -57,6 +59,7 @@ export default function AuthenticatedSwitch({ showAlert, setShowAlert, showclass
} />
} />
} />
+ } />
} />
} />
} />
diff --git a/frontend/src/components/Card.jsx b/frontend/src/components/Card.jsx
index dfd4732562..29a3c81d67 100644
--- a/frontend/src/components/Card.jsx
+++ b/frontend/src/components/Card.jsx
@@ -8,35 +8,49 @@ export default function Card({
content = "",
buttonText = "",
link = "",
+ color = "black",
}) {
const themeColor = useContext(ThemeColorContext);
return (
(window.location.href = link)}
style={{
- minWidth: "15rem",
- maxWidth: "20rem",
- borderRadius: "25px",
+ height: "170px",
+ width: "170px",
+ borderRadius: "20px",
boxShadow: "0 4px 8px 0 rgba(0,0,0,0.2)",
+ color: color,
+ cursor: "pointer",
}}
>
{icon}
-
-
{title}
-
{content}
+ {title && (
+
+ {title}
+
+ )}
+ {content &&
{content}
}
+ {buttonText && (
- {buttonText && (
-
- {buttonText}
-
- )}
+
+ {buttonText}
+
-
+ )}
);
}
diff --git a/frontend/src/components/svg/DeleteSweep.jsx b/frontend/src/components/svg/DeleteSweep.jsx
new file mode 100644
index 0000000000..34aee5b717
--- /dev/null
+++ b/frontend/src/components/svg/DeleteSweep.jsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+export default function DeleteSweep() {
+ return (
+
+ );
+}
diff --git a/frontend/src/components/svg/GalleryThumbnail.jsx b/frontend/src/components/svg/GalleryThumbnail.jsx
new file mode 100644
index 0000000000..c29ce7a356
--- /dev/null
+++ b/frontend/src/components/svg/GalleryThumbnail.jsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+export default function GalleryThumbnail() {
+ return (
+
+ );
+}
diff --git a/frontend/src/components/svg/StackedEmail.jsx b/frontend/src/components/svg/StackedEmail.jsx
new file mode 100644
index 0000000000..2f856bebcd
--- /dev/null
+++ b/frontend/src/components/svg/StackedEmail.jsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+export default function StackedEmail() {
+ return (
+
+ );
+}
diff --git a/frontend/src/constants/navMenu.js b/frontend/src/constants/navMenu.js
index e30e33234d..3157a076df 100644
--- a/frontend/src/constants/navMenu.js
+++ b/frontend/src/constants/navMenu.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-undef */
import React from "react";
import { FormattedMessage } from "react-intl";
@@ -244,7 +245,7 @@ const authenticatedMenu = (username, showclassicsubmit) => [
name: (
),
- href: "/appadmin/logs.jsp",
+ href: "/react/admin/logs",
},
{
name: (
diff --git a/frontend/src/locale/de.json b/frontend/src/locale/de.json
index 395f422e61..2bd943d364 100644
--- a/frontend/src/locale/de.json
+++ b/frontend/src/locale/de.json
@@ -242,6 +242,10 @@
"CITATION_CITATION_DETAILS_2": "J. Levenson, S. Gero, J. Van Oast und J. Holmberg. 2015. Flukebook: cloudbasierte Foto-Identifikationsanalysetools für die Meeresforschung. Erreichbar unter: https://www.flukebook.org",
"CITATION_FORWARD": "Um die Zitierung jeder Publikation / jedes Berichts, der / das die von Wild Me bereitgestellten Daten / Werkzeuge verwendet hat, zur Aufnahme in unsere Referenzliste an info@wildme.org weiterzuleiten.",
"CITATION_DISCLAIMER": "Wild Me oder die ursprünglichen Datenanbieter nicht für Fehler in den Daten verantwortlich machen. Obwohl wir alle Anstrengungen unternommen haben, um die Qualität der Datenbank zu gewährleisten, können wir die Genauigkeit dieser Datensätze nicht garantieren.",
+ "USER_ACCESS_LOG": "Benutzerzugriffsprotokoll",
+ "ENCOUNTER_SUBMISSION_LOG": "Begegnungseinreichungsprotokoll",
+ "DELETED_ENCOUNTERS_LOG": "Protokoll gelöschter Begegnungen",
+ "EMAIL_LOG": "E-Mail-Protokoll",
"MAP_IS_LOADING": "Karte wird geladen",
"SESSION_WARNING_CONTENT": "Ihre Sitzung läuft bald ab.",
"SESSION_WARNING_TITLE": "Sitzungszeit-Warnung",
diff --git a/frontend/src/locale/en.json b/frontend/src/locale/en.json
index 64f1d99725..663a65a2f0 100644
--- a/frontend/src/locale/en.json
+++ b/frontend/src/locale/en.json
@@ -242,6 +242,10 @@
"CITATION_CITATION_DETAILS_2": "J. Levenson, S. Gero, J. Van Oast, and J. Holmberg. 2015. Flukebook: a cloud-based photo-identification analysis tools for marine mammal research. Accessible at: https://www.flukebook.org",
"CITATION_FORWARD": "To forward the citation of any publication / report that made use of the data / tools provided by Wild Me for inclusion in our list of references by submitting to info@wildme.org.",
"CITATION_DISCLAIMER": "Not to hold Wild Me or the original data providers liable for errors in the data. While we have made every effort to ensure the quality of the database, we cannot guarantee the accuracy of these datasets.",
+ "USER_ACCESS_LOG": "User Access Log",
+ "ENCOUNTER_SUBMISSION_LOG": "Encounter Submission Log",
+ "DELETED_ENCOUNTERS_LOG": "Deleted Encounters Log",
+ "EMAIL_LOG": "Email Log",
"MAP_IS_LOADING": "Map is loading",
"SESSION_WARNING_CONTENT": "Your session is about to expire. ",
"SESSION_WARNING_TITLE": "Session Timeout Warning",
@@ -314,5 +318,4 @@
"BEERROR_INVALID" : "Could not submit; field format was invalid: ",
"BEERROR_UNKNOWN" : "Could not submit due to unknown error.",
"ANON_UPLOAD_IMAGE_WARNING": "Images cannot be uploaded until captcha is complete."
-
}
\ No newline at end of file
diff --git a/frontend/src/locale/es.json b/frontend/src/locale/es.json
index 3e5b62519f..ab6f09e7ab 100644
--- a/frontend/src/locale/es.json
+++ b/frontend/src/locale/es.json
@@ -249,6 +249,10 @@
"SESSION_LOGIN": "Iniciar sesión",
"SESSION_CLOSE": "Cerrar",
"LOADING": "Cargando",
+ "USER_ACCESS_LOG": "Registro de acceso de usuario",
+ "ENCOUNTER_SUBMISSION_LOG": "Registro de envío de encuentros",
+ "DELETED_ENCOUNTERS_LOG": "Registro de encuentros eliminados",
+ "EMAIL_LOG": "Registro de correos electrónicos",
"REPORT_PAGE_TITLE": "Página para informar de un encuentro",
"REPORT_PAGE_DESCRIPTION": "Háblenos del animal que vio y sea lo más específico posible. Al enviar datos e imágenes, usted autoriza el uso ilimitado de estos materiales únicamente con fines de investigación y conservación.",
"SIGNIN_REMINDER_BANNER": "Para asociar el encuentro con tu cuenta, por favor inicia sesión. Si deseas continuar de forma anónima, completa el captcha.",
diff --git a/frontend/src/locale/fr.json b/frontend/src/locale/fr.json
index a0b34f7a0f..6aadc9ff1a 100644
--- a/frontend/src/locale/fr.json
+++ b/frontend/src/locale/fr.json
@@ -241,6 +241,10 @@
"CITATION_CITATION_DETAILS_2": "J. Levenson, S. Gero, J. Van Oast et J. Holmberg. 2015. Flukebook : outils d'analyse d'identification photographique basés sur le cloud pour la recherche sur les mammifères marins. Accessible sur : https://www.flukebook.org",
"CITATION_FORWARD": "Transmettre la citation de toute publication / rapport qui a utilisé les données / outils fournis par Wild Me pour inclusion dans notre liste de références en l'envoyant à info@wildme.org.",
"CITATION_DISCLAIMER": "Ne pas tenir Wild Me ou les fournisseurs de données originaux responsables des erreurs dans les données. Bien que nous ayons fait tout notre possible pour garantir la qualité de la base de données, nous ne pouvons garantir l'exactitude de ces ensembles de données.",
+ "USER_ACCESS_LOG": "Journal d'accès utilisateur",
+ "ENCOUNTER_SUBMISSION_LOG": "Journal des soumissions de rencontres",
+ "DELETED_ENCOUNTERS_LOG": "Journal des rencontres supprimées",
+ "EMAIL_LOG": "Journal des e-mails",
"MAP_IS_LOADING": "La carte est en cours de chargement",
"SESSION_WARNING_CONTENT": "Votre session est sur le point d'expirer.",
"SESSION_WARNING_TITLE": "Avertissement de fin de session",
diff --git a/frontend/src/locale/it.json b/frontend/src/locale/it.json
index 98b783c431..f0dc73ac18 100644
--- a/frontend/src/locale/it.json
+++ b/frontend/src/locale/it.json
@@ -241,6 +241,10 @@
"CITATION_CITATION_DETAILS_2": "J. Levenson, S. Gero, J. Van Oast e J. Holmberg. 2015. Flukebook: strumenti di analisi basati su cloud per l'identificazione fotografica per la ricerca sui mammiferi marini. Accessibile su: https://www.flukebook.org",
"CITATION_FORWARD": "Trasmettere la citazione di qualsiasi pubblicazione / rapporto che ha utilizzato i dati / strumenti forniti da Wild Me per l'inclusione nel nostro elenco di riferimenti inviandola a info@wildme.org.",
"CITATION_DISCLAIMER": "Non ritenere Wild Me o i fornitori di dati originali responsabili per errori nei dati. Sebbene abbiamo fatto tutto il possibile per garantire la qualità del database, non possiamo garantire l'accuratezza di questi dataset.",
+ "USER_ACCESS_LOG": "Registro accessi utente",
+ "ENCOUNTER_SUBMISSION_LOG": "Registro delle invii incontri",
+ "DELETED_ENCOUNTERS_LOG": "Registro incontri eliminati",
+ "EMAIL_LOG": "Registro e-mail",
"MAP_IS_LOADING": "Mappa in caricamento",
"SESSION_WARNING_CONTENT": "La tua sessione sta per scadere.",
"SESSION_WARNING_TITLE": "Avviso di scadenza sessione",
diff --git a/frontend/src/pages/AdminLogs.jsx b/frontend/src/pages/AdminLogs.jsx
new file mode 100644
index 0000000000..b67af698b4
--- /dev/null
+++ b/frontend/src/pages/AdminLogs.jsx
@@ -0,0 +1,75 @@
+import React, { useContext } from "react";
+import { Row } from "react-bootstrap";
+import { useIntl } from "react-intl";
+import ThemeColorContext from "../ThemeColorProvider";
+import PassKey from "../components/svg/PassKey";
+import GalleryThumbnail from "../components/svg/GalleryThumbnail";
+import DeleteSweep from "../components/svg/DeleteSweep";
+import StackedEmail from "../components/svg/StackedEmail";
+import Card from "../components/Card";
+
+export const AdminLogs = () => {
+ const themeColor = useContext(ThemeColorContext);
+ const intl = useIntl();
+
+ const cards = [
+ {
+ title: intl.formatMessage({ id: "USER_ACCESS_LOG" }),
+ icon: ,
+ url: "/wildbook_data_dir/logs/user-access.htm",
+ },
+ {
+ title: intl.formatMessage({ id: "ENCOUNTER_SUBMISSION_LOG" }),
+ icon: ,
+ url: "/wildbook_data_dir/logs/encounter-submission.htm",
+ },
+ {
+ title: intl.formatMessage({ id: "DELETED_ENCOUNTERS_LOG" }),
+ icon: ,
+ url: "/wildbook_data_dir/logs/encounter-delete.htm",
+ },
+ {
+ title: intl.formatMessage({ id: "EMAIL_LOG" }),
+ icon: ,
+ url: "/wildbook_data_dir/logs/email.htm",
+ },
+ ];
+ return (
+
+
+
Logs
+
+ {cards.map((card, index) => (
+
+ ))}
+
+
+
+ );
+};
+
+export default AdminLogs;
diff --git a/src/main/resources/servletResponseTemplate.htm b/src/main/resources/servletResponseTemplate.htm
index ebbd8e8c74..1c4a6f9cab 100755
--- a/src/main/resources/servletResponseTemplate.htm
+++ b/src/main/resources/servletResponseTemplate.htm
@@ -147,7 +147,7 @@
My Accounts
User Management
Library Administration
- Logs
+ Logs
Photo Keywords
Software Documentation
Data Integrity
diff --git a/src/main/webapp/header.jsp b/src/main/webapp/header.jsp
index b0f3a033d5..0ccad495e4 100755
--- a/src/main/webapp/header.jsp
+++ b/src/main/webapp/header.jsp
@@ -510,7 +510,7 @@ if(request.getUserPrincipal()!=null){
<%=props.getProperty("manageMyAccounts")%>
<%=props.getProperty("userManagement")%>
<%=props.getProperty("libraryAdministration")%>
- <%=props.getProperty("logs")%>
+ <%=props.getProperty("logs")%>
<%=props.getProperty("photoKeywords")%>
<%=props.getProperty("softwareDocumentation")%>
<%=props.getProperty("dataIntegrity")%>