diff --git a/.github/workflows/reusable-dev-deployment.yml b/.github/workflows/reusable-dev-deployment.yml index 9b51534746..ac55f2ac8f 100644 --- a/.github/workflows/reusable-dev-deployment.yml +++ b/.github/workflows/reusable-dev-deployment.yml @@ -60,7 +60,7 @@ jobs: | Latest commit | [${{ inputs.sha }}](https://github.com/${{ github.repository }}/commit/${{ inputs.sha }}) | | Latest deploy log | [${{ steps.job-url.outputs.html_url }}](${{ steps.job-url.outputs.html_url }}) | comment_tag: feature-branch-deployment-status - + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 with: ref: ${{ inputs.sha }} @@ -87,6 +87,8 @@ jobs: --set caddy.image.repository='docker.io/${{ vars.DOCKER_HUB_USERNAME }}/ecamp3-api-caddy' \ --set postgresql.dbBackupRestoreImage.repository='docker.io/${{ vars.DOCKER_HUB_USERNAME }}/ecamp3-db-backup-restore' \ --set termsOfServiceLinkTemplate='https://ecamp3.ch/{lang}/tos' \ + --set newsLink='https://ecamp3.ch/blog' \ + --set helpLink='https://ecamp3.ch/faq' \ --set domain=${{ inputs.name }}.${{ vars.DOMAIN }} \ --set ingress.basicAuth.enabled=${{ vars.BASIC_AUTH_ENABLED || false }} \ --set ingress.basicAuth.username=${{ secrets.BASIC_AUTH_USERNAME }} \ diff --git a/.github/workflows/reusable-stage-prod-deployment.yml b/.github/workflows/reusable-stage-prod-deployment.yml index ff8ef1ebaf..f79cc1b32e 100644 --- a/.github/workflows/reusable-stage-prod-deployment.yml +++ b/.github/workflows/reusable-stage-prod-deployment.yml @@ -46,6 +46,8 @@ jobs: --set caddy.image.repository='docker.io/${{ vars.DOCKER_HUB_USERNAME }}/ecamp3-api-caddy' \ --set postgresql.dbBackupRestoreImage.repository='docker.io/${{ vars.DOCKER_HUB_USERNAME }}/ecamp3-db-backup-restore' \ --set termsOfServiceLinkTemplate='https://ecamp3.ch/{lang}/tos' \ + --set newsLink='https://ecamp3.ch/blog' \ + --set helpLink='https://ecamp3.ch/faq' \ --set domain=${{ env.domain }} \ --set ingress.basicAuth.enabled=${{ vars.BASIC_AUTH_ENABLED || false }} \ --set ingress.basicAuth.username=${{ secrets.BASIC_AUTH_USERNAME }} \ diff --git a/.helm/deploy-to-cluster.sh b/.helm/deploy-to-cluster.sh index 13f571f63d..9e2683457e 100755 --- a/.helm/deploy-to-cluster.sh +++ b/.helm/deploy-to-cluster.sh @@ -35,6 +35,8 @@ app_jwt_private_key=$(echo -n "$app_jwt_passphrase" | openssl pkey -in "$SCRIPT_ for i in 1; do values="$values --set imageTag=${version}" values="$values --set termsOfServiceLinkTemplate=https://ecamp3.ch/{lang}/tos" + values="$values --set newsLink=https://ecamp3.ch/blog" + values="$values --set helpLink=https://ecamp3.ch/faq" values="$values --set domain=$instance_name-"$i".$domain" values="$values --set mail.dummyEnabled=true" values="$values --set ingress.basicAuth.enabled=$BASIC_AUTH_ENABLED" @@ -95,7 +97,7 @@ for i in 1; do values="$values --set $imagespec.image.pullPolicy=$pull_policy" values="$values --set $imagespec.image.repository=docker.io/${docker_hub_account}/ecamp3-api-$imagespec" done - + values="$values --set postgresql.dbBackupRestoreImage.pullPolicy=$pull_policy" values="$values --set postgresql.dbBackupRestoreImage.repository=docker.io/${docker_hub_account}/ecamp3-db-backup-restore" diff --git a/.helm/ecamp3/templates/frontend_configmap.yaml b/.helm/ecamp3/templates/frontend_configmap.yaml index 614a01c8ac..4e18b26ed7 100644 --- a/.helm/ecamp3/templates/frontend_configmap.yaml +++ b/.helm/ecamp3/templates/frontend_configmap.yaml @@ -21,6 +21,8 @@ data: VERSION: '{{ .Values.deployedVersion }}', VERSION_LINK_TEMPLATE: '{{ .Values.versionLinkTemplate }}', TERMS_OF_SERVICE_LINK_TEMPLATE: '{{ .Values.termsOfServiceLinkTemplate }}', + NEWS_LINK: '{{ .Values.newsLink }}', + HELP_LINK: '{{ .Values.helpLink }}', {{- if .Values.recaptcha.siteKey }} RECAPTCHA_SITE_KEY: '{{ .Values.recaptcha.siteKey }}', {{- else }} diff --git a/.helm/ecamp3/values.yaml b/.helm/ecamp3/values.yaml index 74637bc9e7..45d2996f28 100644 --- a/.helm/ecamp3/values.yaml +++ b/.helm/ecamp3/values.yaml @@ -9,6 +9,8 @@ domain: deployedVersion: "devel" versionLinkTemplate: 'https://github.com/ecamp/ecamp3/commit/{version}' termsOfServiceLinkTemplate: # 'https://ecamp3.ch/{lang}/tos' +newsLink: # 'https://ecamp3.ch/blog' +helpLink: # 'https://ecamp3.ch/faq' # enable/disable feature across the complete deployment featureToggle: diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 337e40a211..afea99c0f8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -90,27 +90,11 @@ export default { width: 100%; } -.user-nav { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; -} - .v-btn--open { background: #b0bec5 !important; color: rgba(0, 0, 0, 0.87) !important; } -.ec-usermenu { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; - right: 0; - left: inherit !important; - - .v-list { - border-radius: 0; - } -} - .v-app-bar .v-toolbar__content { padding-left: 0; padding-right: 0; diff --git a/frontend/src/components/layout/AuthContainer.vue b/frontend/src/components/layout/AuthContainer.vue index 8c5a2a1a8a..3a47f90c4c 100644 --- a/frontend/src/components/layout/AuthContainer.vue +++ b/frontend/src/components/layout/AuthContainer.vue @@ -2,10 +2,7 @@ diff --git a/frontend/src/components/navigation/UserMeta.vue b/frontend/src/components/navigation/UserMeta.vue index 8a50d20089..e936cddf25 100644 --- a/frontend/src/components/navigation/UserMeta.vue +++ b/frontend/src/components/navigation/UserMeta.vue @@ -5,8 +5,9 @@ offset-y dark right + rounded :content-class=" - ['ec-usermenu', $vuetify.breakpoint.xsOnly && 'rounded-lg mt-2'].join(' ') + ['ec-usermenu my-4', $vuetify.breakpoint.xsOnly && 'rounded-lg mt-2'].join(' ') " transition="slide-y-transition" :close-on-content-click="false" @@ -41,7 +42,7 @@ - + mdi-format-list-bulleted-triangle {{ $tc('components.navigation.userMeta.myCamps') }} + + mdi-help-circle + {{ $tc('global.navigation.help') }} + + mdi-open-in-new + + + mdi-script-text-outline + {{ $tc('global.navigation.news') }} + + mdi-open-in-new + + import UserAvatar from '../user/UserAvatar.vue' import { mapGetters } from 'vuex' +import { getEnv } from '@/environment.js' export default { name: 'UserMeta', @@ -95,6 +115,12 @@ export default { } }, computed: { + newsLink() { + return getEnv().NEWS_LINK + }, + helpLink() { + return getEnv().HELP_LINK + }, ...mapGetters({ authUser: 'getLoggedInUser', }), diff --git a/frontend/src/environment.js b/frontend/src/environment.js index 0b727969bb..a299a1477e 100644 --- a/frontend/src/environment.js +++ b/frontend/src/environment.js @@ -18,6 +18,8 @@ export function getEnv() { 'https://github.com/ecamp/ecamp3/commit/{version}', TERMS_OF_SERVICE_LINK_TEMPLATE: env.TERMS_OF_SERVICE_LINK_TEMPLATE ?? 'https://ecamp3.ch/{lang}/tos', + NEWS_LINK: env.NEWS_LINK ?? 'https://ecamp3.ch/blog', + HELP_LINK: env.HELP_LINK ?? 'https://ecamp3.ch/faq', FEATURE_DEVELOPER: (env.VITE_FEATURE_DEVELOPER ?? 'true') === 'true', LOGIN_INFO_TEXT_KEY: env.VITE_LOGIN_INFO_TEXT_KEY ?? 'dev', } diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index e37a50c8ea..6df666e6bd 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -463,7 +463,9 @@ "navigation": { "admin": { "title": "Admin" - } + }, + "help": "Hilfe", + "news": "News" }, "serverError": { "409": "Uuuups... Diese Aktion hat zu einem Fehler auf dem Server geführt.", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 19a15dbb18..c73cdbf7bb 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -463,7 +463,9 @@ "navigation": { "admin": { "title": "Admin" - } + }, + "help": "Help", + "news": "News" }, "serverError": { "409": "Uuuups... This action caused an server-side error.", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index 2c9fb9bfa3..6f5fe38e5e 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -446,7 +446,9 @@ "navigation": { "admin": { "title": "Admin" - } + }, + "help": "Aide", + "news": "Actualités" }, "serverError": { "409": "Oooops... Cette action a provoqué une erreur côté serveur.", diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json index a7f7d63eef..3691364aa5 100644 --- a/frontend/src/locales/it.json +++ b/frontend/src/locales/it.json @@ -446,7 +446,9 @@ "navigation": { "admin": { "title": "Admin" - } + }, + "help": "Aiuto", + "news": "Notizie" }, "serverError": { "409": "Oooops... Questa azione ha causato un errore sul lato server.", diff --git a/frontend/src/locales/rm.json b/frontend/src/locales/rm.json index c8eab54d10..b42a15107f 100644 --- a/frontend/src/locales/rm.json +++ b/frontend/src/locales/rm.json @@ -410,7 +410,9 @@ "navigation": { "admin": { "title": "Admin" - } + }, + "help": "Agid", + "news": "Noviteds" }, "serverError": { "409": "Uuuups... Questa acziun ha chaschunà ina errur sin il server." diff --git a/frontend/src/router.js b/frontend/src/router.js index 1358d671eb..addcbb33d3 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -7,6 +7,7 @@ import { getEnv } from '@/environment.js' Vue.use(Router) +const NavigationAuth = () => import('./views/auth/NavigationAuth.vue') const NavigationDefault = () => import('./views/NavigationDefault.vue') const NavigationCamp = () => import('./views/camp/navigation/NavigationCamp.vue') const GenericPage = () => import('./components/generic/GenericPage.vue') @@ -43,7 +44,7 @@ export default new Router({ path: '/register', name: 'register', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/Register.vue'), }, }, @@ -51,7 +52,7 @@ export default new Router({ path: '/register-done', name: 'register-done', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/RegisterDone.vue'), }, }, @@ -59,7 +60,7 @@ export default new Router({ path: '/reset-password', name: 'resetPasswordRequest', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/ResetPasswordRequest.vue'), }, }, @@ -67,7 +68,7 @@ export default new Router({ path: '/reset-password/:id', name: 'resetPassword', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/ResetPassword.vue'), }, props: { @@ -82,7 +83,7 @@ export default new Router({ path: '/activate/:userId/:activationKey', name: 'activate', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/Activate.vue'), }, props: { @@ -98,7 +99,7 @@ export default new Router({ path: '/login', name: 'login', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/Login.vue'), }, }, @@ -106,7 +107,7 @@ export default new Router({ path: '/loginCallback', name: 'loginCallback', components: { - navigation: NavigationDefault, + navigation: NavigationAuth, default: () => import('./views/auth/LoginCallback.vue'), }, }, diff --git a/frontend/src/views/NavigationDefault.vue b/frontend/src/views/NavigationDefault.vue index 017e0771c9..20fa38c2da 100644 --- a/frontend/src/views/NavigationDefault.vue +++ b/frontend/src/views/NavigationDefault.vue @@ -6,15 +6,22 @@ color="blue-grey darken-4" dark > - + - + + + {{ $tc('global.navigation.help') }} + mdi-open-in-new + + + diff --git a/frontend/src/views/Profile.vue b/frontend/src/views/Profile.vue index 47927ae657..8b32d545ee 100644 --- a/frontend/src/views/Profile.vue +++ b/frontend/src/views/Profile.vue @@ -4,10 +4,13 @@ v-if="user" max-width="800" :title=" - $tc('views.profile.profile') + ': ' + (user._meta.loading ? '' : user.displayName) + $tc('views.profile.profile') + (user._meta.loading ? '' : ': ' + user.displayName) " toolbar > + + + + + + + mdi-script-text-outline + {{ $tc('global.navigation.news') }} + + + + mdi-help + {{ $tc('global.navigation.help') }} + + + + mdi-help + {{ $tc('global.navigation.help') }} + + + + + + diff --git a/frontend/src/views/camp/navigation/desktop/NavTopbar.vue b/frontend/src/views/camp/navigation/desktop/NavTopbar.vue index 5de166a951..bf3e9dfe56 100644 --- a/frontend/src/views/camp/navigation/desktop/NavTopbar.vue +++ b/frontend/src/views/camp/navigation/desktop/NavTopbar.vue @@ -36,7 +36,13 @@ - + + + {{ $tc('global.navigation.help') }} + mdi-open-in-new + + + @@ -46,6 +52,7 @@ import Logo from '@/components/navigation/Logo.vue' import { campRoute, materialListRoute } from '@/router.js' import { mapGetters } from 'vuex' import { campRoleMixin } from '@/mixins/campRoleMixin.js' +import { getEnv } from '@/environment.js' export default { name: 'NavTopbar', @@ -63,6 +70,9 @@ export default { } }, computed: { + helpLink() { + return getEnv().HELP_LINK + }, ...mapGetters({ user: 'getLoggedInUser', }), diff --git a/frontend/src/views/camp/navigation/mobile/NavSidebar.vue b/frontend/src/views/camp/navigation/mobile/NavSidebar.vue index f4eb86d47d..85be95631b 100644 --- a/frontend/src/views/camp/navigation/mobile/NavSidebar.vue +++ b/frontend/src/views/camp/navigation/mobile/NavSidebar.vue @@ -77,6 +77,23 @@ :to="adminRoute(camp(), 'print')" /> + + + + + + +