Author: jfthomps
Date: Tue Feb  2 21:20:15 2010
New Revision: 905802

URL: http://svn.apache.org/viewvc?rev=905802&view=rev
Log:
modified checkAccess:
-allow blockRequest mode if user is a member of a current block reservation

modified validateUserid:
-if shibonly is set for the specified affiliation and the user is not in the 
database, return 0

modified doQuery:
-if $user['id'] is not set, use 0 as the userid to insert into querylog

modified getUserInfo:
-added memberCurrentBlock to returned data

added getBlockRequestIDs

modified showTimeTable:
-added $imaging variable to get passed on to new reservations page

modified setAttribute:
-removed newline from returned string

added sendJSON

modifiedgetNavMenu:
-display Block Reservations if user is a member of a current block reservation

added getExtraCSS

modified getDojoHTML:
-changed code for privileges page to use latest dojo
-changed code for new reservations page to use latest dojo
-added requires block reservations page
-removed old dojo javascript code


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

Modified: incubator/vcl/trunk/web/.ht-inc/utils.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=905802&r1=905801&r2=905802&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/utils.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/utils.php Tue Feb  2 21:20:15 2010
@@ -140,7 +140,7 @@
        # the user table corresponding to the user you want
        # logged in
 
-       # start auth check
+       # start auth check
        $authed = 0;
        if(array_key_exists("VCLAUTH", $_COOKIE)) {
                $userid = readAuthCookie();
@@ -453,7 +453,7 @@
                                                }
                                                break;
                                        case 'blockRequest':
