X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapi_crud%2Fsrc%2Fcommunity%2Fupdate.rs;h=b7872b38f2de69f16f8797a230c607b9a8ba79d7;hb=2ef0f8f5f8c60d8c7632779ca16bac69daab1266;hp=c572c9c5a5636bab46d8eae80b74d74f60d5cb29;hpb=7bb941e5461f68b810a18ea40cb7a405ded69cc9;p=lemmy.git diff --git a/crates/api_crud/src/community/update.rs b/crates/api_crud/src/community/update.rs index c572c9c5..b7872b38 100644 --- a/crates/api_crud/src/community/update.rs +++ b/crates/api_crud/src/community/update.rs @@ -6,8 +6,11 @@ use lemmy_api_common::{ }; use lemmy_apub::protocol::activities::community::update::UpdateCommunity; use lemmy_db_schema::{ - newtypes::PersonId, - source::community::{Community, CommunityForm}, + newtypes::{LanguageId, PersonId}, + source::{ + actor_language::{CommunityLanguage, SiteLanguage}, + community::{Community, CommunityForm}, + }, traits::Crud, utils::{diesel_option_overwrite, diesel_option_overwrite_to_url, naive_now}, }; @@ -48,6 +51,21 @@ impl PerformCrud for EditCommunity { } let community_id = data.community_id; + if let Some(languages) = data.discussion_languages.clone() { + let site_languages: Vec = + blocking(context.pool(), SiteLanguage::read_local).await??; + // check that community languages are a subset of site languages + // https://stackoverflow.com/a/64227550 + let is_subset = languages.iter().all(|item| site_languages.contains(item)); + if !is_subset { + return Err(LemmyError::from_message("language_not_allowed")); + } + blocking(context.pool(), move |conn| { + CommunityLanguage::update(conn, languages, community_id) + }) + .await??; + } + let read_community = blocking(context.pool(), move |conn| { Community::read(conn, community_id) })