You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2014/10/27 21:26:14 UTC
svn commit: r1634677 - in /vcl/trunk/web: .ht-inc/blockallocations.php
.ht-inc/utils.php js/blockallocations.js
Author: jfthomps
Date: Mon Oct 27 20:26:14 2014
New Revision: 1634677
URL: http://svn.apache.org/r1634677
Log:
VCL-759 - check user group access to image when creating block allocations
blockallocations.php:
-modified blockAllocationForm: added onChange handlers to form for selecting environment and user group that call clearCont2; added hidden form value with id of submitcont2 - we end up storing a 2nd continuation here that has an override flag set to allow ignoring a warning that the submitted user group does not have access to the submitted environment
-modified processBlockAllocationInput: check for user group having access to image; do not do check if $override is set; if error and error was from user group not having access to image, send back a 2nd continuation that has override flag set
utils.php: modified getUserResources: added optional argument to end of argument list - $groupid; allows a group id to be passed in (along with $userid = 0) to get resources a user group has access to
blockallocations.js:
-modified blockFormSubmitWeekly, blockFormSubmitMonthly, and blockFormSubmitList: use continuation stored in submitcont2 if it has a non empty value
-added clearCont2
Modified:
vcl/trunk/web/.ht-inc/blockallocations.php
vcl/trunk/web/.ht-inc/utils.php
vcl/trunk/web/js/blockallocations.js
Modified: vcl/trunk/web/.ht-inc/blockallocations.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/blockallocations.php?rev=1634677&r1=1634676&r2=1634677&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/blockallocations.php (original)
+++ vcl/trunk/web/.ht-inc/blockallocations.php Mon Oct 27 20:26:14 2014
@@ -143,10 +143,11 @@ function blockAllocationForm() {
print " <td>\n";
if(USEFILTERINGSELECT && count($resources['image']) < FILTERINGSELECTTHRESHOLD) {
print " <select dojoType=\"dijit.form.FilteringSelect\" id=imagesel style=\"width: 300px\" ";
- print "queryExpr=\"*\${0}*\" highlightMatch=\"all\" autoComplete=\"false\">\n";
+ print "queryExpr=\"*\${0}*\" highlightMatch=\"all\" autoComplete=\"false\" ";
+ print "onChange=\"clearCont2();\">\n";
}
else
- print " <select id=imagesel>";
+ print " <select id=imagesel onChange=\"clearCont2();\">";
foreach($resources['image'] as $id => $name) {
if($id == $data['imageid'])
print " <option value=\"$id\" selected>$name</option>\n";
@@ -162,10 +163,11 @@ function blockAllocationForm() {
$groups = getUserGroups(0, $user['affiliationid']);
if(USEFILTERINGSELECT && count($groups) < FILTERINGSELECTTHRESHOLD) {
print " <select dojoType=\"dijit.form.FilteringSelect\" id=groupsel style=\"width: 300px\" ";
- print "queryExpr=\"*\${0}*\" highlightMatch=\"all\" autoComplete=\"false\">\n";
+ print "queryExpr=\"*\${0}*\" highlightMatch=\"all\" autoComplete=\"false\" ";
+ print "onChange=\"clearCont2();\">\n";
}
else
- print " <select id=groupsel>";
+ print " <select id=groupsel onChange=\"clearCont2();\">";
$extragroups = array();
if($mode == 'requestBlockAllocation')
print " <option value=\"0\">(" . _("group not listed") . ")</option>\n";
@@ -472,6 +474,7 @@ function blockAllocationForm() {
$data['method'] = 'request';
$cont = addContinuationsEntry('AJblockAllocationSubmit', $data, SECINWEEK, 1, 0);
print "<input type=\"hidden\" id=\"submitcont\" value=\"$cont\">\n";
+ print "<input type=\"hidden\" id=\"submitcont2\">\n";
print "<button dojoType=\"dijit.form.Button\" type=\"button\">\n";
print " $btntxt\n";
print " <script type=\"dojo/method\" event=\"onClick\">\n";
@@ -2998,6 +3001,7 @@ function processBlockAllocationInput() {
$return['imageid'] = processInputVar('imageid', ARG_NUMERIC);
$return['seats'] = processInputVar('seats', ARG_NUMERIC);
$return['groupid'] = processInputVar('groupid', ARG_NUMERIC);
+ $override = getContinuationVar('override', 0);
$type = processInputVar('type', ARG_STRING);
$err = 0;
if($method != 'request' && ! preg_match('/^([-a-zA-Z0-9\. \(\)]){3,80}$/', $return['name'])) {
@@ -3039,6 +3043,19 @@ function processBlockAllocationInput() {
$err = 1;
}
}
+ $dooverride = 0;
+ if(! $err && ! $override) {
+ $groupresources = getUserResources(array("imageAdmin", "imageCheckOut"),
+ array("available"), 0, 0, 0,
+ $return['groupid']);
+ if(! array_key_exists($return['imageid'], $groupresources['image'])) {
+ $dooverride = 1;
+ $errmsg = "WARNING - The selected user group does not currently have "
+ . "access to the selected environment. You can submit the "
+ . "Block Allocation again to ignore this warning.";
+ $err = 1;
+ }
+ }
if(! $err && $type != 'weekly' && $type != 'monthly' && $type != 'list') {
$errmsg = 'You must select one of "Repeating Weekly", "Repeating Monthly", '
. 'or "List of Dates/Times".';
@@ -3191,6 +3208,13 @@ function processBlockAllocationInput() {
$data['blockid'] = getContinuationVar('blockid');
$cont = addContinuationsEntry('AJblockAllocationSubmit', $data, SECINWEEK, 1, 0);
print "dojo.byId('submitcont').value = '$cont';";
+ if($dooverride) {
+ $data['override'] = 1;
+ $cont = addContinuationsEntry('AJblockAllocationSubmit', $data, SECINWEEK, 1, 0);
+ print "dojo.byId('submitcont2').value = '$cont';";
+ }
+ else
+ print "dojo.byId('submitcont2').value = '';";
}
$return['type'] = $type;
$return['err'] = $err;
Modified: vcl/trunk/web/.ht-inc/utils.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/utils.php?rev=1634677&r1=1634676&r2=1634677&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/utils.php (original)
+++ vcl/trunk/web/.ht-inc/utils.php Mon Oct 27 20:26:14 2014
@@ -1834,18 +1834,22 @@ function removeNoCheckout($images) {
////////////////////////////////////////////////////////////////////////////////
///
/// \fn getUserResources($userprivs, $resourceprivs, $onlygroups,
-/// $includedeleted, $userid)
+/// $includedeleted, $userid, $groupid)
///
/// \param $userprivs - array of privileges to look for (such as
-/// imageAdmin, imageCheckOut, etc) - this is an OR list; don't include 'block' or 'cascade'
+/// imageAdmin, imageCheckOut, etc) - this is an OR list; don't include 'block'
+/// or 'cascade'
/// \param $resourceprivs - array of privileges to look for (such as
-/// available, administer, manageGroup) - this is an OR list; don't include 'block' or 'cascade'
+/// available, administer, manageGroup) - this is an OR list; don't include
+/// 'block' or 'cascade'
/// \param $onlygroups - (optional) if 1, return the resource groups instead
/// of the resources
/// \param $includedeleted - (optional) included deleted resources if 1,
/// don't if 0
/// \param $userid - (optional) id from the user table, if not given, use the
/// id of the currently logged in user
+/// \param $groupid - (optional) id from the usergroup table, if not given, look
+/// up by $userid; $userid must be 0 to look up by $groupid
///
/// \return an array of 2 arrays where the first indexes are resource types
/// and each one's arrays are a list of resources available to the user where
@@ -1868,14 +1872,18 @@ function removeNoCheckout($images) {
///
////////////////////////////////////////////////////////////////////////////////
function getUserResources($userprivs, $resourceprivs=array("available"),
- $onlygroups=0, $includedeleted=0, $userid=0) {
+ $onlygroups=0, $includedeleted=0, $userid=0,
+ $groupid=0) {
global $user;
if(in_array('managementnodeAdmin', $userprivs))
$userprivs[] = 'mgmtnodeAdmin';
- $key = getKey(array($userprivs, $resourceprivs, $onlygroups, $includedeleted, $userid));
+ $key = getKey(array($userprivs, $resourceprivs, $onlygroups, $includedeleted, $userid, $groupid));
if(array_key_exists($key, $_SESSION['userresources']))
return $_SESSION['userresources'][$key];
#FIXME this whole function could be much more efficient
+ $bygroup = 0;
+ if($userid == 0 && $groupid != 0)
+ $bygroup = 1;
if(! $userid)
$userid = $user["id"];
$return = array();
@@ -1888,11 +1896,15 @@ function getUserResources($userprivs, $r
. "FROM userpriv u, "
. "userprivtype t "
. "WHERE u.userprivtypeid = t.id AND "
- . "t.name IN ($inlist) AND "
- . "(u.userid = $userid OR "
- . "u.usergroupid IN (SELECT usergroupid "
- . "FROM usergroupmembers "
- . "WHERE userid = $userid))";
+ . "t.name IN ($inlist) AND ";
+ if(! $bygroup) {
+ $query .= "(u.userid = $userid OR "
+ . "u.usergroupid IN (SELECT usergroupid "
+ . "FROM usergroupmembers "
+ . "WHERE userid = $userid))";
+ }
+ else
+ $query .= "u.usergroupid = $groupid";
$qh = doQuery($query, 101);
while($row = mysql_fetch_assoc($qh)) {
array_push($startnodes, $row["privnodeid"]);
@@ -1920,11 +1932,14 @@ function getUserResources($userprivs, $r
. "FROM userprivtype t, "
. "userpriv u "
. "WHERE u.userprivtypeid = t.id AND "
- . "u.usergroupid IS NOT NULL AND "
- . "u.usergroupid IN (SELECT usergroupid "
- . "FROM usergroupmembers "
- . "WHERE userid = $userid) AND "
- . "t.name IN ('block','cascade',$inlist) "
+ . "u.usergroupid IS NOT NULL AND ";
+ if($bygroup)
+ $query .= "u.usergroupid = $groupid AND ";
+ else
+ $query .= "u.usergroupid IN (SELECT usergroupid "
+ . "FROM usergroupmembers "
+ . "WHERE userid = $userid) AND ";
+ $query .= "t.name IN ('block','cascade',$inlist) "
. "ORDER BY u.privnodeid, "
. "u.usergroupid";
$qh = doQuery($query, 101);
@@ -1989,7 +2004,8 @@ function getUserResources($userprivs, $r
}
}
- addOwnedResourceGroups($resourcegroups, $userid);
+ if(! $bygroup)
+ addOwnedResourceGroups($resourcegroups, $userid);
if($onlygroups) {
foreach(array_keys($resourcegroups) as $type)
uasort($resourcegroups[$type], "sortKeepIndex");
@@ -2002,7 +2018,8 @@ function getUserResources($userprivs, $r
$resources[$type] =
getResourcesFromGroups($resourcegroups[$type], $type, $includedeleted);
}
- addOwnedResources($resources, $includedeleted, $userid);
+ if(! $bygroup)
+ addOwnedResources($resources, $includedeleted, $userid);
$noimageid = getImageId('noimage');
if(array_key_exists($noimageid, $resources['image']))
unset($resources['image'][$noimageid]);
Modified: vcl/trunk/web/js/blockallocations.js
URL: http://svn.apache.org/viewvc/vcl/trunk/web/js/blockallocations.js?rev=1634677&r1=1634676&r2=1634677&view=diff
==============================================================================
--- vcl/trunk/web/js/blockallocations.js (original)
+++ vcl/trunk/web/js/blockallocations.js Mon Oct 27 20:26:14 2014
@@ -538,6 +538,8 @@ function blockFormSubmitWeekly(mode) {
enddate: enddate,
times: alltimes,
days: days2};
+ if(dojo.byId('submitcont2').value != '')
+ data.continuation = dojo.byId('submitcont2').value;
if(mode != 'request') {
data.name = dijit.byId('brname').value;
data.owner = dijit.byId('browner').value;
@@ -673,6 +675,8 @@ function blockFormSubmitMonthly(mode) {
weeknum: weeknum,
day: day,
times: alltimes};
+ if(dojo.byId('submitcont2').value != '')
+ data.continuation = dojo.byId('submitcont2').value;
if(mode != 'request') {
data.name = dijit.byId('brname').value;
data.owner = dijit.byId('browner').value;
@@ -758,6 +762,8 @@ function blockFormSubmitList(mode) {
groupid: groupid,
type: 'list',
slots: allslots};
+ if(dojo.byId('submitcont2').value != '')
+ data.continuation = dojo.byId('submitcont2').value;
if(mode != 'request') {
data.name = dijit.byId('brname').value;
data.owner = dijit.byId('browner').value;
@@ -1393,3 +1399,6 @@ function viewBlockUsageCB(data, ioArgs)
}
}
+function clearCont2() {
+ dojo.byId('submitcont2').value = '';
+}