-                                               if($viewmode != 
ADMIN_DEVELOPER) {
+                                               if($viewmode != ADMIN_DEVELOPER 
&& $user['memberCurrentBlock'] == 0) {
                                                        $mode = "";
                                                        $actionFunction = 
"main";
                                                        return;
@@ -698,7 +698,7 @@
                else {
                        print "You do not have any current reservations.<br>\n";
                }
-               print "Please make a selection from the menu on the left to 
continue.<br>\n";
+               print "Please make a selection from the menu to 
continue.<br>\n";
        }
        else {
                print "Click the <b>Log in to VCL</b> button at the top right 
part of ";
@@ -813,6 +813,13 @@
        $qh = doQuery($query, 101);
        if(mysql_num_rows($qh))
                return 1;
+       
+       $query = "SELECT shibonly FROM affiliation WHERE id = $affilid";
+       $qh = doQuery($query, 101);
+       if(! $row = mysql_fetch_assoc($qh))
+               return 0;
+       if($row['shibonly'] == 1)
+               return 0;
 
        $valfunc = $affilValFunc[$affilid];
        if(array_key_exists($affilid, $affilValFuncArgs))
@@ -940,13 +947,17 @@
                if((! $nolog) && ereg('^(UPDATE|INSERT|DELETE)', $query)) {
                        $logquery = str_replace("'", "\'", $query);
                        $logquery = str_replace('"', '\"', $logquery);
+                       if(isset($user['id']))
+                               $id = $user['id'];
+                       else
+                               $id = 0;
                        $q = "INSERT INTO querylog "
                           .        "(userid, "
                           .        "timestamp, "
                           .        "mode, "
                           .        "query) "
                           . "VALUES "
-                          .        "(" . $user["id"] . ", "
+                          .        "($id, "
                           .        "NOW(), "
                           .        "'$mode', "
                           .        "'$logquery')";
@@ -2856,12 +2867,20 @@
                        else
                                $user['login'] = $user['unityid'];
 
+                       $blockids = getBlockRequestIDs($user);
+                       $user['memberCurrentBlock'] = count($blockids);
                        return $user;
                }
        }
        if(is_numeric($id))
-               return updateUserData($id, "numeric");
-       return updateUserData($id, "loginid", $affilid);
+               $user = updateUserData($id, "numeric");
+       else
+               $user = updateUserData($id, "loginid", $affilid);
+       if(! is_null($user)) {
+               $blockids = getBlockRequestIDs($user);
+               $user['memberCurrentBlock'] = count($blockids);
+       }
+       return $user;
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -3066,6 +3085,37 @@
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn getBlockRequestIDs($user)
+///
+/// \param $user - array of user data
+///
+/// \return array of block request ids that are currently active for $user
+///
+/// \brief checks to see if $user is a member of a active block request (active
+/// also includes requests starting within 15 minutes)
+///
+////////////////////////////////////////////////////////////////////////////////
+function getBlockRequestIDs($user) {
+       $groupids = array_keys($user['groups']);
+       if(empty($groupids))
+               return array();
+       $inids = implode(',', $groupids);
+       $query = "SELECT r.id "
+              . "FROM blockRequest r, "
+              .      "blockTimes t "
+              . "WHERE t.blockRequestid = r.id AND "
+              .       "t.start <= DATE_ADD(NOW(), INTERVAL 15 MINUTE) AND "
+              .       "t.end > NOW() AND "
+              .       "r.groupid IN ($inids)";
+       $ids = array();
+       $qh = doQuery($query, 101);
+       while($row = mysql_fetch_assoc($qh))
+               $ids[] = $row['id'];
+       return $ids;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn isAvailable($images, $imageid, $start, $end, $os, $requestid,
 ///                          $userid, $ignoreprivileges, $forimaging)
 ///
@@ -5313,6 +5363,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 function showTimeTable($links) {
        global $mode, $viewmode, $user;
+       $imaging = getContinuationVar('imaging', 0);
        if($links == 1) {
                $imageid = getContinuationVar('imageid');
                $length = getContinuationVar('length');
@@ -5434,7 +5485,8 @@
                               'requestid' => $requestid,
                               'length' => $length,
                               'platforms' => $platforms,
-                              'schedules' => $schedules);
+                              'schedules' => $schedules,
+                              'imaging' => $imaging);
                $cont = addContinuationsEntry($mode, $cdata, SECINDAY);
                print "<INPUT type=hidden name=continuation value=\"$cont\">\n";
                print "<INPUT type=submit value=Previous>\n";
@@ -5452,7 +5504,8 @@
                               'requestid' => $requestid,
                               'length' => $length,
                               'platforms' => $platforms,
-                              'schedules' => $schedules);
+                              'schedules' => $schedules,
+                              'imaging' => $imaging);
                $cont = addContinuationsEntry($mode, $cdata, SECINDAY);
                print "<INPUT type=hidden name=continuation value=\"$cont\">\n";
                print "<INPUT type=submit value=Next>\n";
@@ -5529,7 +5582,7 @@
                        elseif($timeslots[$id][$stamp]["available"]) {
                                if($links) {
                                        print "          <TD 
bgcolor=\"#00ff00\"><a href=\"" . BASEURL . SCRIPT;
-                                       print 
"?mode=newRequest&stamp=$stamp&imageid=$imageid&length=$length\"><img ";
+                                       print 
"?mode=newRequest&stamp=$stamp&imageid=$imageid&length=$length&imaging=$imaging\"><img
 ";
                                        print "src=images/green.jpg alt=free 
border=0></a></TD>\n";
                                }
                                else {
@@ -5570,7 +5623,8 @@
                               'requestid' => $requestid,
                               'length' => $length,
                               'platforms' => $platforms,
-                              'schedules' => $schedules);
+                              'schedules' => $schedules,
+                              'imaging' => $imaging);
                $cont = addContinuationsEntry($mode, $cdata, SECINDAY);
                print "<INPUT type=hidden name=continuation value=\"$cont\">\n";
                print "<INPUT type=submit value=Previous>\n";
@@ -5588,7 +5642,8 @@
                               'requestid' => $requestid,
                               'length' => $length,
                               'platforms' => $platforms,
-                              'schedules' => $schedules);
+                              'schedules' => $schedules,
+                              'imaging' => $imaging);
                $cont = addContinuationsEntry($mode, $cdata, SECINDAY);
                print "<INPUT type=hidden name=continuation value=\"$cont\">\n";
                print "<INPUT type=submit value=Next>\n";
