mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 13:29:22 +00:00
Allow non-moderator of conversation to add members
This commit is contained in:
parent
5d604bc576
commit
0c93ae95b4
@ -84,6 +84,7 @@ export class ConversationsController {
|
|||||||
*/
|
*/
|
||||||
public static async UpdateSettings(h: RequestHandler) : Promise<void> {
|
public static async UpdateSettings(h: RequestHandler) : Promise<void> {
|
||||||
const convID = await h.postConversationId("conversationID");
|
const convID = await h.postConversationId("conversationID");
|
||||||
|
const isUserModerator = await ConversationsHelper.IsUserModerator(h.getUserId(), convID);
|
||||||
|
|
||||||
// Update following state, if required
|
// Update following state, if required
|
||||||
if(h.hasPostParameter("following")) {
|
if(h.hasPostParameter("following")) {
|
||||||
@ -94,29 +95,33 @@ export class ConversationsController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change moderator settings
|
// Update members list
|
||||||
if(h.hasPostParameter("members") || h.hasPostParameter("name") || h.hasPostParameter("canEveryoneAddMembers")) {
|
|
||||||
|
|
||||||
// Check if user is the moderator of the conversation
|
|
||||||
if(!await ConversationsHelper.IsUserModerator(h.getUserId(), convID))
|
|
||||||
h.error(401, "You are not allowed to perform changes on this conversation !");
|
|
||||||
|
|
||||||
|
|
||||||
// Update conversation name (if required)
|
|
||||||
if(h.hasPostParameter("name")) {
|
|
||||||
const name = h.postString("name");
|
|
||||||
await ConversationsHelper.SetName(convID, name == "false" ? "" : removeHTMLNodes(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the list of members of the conversation (if required)
|
|
||||||
if(h.hasPostParameter("members")) {
|
if(h.hasPostParameter("members")) {
|
||||||
|
|
||||||
const members = h.postNumbersSet("members");
|
const members = h.postNumbersSet("members");
|
||||||
|
const canEveryoneAddMembers = await ConversationsHelper.CanEveryoneAddMembers(convID);
|
||||||
|
|
||||||
|
if(!isUserModerator && !canEveryoneAddMembers)
|
||||||
|
h.error(401, "You can not update the list of members of this conversation!");
|
||||||
|
|
||||||
// Make sure current user is on the list
|
// Make sure current user is on the list
|
||||||
if(!members.has(h.getUserId()))
|
if(!members.has(h.getUserId()))
|
||||||
members.add(h.getUserId());
|
members.add(h.getUserId());
|
||||||
|
|
||||||
await ConversationsHelper.SetMembers(convID, members);
|
await ConversationsHelper.SetMembers(convID, members, isUserModerator);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change moderator settings
|
||||||
|
if(h.hasPostParameter("name") || h.hasPostParameter("canEveryoneAddMembers")) {
|
||||||
|
|
||||||
|
// Check if user is the moderator of the conversation
|
||||||
|
if(!isUserModerator)
|
||||||
|
h.error(401, "You are not allowed to perform changes on this conversation !");
|
||||||
|
|
||||||
|
// Update conversation name (if required)
|
||||||
|
if(h.hasPostParameter("name")) {
|
||||||
|
const name = h.postString("name");
|
||||||
|
await ConversationsHelper.SetName(convID, name == "false" ? "" : removeHTMLNodes(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update "canEveryoneAddMembers" parameter
|
// Update "canEveryoneAddMembers" parameter
|
||||||
|
@ -187,8 +187,9 @@ export class ConversationsHelper {
|
|||||||
*
|
*
|
||||||
* @param convID Target conversation ID
|
* @param convID Target conversation ID
|
||||||
* @param members The new list of members for the conversation
|
* @param members The new list of members for the conversation
|
||||||
|
* @param canDelete Set to true to perform memberships deletion
|
||||||
*/
|
*/
|
||||||
public static async SetMembers(convID: number, newList: Set<number>) {
|
public static async SetMembers(convID: number, newList: Set<number>, canDelete: boolean) {
|
||||||
const currentList = await this.GetConversationMembers(convID);
|
const currentList = await this.GetConversationMembers(convID);
|
||||||
|
|
||||||
// Add new members
|
// Add new members
|
||||||
@ -200,6 +201,7 @@ export class ConversationsHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove old members
|
// Remove old members
|
||||||
|
if(canDelete)
|
||||||
for(const member of currentList) {
|
for(const member of currentList) {
|
||||||
if(newList.has(member))
|
if(newList.has(member))
|
||||||
continue;
|
continue;
|
||||||
@ -281,6 +283,27 @@ export class ConversationsHelper {
|
|||||||
})) > 0;
|
})) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check out whether all the members of the conversation can
|
||||||
|
* add members to it or not
|
||||||
|
*
|
||||||
|
* @param convID Target conversation ID
|
||||||
|
*/
|
||||||
|
public static async CanEveryoneAddMembers(convID: number) : Promise<boolean> {
|
||||||
|
const info = await DatabaseHelper.QueryRow({
|
||||||
|
table: LIST_TABLE,
|
||||||
|
where: {
|
||||||
|
id: convID
|
||||||
|
},
|
||||||
|
fields: ["can_everyone_add_members"]
|
||||||
|
});
|
||||||
|
|
||||||
|
if(info == null)
|
||||||
|
throw new Error("Could not find conversation!");
|
||||||
|
|
||||||
|
return info["can_everyone_add_members"] == 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the last messages of a conversation
|
* Get the last messages of a conversation
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user