diff --git a/docs/credits.txt b/docs/credits.txt
index ccda9356b..746425f21 100644
--- a/docs/credits.txt
+++ b/docs/credits.txt
@@ -15,6 +15,7 @@ Contributing Developers..............Peter Beardsley / Appropriate Solutions, In
Jeff Depons / Web Den Interactive
Frank Dillon / Web Den Interactive
Junying Du / Web Den Interactive
+ Ed Van Duinen / UNC
Greg Fast / Web Den Interactive
Chris Gebhardt / OpenServe
Andy Grundman
diff --git a/docs/upgrades/upgrade_5.0.3-5.1.0.sql b/docs/upgrades/upgrade_5.0.3-5.1.0.sql
index 4d50cc44a..4cdcea6fa 100644
--- a/docs/upgrades/upgrade_5.0.3-5.1.0.sql
+++ b/docs/upgrades/upgrade_5.0.3-5.1.0.sql
@@ -55,8 +55,22 @@ insert into international (internationalId,languageId,namespace,message,lastUpda
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (869,1,'WebGUI','Welcome Message', 1044138730);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (868,1,'WebGUI','Send welcome message?', 1044138691);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (870,1,'WebGUI','Welcome', 1044139461);
-
-
+insert into international (internationalId,languageId,namespace,message,lastUpdated) values (872,1,'WebGUI','Who can view?', 1044218038);
+insert into international (internationalId,languageId,namespace,message,lastUpdated) values (871,1,'WebGUI','Who can edit?', 1044218026);
+alter table page add groupIdView int(11) not null default 3;
+alter table page add groupIdEdit int(11) not null default 3;
+update page set groupIdEdit = groupId where groupEdit = 1;
+update page set groupIdEdit = 3 where groupEdit = 0;
+update page set groupIdView = 7 where worldView = 1;
+update page set groupIdView = groupId where worldView = 0 and (groupView = 1 OR groupEdit = 1);
+update page set groupIdView = 3 where worldView = 0 and groupView = 0 and groupEdit = 0;
+alter table page drop column groupId;
+alter table page drop column groupView;
+alter table page drop column groupEdit;
+alter table page drop column worldView;
+alter table page drop column worldEdit;
+alter table page drop column ownerView;
+alter table page drop column ownerEdit;
diff --git a/lib/WebGUI/Operation/Account.pm b/lib/WebGUI/Operation/Account.pm
index ef1fbef90..7eb24f1db 100644
--- a/lib/WebGUI/Operation/Account.pm
+++ b/lib/WebGUI/Operation/Account.pm
@@ -36,7 +36,7 @@ our @EXPORT = qw(&www_viewMessageLogMessage &www_viewMessageLog &www_viewProfile
sub _accountOptions {
my ($output);
$output = '
';
- if (WebGUI::Privilege::isInGroup(3) || WebGUI::Privilege::isInGroup(4) || WebGUI::Privilege::isInGroup(5) || WebGUI::Privilege::isInGroup(6)) {
+ if (WebGUI::Privilege::isInGroup(4) || WebGUI::Privilege::isInGroup(5) || WebGUI::Privilege::isInGroup(6) || WebGUI::Privilege::isInGroup(8)) {
if ($session{var}{adminOn}) {
$output .= '- '.
WebGUI::International::get(12).'';
diff --git a/lib/WebGUI/Operation/Package.pm b/lib/WebGUI/Operation/Package.pm
index 35d60ac0d..0b41d8a10 100644
--- a/lib/WebGUI/Operation/Package.pm
+++ b/lib/WebGUI/Operation/Package.pm
@@ -57,13 +57,8 @@ sub _recursePageTree {
title,
styleId,
ownerId,
- ownerView,
- ownerEdit,
- groupId,
- groupView,
- groupEdit,
- worldView,
- worldEdit,
+ groupIdView,
+ groupIdEdit,
sequenceNumber,
metaTags,
urlizedTitle,
@@ -85,13 +80,8 @@ sub _recursePageTree {
".quote($package{title}).",
$newParent{styleId},
$session{user}{userId},
- $newParent{ownerView},
- $newParent{ownerEdit},
- $newParent{groupId},
- $newParent{groupView},
- $newParent{groupEdit},
- $newParent{worldView},
- $newParent{worldEdit},
+ $newParent{groupIdView},
+ $newParent{groupIdEdit},
$sequenceNumber,
".quote($package{metaTags}).",
".quote($urlizedTitle).",
diff --git a/lib/WebGUI/Operation/Page.pm b/lib/WebGUI/Operation/Page.pm
index 7f3959602..0d1513611 100644
--- a/lib/WebGUI/Operation/Page.pm
+++ b/lib/WebGUI/Operation/Page.pm
@@ -33,10 +33,8 @@ sub _recursivelyChangePrivileges {
$sth = WebGUI::SQL->read("select pageId from page where parentId=$_[0]");
while (($pageId) = $sth->array) {
WebGUI::SQL->write("update page set startDate=$session{form}{startDate}, endDate=$session{form}{endDate},
- ownerId=$session{form}{ownerId}, ownerView=$session{form}{ownerView},
- ownerEdit=$session{form}{ownerEdit}, groupId='$session{form}{groupId}', groupView=$session{form}{groupView},
- groupEdit=$session{form}{groupEdit}, worldView=$session{form}{worldView}, worldEdit=$session{form}{worldEdit}
- where pageId=$pageId");
+ ownerId=$session{form}{ownerId}, groupIdView=$session{form}{groupIdView},
+ groupIdEdit=$session{form}{groupIdEdit} where pageId=$pageId");
_recursivelyChangePrivileges($pageId);
}
$sth->finish;
@@ -222,8 +220,6 @@ sub www_editPage {
$page{title} = $page{menuTitle} = $page{urlizedTitle} = $page{synopsis} = '';
$page{parentId} = $session{form}{npp};
$page{ownerId} = $session{user}{userId};
- $page{ownerEdit} = 1;
- $page{ownerView} = 1;
} else {
%page = %{$session{page}};
($childCount) = WebGUI::SQL->quickArray("select count(*) from page where parentId=$page{pageId}");
@@ -335,35 +331,27 @@ sub www_editPage {
-value=>$page{endDate},
-uiLevel=>9
);
- %hash = WebGUI::SQL->buildHash("select users.userId,users.username from users,groupings
- where (groupings.groupId=4 or groupings.groupId=3) and groupings.userId=users.userId
- order by users.username");
if (WebGUI::Privilege::isInGroup(3)) {
$subtext = ' '
.WebGUI::International::get(7).'';
} else {
$subtext = "";
}
+ my $clause;
+ if (WebGUI::Privilege::isInGroup(3)) {
+ $clause = "userId<>1 and status='Active'";
+ } else {
+ $clause = "userId=$page{ownerId}";
+ }
+ my $users = WebGUI::SQL->buildHashRef("select userId,username from users where $clause order by username");
$f->select(
-name=>"ownerId",
- -options=>\%hash,
+ -options=>$users,
-label=>WebGUI::International::get(108),
-value=>[$page{ownerId}],
-subtext=>$subtext,
-uiLevel=>9
);
- $f->yesNo(
- -name=>"ownerView",
- -label=>WebGUI::International::get(109),
- -value=>$page{ownerView},
- -uiLevel=>9
- );
- $f->yesNo(
- -name=>"ownerEdit",
- -label=>WebGUI::International::get(110),
- -value=>$page{ownerEdit},
- -uiLevel=>9
- );
if (WebGUI::Privilege::isInGroup(3)) {
$subtext = ' '
.WebGUI::International::get(5).'';
@@ -371,35 +359,20 @@ sub www_editPage {
$subtext = "";
}
$f->group(
- -name=>"groupId",
- -label=>WebGUI::International::get(111),
- -value=>[$page{groupId}],
+ -name=>"groupIdView",
+ -label=>WebGUI::International::get(872),
+ -value=>[$page{groupIdView}],
-subtext=>$subtext,
-uiLevel=>9
);
- $f->yesNo(
- -name=>"groupView",
- -label=>WebGUI::International::get(112),
- -value=>$page{groupView},
- -uiLevel=>9
- );
- $f->yesNo(
- -name=>"groupEdit",
- -label=>WebGUI::International::get(113),
- -value=>$page{groupEdit},
- -uiLevel=>9);
- $f->yesNo(
- -name=>"worldView",
- -label=>WebGUI::International::get(114),
- -value=>$page{worldView},
- -uiLevel=>9
- );
- $f->yesNo(
- -name=>"worldEdit",
- -label=>WebGUI::International::get(115),
- -value=>$page{worldEdit},
- -uiLevel=>9
- );
+ $f->group(
+ -name=>"groupIdEdit",
+ -label=>WebGUI::International::get(871),
+ -value=>[$page{groupIdEdit}],
+ -subtext=>$subtext,
+ -excludeGroups=>[1,7],
+ -uiLevel=>9
+ );
if ($childCount) {
$f->yesNo(
-name=>"recursePrivs",
@@ -417,7 +390,8 @@ sub www_editPage {
gotoNewPage=>WebGUI::International::get(823),
backToPage=>WebGUI::International::get(847)
},
- -value=>"gotoNewPage"
+ -value=>"gotoNewPage",
+ -uiLevel=>1
);
}
$f->submit;
@@ -454,13 +428,8 @@ sub www_editPageSave {
title=".quote($session{form}{title}).",
styleId=$session{form}{styleId},
ownerId=$session{form}{ownerId},
- ownerView=$session{form}{ownerView},
- ownerEdit=$session{form}{ownerEdit},
- groupId='$session{form}{groupId}',
- groupView=$session{form}{groupView},
- groupEdit=$session{form}{groupEdit},
- worldView=$session{form}{worldView},
- worldEdit=$session{form}{worldEdit},
+ groupIdView=$session{form}{groupIdView},
+ groupIdEdit=$session{form}{groupIdEdit},
startDate=$session{form}{startDate},
endDate=$session{form}{endDate},
metaTags=".quote($session{form}{metaTags}).",
diff --git a/lib/WebGUI/Privilege.pm b/lib/WebGUI/Privilege.pm
index 6fc8e8373..9fe37ca10 100644
--- a/lib/WebGUI/Privilege.pm
+++ b/lib/WebGUI/Privilege.pm
@@ -16,6 +16,7 @@ package WebGUI::Privilege;
use strict;
use Tie::CPHash;
+use WebGUI::DateTime;
use WebGUI::International;
use WebGUI::Operation::Account ();
use WebGUI::Session;
@@ -96,21 +97,16 @@ The unique identifier for the page that you wish to check the privileges on. Def
=cut
sub canEditPage {
- my ($isContentManager,%page);
+ my (%page);
tie %page, 'Tie::CPHash';
if ($_[0] ne "") {
- %page = WebGUI::SQL->quickHash("select ownerId,ownerEdit,worldEdit,groupId,groupEdit from page where pageId=$_[0]");
+ %page = WebGUI::SQL->quickHash("select ownerId,groupIdEdit from page where pageId=$_[0]");
} else {
%page = %{$session{page}};
}
- $isContentManager = isInGroup(4);
- if ($page{worldEdit} && $isContentManager) {
+ if ($session{user}{userId} == $page{ownerId}) {
return 1;
- } elsif ($session{user}{userId} eq $page{ownerId} && $page{ownerEdit} && $isContentManager) {
- return 1;
- } elsif (isInGroup($page{groupId}) && $page{groupEdit} && $isContentManager) {
- return 1;
- } elsif (isInGroup(3)) { # admin check
+ } elsif (isInGroup($page{groupIdEdit})) {
return 1;
} else {
return 0;
@@ -139,20 +135,15 @@ sub canViewPage {
if ($_[0] eq "") {
%page = %{$session{page}};
} else {
- %page = WebGUI::SQL->quickHash("select ownerId,ownerView,groupId,groupView,worldView,startDate,endDate
- from page where pageId=$_[0]");
+ %page = WebGUI::SQL->quickHash("select ownerId,groupIdView,startDate,endDate from page where pageId=$_[0]");
}
if ($page{startDate} < time() && $page{endDate} > time()) {
$inDateRange = 1;
}
- if ($page{worldView} && $inDateRange) {
+ if ($session{user}{userId} == $page{ownerId}) {
return 1;
- } elsif ($session{user}{userId} eq $page{ownerId} && $page{ownerView} && $inDateRange) {
+ } elsif (isInGroup($page{groupIdView}) && $inDateRange) {
return 1;
- } elsif (isInGroup($page{groupId}) && $page{groupView} && $inDateRange) {
- return 1;
- } elsif (isInGroup(3)) { # admin check
- return 1;
} elsif (canEditPage($_[0])) {
return 1;
} else {