Added the ability to email groups and to create groups of groups.

This commit is contained in:
JT Smith 2002-11-18 02:17:08 +00:00
parent 8966e401c3
commit e828ff8663
4 changed files with 130 additions and 5 deletions

View file

@ -202,6 +202,18 @@ delete from help where helpId=47 and namespace='WebGUI';
insert into help (helpId,namespace,titleId,bodyId,seeAlso) values (47, 'WebGUI', 697, 698, '1,Article;17,WebGUI;1,MessageBoard;1,Poll;2,WebGUI;1,USS;');
delete from help where helpId=2 and namespace='FileManager';
insert into help (helpId,namespace,titleId,bodyId,seeAlso) values (2, 'FileManager', 72, 73, '1,FileManager;');
create table groupGroupings (
groupId int not null,
inGroup int not null
);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (813,1,'WebGUI','Groups In This Group', 1037583186);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (812,1,'WebGUI','Your message has been sent.', 1037580328);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (811,1,'WebGUI','From', 1037580145);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (810,1,'WebGUI','send', 1037579743);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (809,1,'WebGUI','Email Group', 1037579611);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (808,1,'WebGUI','Email this group.', 1037579487);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (807,1,'WebGUI','Manage the groups in this group.', 1037579473);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (806,1,'WebGUI','Delete this group.', 1037579396);

View file

