Merge remote-tracking branch 'origin/main'

This commit is contained in:
778a69cd 2023-05-24 13:00:37 +02:00
commit 4284e8e635
19 changed files with 180 additions and 86 deletions

View file

@ -247,7 +247,6 @@ build-docker-main:
script: script:
- docker buildx build --push --platform linux/amd64 -t framasoft/mobilizon:main -f docker/production/Dockerfile . - docker buildx build --push --platform linux/amd64 -t framasoft/mobilizon:main -f docker/production/Dockerfile .
# Don't push to latest when building beta/rc tags
build-and-push-to-latest-docker-tag: build-and-push-to-latest-docker-tag:
<<: *docker <<: *docker
rules: &release-tag-rules rules: &release-tag-rules
@ -260,11 +259,31 @@ build-and-push-to-latest-docker-tag:
- > - >
docker buildx build docker buildx build
--push --push
--platform linux/amd64,linux/arm --platform linux/amd64
-t framasoft/mobilizon:$CI_COMMIT_TAG -t framasoft/mobilizon:$CI_COMMIT_TAG
-t framasoft/mobilizon:latest -t framasoft/mobilizon:latest
-f docker/production/Dockerfile . -f docker/production/Dockerfile .
build-and-push-to-latest-docker-tag-cross:
<<: *docker
rules: &release-tag-rules
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
when: never
- if: $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /alpha|beta|rc/
when: on_success
timeout: 3 hours
allow_failure: true
script:
- >
docker buildx build
--push
--platform linux/arm, linux/arm64
-t framasoft/mobilizon:$CI_COMMIT_TAG
-t framasoft/mobilizon:latest
-f docker/production/Dockerfile .
# Don't push to latest when building beta/rc tags
build-and-push-docker-tag: build-and-push-docker-tag:
<<: *docker <<: *docker
rules: &pre-release-tag-rules rules: &pre-release-tag-rules
@ -277,7 +296,7 @@ build-and-push-docker-tag:
- > - >
docker buildx build docker buildx build
--push --push
--platform linux/amd64,linux/arm --platform linux/amd64
-t framasoft/mobilizon:$CI_COMMIT_TAG -t framasoft/mobilizon:$CI_COMMIT_TAG
-f docker/production/Dockerfile . -f docker/production/Dockerfile .

View file

