mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-11-04 01:24:04 +00:00 
			
		
		
		
	Can delete a group's logo
This commit is contained in:
		@@ -26,3 +26,4 @@ pub mod global_search_result_api;
 | 
			
		||||
pub mod res_create_group;
 | 
			
		||||
pub mod group_api;
 | 
			
		||||
pub mod advanced_group_api;
 | 
			
		||||
pub mod res_change_group_logo;
 | 
			
		||||
							
								
								
									
										22
									
								
								src/api_data/res_change_group_logo.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/api_data/res_change_group_logo.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
//! # Change group logo result
 | 
			
		||||
//!
 | 
			
		||||
//! @author Pierre Hubert
 | 
			
		||||
use serde::Serialize;
 | 
			
		||||
 | 
			
		||||
use crate::utils::user_data_utils::user_data_url;
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize)]
 | 
			
		||||
pub struct ResChangeGroupLogo {
 | 
			
		||||
    success: String,
 | 
			
		||||
    url: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ResChangeGroupLogo {
 | 
			
		||||
    /// Construct a new instance of this structure
 | 
			
		||||
    pub fn new(path: &str) -> ResChangeGroupLogo {
 | 
			
		||||
        ResChangeGroupLogo {
 | 
			
		||||
            success: "Group logo has been successfully updated!".to_string(),
 | 
			
		||||
            url: user_data_url(path),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,9 @@ use std::collections::HashMap;
 | 
			
		||||
 | 
			
		||||
use crate::api_data::advanced_group_api::AdvancedGroupApi;
 | 
			
		||||
use crate::api_data::group_api::GroupApi;
 | 
			
		||||
use crate::api_data::res_change_group_logo::ResChangeGroupLogo;
 | 
			
		||||
use crate::api_data::res_create_group::GroupCreationResult;
 | 
			
		||||
use crate::constants::DEFAULT_GROUP_LOGO;
 | 
			
		||||
use crate::controllers::routes::RequestResult;
 | 
			
		||||
use crate::data::group::{Group, GroupAccessLevel, GroupPostsCreationLevel, GroupRegistrationLevel, GroupVisibilityLevel};
 | 
			
		||||
use crate::data::group_id::GroupID;
 | 
			
		||||
@@ -121,5 +123,15 @@ pub fn check_virtual_dir(r: &mut HttpRequestHandler) -> RequestResult {
 | 
			
		||||
 | 
			
		||||
/// Change a group's logo
 | 
			
		||||
pub fn upload_logo(r: &mut HttpRequestHandler) -> RequestResult {
 | 
			
		||||
    // TODO : implement this method
 | 
			
		||||
    r.success("implement me")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Delete a group's logo
 | 
			
		||||
pub fn delete_logo(r: &mut HttpRequestHandler) -> RequestResult {
 | 
			
		||||
    let group_id = r.post_group_id_with_access("groupID", GroupAccessLevel::ADMIN_ACCESS)?;
 | 
			
		||||
 | 
			
		||||
    groups_helper::delete_logo(&group_id)?;
 | 
			
		||||
 | 
			
		||||
    r.set_response(ResChangeGroupLogo::new(DEFAULT_GROUP_LOGO))
 | 
			
		||||
}
 | 
			
		||||
@@ -146,6 +146,8 @@ pub fn get_routes() -> Vec<Route> {
 | 
			
		||||
 | 
			
		||||
        Route::post("/groups/upload_logo", Box::new(groups_controller::upload_logo)),
 | 
			
		||||
 | 
			
		||||
        Route::post("/groups/delete_logo", Box::new(groups_controller::delete_logo)),
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Virtual directory controller
 | 
			
		||||
        Route::post("/user/findbyfolder", Box::new(virtual_directory_controller::find_user)),
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,11 @@
 | 
			
		||||
//!
 | 
			
		||||
//! Group visibility level
 | 
			
		||||
 | 
			
		||||
use std::path::PathBuf;
 | 
			
		||||
 | 
			
		||||
use crate::constants::DEFAULT_GROUP_LOGO;
 | 
			
		||||
use crate::data::group_id::GroupID;
 | 
			
		||||
use crate::utils::user_data_utils::user_data_url;
 | 
			
		||||
use crate::utils::user_data_utils::{user_data_path, user_data_url};
 | 
			
		||||
 | 
			
		||||
#[allow(non_camel_case_types)]
 | 
			
		||||
#[derive(Eq, PartialEq, Hash, Debug)]
 | 
			
		||||
@@ -125,6 +127,11 @@ pub struct Group {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Group {
 | 
			
		||||
    /// Check out whether current group has a logo or not
 | 
			
		||||
    pub fn has_logo(&self) -> bool {
 | 
			
		||||
        self.logo.is_some()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Determine the path of the logo to use for this group
 | 
			
		||||
    pub fn get_logo_path(&self) -> &str {
 | 
			
		||||
        match &self.logo {
 | 
			
		||||
@@ -137,6 +144,15 @@ impl Group {
 | 
			
		||||
    pub fn get_logo_url(&self) -> String {
 | 
			
		||||
        user_data_url(self.get_logo_path())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Get file access to the logo
 | 
			
		||||
    pub fn get_logo_sys_path(&self) -> PathBuf {
 | 
			
		||||
        if !self.has_logo() {
 | 
			
		||||
            panic!("This group has no logo!")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        user_data_path(self.logo.as_ref().unwrap().as_ref())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
 
 | 
			
		||||
@@ -300,6 +300,30 @@ pub fn set_settings(g: &Group) -> ResultBoxError {
 | 
			
		||||
        .exec()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Set a new path for a logo
 | 
			
		||||
pub fn set_logo_path(g: &GroupID, path: Option<String>) -> ResultBoxError {
 | 
			
		||||
    database::UpdateInfo::new(GROUPS_LIST_TABLE)
 | 
			
		||||
        .cond_group_id("id", g)
 | 
			
		||||
        .set_opt_str("path_logo", path)
 | 
			
		||||
        .exec()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Delete the logo of a group
 | 
			
		||||
pub fn delete_logo(g: &GroupID) -> ResultBoxError {
 | 
			
		||||
    let group = get_info(g)?;
 | 
			
		||||
 | 
			
		||||
    if !group.has_logo() {
 | 
			
		||||
        return Ok(());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let logo_path = group.get_logo_sys_path();
 | 
			
		||||
    if logo_path.exists() {
 | 
			
		||||
        std::fs::remove_file(logo_path)?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    set_logo_path(g, None)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Turn a database entry into a group struct
 | 
			
		||||
fn db_to_group(row: &database::RowResult) -> ResultBoxError<Group> {
 | 
			
		||||
    let group_id = row.get_group_id("id")?;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user