Author: jfthomps Date: Thu Mar 1 15:48:37 2012 New Revision: 1295632 URL: http://svn.apache.org/viewvc?rev=1295632&view=rev Log: VCL-502 allow aspects of automatic user groups to be managed through UI
modified viewGroups, editOrAddGroup, processGroupInput, updateGroup, confirmEditOrAddGroup, and confirmDeleteGroup - introduced two new user group permissions: 'Manage Federated User Groups (global)' and 'Manage Federated User Groups (affiliation only)'; use them to control who can see and manage Course Roll and Federated user groups; use 'custom' and 'courseroll' user group attributes to control which information about user groups can be edited Modified: incubator/vcl/trunk/web/.ht-inc/groups.php Modified: incubator/vcl/trunk/web/.ht-inc/groups.php URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/groups.php?rev=1295632&r1=1295631&r2=1295632&view=diff ============================================================================== --- incubator/vcl/trunk/web/.ht-inc/groups.php (original) +++ incubator/vcl/trunk/web/.ht-inc/groups.php Thu Mar 1 15:48:37 2012 @@ -48,7 +48,7 @@ function viewGroups() { global $user, $mode; $modetype = getContinuationVar("type"); - $usergroups = getUserGroups(1); + $usergroups = getUserGroups(); if($user['showallgroups']) $affilusergroups = $usergroups; else @@ -68,6 +68,12 @@ function viewGroups() { } } + $showfederatedall = 0; + $showfederatedaffil = 0; + if(checkUserHasPerm('Manage Federated User Groups (global)')) + $showfederatedall = 1; + elseif(checkUserHasPerm('Manage Federated User Groups (affiliation only)')) + $showfederatedaffil = 1; print "<H2>User Groups</H2>\n"; if($modetype == "user") { if($mode == "submitAddGroup") { @@ -89,6 +95,8 @@ function viewGroups() { print " <TD></TD>\n"; print " <TH>Name</TH>\n"; print " <TH>Owner</TH>\n"; + if($showfederatedall || $showfederatedaffil) + print " <TH>Type</TH>\n"; print " <TH>Editable by</TH>\n"; print " <TH>Initial Max Time (minutes)</TH>\n"; print " <TH>Total Max Time (minutes)</TH>\n"; @@ -110,6 +118,7 @@ function viewGroups() { print " <TD nowrap><INPUT type=text name=name maxlength=30 size=20>"; print "</TD>\n"; print " <TD><INPUT type=text name=owner size=15></TD>\n"; + print " <TD>Normal</TD>\n"; print " <TD>\n"; $cdata = array('type' => 'user'); if(empty($affilusergroups)) { @@ -143,6 +152,13 @@ function viewGroups() { if(array_key_exists("editgroupid", $usergroups[$id]) && array_key_exists($usergroups[$id]["editgroupid"], $user["groups"])) $editor = 1; + if($showfederatedall && ($usergroups[$id]['custom'] == 0 || + $usergroups[$id]['courseroll'] == 1)) + $owner = 1; + elseif($showfederatedaffil && ($usergroups[$id]['custom'] == 0 || + $usergroups[$id]['courseroll'] == 1) && + $usergroups[$id]['groupaffiliationid'] == $user['affiliationid']) + $owner = 1; if(! $owner && ! $editor) continue; if($user['showallgroups']) @@ -173,7 +189,18 @@ function viewGroups() { print " </FORM>\n"; print " </TD>\n"; print " <TD valign=bottom>{$usergroups[$id]["name"]}</TD>\n"; - print " <TD>{$usergroups[$id]["owner"]}</TD>\n"; + if(! empty($usergroups[$id]["owner"])) + print " <TD>{$usergroups[$id]["owner"]}</TD>\n"; + else + print " <TD>N/A</TD>\n"; + if($showfederatedall || $showfederatedaffil) { + if($usergroups[$id]['courseroll'] == 1) + print " <TD>Course Roll</TD>\n"; + elseif($usergroups[$id]['custom'] == 0) + print " <TD>Federated</TD>\n"; + else + print " <TD>Normal</TD>\n"; + } if(! empty($usergroups[$id]["editgroup"])) { print " <TD>{$usergroups[$id]["editgroup"]}@"; print "{$usergroups[$id]['editgroupaffiliation']}</TD>\n"; @@ -295,7 +322,7 @@ function viewGroups() { function editOrAddGroup($state) { global $submitErr, $user, $mode; - $usergroups = getUserGroups(1); + $usergroups = getUserGroups(); if($user['showallgroups']) $affilusergroups = $usergroups; else @@ -345,6 +372,8 @@ function editOrAddGroup($state) { $data["totalmax"] = $usergroups[$id]["totalmaxtime"]; $data["maxextend"] = $usergroups[$id]["maxextendtime"]; $data["overlap"] = $usergroups[$id]["overlapResCount"]; + $data["custom"] = $usergroups[$id]["custom"]; + $data["courseroll"] = $usergroups[$id]["courseroll"]; $tmp = explode('@', $data['name']); $data['name'] = $tmp[0]; if($user['showallgroups'] || @@ -375,7 +404,7 @@ function editOrAddGroup($state) { else { if($data["type"] == "user") { print "<H2>Edit User Group</H2>\n"; - print "{$usergroups[$data['groupid']]['name']}<br>\n"; + print "{$usergroups[$data['groupid']]['name']}<br><br>\n"; $editusergroup = 1; } else @@ -400,68 +429,75 @@ function editOrAddGroup($state) { print " <TD></TD>\n"; print " </TR>\n"; } - print " <TR>\n"; - print " <TH align=right>Name:</TH>\n"; - print " <TD><INPUT type=text name=name value=\"{$data['name']}\" "; - print "maxlength=30>"; - if($data['type'] == 'user' && $selectAffil) { - print "@"; - printSelectInput('affiliationid', $affils, $data['affiliationid']); - } - print "</TD>\n"; - print " <TD>"; - printSubmitErr(GRPNAMEERR); - print "</TD>\n"; - print " </TR>\n"; - if($data["type"] == "user") { + if($data['type'] == 'resource' || + ($data['courseroll'] == 0 && $data['custom'] == 1)) { print " <TR>\n"; - print " <TH align=right>Owner:</TH>\n"; - print " <TD><INPUT type=text name=owner value=\"" . $data["owner"]; - print "\"></TD>\n"; + print " <TH align=right>Name:</TH>\n"; + print " <TD><INPUT type=text name=name value=\"{$data['name']}\" "; + print "maxlength=30>"; + if($data['type'] == 'user' && $selectAffil) { + print "@"; + printSelectInput('affiliationid', $affils, $data['affiliationid']); + } + print "</TD>\n"; print " <TD>"; - printSubmitErr(GRPOWNER); + printSubmitErr(GRPNAMEERR); print "</TD>\n"; print " </TR>\n"; - print " <TR>\n"; - print " <TH align=right>Editable by:</TH>\n"; - print " <TD valign=\"top\">\n"; - $groupwasnone = 0; - if($submitErr & EDITGROUPERR) { - if($state == 0) - $data['editgroupid'] = $usergroups[$data['groupid']]['editgroupid']; - elseif(count($affilusergroups)) { - $tmp = array_keys($affilusergroups); - $data['editgroupid'] = $tmp[0]; + } + if($data["type"] == "user") { + if($data['courseroll'] == 0 && $data['custom'] == 1) { + print " <TR>\n"; + print " <TH align=right>Owner:</TH>\n"; + print " <TD><INPUT type=text name=owner value=\"" . $data["owner"]; + print "\"></TD>\n"; + print " <TD>"; + printSubmitErr(GRPOWNER); + print "</TD>\n"; + print " </TR>\n"; + print " <TR>\n"; + print " <TH align=right>Editable by:</TH>\n"; + print " <TD valign=\"top\">\n"; + $groupwasnone = 0; + if($submitErr & EDITGROUPERR) { + if($state == 0) + $data['editgroupid'] = $usergroups[$data['groupid']]['editgroupid']; + elseif(count($affilusergroups)) { + $tmp = array_keys($affilusergroups); + $data['editgroupid'] = $tmp[0]; + } } + $notice = ''; + if($state == 0 && empty($usergroups[$data['groupid']]["editgroup"])) { + $affilusergroups = array_reverse($affilusergroups, TRUE); + $affilusergroups[0] = array('name' => 'None'); + $affilusergroups = array_reverse($affilusergroups, TRUE); + $groupwasnone = 1; + $notice = "<strong>Note:</strong> You are the only person that can<br>" + . "edit membership of this group. Select a<br>user group here " + . "to allow members of that<br>group to edit membership of this one."; + } + elseif(! array_key_exists($data['editgroupid'], $affilusergroups) && + $data['editgroupid'] != 0) { + $affilusergroups[$data['editgroupid']] = + array('name' => getUserGroupName($data['editgroupid'], 1)); + uasort($affilusergroups, "sortKeepIndex"); + } + if($state == 1 && $data['editgroupid'] == 0) + print "None\n"; + else + printSelectInput("editgroupid", $affilusergroups, $data["editgroupid"]); + print " </TD>\n"; + print " <TD>"; + if($submitErr & EDITGROUPERR) + printSubmitErr(EDITGROUPERR); + else + print $notice; + print "</TD>"; + print " </TR>\n"; } - $notice = ''; - if($state == 0 && empty($usergroups[$data['groupid']]["editgroup"])) { - $affilusergroups = array_reverse($affilusergroups, TRUE); - $affilusergroups[0] = array('name' => 'None'); - $affilusergroups = array_reverse($affilusergroups, TRUE); - $groupwasnone = 1; - $notice = "<strong>Note:</strong> You are the only person that can<br>" - . "edit membership of this group. Select a<br>user group here " - . "to allow members of that<br>group to edit membership of this one."; - } - elseif(! array_key_exists($data['editgroupid'], $affilusergroups) && - $data['editgroupid'] != 0) { - $affilusergroups[$data['editgroupid']] = - array('name' => getUserGroupName($data['editgroupid'], 1)); - uasort($affilusergroups, "sortKeepIndex"); - } - if($state == 1 && $data['editgroupid'] == 0) - print "None\n"; else - printSelectInput("editgroupid", $affilusergroups, $data["editgroupid"]); - print " </TD>\n"; - print " <TD>"; - if($submitErr & EDITGROUPERR) - printSubmitErr(EDITGROUPERR); - else - print $notice; - print "</TD>"; - print " </TR>\n"; + $groupwasnone = 1; print " <TR>\n"; print " <TH align=right>Initial Max Time (minutes):</TH>\n"; print " <TD><INPUT type=text name=initialmax value=\""; @@ -532,8 +568,12 @@ function editOrAddGroup($state) { if($data['type'] == 'resource') $cdata['resourcetypeid'] = $resourcetypeid; else { + if($data['courseroll'] == 1 || $data['custom'] == 0) + $cdata['name'] = $data['name']; $cdata['selectAffil'] = $selectAffil; $cdata['groupwasnone'] = $groupwasnone; + $cdata['custom'] = $data['custom']; + $cdata['courseroll'] = $data['courseroll']; } $cont = addContinuationsEntry('confirmEditGroup', $cdata); print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; @@ -551,7 +591,8 @@ function editOrAddGroup($state) { print "</TABLE>\n"; } - if($data["type"] != "user") + if($data["type"] != "user" || $data['courseroll'] == 1 || + $data['custom'] == 0) return; if($editusergroup) { print "<H3>Group Membership</H3>\n"; @@ -618,6 +659,8 @@ function processGroupInput($checks=1) { $return = array(); $return["groupid"] = getContinuationVar("groupid"); $return["type"] = getContinuationVar("type"); + $return["custom"] = getContinuationVar("custom", 1); + $return["courseroll"] = getContinuationVar("courseroll", 0); $return["name"] = getContinuationVar('name', processInputVar("name", ARG_STRING)); $return["affiliationid"] = getContinuationVar('affiliationid', processInputVar("affiliationid", ARG_NUMERIC, $user['affiliationid'])); $return["resourcetypeid"] = getContinuationVar('resourcetypeid', processInputVar("resourcetypeid", ARG_NUMERIC)); @@ -639,7 +682,8 @@ function processGroupInput($checks=1) { return $return; } - if(! preg_match('/^[-a-zA-Z0-9_\.: ]{3,30}$/', $return["name"])) { + if($return['custom'] == 1 && $return['courseroll'] == 0 && + ! preg_match('/^[-a-zA-Z0-9_\.: ]{3,30}$/', $return["name"])) { $submitErr |= GRPNAMEERR; $submitErrMsg[GRPNAMEERR] = "Name must be between 3 and 30 characters " . "and can only contain letters, numbers, and " @@ -656,7 +700,8 @@ function processGroupInput($checks=1) { $submitErr |= GRPNAMEERR; $submitErrMsg[GRPNAMEERR] = "A group already exists with this name."; } - if($return["type"] == "user" && ! validateUserid($return["owner"])) { + if($return['custom'] == 1 && $return['courseroll'] == 0 && + $return["type"] == "user" && ! validateUserid($return["owner"])) { $submitErr |= GRPOWNER; $submitErrMsg[GRPOWNER] = "Submitted ID is not valid"; } @@ -737,9 +782,15 @@ function checkForGroupName($name, $type, //////////////////////////////////////////////////////////////////////////////// function updateGroup($data) { if($data['type'] == "user") { - if($data['editgroupid'] == 0) + if($data['courseroll'] == 1 || $data['custom'] == 0) { $data['editgroupid'] = 'NULL'; - $ownerid = getUserlistID($data['owner']); + $ownerid = 'NULL'; + } + else { + if($data['editgroupid'] == 0) + $data['editgroupid'] = 'NULL'; + $ownerid = getUserlistID($data['owner']); + } $query = "UPDATE usergroup " . "SET name = '{$data['name']}', " . "affiliationid = {$data['affiliationid']}, " @@ -758,7 +809,7 @@ function updateGroup($data) { . "ownerusergroupid = {$data['ownergroup']} " . "WHERE id = {$data['groupid']}"; } - $qh = doQuery($query, 300); + doQuery($query, 300); return mysql_affected_rows($GLOBALS['mysql_link_vcl']); } @@ -920,6 +971,12 @@ function confirmEditOrAddGroup($state) { print "<DIV align=center>\n"; print "<H2>$title</H2>\n"; print "$question<br><br>\n"; + if($data['courseroll'] == 1 || $data['custom'] == 0) { + if($user['showallgroups']) + print "{$data['name']}@{$affils[$data['affiliationid']]}<br><br>\n"; + else + print "{$data['name']}<br><br>\n"; + } print "<TABLE>\n"; if($data["type"] == "resource") { print " <TR>\n"; @@ -928,30 +985,34 @@ function confirmEditOrAddGroup($state) { print "</TD>\n"; print " </TR>\n"; } - print " <TR>\n"; - print " <TH align=right>Name:</TH>\n"; - if($data['type'] == 'user' && ($user['showallgroups'] || - $data['affiliationid'] != $user['affiliationid'])) - print " <TD>{$data["name"]}@{$affils[$data['affiliationid']]}</TD>\n"; - else - print " <TD>{$data["name"]}</TD>\n"; - print " </TR>\n"; - if($data["type"] == "user") { + if($data['courseroll'] == 0 && $data['custom'] == 1) { print " <TR>\n"; - print " <TH align=right>Owner:</TH>\n"; - print " <TD>" . $data["owner"] . "</TD>\n"; + print " <TH align=right>Name:</TH>\n"; + if($data['type'] == 'user' && ($user['showallgroups'] || + $data['affiliationid'] != $user['affiliationid'])) + print " <TD>{$data["name"]}@{$affils[$data['affiliationid']]}</TD>\n"; + else + print " <TD>{$data["name"]}</TD>\n"; print " </TR>\n"; - print " <TR>\n"; - print " <TH align=right>Editable by:</TH>\n"; - if($state == 0 && $data['editgroupid'] == 0) - $usergroups[0]['name'] = 'None'; - elseif(! $user['showallgroups']) { - $tmp = explode('@', $usergroups[$data["editgroupid"]]["name"]); - if($tmp[1] == $user['affiliation']) - $usergroups[$data["editgroupid"]]["name"] = $tmp[0]; + } + if($data["type"] == "user") { + if($data['courseroll'] == 0 && $data['custom'] == 1) { + print " <TR>\n"; + print " <TH align=right>Owner:</TH>\n"; + print " <TD>" . $data["owner"] . "</TD>\n"; + print " </TR>\n"; + print " <TR>\n"; + print " <TH align=right>Editable by:</TH>\n"; + if($state == 0 && $data['editgroupid'] == 0) + $usergroups[0]['name'] = 'None'; + elseif(! $user['showallgroups']) { + $tmp = explode('@', $usergroups[$data["editgroupid"]]["name"]); + if($tmp[1] == $user['affiliation']) + $usergroups[$data["editgroupid"]]["name"] = $tmp[0]; + } + print " <TD>" . $usergroups[$data["editgroupid"]]["name"] . "</TD>\n"; + print " </TR>\n"; } - print " <TD>" . $usergroups[$data["editgroupid"]]["name"] . "</TD>\n"; - print " </TR>\n"; print " <TR>\n"; print " <TH align=right>Initial Max Time (minutes):</TH>\n"; print " <TD>{$data["initialmax"]}</TD>\n"; @@ -1049,7 +1110,7 @@ function confirmDeleteGroup() { $groupid = getContinuationVar("groupid"); $type = getContinuationVar("type"); - $usergroups = getUserGroups(1); + $usergroups = getUserGroups(); $resourcegroups = getResourceGroups(); if($type == "user") { @@ -1097,6 +1158,21 @@ function confirmDeleteGroup() { print " <TD>" . $resourcegroups[$groupid]["owner"] . "</TD>\n"; print " </TR>\n"; } + elseif($usergroups[$groupid]['courseroll'] == 1 || + $usergroups[$groupid]['custom'] == 0) { + print "<TR>\n"; + print " <TH align=right>Type:</TH>\n"; + if($usergroups[$groupid]['courseroll'] == 1) + print " <TD>Course Roll</TD>\n"; + elseif($usergroups[$groupid]['custom'] == 0) + print " <TD>Federated</TD>\n"; + print "</TR>\n"; + print "<TR>\n"; + print " <TD colspan=2><strong>Note</strong>: This type of group is "; + print "created from external sources<br>and could be recreated from "; + print "those sources at any time.</TD>\n"; + print "</TR>\n"; + } print "</TABLE>\n"; print "<TABLE>\n"; print " <TR valign=top>\n";