Author: jfthomps
Date: Mon Oct 20 11:19:56 2014
New Revision: 1633105
URL: http://svn.apache.org/r1633105
Log:
VCL-695 - Change newimages membership if image owner is changed via website
image.php:
-modified AJsaveResource: when owner is changed, call changeOwnerPermissions
-added changeImagePermissions: changes image group membership; if image is in a
new[vm]images group, adds image to new owner's corrsponding group, removes from
previous owner's group
Modified:
vcl/trunk/web/.ht-inc/image.php
Modified: vcl/trunk/web/.ht-inc/image.php
URL:
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/image.php?rev=1633105&r1=1633104&r2=1633105&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/image.php (original)
+++ vcl/trunk/web/.ht-inc/image.php Mon Oct 20 11:19:56 2014
@@ -568,8 +568,11 @@ class Image extends Resource {
if($data['name'] != $olddata['prettyname'])
$updates[] = "prettyname = '{$data['name']}'";
# ownerid
- if($ownerid != $olddata['ownerid'])
+ if($ownerid != $olddata['ownerid']) {
$updates[] = "ownerid = $ownerid";
+ # update newimages groups
+ $this->changeOwnerPermissions($olddata['ownerid'],
$ownerid, $data['imageid']);
+ }
# minram
if($data['ram'] != $olddata['minram'])
$updates[] = "minram = {$data['ram']}";
@@ -1642,6 +1645,65 @@ class Image extends Resource {
/////////////////////////////////////////////////////////////////////////////
///
+ /// \fn changeImagePermissions($ownerdata, $resourceid, $virtual)
+ ///
+ /// \param $ownerdata - array of data returned from getUserInfo for the
owner
+ /// of the image
+ /// \param $resourceid - id from resource table for the image
+ /// \param $virtual - (bool) 0 if bare metal image, 1 if virtual
+ ///
+ /// \brief sets up permissions, grouping, and mapping for the owner of
the
+ /// image to be able to make a reservation for it
+ ///
+
/////////////////////////////////////////////////////////////////////////////
+ function changeOwnerPermissions($oldownerid, $newownerid, $imageid) {
+ # determine if currently in newimage group
+ $query = "SELECT id "
+ . "FROM resource "
+ . "WHERE resourcetypeid = 13 AND "
+ . "subid = $imageid";
+ $qh = doQuery($query);
+ if(! ($row = mysql_fetch_assoc($qh)))
+ return;
+ $resid = $row['id'];
+ $olduserdata = getUserInfo($oldownerid, 1, 1);
+ $oldgroups =
"'newvmimages-{$olduserdata['login']}-$oldownerid',"
+ . "'newimages-{$olduserdata['login']}-$oldownerid'";
+ $query = "SELECT rg.name, "
+ . "rg.id "
+ . "FROM resourcegroup rg, "
+ . "resourcegroupmembers rgm "
+ . "WHERE rgm.resourceid = $resid AND "
+ . "rgm.resourcegroupid = rg.id AND "
+ . "rg.name IN ($oldgroups)";
+ $qh = doQuery($query);
+ if(! ($row = mysql_fetch_assoc($qh)))
+ return;
+ $oldgroup = $row['name'];
+ $oldgroupid = $row['id'];
+ if(preg_match('/^newimages/', $oldgroup))
+ $virtual = 0;
+ else
+ $virtual = 1;
+ # call addImagePermissions for new owner
+ $newuserdata = getUserInfo($newownerid, 1, 1);
+ $this->addImagePermissions($newuserdata, $resid, $virtual);
+
+ # remove from old owner newimages group
+ $query = "DELETE FROM resourcegroupmembers "
+ . "WHERE resourcegroupid = $oldgroupid AND "
+ . "resourceid = $resid";
+ doQuery($query);
+
+ # clear user resource cache for this type
+ $key = getKey(array(array($this->restype . 'Admin'),
array('manageGroup'), 1, 0, 0));
+ unset($_SESSION['userresources'][$key]);
+ $key = getKey(array(array($this->restype . 'Admin'),
array('manageGroup'), 1, 1, 0));
+ unset($_SESSION['userresources'][$key]);
+ }
+
+
/////////////////////////////////////////////////////////////////////////////
+ ///
/// \fn jsonImageConnectMethods()
///
/// \brief gets list of connect methods used for specified image and
sends