@ -5,54 +5,60 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 3.1.0-beta.2 (2023-05-23)
### Bug Fixes
* include user role in moderator role ([c4d6019](https://framagit.org/framasoft/mobilizon/-/commit/c4d60194a6900a3f9430355c5fbb346d910e4df6))
## 3.1.0-beta.1 (2023-05-17) ## 3.1.0-beta.1 (2023-05-17)
### Features ### Features
* **API:** Allow to create apps, with permissions and both Authorization Code Flow and Device Flow * **API:** Allow to create apps, with permissions and both Authorization Code Flow and Device Flow
* **addresses:** Allow to enter manual addresses ([85d643d](https://framagit.org/framasoft/mobilizon/commits/85d643d0ecd5e7504f32953b9ed1509697b915e2)) * **addresses:** Allow to enter manual addresses ([85d643d](https://framagit.org/framasoft/mobilizon/-/commit/85d643d0ecd5e7504f32953b9ed1509697b915e2))
* **docker:** Specify the folder where tzdata downloads data so that it can be used in a volume ([4bb0625](https://framagit.org/framasoft/mobilizon/commits/4bb062528f12be530a3754ca23c1bc6dbc862e5a)), closes [#1280](https://framagit.org/framasoft/mobilizon/issues/1280) * **docker:** Specify the folder where tzdata downloads data so that it can be used in a volume ([4bb0625](https://framagit.org/framasoft/mobilizon/-/commit/4bb062528f12be530a3754ca23c1bc6dbc862e5a)), closes [#1280](https://framagit.org/framasoft/mobilizon/issues/1280)
* **spam:** Introduce checking new accounts, events & comments for spam with the help of Akismet ([317a343](https://framagit.org/framasoft/mobilizon/commits/317a3434b221a1a91b66d8443984269404863a8e)) * **spam:** Introduce checking new accounts, events & comments for spam with the help of Akismet ([317a343](https://framagit.org/framasoft/mobilizon/-/commit/317a3434b221a1a91b66d8443984269404863a8e))
* **rate-limiting:** Introduce rate-limiting on some endpoints ([c07ba3a5](https://framagit.org/framasoft/mobilizon/-/commit/c07ba3a5d19c419ef8aaf3ea9ca6e7f48e4f4487)) * **rate-limiting:** Introduce rate-limiting on some endpoints ([c07ba3a5](https://framagit.org/framasoft/mobilizon/-/commit/c07ba3a5d19c419ef8aaf3ea9ca6e7f48e4f4487))
### Bug Fixes ### Bug Fixes
* **global-search:** Add option values in debug log before calling global search service ([8141bb0](https://framagit.org/framasoft/mobilizon/commits/8141bb0acbc4eb02a917c5bc18712d0d954c4ee5)) * **global-search:** Add option values in debug log before calling global search service ([8141bb0](https://framagit.org/framasoft/mobilizon/-/commit/8141bb0acbc4eb02a917c5bc18712d0d954c4ee5))
* **apps:** Fix cleaning application data background job ([aa20f69](https://framagit.org/framasoft/mobilizon/commits/aa20f6991127ddee546fc0b867298c1342dbcb4d)) * **apps:** Fix cleaning application data background job ([aa20f69](https://framagit.org/framasoft/mobilizon/-/commit/aa20f6991127ddee546fc0b867298c1342dbcb4d))
* **apps:** Show message when the user doesn't have approved apps yet ([e0ee9c1](https://framagit.org/framasoft/mobilizon/commits/e0ee9c143b0335753db5dfae19e324781d55bd4e)) * **apps:** Show message when the user doesn't have approved apps yet ([e0ee9c1](https://framagit.org/framasoft/mobilizon/-/commit/e0ee9c143b0335753db5dfae19e324781d55bd4e))
* **auth:** Handle logging-in with disabled auth provider ([a22a5e3](https://framagit.org/framasoft/mobilizon/commits/a22a5e3cb924869e32cb9ed71dab3e03d91c018f)) * **auth:** Handle logging-in with disabled auth provider ([a22a5e3](https://framagit.org/framasoft/mobilizon/-/commit/a22a5e3cb924869e32cb9ed71dab3e03d91c018f))
* **backend:** Fix Mobilizon.Events.list_participations_for_user_query/1 ([bcf6fd8](https://framagit.org/framasoft/mobilizon/commits/bcf6fd893c762c12b63d7e02da43cd5c05db509b)) * **backend:** Fix Mobilizon.Events.list_participations_for_user_query/1 ([bcf6fd8](https://framagit.org/framasoft/mobilizon/-/commit/bcf6fd893c762c12b63d7e02da43cd5c05db509b))
* **backend:** Handle CLDR data having no standard property for a language ([dbe2da7](https://framagit.org/framasoft/mobilizon/commits/dbe2da79c3aa1543b87dce61b5fd90195fb53afe)) * **backend:** Handle CLDR data having no standard property for a language ([dbe2da7](https://framagit.org/framasoft/mobilizon/-/commit/dbe2da79c3aa1543b87dce61b5fd90195fb53afe))
* **backend:** Ignore group mentions for now ([b5f106b](https://framagit.org/framasoft/mobilizon/commits/b5f106b0a81fefba3203f8ec5855e834a2078222)) * **backend:** Ignore group mentions for now ([b5f106b](https://framagit.org/framasoft/mobilizon/-/commit/b5f106b0a81fefba3203f8ec5855e834a2078222))
* **back:** Improve error message when requesting reset passwords and new instructions ([1c1d0d4](https://framagit.org/framasoft/mobilizon/commits/1c1d0d47d70cf19abe5be42e7ec3a73656a8172b)) * **back:** Improve error message when requesting reset passwords and new instructions ([1c1d0d4](https://framagit.org/framasoft/mobilizon/-/commit/1c1d0d47d70cf19abe5be42e7ec3a73656a8172b))
* **back:** Replace NaiveDateTime uses with DateTime for consistency ([8ea00e7](https://framagit.org/framasoft/mobilizon/commits/8ea00e7c1827ce3056ae51968a62fb3dc03ac6eb)) * **back:** Replace NaiveDateTime uses with DateTime for consistency ([8ea00e7](https://framagit.org/framasoft/mobilizon/-/commit/8ea00e7c1827ce3056ae51968a62fb3dc03ac6eb))
* **back:** Various small fixes in backend ([2a57340](https://framagit.org/framasoft/mobilizon/commits/2a57340a82e414e69924ad89e8db9fc326742cc7)) * **back:** Various small fixes in backend ([2a57340](https://framagit.org/framasoft/mobilizon/-/commit/2a57340a82e414e69924ad89e8db9fc326742cc7))
* bind pagination current prop ([4bcf572](https://framagit.org/framasoft/mobilizon/commits/4bcf572c54d904587d0409e2eb68b4ca6cf48fec)) * bind pagination current prop ([4bcf572](https://framagit.org/framasoft/mobilizon/-/commit/4bcf572c54d904587d0409e2eb68b4ca6cf48fec))
* **federation:** Account suspension should use actor in question as author and not relay actor ([79b48da](https://framagit.org/framasoft/mobilizon/commits/79b48da22209a8b2f1b234b8b8e121543a39b22b)) * **federation:** Account suspension should use actor in question as author and not relay actor ([79b48da](https://framagit.org/framasoft/mobilizon/-/commit/79b48da22209a8b2f1b234b8b8e121543a39b22b))
* **feeds:** Only provide future events in ICS/Atom feeds ([f3a4431](https://framagit.org/framasoft/mobilizon/commits/f3a443138a0e1e6cf34fc593f5c174d56c21e904)), closes [#1246](https://framagit.org/framasoft/mobilizon/issues/1246) * **feeds:** Only provide future events in ICS/Atom feeds ([f3a4431](https://framagit.org/framasoft/mobilizon/-/commit/f3a443138a0e1e6cf34fc593f5c174d56c21e904)), closes [#1246](https://framagit.org/framasoft/mobilizon/issues/1246)
* Fix type of variable in navbar ([50ab531](https://framagit.org/framasoft/mobilizon/commits/50ab531156214f883cb03f785ccf65e3f19ef50e)) * Fix type of variable in navbar ([50ab531](https://framagit.org/framasoft/mobilizon/-/commit/50ab531156214f883cb03f785ccf65e3f19ef50e))
* **follow-instances:** Show correct error message when trying to follow already following actor ([d969c66](https://framagit.org/framasoft/mobilizon/commits/d969c6648f15e1ed280169a4c55d612bb002f03f)) * **follow-instances:** Show correct error message when trying to follow already following actor ([d969c66](https://framagit.org/framasoft/mobilizon/-/commit/d969c6648f15e1ed280169a4c55d612bb002f03f))
* **front:** Fix about sections titles ([487f406](https://framagit.org/framasoft/mobilizon/commits/487f4069b14fde6304c9a42cec5b1c1af79814c5)) * **front:** Fix about sections titles ([487f406](https://framagit.org/framasoft/mobilizon/-/commit/487f4069b14fde6304c9a42cec5b1c1af79814c5))
* **front:** Fix autocomplete attribute in o-inputitems after Oruga new version BC ([d2ba732](https://framagit.org/framasoft/mobilizon/commits/d2ba732b8b51986b739f6fbe3d74fa68e4b74ba0)) * **front:** Fix autocomplete attribute in o-inputitems after Oruga new version BC ([d2ba732](https://framagit.org/framasoft/mobilizon/-/commit/d2ba732b8b51986b739f6fbe3d74fa68e4b74ba0))
* **front:** Fix behaviour when deleting an event from event list ([cfd10ea](https://framagit.org/framasoft/mobilizon/commits/cfd10ea96078f03ad3b4f5682e37078ffae16ee4)) * **front:** Fix behaviour when deleting an event from event list ([cfd10ea](https://framagit.org/framasoft/mobilizon/-/commit/cfd10ea96078f03ad3b4f5682e37078ffae16ee4))
* **front:** Fix event list month order ([63c9ed6](https://framagit.org/framasoft/mobilizon/commits/63c9ed62de94d6d150798c949bad3d8a2dd4db23)), closes [#1244](https://framagit.org/framasoft/mobilizon/issues/1244) * **front:** Fix event list month order ([63c9ed6](https://framagit.org/framasoft/mobilizon/-/commit/63c9ed62de94d6d150798c949bad3d8a2dd4db23)), closes [#1244](https://framagit.org/framasoft/mobilizon/issues/1244)
* **front:** Fix instances list pagination ([8543204](https://framagit.org/framasoft/mobilizon/commits/8543204bd95de886d8d35bd491f23ecbc0a6ef8d)), closes [#1277](https://framagit.org/framasoft/mobilizon/issues/1277) * **front:** Fix instances list pagination ([8543204](https://framagit.org/framasoft/mobilizon/-/commit/8543204bd95de886d8d35bd491f23ecbc0a6ef8d)), closes [#1277](https://framagit.org/framasoft/mobilizon/issues/1277)
* **front:** Fix pagination display on dark mode ([4375438](https://framagit.org/framasoft/mobilizon/commits/4375438dc9fd2f1c5c9d7ed6670dde04f2da520f)) * **front:** Fix pagination display on dark mode ([4375438](https://framagit.org/framasoft/mobilizon/-/commit/4375438dc9fd2f1c5c9d7ed6670dde04f2da520f))
* **front:** Fix style of My Events participations ([35b07dc](https://framagit.org/framasoft/mobilizon/commits/35b07dceaa41c74c28ea49655b755e341f56df32)) * **front:** Fix style of My Events participations ([35b07dc](https://framagit.org/framasoft/mobilizon/-/commit/35b07dceaa41c74c28ea49655b755e341f56df32))
* **front:** Focus report comment input in report modal ([2c28312](https://framagit.org/framasoft/mobilizon/commits/2c28312fc957901b86c2f3d1db8fc3376f505d37)), closes [#1236](https://framagit.org/framasoft/mobilizon/issues/1236) * **front:** Focus report comment input in report modal ([2c28312](https://framagit.org/framasoft/mobilizon/-/commit/2c28312fc957901b86c2f3d1db8fc3376f505d37)), closes [#1236](https://framagit.org/framasoft/mobilizon/issues/1236)
* **front:** Handle "Failed to fetch dynamically imported module" errors by refreshing the page ([3d21a06](https://framagit.org/framasoft/mobilizon/commits/3d21a067897e4aa24f6404686ca6896044584796)) * **front:** Handle "Failed to fetch dynamically imported module" errors by refreshing the page ([3d21a06](https://framagit.org/framasoft/mobilizon/-/commit/3d21a067897e4aa24f6404686ca6896044584796))
* **front:** Improve Delete account modal UI ([c420bbc](https://framagit.org/framasoft/mobilizon/commits/c420bbccc9bd1c348e41904e826dc49c71d7eeb4)) * **front:** Improve Delete account modal UI ([c420bbc](https://framagit.org/framasoft/mobilizon/-/commit/c420bbccc9bd1c348e41904e826dc49c71d7eeb4))
* **front:** Improve resend inscription instructions view and show error when appropriate ([5563052](https://framagit.org/framasoft/mobilizon/commits/55630527957d4f6a2e1e6845e64a92bc4794efc8)) * **front:** Improve resend inscription instructions view and show error when appropriate ([5563052](https://framagit.org/framasoft/mobilizon/-/commit/55630527957d4f6a2e1e6845e64a92bc4794efc8))
* **front:** No cache-only for config ([8dcb76c](https://framagit.org/framasoft/mobilizon/commits/8dcb76c30d4fa835837fd3b3833f83682fbae615)) * **front:** No cache-only for config ([8dcb76c](https://framagit.org/framasoft/mobilizon/-/commit/8dcb76c30d4fa835837fd3b3833f83682fbae615))
* **front:** Small UI fixes on identity pickers ([6faafd6](https://framagit.org/framasoft/mobilizon/commits/6faafd639303e4b57ed81db2ffb5db4ad598b904)) * **front:** Small UI fixes on identity pickers ([6faafd6](https://framagit.org/framasoft/mobilizon/-/commit/6faafd639303e4b57ed81db2ffb5db4ad598b904))
* **i18n:** Update translations ([3b7dbcd](https://framagit.org/framasoft/mobilizon/commits/3b7dbcd71f0d19d5e723a03c56ca0b1abbd16f5d)) * **i18n:** Update translations ([3b7dbcd](https://framagit.org/framasoft/mobilizon/-/commit/3b7dbcd71f0d19d5e723a03c56ca0b1abbd16f5d))
* **map:** Fix style of the map marker ([c7b90cd](https://framagit.org/framasoft/mobilizon/commits/c7b90cd60a14abea7aebab7e1d87f37a44371f7c)) * **map:** Fix style of the map marker ([c7b90cd](https://framagit.org/framasoft/mobilizon/-/commit/c7b90cd60a14abea7aebab7e1d87f37a44371f7c))
* **map:** Only show map details when needed ([23b5e59](https://framagit.org/framasoft/mobilizon/commits/23b5e5930cb9bdb57b1d7fa3ec899d7e4d3571be)) * **map:** Only show map details when needed ([23b5e59](https://framagit.org/framasoft/mobilizon/-/commit/23b5e5930cb9bdb57b1d7fa3ec899d7e4d3571be))
* **map:** Only show marker if we have it's position ([f0cc5ff](https://framagit.org/framasoft/mobilizon/commits/f0cc5ffb8feb2f4d70416792a8ab2f4f44bfba85)) * **map:** Only show marker if we have it's position ([f0cc5ff](https://framagit.org/framasoft/mobilizon/-/commit/f0cc5ffb8feb2f4d70416792a8ab2f4f44bfba85))
* **password-reset:** Lower time before being available to reset password or resend instructions ([73eb460](https://framagit.org/framasoft/mobilizon/commits/73eb4603b185c341b63481ed934f66e19aa0784f)) * **password-reset:** Lower time before being available to reset password or resend instructions ([73eb460](https://framagit.org/framasoft/mobilizon/-/commit/73eb4603b185c341b63481ed934f66e19aa0784f))
* **search:** Fix event search order ([a4e7ee3](https://framagit.org/framasoft/mobilizon/commits/a4e7ee37bedc63b2193a401c801b3b1298f566d2)) * **search:** Fix event search order ([a4e7ee3](https://framagit.org/framasoft/mobilizon/-/commit/a4e7ee37bedc63b2193a401c801b3b1298f566d2))
* **typespec:** Fix missing return type in typespec ([2043c98](https://framagit.org/framasoft/mobilizon/commits/2043c98717e8621b3953d347be0b4a35f494af98)) * **typespec:** Fix missing return type in typespec ([2043c98](https://framagit.org/framasoft/mobilizon/-/commit/2043c98717e8621b3953d347be0b4a35f494af98))
* Change the way preferredUsername is synced ([a73e5a08](https://framagit.org/framasoft/mobilizon/-/commit/a73e5a085ef48a88dbb8f9c407df0430ca89fe1f)) * Change the way preferredUsername is synced ([a73e5a08](https://framagit.org/framasoft/mobilizon/-/commit/a73e5a085ef48a88dbb8f9c407df0430ca89fe1f))
* datetimepicker: change colors for day & time selectors on dark mode ([b18e8fd3](https://framagit.org/framasoft/mobilizon/-/commit/b18e8fd37c76190ca7f6db82e408cdb005d1810a)) * datetimepicker: change colors for day & time selectors on dark mode ([b18e8fd3](https://framagit.org/framasoft/mobilizon/-/commit/b18e8fd37c76190ca7f6db82e408cdb005d1810a))
* Save IP and login date from directly registered accounts ([1db5c4ae](https://framagit.org/framasoft/mobilizon/-/commit/1db5c4ae2d49d5adbda2c0825ee0320322b525d6)) * Save IP and login date from directly registered accounts ([1db5c4ae](https://framagit.org/framasoft/mobilizon/-/commit/1db5c4ae2d49d5adbda2c0825ee0320322b525d6))

View file

@ -30,6 +30,7 @@ config :mobilizon, :cldr,
"fr", "fr",
"gd", "gd",
"gl", "gl",
"hr",
"hu", "hu",
"id", "id",
"it", "it",

View file

@ -1,6 +1,6 @@
{ {
"name": "mobilizon", "name": "mobilizon",
"version": "3.1.0-beta.1", "version": "3.1.0-beta.2",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View file

@ -356,9 +356,6 @@ const queryText = ref();
const queryTextWithDefault = computed({ const queryTextWithDefault = computed({
get() { get() {
console.log("queryTextWithDefault 1", queryText.value);
console.log("queryTextWithDefault 2", selectedAddressText.value);
console.log("queryTextWithDefault 3", props.defaultText);
return ( return (
queryText.value ?? selectedAddressText.value ?? props.defaultText ?? "" queryText.value ?? selectedAddressText.value ?? props.defaultText ?? ""
); );

View file

@ -123,8 +123,8 @@
</o-dropdown-item> </o-dropdown-item>
<o-dropdown-item <o-dropdown-item
aria-role="listitem" aria-role="listitem"
@click="logout" @click="performLogout"
@keyup.enter="logout" @keyup.enter="performLogout"
> >
<span <span
class="block py-2 px-4 text-sm text-zinc-700 dark:text-zinc-200 dark:hover:text-white" class="block py-2 px-4 text-sm text-zinc-700 dark:text-zinc-200 dark:hover:text-white"
@ -205,7 +205,7 @@ import { logout } from "../utils/auth";
import { displayName } from "../types/actor"; import { displayName } from "../types/actor";
import RouteName from "../router/name"; import RouteName from "../router/name";
import { computed, ref, watch } from "vue"; import { computed, ref, watch } from "vue";
import { useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import AccountCircle from "vue-material-design-icons/AccountCircle.vue"; import AccountCircle from "vue-material-design-icons/AccountCircle.vue";
import { useCurrentUserClient } from "@/composition/apollo/user"; import { useCurrentUserClient } from "@/composition/apollo/user";
@ -217,11 +217,13 @@ import { useMutation } from "@vue/apollo-composable";
import { UPDATE_DEFAULT_ACTOR } from "@/graphql/actor"; import { UPDATE_DEFAULT_ACTOR } from "@/graphql/actor";
import { changeIdentity } from "@/utils/identity"; import { changeIdentity } from "@/utils/identity";
import { useRegistrationConfig } from "@/composition/apollo/config"; import { useRegistrationConfig } from "@/composition/apollo/config";
import { useProgrammatic } from "@oruga-ui/oruga-next";
const { currentUser } = useCurrentUserClient(); const { currentUser } = useCurrentUserClient();
const { currentActor } = useCurrentActorClient(); const { currentActor } = useCurrentActorClient();
const router = useRouter(); const router = useRouter();
const route = useRoute();
const { identities } = useCurrentUserIdentities(); const { identities } = useCurrentUserIdentities();
const { registrationsOpen, registrationsAllowlist, databaseLogin } = const { registrationsOpen, registrationsAllowlist, databaseLogin } =
@ -269,4 +271,21 @@ onDone(({ data }) => {
}); });
const showMobileMenu = ref(false); const showMobileMenu = ref(false);
const { oruga } = useProgrammatic();
const performLogout = async () => {
console.debug("Logging out client...");
await logout();
oruga.notification.open({
message: t("You have been logged-out"),
variant: "success",
position: "bottom-right",
duration: 5000,
});
if (route.meta["requiredAuth"] === true) {
return router.push({ name: RouteName.HOME });
}
};
</script> </script>

View file

@ -371,7 +371,6 @@
"You can add tags by hitting the Enter key or by adding a comma": "You can add tags by hitting the Enter key or by adding a comma", "You can add tags by hitting the Enter key or by adding a comma": "You can add tags by hitting the Enter key or by adding a comma",
"You can try another search term or drag and drop the marker on the map": "You can try another search term or drag and drop the marker on the map", "You can try another search term or drag and drop the marker on the map": "You can try another search term or drag and drop the marker on the map",
"You don't follow any instances yet.": "You don't follow any instances yet.", "You don't follow any instances yet.": "You don't follow any instances yet.",
"You have been disconnected": "You have been disconnected",
"You have cancelled your participation": "You have cancelled your participation", "You have cancelled your participation": "You have cancelled your participation",
"You have one event in {days} days.": "You have no events in {days} days | You have one event in {days} days. | You have {count} events in {days} days", "You have one event in {days} days.": "You have no events in {days} days | You have one event in {days} days. | You have {count} events in {days} days",
"You have one event today.": "You have no events today | You have one event today. | You have {count} events today", "You have one event today.": "You have no events today | You have one event today. | You have {count} events today",
@ -1563,5 +1562,7 @@
"This application asks for the following permissions:": "This application asks for the following permissions:", "This application asks for the following permissions:": "This application asks for the following permissions:",
"This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.": "This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.", "This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.": "This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.",
"This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.": "This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.", "This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.": "This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.",
"No apps authorized yet": "No apps authorized yet" "No apps authorized yet": "No apps authorized yet",
"You have been logged-out": "You have been logged-out",
"An “application programming interface” or “API” is a communication protocol that allows software components to communicate with each other. The Mobilizon API, for example, can allow third-party software tools to communicate with Mobilizon instances to carry out certain actions, such as posting events on your behalf, automatically and remotely.": "An “application programming interface” or “API” is a communication protocol that allows software components to communicate with each other. The Mobilizon API, for example, can allow third-party software tools to communicate with Mobilizon instances to carry out certain actions, such as posting events on your behalf, automatically and remotely."
} }

View file

@ -1240,7 +1240,6 @@
"You don't have any upcoming events. Maybe try another filter?": "Vous n'avez pas d'événements à venir. Essayez peut-être un autre filtre ?", "You don't have any upcoming events. Maybe try another filter?": "Vous n'avez pas d'événements à venir. Essayez peut-être un autre filtre ?",
"You excluded member {member}.": "Vous avez exclu le ou la membre {member}.", "You excluded member {member}.": "Vous avez exclu le ou la membre {member}.",
"You have attended {count} events in the past.": "Vous n'avez participé à aucun événement par le passé.|Vous avez participé à un événement par le passé.|Vous avez participé à {count} événements par le passé.", "You have attended {count} events in the past.": "Vous n'avez participé à aucun événement par le passé.|Vous avez participé à un événement par le passé.|Vous avez participé à {count} événements par le passé.",
"You have been disconnected": "Vous avez été déconnecté⋅e",
"You have been invited by {invitedBy} to the following group:": "Vous avez été invité par {invitedBy} à rejoindre le groupe suivant :", "You have been invited by {invitedBy} to the following group:": "Vous avez été invité par {invitedBy} à rejoindre le groupe suivant :",
"You have been removed from this group's members.": "Vous avez été exclu⋅e des membres de ce groupe.", "You have been removed from this group's members.": "Vous avez été exclu⋅e des membres de ce groupe.",
"You have cancelled your participation": "Vous avez annulé votre participation", "You have cancelled your participation": "Vous avez annulé votre participation",
@ -1559,5 +1558,7 @@
"This application asks for the following permissions:": "Cette application demande les autorisations suivantes :", "This application asks for the following permissions:": "Cette application demande les autorisations suivantes :",
"This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.": "Cette application vous permettra de voir tous les événements que vous avez organisés, les événements auxquels vous participez, ainsi que toutes les données de vos groupes.", "This application will be allowed to see all of your events organized, the events you participate to, as well as every data from your groups.": "Cette application vous permettra de voir tous les événements que vous avez organisés, les événements auxquels vous participez, ainsi que toutes les données de vos groupes.",
"This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.": "Cette application sera autorisée à publier et à gérer des événements, à publier et à gérer des commentaires, à participer à des événements, à gérer tous vos groupes, y compris les événements de groupe, les ressources, les messages et les discussions. Elle pourra également gérer les paramètres de votre compte et de votre profil.", "This application will be allowed to publish and manage events, post and manage comments, participate to events, manage all of your groups, including group events, resources, posts and discussions. It will also be allowed to manage your account and profile settings.": "Cette application sera autorisée à publier et à gérer des événements, à publier et à gérer des commentaires, à participer à des événements, à gérer tous vos groupes, y compris les événements de groupe, les ressources, les messages et les discussions. Elle pourra également gérer les paramètres de votre compte et de votre profil.",
"No apps authorized yet": "Aucune application autorisée pour le moment" "No apps authorized yet": "Aucune application autorisée pour le moment",
"You have been logged-out": "Vous avez été déconnecté·e",
"An “application programming interface” or “API” is a communication protocol that allows software components to communicate with each other. The Mobilizon API, for example, can allow third-party software tools to communicate with Mobilizon instances to carry out certain actions, such as posting events on your behalf, automatically and remotely.": "Une « interface de programmation dapplication » ou « API » est un protocole de communication qui permet aux composants logiciels de communiquer entre eux. L'API Mobilizon, par exemple, peut permettre à des outils logiciels tiers de communiquer avec les instances Mobilizon pour effectuer certaines actions, telles que la publication d'événements en votre nom, automatiquement et à distance."
} }

View file

@ -32,7 +32,7 @@
"A resource has been created or updated": "", "A resource has been created or updated": "",
"A short tagline for your instance homepage. Defaults to \"Gather ⋅ Organize ⋅ Mobilize\"": "", "A short tagline for your instance homepage. Defaults to \"Gather ⋅ Organize ⋅ Mobilize\"": "",
"A twitter account handle to follow for event updates": "", "A twitter account handle to follow for event updates": "",
"A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising.": "", "A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising.": "人を集めて計画して動員するための開放的で取り扱いが簡単で倫理的なソフトです。",
"A validation email was sent to {email}": "", "A validation email was sent to {email}": "",
"API": "API", "API": "API",
"Abandon editing": "", "Abandon editing": "",
@ -693,7 +693,7 @@
"Please add as many details as possible to help identify the problem.": "", "Please add as many details as possible to help identify the problem.": "",
"Please check your spam folder if you didn't receive the email.": "", "Please check your spam folder if you didn't receive the email.": "",
"Please contact this instance's Mobilizon admin if you think this is a mistake.": "", "Please contact this instance's Mobilizon admin if you think this is a mistake.": "",
"Please do not use it in any real way.": "", "Please do not use it in any real way.": "本格的に利用することはご遠慮ください。",
"Please enter your password to confirm this action.": "このアクションの確認のため、パスワードを入力してください。", "Please enter your password to confirm this action.": "このアクションの確認のため、パスワードを入力してください。",
"Please make sure the address is correct and that the page hasn't been moved.": "", "Please make sure the address is correct and that the page hasn't been moved.": "",
"Please read the {fullRules} published by {instance}'s administrators.": "{instance}の管理者によって作成された{fullRules}をお読み下さい。", "Please read the {fullRules} published by {instance}'s administrators.": "{instance}の管理者によって作成された{fullRules}をお読み下さい。",

View file

@ -12,9 +12,11 @@
"fr": "Français", "fr": "Français",
"gd": "Gàidhlig", "gd": "Gàidhlig",
"gl": "Galego", "gl": "Galego",
"hr": "Hrvatski",
"hu": "Magyar", "hu": "Magyar",
"id": "Bahasa Indonesia", "id": "Bahasa Indonesia",
"it": "Italiano", "it": "Italiano",
"ja": "日本語",
"nl": "Nederlands", "nl": "Nederlands",
"nn": "Nynorsk", "nn": "Nynorsk",
"oc": "Occitan", "oc": "Occitan",

View file

@ -1183,7 +1183,7 @@
"your notification settings": "", "your notification settings": "",
"{'@'}{username}": "", "{'@'}{username}": "",
"{approved} / {total} seats": "{approved} / {total} platser", "{approved} / {total} seats": "{approved} / {total} platser",
"{available}/{capacity} available places": "Inga platser kvar|{tillgängliga}/{kapacitet} tillgängliga platser", "{available}/{capacity} available places": "Inga platser kvar|{available}/{capacity} tillgängliga platser",
"{count} km": "", "{count} km": "",
"{count} members": "", "{count} members": "",
"{count} members or followers": "", "{count} members or followers": "",

View file

@ -10,7 +10,7 @@
}} }}
</p> </p>
<dl> <dl>
<dt>{{ t("Instance") }}</dt> <dt class="mt-3">{{ t("Instance") }}</dt>
<i18n-t <i18n-t
tag="dd" tag="dd"
keypath="An instance is an installed version of the Mobilizon software running on a server. An instance can be run by anyone using the {mobilizon_software} or other federated apps, aka the “fediverse”. This instance's name is {instance_name}. Mobilizon is a federated network of multiple instances (just like email servers), users registered on different instances may communicate even though they didn't register on the same instance." keypath="An instance is an installed version of the Mobilizon software running on a server. An instance can be run by anyone using the {mobilizon_software} or other federated apps, aka the “fediverse”. This instance's name is {instance_name}. Mobilizon is a federated network of multiple instances (just like email servers), users registered on different instances may communicate even though they didn't register on the same instance."
@ -25,39 +25,39 @@
<b>{{ config.name }}</b> <b>{{ config.name }}</b>
</template> </template>
</i18n-t> </i18n-t>
<dt>{{ t("Instance administrator") }}</dt> <dt class="mt-3">{{ t("Instance administrator") }}</dt>
<dd> <dd class="mb-2">
{{ {{
t( t(
"The instance administrator is the person or entity that runs this Mobilizon instance." "The instance administrator is the person or entity that runs this Mobilizon instance."
) )
}} }}
</dd> </dd>
<dt>{{ t("Application") }}</dt> <dt class="mt-3">{{ t("Application") }}</dt>
<dd> <dd class="mb-2">
{{ {{
t( t(
"In the following context, an application is a software, either provided by the Mobilizon team or by a 3rd-party, used to interact with your instance." "In the following context, an application is a software, either provided by the Mobilizon team or by a 3rd-party, used to interact with your instance."
) )
}} }}
</dd> </dd>
<dt>{{ t("API") }}</dt> <dt class="mt-3">{{ t("API") }}</dt>
<dd> <dd class="mb-2">
{{ {{
t( t(
"An “application programming interface” or “API” is a communication protocol that allows software components to communicate with each other. The Mobilizon API, for example, can allow third-party software tools to communicate with Mobilizon instances to carry out certain actions, such as posting events on your behalf, automatically and remotely." "An “application programming interface” or “API” is a communication protocol that allows software components to communicate with each other. The Mobilizon API, for example, can allow third-party software tools to communicate with Mobilizon instances to carry out certain actions, such as posting events on your behalf, automatically and remotely."
) )
}} }}
</dd> </dd>
<dt>{{ t("SSL/TLS") }}</dt> <dt class="mt-3">{{ t("SSL/TLS") }}</dt>
<i18n-t <i18n-t
tag="dd" tag="dd"
keypath="SSL and it's successor TLS are encryption technologies to secure data communications when using the service. You can recognize an encrypted connection in your browser's address line when the URL begins with {https} and the lock icon is displayed in your browser's address bar." keypath="SSL and it's successor TLS are encryption technologies to secure data communications when using the service. You can recognize an encrypted connection in your browser's address line when the URL begins with {https} and the lock icon is displayed in your browser's address bar."
> >
<template #https><code>https://</code></template> <template #https><code>https://</code></template>
</i18n-t> </i18n-t>
<dt>{{ t("Cookies and Local storage") }}</dt> <dt class="mt-3">{{ t("Cookies and Local storage") }}</dt>
<dd> <dd class="mb-2">
{{ {{
t( t(
"A cookie is a small file containing information that is sent to your computer when you visit a website. When you visit the site again, the cookie allows that site to recognize your browser. Cookies may store user preferences and other information. You can configure your browser to refuse all cookies. However, this may result in some website features or services partially working. Local storage works the same way but allows you to store more data." "A cookie is a small file containing information that is sent to your computer when you visit a website. When you visit the site again, the cookie allows that site to recognize your browser. Cookies may store user preferences and other information. You can configure your browser to refuse all cookies. However, this may result in some website features or services partially working. Local storage works the same way but allows you to store more data."

View file

@ -238,9 +238,7 @@ const { result: aboutConfigResult } = useQuery<{
IConfig, IConfig,
"name" | "description" | "slogan" | "registrationsOpen" "name" | "description" | "slogan" | "registrationsOpen"
>; >;
}>(ABOUT, undefined, { }>(ABOUT);
fetchPolicy: "cache-only",
});
const config = computed(() => aboutConfigResult.value?.config); const config = computed(() => aboutConfigResult.value?.config);

View file

@ -868,20 +868,6 @@ const contentType = useRouteQuery(
enumTransformer(ContentType) enumTransformer(ContentType)
); );
watch(contentType, (newContentType: ContentType) => {
switch (newContentType) {
case ContentType.ALL:
page.value = 1;
break;
case ContentType.EVENTS:
eventPage.value = 1;
break;
case ContentType.GROUPS:
groupPage.value = 1;
break;
}
});
const isOnline = useRouteQuery("isOnline", false, booleanTransformer); const isOnline = useRouteQuery("isOnline", false, booleanTransformer);
const categoryOneOf = useRouteQuery("categoryOneOf", [], arrayTransformer); const categoryOneOf = useRouteQuery("categoryOneOf", [], arrayTransformer);
const statusOneOf = useRouteQuery( const statusOneOf = useRouteQuery(
@ -1261,6 +1247,40 @@ const boostLanguagesQuery = computed((): string[] => {
return Array.from(languages); return Array.from(languages);
}); });
// When search criteria changes, reset page number to 1
watch(
[
contentType,
searchDebounced,
geoHashLocation,
start,
end,
radius,
isOnline,
categoryOneOf,
statusOneOf,
languageOneOf,
searchTarget,
bbox,
zoom,
sortBy,
boostLanguagesQuery,
],
([newContentType]) => {
switch (newContentType) {
case ContentType.ALL:
page.value = 1;
break;
case ContentType.EVENTS:
eventPage.value = 1;
break;
case ContentType.GROUPS:
groupPage.value = 1;
break;
}
}
);
const { result: searchElementsResult, loading: searchLoading } = useQuery<{ const { result: searchElementsResult, loading: searchLoading } = useQuery<{
searchEvents: Paginate<TypeNamed<IEvent>>; searchEvents: Paginate<TypeNamed<IEvent>>;
searchGroups: Paginate<TypeNamed<IGroup>>; searchGroups: Paginate<TypeNamed<IGroup>>;

View file

@ -187,7 +187,8 @@
:placeholder="t('Password')" :placeholder="t('Password')"
/> />
<template #message> <template #message>
<o-notification class="mt-2 not-italic text-base" <o-notification
class="mt-2 not-italic text-base"
variant="danger" variant="danger"
v-for="message in deletePasswordErrors" v-for="message in deletePasswordErrors"
:key="message" :key="message"

View file

@ -4,7 +4,7 @@
{{ $t("Resend confirmation email") }} {{ $t("Resend confirmation email") }}
</h1> </h1>
<o-notification v-if="error" variant="danger"> <o-notification v-if="error" variant="danger">
{{ errorMessage }} {{ errorMessage }}
</o-notification> </o-notification>
<form v-if="!validationSent" @submit="resendConfirmationAction"> <form v-if="!validationSent" @submit="resendConfirmationAction">
<o-field :label="$t('Email address')" labelFor="emailAddress"> <o-field :label="$t('Email address')" labelFor="emailAddress">

View file

@ -31,13 +31,14 @@ defmodule Mobilizon.GraphQL.Authorization do
@impl true @impl true
def role_authorized?(_user_role, :all), do: true def role_authorized?(_user_role, :all), do: true
def role_authorized?(role, _allowed_role) when is_super_role(role), do: true def role_authorized?(role, _allowed_role) when is_super_role(role), do: true
def role_authorized?(:moderator, :user), do: true
def role_authorized?(user_role, allowed_role) when is_atom(user_role) and is_atom(allowed_role), def role_authorized?(user_role, allowed_role) when is_atom(user_role) and is_atom(allowed_role),
do: user_role === allowed_role do: user_role === allowed_role
def role_authorized?(user_role, allowed_roles) def role_authorized?(user_role, allowed_roles)
when is_atom(user_role) and is_list(allowed_roles), when is_atom(user_role) and is_list(allowed_roles),
do: user_role in allowed_roles do: user_role in allowed_roles or (user_role === :moderator and :user in allowed_roles)
@impl true @impl true
def get_user_role(%ApplicationToken{user: %{role: role}}), do: role def get_user_role(%ApplicationToken{user: %{role: role}}), do: role

View file

@ -1,7 +1,7 @@
defmodule Mobilizon.Mixfile do defmodule Mobilizon.Mixfile do
use Mix.Project use Mix.Project
@version "3.1.0-beta.1" @version "3.1.0-beta.2"
def project do def project do
[ [

View file

@ -200,6 +200,34 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
assert res["data"]["loggedUser"]["id"] == to_string(user.id) assert res["data"]["loggedUser"]["id"] == to_string(user.id)
end end
test "get_current_user/3 returns the current logged-in user with moderator role", %{
conn: conn
} do
user = insert(:user, role: :moderator)
res =
conn
|> AbsintheHelpers.graphql_query(
query: @logged_user_query,
variables: %{}
)
assert res["data"]["loggedUser"] == nil
assert hd(res["errors"])["message"] ==
"You need to be logged in"
res =
conn
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @logged_user_query,
variables: %{}
)
assert res["data"]["loggedUser"]["id"] == to_string(user.id)
end
end end
describe "Resolver: List users" do describe "Resolver: List users" do