From e828ff866368acdbe53855e258f0a090cdccd82b Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 18 Nov 2002 02:17:08 +0000 Subject: [PATCH] Added the ability to email groups and to create groups of groups. --- docs/upgrades/upgrade_4.7.0-4.8.0.sql | 12 +++ lib/WebGUI/Operation/Group.pm | 104 +++++++++++++++++++++++++- lib/WebGUI/Privilege.pm | 18 ++++- lib/WebGUI/Session.pm | 1 + 4 files changed, 130 insertions(+), 5 deletions(-) diff --git a/docs/upgrades/upgrade_4.7.0-4.8.0.sql b/docs/upgrades/upgrade_4.7.0-4.8.0.sql index 4fc22cce6..f60c57375 100644 --- a/docs/upgrades/upgrade_4.7.0-4.8.0.sql +++ b/docs/upgrades/upgrade_4.7.0-4.8.0.sql @@ -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); diff --git a/lib/WebGUI/Operation/Group.pm b/lib/WebGUI/Operation/Group.pm index 22b09e8ad..b4bcdc00c 100644 --- a/lib/WebGUI/Operation/Group.pm +++ b/lib/WebGUI/Operation/Group.pm @@ -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 = '

'.WebGUI::International::get(809).'

'; + $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 = '

'.WebGUI::International::get(813).'

'; + $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 .= '

'; + $output .= ''; + $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 .= ''; + } + $output .= '
'.WebGUI::International::get(84).'
' + .deleteIcon('op=deleteGroupGrouping&gid='.$session{form}{gid}.'&delete='.$group->{id}) + .'' + .$group->{name}.'
'; + $output .= $p->getBarTraditional; + return _submenu($output); +} + #------------------------------------------------------------------- sub www_manageUsersInGroup { return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3)); diff --git a/lib/WebGUI/Privilege.pm b/lib/WebGUI/Privilege.pm index 5379f35ae..eed84091a 100644 --- a/lib/WebGUI/Privilege.pm +++ b/lib/WebGUI/Privilege.pm @@ -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; } diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm index 23e221fcb..a1dd51b83 100644 --- a/lib/WebGUI/Session.pm +++ b/lib/WebGUI/Session.pm @@ -296,6 +296,7 @@ sub refreshSessionVars { #------------------------------------------------------------------- sub refreshUserInfo { $session{user} = _getUserInfo($_[0],$session{dbh}); + $session{isInGroup} = (); } #-------------------------------------------------------------------