Author: jfthomps Date: Fri Mar 2 19:13:21 2012 New Revision: 1296393 URL: http://svn.apache.org/viewvc?rev=1296393&view=rev Log: VCL-513 allow block allocation control per affiliation
blockallocations.php: -modified blockAllocations - add note to end of description of block allocations saying they should be requested at least one business day in advance -modified AJblockAllocationSubmit - moved notification code to after insert for blockRequest in case there is an abort; get list of email addresses to send notification emails to from getBlockNotifyUsers -added getBlockNotifyUsers - builds a list of email addresses based on people in user groups that have access to manage block allocations conf-default.php - removed $blockNotifyUsers Modified: incubator/vcl/trunk/web/.ht-inc/blockallocations.php incubator/vcl/trunk/web/.ht-inc/conf-default.php Modified: incubator/vcl/trunk/web/.ht-inc/blockallocations.php URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/blockallocations.php?rev=1296393&r1=1296392&r2=1296393&view=diff ============================================================================== --- incubator/vcl/trunk/web/.ht-inc/blockallocations.php (original) +++ incubator/vcl/trunk/web/.ht-inc/blockallocations.php Fri Mar 2 19:13:21 2012 @@ -34,7 +34,7 @@ function blockAllocations() { if(! checkUserHasPerm('Manage Block Allocations (global)') && ! checkUserHasPerm('Manage Block Allocations (affiliation only)')) { print "<H2>Block Allocations</H2>\n"; - print "Block Allocations are a way to have a set of machines preloaded with a particular environment at specified times and made available to a specific group of users. This is very useful for classroom use and for workshops. They can be made available on a repeating schedule such as when a course meets each week. Block Allocations only allocate machines for the group of users - they do not create the actual, end user reservations for the machines. All users still must log in to the VCL web site and make their own reservations DURING the period a block allocation is active. The forms here provide a way for you to submit a request for a Block Allocation for review by a sysadmin. If you just need to use a machine through VCL, use the New Reservation page for that.<br><br>\n"; + print "Block Allocations are a way to have a set of machines preloaded with a particular environment at specified times and made available to a specific group of users. This is very useful for classroom use and for workshops. They can be made available on a repeating schedule such as when a course meets each week. Block Allocations only allocate machines for the group of users - they do not create the actual, end user reservations for the machines. All users still must log in to the VCL web site and make their own reservations DURING the period a block allocation is active. The forms here provide a way for you to submit a request for a Block Allocation for review by a sysadmin. If you just need to use a machine through VCL, use the New Reservation page for that.<br><br>Please submit Block Allocation requests at least one full business day in advance to allow time for them to be approved.<br><br>\n"; print "<button dojoType=\"dijit.form.Button\" type=\"button\">\n"; print " Request New Block Allocation\n"; print " <script type=\"dojo/method\" event=\"onClick\">\n"; @@ -557,7 +557,7 @@ END; /// //////////////////////////////////////////////////////////////////////////////// function AJblockAllocationSubmit() { - global $user, $blockNotifyUsers; + global $user; $data = processBlockAllocationInput(); if($data['err']) return; @@ -645,20 +645,6 @@ function AJblockAllocationSubmit() { doQuery($query, 101); } elseif($method == 'request') { - # send email notifying about a new block allocation request - $message = "A new block allocation request has been submitted by "; - if(! empty($user['firstname']) && ! empty($user['lastname']) && ! empty($user['email'])) - $message .= "{$user['firstname']} {$user['lastname']} ({$user['email']}). "; - elseif(! empty($user['email'])) - $message .= "{$user['email']}. "; - else - $message .= "{$user['unityid']}. "; - $message .= "Please visit the following URL to accept or reject it:\n\n" - . BASEURL . SCRIPT . "?mode=blockAllocations\n\n" - . "(This is an automated message sent by VCL.)\n"; - $mailParams = "-f" . ENVELOPESENDER; - mail($blockNotifyUsers, "VCL Block Allocation Request ({$user['unityid']})", $message, '', $mailParams); - $esccomments = mysql_real_escape_string($data['comments']); $query = "INSERT INTO blockRequest " . "(name, " @@ -682,6 +668,35 @@ function AJblockAllocationSubmit() { . "'$esccomments')"; doQuery($query, 101); $blockreqid = dbLastInsertID(); + + # send email notifying about a new block allocation request + $imagedata = getImages(0, $data['imageid']); + if($data['groupid'] == 0) + $grpname = "(Unspecified)"; + else + $grpname = getUserGroupName($data['groupid']); + if(! empty($data['comments'])) + $comments = "Comments:\n{$data['comments']}\n"; + else + $comments = ''; + $message = "A new block allocation request has been submitted by "; + if(! empty($user['firstname']) && ! empty($user['lastname']) && ! empty($user['email'])) + $message .= "{$user['firstname']} {$user['lastname']} ({$user['email']}). "; + elseif(! empty($user['email'])) + $message .= "{$user['email']}. "; + else + $message .= "{$user['unityid']}. "; + $message .= "Please visit the following URL to accept or reject it:\n\n" + . BASEURL . SCRIPT . "?mode=blockAllocations\n\n" + . "Image: {$imagedata[$data['imageid']]['prettyname']}\n" + . "Seats: {$data['seats']}\n" + . "User Group: $grpname\n$comments\n\n" + . "This is an automated message sent by VCL.\n" + . "You are receiving this message because you have access " + . "to create and approve block allocations."; + $mailParams = "-f" . ENVELOPESENDER; + $blockNotifyUsers = getBlockNotifyUsers($user['affiliationid']); + mail($blockNotifyUsers, "VCL Block Allocation Request ({$user['unityid']})", $message, '', $mailParams); } if($data['type'] == 'weekly') { @@ -997,6 +1012,44 @@ function createListBlockData($blockid, $ //////////////////////////////////////////////////////////////////////////////// /// +/// \fn getBlockNotifyUsers($affiliationid) +/// +/// \param $affiliationid - an affiliation id +/// +/// \return string of comma delimited email addresses +/// +/// \brief gets email addresses for all users that should be notified about a +/// block allocation +/// +//////////////////////////////////////////////////////////////////////////////// +function getBlockNotifyUsers($affiliationid) { + $query = "SELECT DISTINCT(u.email) " + . "FROM user u, " + . "usergroupmembers ugm, " + . "usergroup ug, " + . "usergrouppriv ugp, " + . "usergroupprivtype ugpt " + . "WHERE ((ugpt.name = 'Manage Block Allocations (global)' AND " + . "ugp.userprivtypeid = ugpt.id AND " + . "ugp.usergroupid = ugm.usergroupid AND " + . "ugp.usergroupid = ug.id AND " + . "ugm.userid = u.id) OR " + . "(ugpt.name = 'Manage Block Allocations (affiliation only)' AND " + . "ugp.userprivtypeid = ugpt.id AND " + . "ugp.usergroupid = ugm.usergroupid AND " + . "ugm.userid = u.id AND " + . "ugp.usergroupid = ug.id AND " + . "ug.affiliationid = $affiliationid)) AND " + . "u.email != ''"; + $qh = doQuery($query); + $addrs = array(); + while($row = mysql_fetch_assoc($qh)) + $addrs[] = $row['email']; + return implode(',', $addrs); +} + +//////////////////////////////////////////////////////////////////////////////// +/// /// \fn deleteBlockSkipDuplicates($blockid) /// /// \param $blockid - id of a block allocation @@ -2918,7 +2971,7 @@ function processBlockAllocationInput() { if(! $err) { $imgdata = getImages(0, $return['imageid']); $concur = $imgdata[$return['imageid']]['maxconcurrent']; - if($return['seats'] > $concur) { + if(! is_null($concur) && $return['seats'] > $concur) { $errmsg = "The selected image can only have $concur concurrent " . "reservations. Please reduce the number of requested " . "seats to $concur or less."; Modified: incubator/vcl/trunk/web/.ht-inc/conf-default.php URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/conf-default.php?rev=1296393&r1=1296392&r2=1296393&view=diff ============================================================================== --- incubator/vcl/trunk/web/.ht-inc/conf-default.php (original) +++ incubator/vcl/trunk/web/.ht-inc/conf-default.php Fri Mar 2 19:13:21 2012 @@ -36,10 +36,6 @@ define("HOMEURL", "http://vcl.example.or date_default_timezone_set('America/New_York'); // set this to your timezone; a list of available values can // be found at http://php.net/manual/en/timezones.php -$blockNotifyUsers = "adminu...@example.org"; // comma delimited list of email addresses to which - // a notification will be sent when new block allocation - // requests are submitted and awaiting approval - // Any time someone creates a new image, they will be required to agree to a click through // agreement. This is the text that will be displayed that the user must agree to. // Place a '%s' where you want the 'I agree' and 'I do not agree' buttons to be placed.