From 102124b6d29edd7d799ee12a6f6df05dbbbf4f6c Mon Sep 17 00:00:00 2001 From: Nutomic Date: Fri, 21 Jul 2023 15:08:25 +0200 Subject: [PATCH] Change logic for determining comment default language (fixes #3451) (#3672) --- crates/api_crud/src/comment/create.rs | 25 ++++++++++++++++--------- crates/api_crud/src/post/create.rs | 12 ++++++++++-- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/crates/api_crud/src/comment/create.rs b/crates/api_crud/src/comment/create.rs index 92775772..098d1a66 100644 --- a/crates/api_crud/src/comment/create.rs +++ b/crates/api_crud/src/comment/create.rs @@ -16,6 +16,7 @@ use lemmy_api_common::{ }, }; use lemmy_db_schema::{ + impls::actor_language::default_post_language, source::{ actor_language::CommunityLanguage, comment::{Comment, CommentInsertForm, CommentLike, CommentLikeForm, CommentUpdateForm}, @@ -82,25 +83,31 @@ impl PerformCrud for CreateComment { check_comment_depth(parent)?; } - // if no language is set, copy language from parent post/comment - let parent_language = parent_opt - .as_ref() - .map(|p| p.language_id) - .unwrap_or(post.language_id); - let language_id = data.language_id.unwrap_or(parent_language); - CommunityLanguage::is_allowed_community_language( &mut context.pool(), - Some(language_id), + data.language_id, community_id, ) .await?; + // attempt to set default language if none was provided + let language_id = match data.language_id { + Some(lid) => Some(lid), + None => { + default_post_language( + &mut context.pool(), + community_id, + local_user_view.local_user.id, + ) + .await? + } + }; + let comment_form = CommentInsertForm::builder() .content(content_slurs_removed.clone()) .post_id(data.post_id) .creator_id(local_user_view.person.id) - .language_id(Some(language_id)) + .language_id(language_id) .build(); // Create the comment diff --git a/crates/api_crud/src/post/create.rs b/crates/api_crud/src/post/create.rs index 16a6f000..458fdb24 100644 --- a/crates/api_crud/src/post/create.rs +++ b/crates/api_crud/src/post/create.rs @@ -91,6 +91,16 @@ pub async fn create_post( .map(|u| (u.title, u.description, u.embed_video_url)) .unwrap_or_default(); + // Only need to check if language is allowed in case user set it explicitly. When using default + // language, it already only returns allowed languages. + CommunityLanguage::is_allowed_community_language( + &mut context.pool(), + data.language_id, + community_id, + ) + .await?; + + // attempt to set default language if none was provided let language_id = match data.language_id { Some(lid) => Some(lid), None => { @@ -102,8 +112,6 @@ pub async fn create_post( .await? } }; - CommunityLanguage::is_allowed_community_language(&mut context.pool(), language_id, community_id) - .await?; let post_form = PostInsertForm::builder() .name(data.name.trim().to_owned()) -- 2.44.1