Author: jfthomps
Date: Fri Jun 17 18:36:04 2011
New Revision: 1136972

URL: http://svn.apache.org/viewvc?rev=1136972&view=rev
Log:
VCL-463

modified deployHTML:
-added mode to AJserverProfileData continuation
-add image available through server profiles to image drop down

modified manageProfilesHTML - added mode to AJserverProfileData continuation

modified AJserverProfileData - use a mode to determine what user privileges to 
use when checking user access to profile

modified AJserverProfileStoreData - get profiles for both serverCheckOut and 
serverProfileAdmin privilege and include access type in returned array

modified AJdeployServer:
-include images from server profiles when checking user accesss to image
-include ip and mac addresses when calling isAvailable

modified AJsaveServerProfile - added access type = admin to returned data

modified AJdelServerProfile - added query to delete corresponding entry in 
resource table

added getServerProfileImages

modified AJaddGroupToProfile, AJremGroupFromProfile, AJaddProfileToGroup, 
AJremProfileFromGroup - clear $_SESSION['usersessiondata']

Modified:
    incubator/vcl/trunk/web/.ht-inc/serverprofiles.php

Modified: incubator/vcl/trunk/web/.ht-inc/serverprofiles.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/serverprofiles.php?rev=1136972&r1=1136971&r2=1136972&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/serverprofiles.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/serverprofiles.php Fri Jun 17 18:36:04 2011
@@ -77,7 +77,7 @@ function deployHTML() {
        $h .= "<legend>Description:</legend>\n";
        $h .= "<div id=\"deploydesc\"></div>\n";
        $h .= "</fieldset>\n";
-       $cont = addContinuationsEntry('AJserverProfileData');
+       $cont = addContinuationsEntry('AJserverProfileData', array('mode' => 
'checkout'));
        $h .= "<button dojoType=\"dijit.form.Button\" 
id=\"deployFetchProfilesBtn\">\n";
        $h .= " Apply Profile\n";
        $h .= " <script type=\"dojo/method\" event=onClick>\n";
@@ -94,6 +94,10 @@ function deployHTML() {
        $h .= "    <td>\n";
        $resources = getUserResources(array("imageAdmin", "imageCheckOut"));
        $images = removeNoCheckout($resources["image"]);
+       $extraimages = getServerProfileImages($user['id']);
+       foreach($extraimages as $id => $image)
+               $images[$id] = $image;
+       uasort($images, 'sortKeepIndex');
        if(USEFILTERINGSELECT && count($images) < FILTERINGSELECTTHRESHOLD) {
                $h .= "      <select dojoType=\"dijit.form.FilteringSelect\" 
id=\"deployimage\" ";
                $h .= "style=\"width: 400px\" queryExpr=\"*\${0}*\" 
required=\"true\" ";
@@ -224,7 +228,7 @@ function manageProfilesHTML() {
        $h .= "Profile: ";
        $h .= "<select dojoType=\"dijit.form.Select\" id=\"profileid\" ";
        $h .= "onChange=\"selectProfileChanged();\" 
sortByLabel=\"true\"></select>\n";
-       $cont = addContinuationsEntry('AJserverProfileData');
+       $cont = addContinuationsEntry('AJserverProfileData', array('mode' => 
'admin'));
        $h .= "<button dojoType=\"dijit.form.Button\" 
id=\"fetchProfilesBtn\">\n";
        $h .= " Configure Profile\n";
        $h .= " <script type=\"dojo/method\" event=onClick>\n";
@@ -533,7 +537,12 @@ function manageGroupingHTML() {
 
////////////////////////////////////////////////////////////////////////////////
 function AJserverProfileData() {
        $profileid = processInputVar('id', ARG_NUMERIC);
-       $resources = getUserResources(array("serverProfileAdmin"), 
array("administer"));
+       $mode = getContinuationVar('mode');
+       if($mode == 'admin')
+               $resources = getUserResources(array("serverProfileAdmin"), 
array("administer"));
+       else
+               $resources = getUserResources(array("serverCheckOut", 
"serverProfileAdmin"),
+                                             array("available","administer"));
        if(! array_key_exists($profileid, $resources['serverprofile'])) {
                sendJSON(array('error' => 1, 'msg' => 'noaccess'));
                return;
@@ -565,15 +574,24 @@ function AJserverProfileData() {
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJserverProfileStoreData() {
-       $resources = getUserResources(array("serverProfileAdmin"), 
array("administer"));
        $profiles = getServerProfiles();
        $data = array();
+       $resources = getUserResources(array("serverCheckOut"), 
array("available"));
        foreach($resources['serverprofile'] as $id => $name)
-               $data[] = array('id' => $id,
-                               'name' => $name,
-                               'desc' => preg_replace("/\n/", "<br>", 
$profiles[$id]['description']));
+               $data[$id] = array('id' => $id,
+                                  'name' => $name,
+                                  'access' => 'checkout',
+                                  'desc' => preg_replace("/\n/", "<br>", 
$profiles[$id]['description']));
+       $resources = getUserResources(array("serverProfileAdmin"), 
array("administer"));
+       foreach($resources['serverprofile'] as $id => $name)
+               $data[$id] = array('id' => $id,
+                                  'name' => $name,
+                                  'access' => 'admin',
+                                  'desc' => preg_replace("/\n/", "<br>", 
$profiles[$id]['description']));
+       $data = array_values($data);
        $data[] = array('id' => 70000,
                        'name' => '(New Profile)',
+                       'access' => 'admin',
                        'desc' => '');
        sendJSON($data);
 }
@@ -591,12 +609,13 @@ function AJdeployServer() {
        $imageid = processInputVar('imageid', ARG_NUMERIC);
        $resources = getUserResources(array("imageAdmin", "imageCheckOut"));
        $images = removeNoCheckout($resources["image"]);
-       if(! array_key_exists($imageid, $images)) {
+       $extraimages = getServerProfileImages($user['id']);
+       if(! array_key_exists($imageid, $images) &&
+          ! array_key_exists($imageid, $extraimages)) {
                $cont = addContinuationsEntry('AJdeployServer', array(), 
SECINDAY, 1, 0);
                $data = array('error' => 1,
                              'cont' => $cont,
                              'msg' => 'You do not have access to use this 
environment.');
-               // TODO deal with problem of having access to a profile with an 
image user doesn't have access to
                sendJSON($data);
                return;
        }
@@ -706,7 +725,9 @@ function AJdeployServer() {
 
        $revisionid = getProductionRevisionid($imageid);
        $images = getImages(0, $imageid);
-       $availablerc = isAvailable($images, $imageid, $revisionid, $startts, 
$endts);
+       $availablerc = isAvailable($images, $imageid, $revisionid, $startts, 
$endts,
+                                  0, 0, 0, 0, $ipaddr, $macaddr);
+       # TODO give better error message if due to ip or mac conflict
        $max = getMaxOverlap($user['id']);
        if($availablerc != 0 && checkOverlap($startts, $endts, $max)) {
                $cont = addContinuationsEntry('AJdeployServer', array(), 
SECINDAY, 1, 0);
@@ -854,7 +875,8 @@ function AJsaveServerProfile() {
                $ret['name'] = $data['name'];
                $ret['id'] = $data['profileid'];
                $ret['newprofile'] = 0;
-       }     
+       }
+       $ret['access'] = 'admin';
        $ret['desc'] = preg_replace("/\n/", "<br>", $data['desc']);
        $_SESSION['usersessiondata'] = array();
        $_SESSION['userresources'] = array();
@@ -886,6 +908,8 @@ function AJdelServerProfile() {
                sendJSON($data);
                return;
        }
+       $query = "DELETE FROM resource WHERE subid = $profileid AND 
resourcetypeid = 17";
+       doQuery($query, 101);
        $_SESSION['usersessiondata'] = array();
        $_SESSION['userresources'] = array();
        sendJSON(array('success' => 1, 'id' => $profileid));
@@ -1083,6 +1107,44 @@ function getServerProfiles($id=0) {
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn getServerProfileImages($userid)
+///
+/// \param $userid - id from user table
+///
+/// \return array where the key is the id of the image and the value is the
+/// prettyname of the image
+///
+/// \brief builds an array of images that user has access to via server 
profiles
+///
+////////////////////////////////////////////////////////////////////////////////
+function getServerProfileImages($userid) {
+       $key = getKey(array('getServerProfileImages', $userid));
+       if(array_key_exists($key, $_SESSION['usersessiondata']))
+               return $_SESSION['usersessiondata'][$key];
+       $resources = getUserResources(array('serverCheckOut', 
'serverProfileAdmin'),
+                                     array('available', 'administer'));
+       $ids = array_keys($resources['serverprofile']);
+       $inids = implode(',', $ids);
+       if(empty($inids)) {
+               $_SESSION['usersessiondata'][$key] = array();
+               return array();
+       }
+       $query = "SELECT i.id, "
+              .        "i.prettyname AS image "
+              . "FROM serverprofile s, "
+              .      "image i "
+              . "WHERE s.imageid = i.id AND "
+              .       "s.id IN ($inids)";
+       $qh = doQuery($query, 101);
+       $profiles = array();
+       while($row = mysql_fetch_assoc($qh))
+               $profiles[$row['id']] = $row['image'];
+       $_SESSION['usersessiondata'][$key] = $profiles;
+       return $profiles;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn jsonProfileGroupingGroups()
 ///
 /// \brief sends data about which profile groups are assigned to a profile
@@ -1196,6 +1258,7 @@ function AJaddGroupToProfile() {
        $query .= implode(',', $adds);
        doQuery($query, 101);
        $_SESSION['userresources'] = array();
+       $_SESSION['usersessiondata'] = array();
        $arr = array('groups' => $groupids, 'addrem' => 1);
        sendJSON($arr);
 }
@@ -1240,6 +1303,7 @@ function AJremGroupFromProfile() {
        }
        $arr = array('groups' => $groupids, 'addrem' => 0, 'removedaccess' => 
0);
        $_SESSION['userresources'] = array();
+       $_SESSION['usersessiondata'] = array();
        $resources = getUserResources(array("serverProfileAdmin"), 
array("manageGroup"));
        if(! array_key_exists($profileid, $resources['serverprofile'])) {
                $arr['removedaccess'] = 1;
@@ -1289,6 +1353,7 @@ function AJaddProfileToGroup() {
        $query .= implode(',', $adds);
        doQuery($query, 287);
        $_SESSION['userresources'] = array();
+       $_SESSION['usersessiondata'] = array();
        $arr = array('profiles' => $profileids, 'addrem' => 1);
        sendJSON($arr);
 }
@@ -1335,6 +1400,7 @@ function AJremProfileFromGroup() {
                     'addrem' => 0,
                     'removedaccess' => 0);
        $_SESSION['userresources'] = array();
+       $_SESSION['usersessiondata'] = array();
        $resources = getUserResources(array("serverProfileAdmin"), 
array("manageGroup"));
        foreach($profileids as $id) {
                if(! array_key_exists($id, $resources['serverprofile'])) {


Reply via email to