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


Reply via email to