+
@@ -14,19 +14,18 @@
diff --git a/assets/vue/router/index.js b/assets/vue/router/index.js
index 5e7f38beee..a64fe418ab 100644
--- a/assets/vue/router/index.js
+++ b/assets/vue/router/index.js
@@ -11,6 +11,7 @@ import calendarEventRoutes from "./ccalendarevent"
import toolIntroRoutes from "./ctoolintro"
import pageRoutes from "./page"
import socialNetworkRoutes from "./social"
+import termsRoutes from "./terms"
//import courseCategoryRoutes from './coursecategory';
import documents from "./documents"
@@ -139,6 +140,7 @@ const router = createRouter({
component: MySessionListUpcoming,
meta: { requiresAuth: true },
},
+ termsRoutes,
socialNetworkRoutes,
catalogueCourses,
catalogueSessions,
diff --git a/assets/vue/router/terms.js b/assets/vue/router/terms.js
new file mode 100644
index 0000000000..d07b95de53
--- /dev/null
+++ b/assets/vue/router/terms.js
@@ -0,0 +1,18 @@
+export default {
+ path: '/resources/terms-conditions',
+ meta: { requiresAuth: true },
+ name: 'TermsConditions',
+ component: () => import('../views/terms/TermsLayout.vue'),
+ children: [
+ {
+ name: 'TermsConditionsList',
+ path: '',
+ component: () => import('../views/terms/TermsList.vue')
+ },
+ {
+ name: 'TermsConditionsEdit',
+ path: 'edit',
+ component: () => import('../views/terms/TermsEdit.vue')
+ }
+ ]
+}
diff --git a/assets/vue/services/api.js b/assets/vue/services/api.js
index 62454a3cb8..af8421d397 100644
--- a/assets/vue/services/api.js
+++ b/assets/vue/services/api.js
@@ -1,7 +1,7 @@
import fetch from '../utils/fetch';
-export default function makeService(endpoint) {
- return {
+export default function makeService(endpoint, extensions = {}) {
+ const baseService = {
find(id, params) {
console.log('api.js find');
const currentParams = new URLSearchParams(window.location.search);
@@ -65,4 +65,6 @@ export default function makeService(endpoint) {
});
}
};
+
+ return { ...baseService, ...extensions };
}
diff --git a/assets/vue/services/languageService.js b/assets/vue/services/languageService.js
new file mode 100644
index 0000000000..8c9963596e
--- /dev/null
+++ b/assets/vue/services/languageService.js
@@ -0,0 +1,20 @@
+import makeService from './api'
+import { ENTRYPOINT } from "../config/entrypoint"
+
+const legalExtensions = {
+ async findAllAvailable() {
+ const url = new URL(`${ENTRYPOINT}languages`)
+ url.searchParams.append("available", "true")
+ try {
+ const response = await fetch(url.toString())
+ if (!response.ok) {
+ throw new Error('Network response was not ok')
+ }
+ return await response.json()
+ } catch (error) {
+ console.error('Error fetching available languages:', error)
+ throw error
+ }
+ },
+}
+export default makeService('languages', legalExtensions)
diff --git a/assets/vue/services/legalService.js b/assets/vue/services/legalService.js
new file mode 100644
index 0000000000..7e5f5cbc2e
--- /dev/null
+++ b/assets/vue/services/legalService.js
@@ -0,0 +1,37 @@
+import makeService from './api';
+import { ENTRYPOINT } from "../config/entrypoint"
+
+const legalExtensions = {
+ async findAllByLanguage(languageId) {
+ const params = new URLSearchParams({
+ languageId: languageId,
+ 'order[version]': 'desc'
+ });
+ return fetch(`${ENTRYPOINT}legals?${params.toString()}`);
+ },
+ async saveOrUpdateLegal(payload) {
+ console.log('Saving or updating legal terms');
+ return fetch(`/legal/save`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(payload)
+ });
+ },
+ async fetchExtraFields(termId = null) {
+ try {
+ const url = termId ? `/legal/extra-fields?termId=${termId}` : `/legal/extra-fields`;
+ const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ } catch (error) {
+ console.error('Error loading extra fields:', error);
+ throw error;
+ }
+ },
+};
+
+export default makeService('legals', legalExtensions);
diff --git a/assets/vue/views/terms/TermsEdit.vue b/assets/vue/views/terms/TermsEdit.vue
new file mode 100644
index 0000000000..cbb530f503
--- /dev/null
+++ b/assets/vue/views/terms/TermsEdit.vue
@@ -0,0 +1,196 @@
+
+
+
+
+ {{ t('Display a Terms & Conditions statement on the registration page, require visitor to accept the T&C to register') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/vue/views/terms/TermsLayout.vue b/assets/vue/views/terms/TermsLayout.vue
new file mode 100644
index 0000000000..51813d262c
--- /dev/null
+++ b/assets/vue/views/terms/TermsLayout.vue
@@ -0,0 +1,20 @@
+
+
+
+ {{ t('Terms and conditions') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/vue/views/terms/TermsList.vue b/assets/vue/views/terms/TermsList.vue
new file mode 100644
index 0000000000..bf725bb525
--- /dev/null
+++ b/assets/vue/views/terms/TermsList.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+ {{ t('You should create the Term and Conditions for all the available languages.') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDate(slotProps.data.date) }}
+
+
+
+
+
+
+
diff --git a/public/main/admin/user_list_consent.php b/public/main/admin/user_list_consent.php
index 8eaf079b54..9feb3412c3 100644
--- a/public/main/admin/user_list_consent.php
+++ b/public/main/admin/user_list_consent.php
@@ -78,7 +78,7 @@ function prepare_user_sql_query($getCount)
ON (
u.id = v.item_id AND
(field_id = $extraFieldId OR field_id = $extraFieldIdDeleteAccount) AND
- v.value = 1
+ v.field_value = 1
) ";
$keywordList = [
@@ -317,7 +317,7 @@ function modify_filter($user_id, $url_params, $row): string
$result .= Display::url(
Display::getMdiIcon(ActionIcon::SEND_MESSAGE, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Send message')),
- api_get_path(WEB_CODE_PATH).'messages/new_message.php?send_to_user='.$user_id
+ api_get_path(WEB_PATH).'resources/messages/new'
);
$result .= ' ';
$extraFields = Session::read('data_privacy_extra_fields');
diff --git a/public/main/auth/inscription.php b/public/main/auth/inscription.php
index 87bf630665..6ec7aa139d 100644
--- a/public/main/auth/inscription.php
+++ b/public/main/auth/inscription.php
@@ -41,6 +41,8 @@ $webserviceUrl = '';
$hash = '';
if ($isTccEnabled) {
+ // Configure TCC plugin settings and JavaScript for the form
+ // (This section includes the JavaScript code for the TCC plugin integration)
$webserviceUrl = api_get_plugin_setting('logintcc', 'webservice_url');
$hash = api_get_plugin_setting('logintcc', 'hash');
$htmlHeadXtra[] = '