diff --git a/assets/vue/components/basecomponents/BaseEditor.vue b/assets/vue/components/basecomponents/BaseEditor.vue new file mode 100644 index 0000000000..6336e65cf9 --- /dev/null +++ b/assets/vue/components/basecomponents/BaseEditor.vue @@ -0,0 +1,53 @@ + + + diff --git a/assets/vue/components/basecomponents/BaseRadioButtons.vue b/assets/vue/components/basecomponents/BaseRadioButtons.vue index df84f8bac1..5fcfa52782 100644 --- a/assets/vue/components/basecomponents/BaseRadioButtons.vue +++ b/assets/vue/components/basecomponents/BaseRadioButtons.vue @@ -1,12 +1,12 @@ 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 @@ + + + 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 @@ + + + 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 @@ + + + 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[] = '