/* Do not remove the headers from this file! see /USAGE for more info. */
inherit "/obj/admtool/internal/base.c";
nomask string module_name() {
return "(mail) group";
}
nomask string module_key() {
return "g";
}
private nomask void list_groups()
{
string * groups;
groups = sort_array(keys(GROUP_D->get_group_data()), 1);
if ( !sizeof(groups) )
{
write("There are no groups.\n");
}
else
{
printf("The following groups exist:\n%-#78s\n",
implode(sort_array(groups, 1), "\n") + "\n");
}
}
private nomask void show_group_members(string group)
{
string * members;
group = lower_case(group);
members = sort_array(GROUP_D->get_group_data()[group], 1);
if ( !members )
{
printf("There is no group named '%s'.\n", group);
}
else
{
printf("Group %s:\n", group);
switch ( sizeof(members) )
{
case 0:
write("Members: (none)\n");
break;
case 1:
printf("Member: %s\n", members[0]);
break;
default:
printf("Members: %s\n", implode(members, ", "));
break;
}
}
}
private nomask void create_group(string group)
{
group = lower_case(group);
GROUP_D->add_group(group);
printf("Group %s created.\n", group);
}
private nomask void delete_group(string group)
{
group = lower_case(group);
GROUP_D->remove_group(group);
printf("Group %s deleted.\n", group);
}
private nomask void show_users_groups(string user)
{
mapping groups;
user = lower_case(user);
groups = filter(GROUP_D->get_group_data(),
(: member_array($(user), $2) != -1 :));
if ( !sizeof(groups) )
printf("%s doesn't belong to any groups.\n", user);
else
printf("%s belongs to: %s.\n", user,
implode(sort_array(keys(groups), 1), ", "));
}
private nomask void add_user_to_group(string user, string group)
{
user = lower_case(user);
group = lower_case(group);
if ( !GROUP_D->get_group_data()[group] )
{
printf("There is no group named '%s'.\n", group);
}
else
{
GROUP_D->add_group_member(group, user);
printf("Added %s to group %s.\n", user, group);
}
}
private nomask void remove_user_from_group(string user, string group)
{
user = lower_case(user);
group = lower_case(group);
GROUP_D->remove_group_member(group, user);
printf("Removed %s from group %s.\n", user, group);
}
nomask class command_info array module_commands() {
return ({
new(class command_info,
key : "l",
desc : "list groups",
action : (: list_groups :)),
new(class command_info,
key : "s",
proto : "[group]",
desc : "show a group's members",
args : ({ "Show members of which group? " }),
action : (: show_group_members :)),
new(class command_info),
new(class command_info,
key : "c",
proto : "[group]",
desc : "create a group",
args : ({ "Name for the new group? " }),
who : "[Mudlib:]",
action : (: create_group :)),
new(class command_info,
key : "d",
proto : "[group]",
desc : "delete a group",
args : ({ "Delete which group? " }),
who : "[Mudlib:]",
action : (: delete_group :)),
new(class command_info),
new(class command_info,
key : "u",
proto : "[user]",
desc : "show user's groups ",
args : ({ "Show groups for which user? " }),
action : (: show_users_groups :)),
new(class command_info,
key : "a",
proto : "[user] [group]",
desc : "add user to a group",
who : "[Mudlib:]",
args : ({ "Add which user? ", "Add '%s' to which group? " }),
action : (: add_user_to_group :)),
new(class command_info,
key : "r",
proto : "[user] [group]",
desc : "remove a user from a group",
who : "[Mudlib:]",
args : ({ "Remove which user? ", "Remove '%s' from which group? " }),
action : (: remove_user_from_group :))
});
}