@ -17,6 +17,7 @@ use WebGUI::DateTime;
use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Mail;
use WebGUI::Operation::Shared;
use WebGUI::Paginator;
use WebGUI::Privilege;
@ -27,7 +28,8 @@ use WebGUI::Utility;
our @ISA = qw(Exporter);
our @EXPORT = qw(&www_manageUsersInGroup &www_deleteGroup &www_deleteGroupConfirm &www_editGroup
&www_editGroupSave &www_listGroups);
&www_editGroupSave &www_listGroups &www_emailGroup &www_emailGroupSend &www_manageGroupsInGroup
&www_addGroupsToGroupSave &www_deleteGroupGrouping);
#-------------------------------------------------------------------
sub _submenu {
@ -39,12 +41,25 @@ sub _submenu {
|| $session{form}{op} eq "deleteGroupConfirm") {
$menu{WebGUI::URL::page("op=editGroup&gid=".$session{form}{gid})} = WebGUI::International::get(753);
$menu{WebGUI::URL::page("op=manageUsersInGroup&gid=".$session{form}{gid})} = WebGUI::International::get(754);
$menu{WebGUI::URL::page("op=deleteGroup&gid=".$session{form}{gid})} = WebGUI::International::get(755);
$menu{WebGUI::URL::page("op=manageGroupsInGroup&gid=".$session{form}{gid})} = WebGUI::International::get(807);
$menu{WebGUI::URL::page("op=emailGroup&gid=".$session{form}{gid})} = WebGUI::International::get(808);
$menu{WebGUI::URL::page("op=deleteGroup&gid=".$session{form}{gid})} = WebGUI::International::get(806);
}
$menu{WebGUI::URL::page("op=listGroups")} = WebGUI::International::get(756);
return menuWrapper($_[0],\%menu);
}
#-------------------------------------------------------------------
sub www_addGroupsToGroupSave {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
my (@groups, $group);
@groups = $session{cgi}->param('groups');
foreach $group (@groups) {
WebGUI::SQL->write("insert into groupGroupings values ($group,$session{form}{gid})");
}
return www_manageGroupsInGroup();
}
#-------------------------------------------------------------------
sub www_deleteGroup {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
@ -69,6 +84,13 @@ sub www_deleteGroupConfirm {
return www_listGroups();
}
#-------------------------------------------------------------------
sub www_deleteGroupGrouping {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
WebGUI::SQL->write("delete from groupGroupings where inGroup=$session{form}{gid} and groupId=$session{form}{delete}");
return www_manageGroupsInGroup();
}
#-------------------------------------------------------------------
sub www_editGroup {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
@ -115,6 +137,48 @@ sub www_editGroupSave {
return www_listGroups();
}
#-------------------------------------------------------------------
sub www_emailGroup {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
my ($output,$f);
$output = '<h1>'.WebGUI::International::get(809).'</h1>';
$f = WebGUI::HTMLForm->new;
$f->hidden("op","emailGroupSend");
$f->hidden("gid",$session{form}{gid});
$f->email(
-name=>"from",
-value=>$session{setting}{companyEmail},
-label=>WebGUI::International::get(811)
);
$f->text(
-name=>"subject",
-label=>WebGUI::International::get(229)
);
$f->textarea(
-name=>"message",
-label=>WebGUI::International::get(230),
-rows=>(5+$session{setting}{textAreaRows})
);
$f->submit(WebGUI::International::get(810));
$output = $f->print;
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_emailGroupSend {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
my ($sth, $email);
$sth = WebGUI::SQL->read("select b.fieldData from groupings a left join userProfileData b
on a.userId=b.userId and b.fieldName='email' where a.groupId=$session{form}{gid}");
while (($email) = $sth->array) {
if ($email ne "") {
WebGUI::Mail::send($email,$session{form}{subject},$session{form}{message},'',$session{form}{from});
}
}
$sth->finish;
return _submenu(WebGUI::International::get(812));
}
#-------------------------------------------------------------------
sub www_listGroups {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
@ -145,6 +209,42 @@ sub www_listGroups {
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_manageGroupsInGroup {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
my ($output, $p, $group, $groups, @array, $f);
$output = '<h1>'.WebGUI::International::get(813).'</h1><div align="center">';
$f = WebGUI::HTMLForm->new;
$f->hidden("op","addGroupsToGroupSave");
$f->hidden("gid",$session{form}{gid});
@array = WebGUI::SQL->buildArray("select groupId from groupGroupings where inGroup=$session{form}{gid}");
push(@array,$session{form}{gid});
# push(@array,1); #visitors
# push(@array,2); #registered users
# push(@array,7); #everyone
$groups = WebGUI::SQL->buildHashRef("select groupId,groupName from groups where groupId not in (".join(",",@array).") order by groupName");
$f->select("groups",$groups,WebGUI::International::get(605),[],5,1);
$f->submit;
$output .= $f->print;
$output .= '</div><p/><table class="tableData" align="center">';
$output .= '<tr class="tableHeader"><td></td><td>'.WebGUI::International::get(84).'</td></tr>';
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=manageGroupsInGroup'));
$p->setDataByQuery("select a.groupName as name,a.groupId as id from groups a
left join groupGroupings b on a.groupId=b.groupId
where b.inGroup=$session{form}{gid} order by a.groupName");
$groups = $p->getPageData;
foreach $group (@$groups) {
$output .= '<tr><td>'
.deleteIcon('op=deleteGroupGrouping&gid='.$session{form}{gid}.'&delete='.$group->{id})
.'</td><td><a href="'.WebGUI::URL::page('op=editGroup&gid='.$group->{id}).'">'
.$group->{name}.'</a></td></tr>';
}
$output .= '</table>';
$output .= $p->getBarTraditional;
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_manageUsersInGroup {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));

View file

@ -208,7 +208,7 @@ sub insufficient {
=cut
sub isInGroup {
my ($gid, $uid, @data, %group, %user);
my ($gid, $uid, @data, %group, %user, $groupId);
($gid, $uid) = @_;
$uid = $session{user}{userId} if ($uid eq "");
### The "Everyone" group automatically returns true.
@ -254,10 +254,22 @@ sub isInGroup {
}
}
### Admins can do anything!
if ($gid != 3) {
if ($gid != 3 && $session{isInGroup}{3} eq "") {
$session{isInGroup}{3} = isInGroup(3, $uid);
return $session{isInGroup}{3};
if ($session{isInGroup}{3}) {
$session{isInGroup}{$gid} = 1;
return 1;
}
}
### Check for groups of groups.
@data = WebGUI::SQL->buildArray("select groupId from groupGroupings where inGroup=$gid");
foreach $groupId (@data) {
$session{isInGroup}{$groupId} = isInGroup($groupId, $uid);
if ($session{isInGroup}{$groupId}) {
$session{isInGroup}{$gid} = 1;
return 1;
}
}
return 0;
}

View file

@ -296,6 +296,7 @@ sub refreshSessionVars {
#-------------------------------------------------------------------
sub refreshUserInfo {
$session{user} = _getUserInfo($_[0],$session{dbh});
$session{isInGroup} = ();
}
#-------------------------------------------------------------------