@@ -7348,7 +7403,7 @@
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function setAttribute($objid, $attrib, $data) {
-       return "if(dojo.byId('$objid')) {dojo.byId('$objid').$attrib = 
'$data';};\n";
+       return "if(dojo.byId('$objid')) {dojo.byId('$objid').$attrib = 
'$data';}; ";
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -8075,6 +8130,20 @@
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn sendJSON($arr)
+///
+/// \param $arr - an array of data
+///
+/// \brief sets the content type and sends $arr in json format
+///
+////////////////////////////////////////////////////////////////////////////////
+function sendJSON($arr) {
+       header('Content-Type: text/json; charset=utf-8');
+       print '{} && {"items":' . json_encode($arr) . '}';
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn vcldquery()
 ///
 /// \brief this function is a sort of wrapper for a web API for vcld\n
@@ -8374,7 +8443,7 @@
                $rt .= "<a href=\"" . BASEURL . SCRIPT . 
"?mode=viewRequests\">";
                $rt .= "Current Reservations</a></li>\n";
        }
-       if($viewmode == ADMIN_DEVELOPER) {
+       if($viewmode == ADMIN_DEVELOPER || $user['memberCurrentBlock']) {
                $rt .= menulistLI('blockReservations');
                $rt .= "<a href=\"" . BASEURL . SCRIPT . 
"?mode=blockRequest\">";
                $rt .= "Block Reservations</a></li>\n";
@@ -8461,6 +8530,29 @@
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn getExtraCSS()
+///
+/// \return an array of extra css files to include
+///
+/// \brief this function is to be called from the theme page.php files to get
+/// a list of extra css files to be included based on the current mode
+///
+////////////////////////////////////////////////////////////////////////////////
+function getExtraCSS() {
+       global $mode;
+       switch($mode) {
+               case 'viewNodes':
+               case 'changeUserPrivs':
+               case 'submitAddResourcePriv':
+               case 'changeResourcePrivs':
+                       return array('privileges.css');
+               case 'viewdocs':
+                       return array('doxygen.css');
+       }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn getDojoHTML($refresh)
 ///
 /// \param $refresh - 1 to set page to refresh, 0 not to
@@ -8477,28 +8569,27 @@
                case 'changeUserPrivs':
                case 'submitAddResourcePriv':
                case 'changeResourcePrivs':
-                       $dojoRequires = array('dojo.io.*',
-                                             'dojo.lfx.*',
-                                             'dojo.html.*',
-                                             'dojo.widget.*',
-                                             'dojo.widget.Button',
-                                             'dojo.widget.Tree',
-                                             'dojo.widget.TreeSelector',
-                                             'dojo.widget.FloatingPane');
+                       $dojoRequires = array('dojo.data.ItemFileWriteStore',
+                                             'dijit.Tree',
+                                             'dijit.form.Button',
+                                             'dijit.form.CheckBox',
+                                             'dijit.form.TextBox',
+                                             'dijit.Tooltip',
+                                             'dijit.Dialog',
+                                             'dojo.parser');
                        break;
                case 'newRequest':
                case 'submitRequest':
                case 'createSelectImage':
                case 'submitCreateImage':
-                       $dojoRequires = array('dojo.io.*',
-                                             'dojo.widget.*',
-                                             'dojo.html.*');
+                       $dojoRequires = array('dojo.parser');
                        break;
                case 'viewRequests':
-                       $dojoRequires = array('dojo.io.*',
-                                             'dojo.html.*',
-                                             'dojo.widget.*',
-                                             'dojo.widget.FloatingPane');
+                       $dojoRequires = array('dojo.parser',
+                                             'dojox.layout.FloatingPane');
+                       break;
+               case 'viewBlockStatus':
+                       $dojoRequires = array('dojo.parser');
                        break;
                case 'viewImages':
                        /*$dojoRequires = array('dojo.data.ItemFileWriteStore',
@@ -8570,6 +8661,74 @@
        if(empty($dojoRequires))
                return '';
        switch($mode) {
+               case "viewRequests":
+                       $rt .= "<style type=\"text/css\">\n";
+                       $rt .= "   @import 
\"themes/$skin/css/dojo/$skin.css\";\n";
+                       #$rt .= "   @import 
\"dojo/dojo/resources/dojo.css\";\n";
+                       $rt .= "   @import 
\"dojo/dojox/layout/resources/FloatingPane.css\";\n";
+                       $rt .= "   @import 
\"dojo/dojox/layout/resources/ResizeHandle.css\";\n";
+                       $rt .= "</style>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"js/requests.js\"></script>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"dojo/dojo/dojo.js\"\n";
+                       $rt .= "   djConfig=\"parseOnLoad: true\">\n";
+                       $rt .= "</script>\n";
+                       $rt .= "<script type=\"text/javascript\">\n";
+                       $rt .= "   dojo.addOnLoad(function() {\n";
+                       foreach($dojoRequires as $req) {
+                               $rt .= "   dojo.require(\"$req\");\n";
+                       }
+                       $rt .= "      testJS();\n";
+                       $rt .= "      document.onmousemove = updateMouseXY;\n";
+                       $rt .= "      showScriptOnly();\n";
+                       $rt .= "   });\n";
+                       if($refresh)
+                               $rt .= "   refresh_timer = 
setTimeout(resRefresh, 12000);\n";
+                       $rt .= "</script>\n";
+                       return $rt;
+
+               case "viewBlockStatus":
+                       $rt .= "<style type=\"text/css\">\n";
+                       $rt .= "   @import 
\"themes/$skin/css/dojo/$skin.css\";\n";
+                       #$rt .= "   @import 
\"dojo/dojo/resources/dojo.css\";\n";
+                       $rt .= "</style>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"js/requests.js\"></script>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"dojo/dojo/dojo.js\"\n";
+                       $rt .= "   djConfig=\"parseOnLoad: true\">\n";
+                       $rt .= "</script>\n";
+                       $rt .= "<script type=\"text/javascript\">\n";
+                       $rt .= "   dojo.addOnLoad(function() {\n";
+                       foreach($dojoRequires as $req) {
+                               $rt .= "   dojo.require(\"$req\");\n";
+                       }
+                       $rt .= "   });\n";
+                       $rt .= "   setTimeout(updateBlockStatus, 30000);\n";
+                       $rt .= "</script>\n";
+                       return $rt;
+
+               case 'newRequest':
+               case 'submitRequest':
+               case 'createSelectImage':
+               case 'submitCreateImage':
+                       $rt .= "<style type=\"text/css\">\n";
+                       $rt .= "   @import 
\"themes/$skin/css/dojo/$skin.css\";\n";
+                       #$rt .= "   @import 
\"dojo/dojo/resources/dojo.css\";\n";
+                       $rt .= "</style>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"js/requests.js\"></script>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"dojo/dojo/dojo.js\"\n";
+                       $rt .= "   djConfig=\"parseOnLoad: true\">\n";
+                       $rt .= "</script>\n";
+                       $rt .= "<script type=\"text/javascript\">\n";
+                       $rt .= "   dojo.addOnLoad(function() {\n";
+                       foreach($dojoRequires as $req) {
+                               $rt .= "   dojo.require(\"$req\");\n";
+                       }
+                       # TODO check flow of which modes should call 
updateWaitTime
+                       if($mode == 'newRequest')
+                               $rt .= "     updateWaitTime(0);\n";
+                       $rt .= "   });\n";
+                       $rt .= "</script>\n";
+                       return $rt;
+
                case "viewImageGrouping":
                case "submitImageGroups":
                case "viewImageMapping":
@@ -8732,66 +8891,27 @@
                        }*/
                        $rt .= "</script>\n";
                        return $rt;
+               case "viewNodes":
+                       $rt .= "<style type=\"text/css\">\n";
+                       $rt .= "   @import 
\"themes/$skin/css/dojo/$skin.css\";\n";
+                       #$rt .= "   @import 
\"dojo/dijit/themes/tundra/tundra.css\";\n";
+                       #$rt .= "   @import 
\"dojo/dojo/resources/dojo.css\";\n";
+                       $rt .= "</style>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"js/privileges.js\"></script>\n";
+                       $rt .= "<script type=\"text/javascript\" 
src=\"dojo/dojo/dojo.js\"\n";
+                       $rt .= "   djConfig=\"parseOnLoad: true\">\n";
+                       $rt .= "</script>\n";
+                       $rt .= "<script type=\"text/javascript\">\n";
+                       $rt .= "   dojo.addOnLoad(function() {\n";
+                       foreach($dojoRequires as $req) {
+                               $rt .= "   dojo.require(\"$req\");\n";
+                       }
+                       $rt .= "      document.onmousemove = updateMouseXY;\n";
+                       $rt .= "   });\n";
+                       $rt .= "</script>\n";
+                       return $rt;
        }
-       $rt .= "<script type=\"text/javascript\" 
src=\"dojoAjax/dojo.js\"></script>";
-       $rt .= "<script type=\"text/javascript\">\n";
-       foreach($dojoRequires as $req) {
-               $rt .= "   dojo.require(\"$req\");\n";
-       }
-       $rt .= "   function RPCwrapper(data, callback) {\n";
-       $rt .= "      dojo.io.bind({\n";
-       $rt .= "         url: \"" . BASEURL . SCRIPT . "\",\n";
-       $rt .= "         method: \"post\",\n";
-       $rt .= "         content: data,\n";
-       $rt .= "         load: callback,\n";
-       $rt .= "         error: errorHandler\n";
-       $rt .= "      });\n";
-       $rt .= "   }\n";
-       if($actions['pages'][$mode] == 'privileges') {
-               $rt .= "   var treeListener = {\n";
-               $rt .= "      nodeExpand: function(message) {\n";
-               $rt .= "         var nodes = dojo.io.cookie.get('VCLNODES');\n";
-               $rt .= "         if(nodes) {\n";
-               $rt .= "            var nodesArr = nodes.split(':');\n";
-               $rt .= "            if(! 
nodesArr.inArray(message.source.widgetId)) {\n";
-               $rt .= "               
nodesArr.push(message.source.widgetId);\n";
-               $rt .= "               nodes = nodesArr.join(':');\n";
-               $rt .= "            }\n";
-               $rt .= "         }\n";
-               $rt .= "         else {\n";
-               $rt .= "            nodes = message.source.widgetId;\n";
-               $rt .= "         }\n";
-               $rt .= "         dojo.io.cookie.set('VCLNODES', nodes, 365, 
'/', '" . COOKIEDOMAIN . "');\n";
-               $rt .= "      },\n";
-               $rt .= "      nodeCollapse: function(message) {\n";
-               $rt .= "         checkSelectParent(message);\n";
-               $rt .= "         var nodes = dojo.io.cookie.get('VCLNODES');\n";
-               $rt .= "         var nodesArr = nodes.split(':');\n";
-               $rt .= "         var index;\n";
-               $rt .= "         if(index = 
nodesArr.search(message.source.widgetId)) {\n";
-               $rt .= "            nodesArr.splice(index, 1);\n";
-               $rt .= "            nodes = nodesArr.join(':');\n";
-               $rt .= "            dojo.io.cookie.set('VCLNODES', nodes, 365, 
'/', '" . COOKIEDOMAIN . "');\n";
-               $rt .= "         }\n";
-               $rt .= "      }\n";
-               $rt .= "   };\n";
-       }
-       $rt .= "   dojo.addOnLoad(function() {\n";
-       $rt .= "      testJS();\n";
-       $rt .= "      document.onmousemove = updateMouseXY;\n";
-       if($actions['pages'][$mode] == 'privileges')
-               $rt .= "      initPrivTree();\n";
-       if($mode == 'newRequest' || $mode == 'submitRequest') {
-               $rt .= "   if(dojo.byId('waittime'))\n";
-               $rt .= "      dojo.byId('waittime').className = 'shown';\n";
-       }
-       if($refresh && $mode == 'viewRequests') {
-               $rt .= "   setTimeout(function() {if(! 
dojo.widget.byId('resStatusPane')) {AJdojoCreate('resStatusPane');}}, 1200);\n";
-               $rt .= "   refresh_timer = setTimeout(resRefresh, 20000);\n";
-       }
-       $rt .= "   });\n";
-       $rt .= "</script>\n";
-       return $rt;
+       return '';
 }
 
 
////////////////////////////////////////////////////////////////////////////////


Reply via email to