more groundwork related to updates in SetMembership

This commit is contained in:
2025-10-22 13:57:57 -06:00
parent 0625d0db35
commit 6d3403cd53
2 changed files with 18 additions and 7 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ const (
AuditSetUserContactInfo = 106 AuditSetUserContactInfo = 106
AuditResendEmailConfirm = 107 AuditResendEmailConfirm = 107
AuditChangePassword = 108 AuditChangePassword = 108
AuditAdminSetUserContectInfo = 109 AuditAdminSetUserContactInfo = 109
AuditAdminChangeUserPassword = 110 AuditAdminChangeUserPassword = 110
AuditAdminChangeUserAccount = 111 AuditAdminChangeUserAccount = 111
AuditAdminSetAccountSecurity = 112 AuditAdminSetAccountSecurity = 112
+17 -6
View File
@@ -236,19 +236,24 @@ func (c *Community) MemberCount(hidden bool) (int, error) {
* u - The user to change the membership status of. * u - The user to change the membership status of.
* level - Their membership level. If this is 0, they are removed from membership. * level - Their membership level. If this is 0, they are removed from membership.
* locked - Whether they can unjoin the community themselves. Ignored if removing them. * locked - Whether they can unjoin the community themselves. Ignored if removing them.
* personUID - The UID of the person taking this action.
* ipaddr - The source IP address, for audit records.
* Returns: * Returns:
* Standard Go error status. * Standard Go error status.
*/ */
func (c *Community) SetMembership(u *User, level uint16, locked bool) error { func (c *Community) SetMembership(u *User, level uint16, locked bool, personUID int32, ipaddr string) error {
if level == 0 { if level == 0 {
_, err := amdb.Exec("DELETE FROM commmember WHERE commid = ? AND uid = ?", c.Id, u.Uid) res, err := amdb.Exec("DELETE FROM commmember WHERE commid = ? AND uid = ?", c.Id, u.Uid)
if err != nil { if err != nil {
return err return err
} }
stuffMembership(c.Id, u.Uid, false, false, 0) stuffMembership(c.Id, u.Uid, false, false, 0)
err = AmOnUserLeaveCommunityServices(c, u) ra, err := res.RowsAffected()
if err != nil { if err == nil && ra > 0 {
return err err = AmOnUserLeaveCommunityServices(c, u)
if err != nil {
return err
}
} }
} else { } else {
rs, err := amdb.Query("SELECT granted_lvl, locked FROM commmember WHERE commid = ? AND uid = ?", c.Id, u.Uid) rs, err := amdb.Query("SELECT granted_lvl, locked FROM commmember WHERE commid = ? AND uid = ?", c.Id, u.Uid)
@@ -276,10 +281,16 @@ func (c *Community) SetMembership(u *User, level uint16, locked bool) error {
stuffMembership(c.Id, u.Uid, true, locked, level) stuffMembership(c.Id, u.Uid, true, locked, level)
err = AmOnUserJoinCommunityServices(c, u) err = AmOnUserJoinCommunityServices(c, u)
if err != nil { if err != nil {
return nil return err
} }
} }
} }
err := c.TouchUpdate()
if err == nil {
ar := AmNewAudit(AuditCommunitySetMembership, personUID, ipaddr, fmt.Sprintf("cid=%d", c.Id),
fmt.Sprintf("uid=%d", u.Uid), fmt.Sprintf("level=%d", level))
AmStoreAudit(ar)
}
return nil return nil
} }