menu.php3 20.5 KB
Newer Older
1
<?php
Leigh B. Stoller's avatar
Leigh B. Stoller committed
2 3
#
# EMULAB-COPYRIGHT
4
# Copyright (c) 2000-2003 University of Utah and the Flux Group.
Leigh B. Stoller's avatar
Leigh B. Stoller committed
5 6
# All rights reserved.
#
7

8
$login_status     = CHECKLOGIN_NOTLOGGEDIN;
9
$login_uid        = 0;
10
$drewheader       = 0;
11

12 13 14 15 16 17
#
# This has to be set so we can spit out http or https paths properly!
# Thats because browsers do not like a mix of secure and nonsecure.
# 
$BASEPATH	  = "";

18 19 20 21 22
#
# WRITESIDEBARBUTTON(text, link): Write a button on the sidebar menu.
# We do not currently try to match the current selection so that its
# link looks different. Not sure its really necessary.
#
Chad Barb's avatar
 
Chad Barb committed
23
function WRITESIDEBARBUTTON($text, $base, $link ) {
24
    $link = "$base/$link";
Chad Barb's avatar
 
Chad Barb committed
25
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a></td></tr>\n";
Chad Barb's avatar
 
Chad Barb committed
26
}
27

Chad Barb's avatar
 
Chad Barb committed
28 29 30
# same as above with "new" gif next to it.
function WRITESIDEBARBUTTON_NEW($text, $base, $link ) {
    $link = "$base/$link";
Chad Barb's avatar
 
Chad Barb committed
31 32
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a>&nbsp;";
    echo "<img src=\"/new.gif\" /></td></tr>\n";
Chad Barb's avatar
 
Chad Barb committed
33 34
}

Chad Barb's avatar
 
Chad Barb committed
35 36 37 38 39 40 41
# same as above with "cool" gif next to it.
function WRITESIDEBARBUTTON_COOL($text, $base, $link ) {
    $link = "$base/$link";
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a>&nbsp;";
    echo "<img src=\"/cool.gif\" /></td></tr>\n";
}

Leigh B. Stoller's avatar
Leigh B. Stoller committed
42 43
function WRITESIDEBARBUTTON_ABS($text, $base, $link ) {
    $link = "$link";
Chad Barb's avatar
 
Chad Barb committed
44
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a></td></tr>\n";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
45 46
}

Chad Barb's avatar
 
Chad Barb committed
47 48 49 50 51 52
function WRITESIDEBARBUTTON_ABSCOOL($text, $base, $link ) {
    $link = "$link";
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a>&nbsp;";
    echo "<img src=\"/cool.gif\" /></td></tr>\n";
}

Chad Barb's avatar
 
Chad Barb committed
53 54 55 56 57
# same as above, but uses a slightly different style sheet so there
# is more padding below the last button.
# The devil is, indeed, in the details.
function WRITESIDEBARLASTBUTTON($text, $base, $link) {
    $link = "$base/$link";
Chad Barb's avatar
 
Chad Barb committed
58
    echo "<tr><td class=\"menuoptb\"><a href=\"$link\">$text</a></td></tr>\n";
Chad Barb's avatar
 
Chad Barb committed
59 60
}

Chad Barb's avatar
Chad Barb committed
61 62 63 64 65 66
function WRITESIDEBARLASTBUTTON_COOL($text, $base, $link) {
    $link = "$base/$link";
    echo "<tr><td class=\"menuoptb\"><a href=\"$link\">$text</a>&nbsp;";
    echo "<img src=\"/cool.gif\" /></td></tr>\n";
}

Chad Barb's avatar
 
Chad Barb committed
67 68
# writes a message to the sidebar, without clickability.
function WRITESIDEBARNOTICE($text) {
Chad Barb's avatar
 
Chad Barb committed
69
    echo "<tr><td class=\"menuopt\"><b>$text</b></td></tr>\n";
70 71 72 73 74 75 76
}

#
# WRITESIDEBAR(): Write the menu. The actual menu options the user
# sees depends on the login status and the DB status.
#
function WRITESIDEBAR() {
77 78
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
79
    global $THISHOMEBASE;
80 81 82

    #
    # The document base cannot be a mix of secure and nonsecure.
83
    #
Chad Barb's avatar
 
Chad Barb committed
84 85 86
    
    # create the main menu table, which also happens to reside in a form
    # (for search.)
Chad Barb's avatar
 
Chad Barb committed
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

    #
    # get post time of most recent news;
    # get both displayable version and age in days.
    #
    $query_result = 
	DBQueryFatal("SELECT DATE_FORMAT(date, '%M&nbsp;%e') AS prettydate, ".
		     " (TO_DAYS(NOW()) - TO_DAYS(date)) AS age ".
		     "FROM webnews ".
		     "ORDER BY date DESC ".
		     "LIMIT 1");
    $newsDate = "";
    $newNews  = 0;

    #
    # This is so an admin can use the editing features of news.
    #
    if ($login_uid) { # && ISADMIN($login_uid)) { 
	$newsBase = $TBBASE; 
    } else {
	$newsBase = $TBDOCBASE;
    }

    if ($row = mysql_fetch_array($query_result)) {
	$newsDate = "(".$row[prettydate].")";
	if ($row[age] < 7) {
	    $newNews = 1;
	}
    }

Chad Barb's avatar
 
Chad Barb committed
117 118 119 120 121
?>
<FORM method=get ACTION="/cgi-bin/webglimpse/usr/testbed/webglimpse">
  <table class="menu" width=220 cellpadding="0" cellspacing="0">
    <tr><td class="menuheader"><b>Information</b></td></tr>
<?php
Chad Barb's avatar
 
Chad Barb committed
122 123 124 125 126 127
    if (0 == strcasecmp($THISHOMEBASE, "emulab.net")) {
	$rootEmulab = 1;
    } else {
	$rootEmulab = 0;
    }

128
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
129

Chad Barb's avatar
 
Chad Barb committed
130 131

    if ($rootEmulab) {
132
	WRITESIDEBARBUTTON("Other Emulabs", $TBDOCBASE,
Chad Barb's avatar
 
Chad Barb committed
133 134 135 136 137 138 139 140 141 142 143
			       "docwrapper.php3?docname=otheremulabs.html");
	WRITESIDEBARBUTTON_COOL("Join Netbed (CD)",
				$TBDOCBASE, "cdrom.php");
    } else {
	WRITESIDEBARBUTTON_ABS("Utah Emulab", $TBDOCBASE,
			       "http://www.emulab.net/");
	# Link ALWAYS TO UTAH
	WRITESIDEBARBUTTON_ABSCOOL("Join Netbed (CD)",
			       $TBDOCBASE, "http://www.emulab.net/cdrom.php");

    }
Chad Barb's avatar
 
Chad Barb committed
144

Chad Barb's avatar
 
Chad Barb committed
145 146 147 148 149 150
    if ($newNews) {
	WRITESIDEBARBUTTON_NEW("News $newsDate", $newsBase, "news.php3");
    } else {
	WRITESIDEBARBUTTON("News $newsDate", $newsBase, "news.php3");
    }

151
    WRITESIDEBARBUTTON("Documentation", $TBDOCBASE, "doc.php3");
Chad Barb's avatar
 
Chad Barb committed
152 153

    if ($rootEmulab) {
154
	WRITESIDEBARBUTTON("Papers (May 1)", $TBDOCBASE, "pubs.php3");
Chad Barb's avatar
 
Chad Barb committed
155 156 157 158 159 160 161 162 163 164 165
	WRITESIDEBARBUTTON("Software", $TBDOCBASE, "software.php3");
	WRITESIDEBARBUTTON("People", $TBDOCBASE, "people.php3");
	WRITESIDEBARBUTTON("Photo Gallery", $TBDOCBASE, "gallery/gallery.php3");
	WRITESIDEBARBUTTON("Projects on Emulab", $TBDOCBASE,
			   "projectlist.php3");
	WRITESIDEBARLASTBUTTON("Sponsors", $TBDOCBASE,
			       "docwrapper.php3?docname=sponsors.html");
    } else {
	WRITESIDEBARLASTBUTTON("Projects on Emulab", $TBDOCBASE,
			       "projectlist.php3");
    }
166

Chad Barb's avatar
 
Chad Barb committed
167 168 169 170 171 172
    # create the search bit, then the second table for the Web Interface.
?>
    <tr><td class="menuoptst"><b>Search Documentation:</b></td></tr>
    <tr><td class="menuopts"><input name=query />
      <input type=submit style="font-size:10px;" value="Go" /></td></tr>
      <tr><td class="menuoptsb" style="font-size:12px;" >[
Chad Barb's avatar
 
Chad Barb committed
173 174
      <a href="<?php echo "$TBDOCBASE/search.php3"; ?>">Advanced 
      Search</a> ]</td></tr>
Chad Barb's avatar
 
Chad Barb committed
175 176 177 178 179
    </td></tr>  
  </table>
</form>
<table class="menu" width=220 cellpadding="0" cellspacing="0">
    <tr><td class="menuheader"><b>Interaction</b></td></tr>
Chad Barb's avatar
 
Chad Barb committed
180
<?php # BACK TO PHP
181

182
    if ($login_status & CHECKLOGIN_LOGGEDIN) {
Chad Barb's avatar
 
Chad Barb committed
183 184
         $freepcs = TBFreePCs();
	 WRITESIDEBARNOTICE( "($freepcs Free PCs.)" );
185
    }
186

187 188 189 190 191 192 193 194
    #
    # Basically, we want to let admin people continue to use
    # the web interface even when nologins set. But, we want to make
    # it clear its disabled.
    # 
    if (NOLOGINS()) {
        WRITESIDEBARBUTTON("<font color=red> ".
			   "Web Interface Temporarily Unavailable</font>",
195 196
			   $TBDOCBASE, "nologins.php3");

Chad Barb's avatar
 
Chad Barb committed
197 198 199
        if (!$login_uid || !ISADMIN($login_uid)) {	
	    WRITESIDEBARNOTICE("Please Try Again Later");
        }
200
    }
Chad Barb's avatar
 
Chad Barb committed
201

202 203 204
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
205
		WRITESIDEBARBUTTON("Change Your Password",
206
				   $TBBASE, "moduserinfo.php3");
207
	    }
208 209 210 211 212 213 214 215
	    elseif ($login_status & CHECKLOGIN_WEBONLY) {
		WRITESIDEBARBUTTON("My Emulab",
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
	    
		WRITESIDEBARBUTTON("Update User Information",
				   $TBBASE, "moduserinfo.php3");
	    }
216
	    else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
217
		WRITESIDEBARBUTTON("My Emulab",
218 219
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
220
	    
221
		if (ISADMIN($login_uid)) {
222 223
		    WRITESIDEBARBUTTON("New Project Approval",
				       $TBBASE, "approveproject_list.php3");
224 225 226

		    WRITESIDEBARBUTTON("Widearea User Approval",
				       $TBBASE, "approvewauser_form.php3");
227 228
		}
		if ($login_status & CHECKLOGIN_TRUSTED) {
229 230 231
                  # Only project/group leaders can do these options
                  # Show a "new" icon if there are people waiting for approval
		  $query_result =
232 233 234
		    DBQueryFatal("select g.* from group_membership as authed ".
				 "left join group_membership as g on ".
				 " g.pid=authed.pid and g.gid=authed.gid ".
235
				 "left join users as u on u.uid=g.uid ".
236
				 "where u.status!='".
237
				 TBDB_USERSTATUS_UNVERIFIED . "' and ".
238 239 240 241 242 243
				 " u.status!='" . TBDB_USERSTATUS_NEWUSER . 
				 "' and g.uid!='$login_uid' and ".
				 "  g.trust='". TBDB_TRUSTSTRING_NONE . "' ".
				 "  and authed.uid='$login_uid' and ".
				 "  (authed.trust='group_root' or ".
				 "   authed.trust='project_root') ".
244 245 246 247 248
				 "ORDER BY g.uid,g.pid,g.gid");
		  if (mysql_num_rows($query_result) > 0) {
		    WRITESIDEBARBUTTON_NEW("New User Approval",
					   $TBBASE, "approveuser_form.php3");
		  } else {
249 250

		      WRITESIDEBARBUTTON("New User Approval",
251
				       $TBBASE, "approveuser_form.php3");
252
		  }
253
		}
254

255 256
                #
                # Since a user can be a member of more than one project,
257 258
                # display this option, and let the form decide if the 
                # user is allowed to do this.
259
                #
Leigh B. Stoller's avatar
Leigh B. Stoller committed
260
		WRITESIDEBARBUTTON("Project List",
261
				   $TBBASE, "showproject_list.php3");
262
	    
263
		if (ISADMIN($login_uid)) {
264 265 266 267
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		}
	    
Leigh B. Stoller's avatar
Leigh B. Stoller committed
268 269
		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");
270 271
		WRITESIDEBARBUTTON("Begin an Experiment",
				   $TBBASE, "beginexp.php3");
272 273
		WRITESIDEBARBUTTON("ImageIDs and OSIDs",
				   $TBBASE, "showimageid_list.php3");
274
		WRITESIDEBARBUTTON("Update User Information",
275 276
				   $TBBASE, "moduserinfo.php3");
		WRITESIDEBARBUTTON("Node Reservation Status",
277
				   $TBBASE, "nodecontrol_list.php3");
278 279
		WRITESIDEBARBUTTON("Node Up/Down Status",
				   $TBDOCBASE, "updown.php3");
Chad Barb's avatar
 
Chad Barb committed
280 281 282 283

		if (ISADMIN($login_uid)) {
		    WRITESIDEBARBUTTON("Edit Site Variables",
				       $TBBASE, "editsitevars.php3");
284 285
		    WRITESIDEBARBUTTON("View Testbed Stats",
				       $TBBASE, "showstats.php3");
Chad Barb's avatar
 
Chad Barb committed
286
		}
287 288 289 290 291
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
		}
292
	    }
293
	}
294
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
295 296
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
297
	    WRITESIDEBARBUTTON("Update User Information",
298
			       $TBBASE, "moduserinfo.php3");
299
	}
300
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
301
	    WRITESIDEBARBUTTON("Update User Information",
302
			       $TBBASE, "moduserinfo.php3");
303
	}
304 305 306
	#
	# Standard options for logged in users!
	# 
307
	WRITESIDEBARBUTTON("Start Project", $TBBASE, "newproject.php3");
Chad Barb's avatar
 
Chad Barb committed
308
	WRITESIDEBARLASTBUTTON("Join Project",  $TBBASE, "joinproject.php3");
309
    }
310

Chad Barb's avatar
Chad Barb committed
311
    WRITESIDEBARLASTBUTTON_COOL("Take our Survey",
312 313
	    $TBDOCBASE, "survey.php3");

314 315 316 317 318
    #
    # Cons up a nice message.
    # 
    switch ($login_status & CHECKLOGIN_STATUSMASK) {
    case CHECKLOGIN_LOGGEDIN:
Chad Barb's avatar
 
Chad Barb committed
319
	$login_message = "&quot;$login_uid&quot; Logged In.";
320 321
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
322
	    $login_message = "$login_message<br>(Password Expired!)";
323 324
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
	    $login_message = "$login_message<br>(Unapproved!)";
325
	break;
326
    case CHECKLOGIN_TIMEDOUT:
327 328
	$login_message = "Login Timed Out";
	break;
329 330
    default:
	$login_message = 0;
331
	break;
332 333
    }

Chad Barb's avatar
 
Chad Barb committed
334
    if ($login_message) {
Chad Barb's avatar
 
Chad Barb committed
335 336 337 338
      echo "<tr>";
      echo "<td class=\"menufooter\"><center><b>";
      echo "$login_message</b></center></td>";
      echo "</tr>";
Chad Barb's avatar
 
Chad Barb committed
339 340
    }

341 342
    #
    # Now the login/logout box. Remember, already inside a table.
343 344
    # We want the links to the login/logout pages to always be https,
    # but the images path depends on whether the page was loaded as
345
    # http or https, since we do not want to mix them, since they
346
    # cause warnings.
347
    # 
348
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
Chad Barb's avatar
 
Chad Barb committed
349 350 351 352 353 354
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
      echo "<a href=\"$TBBASE/logout.php3?uid=$login_uid\">";
      echo "<img alt=\"logoff\" border=0 ";
      echo "src=\"$BASEPATH/logoff.gif\"></a>\n";
      echo "</td></tr>\n";
355
    }
356
    elseif (!NOLOGINS()) {
Chad Barb's avatar
 
Chad Barb committed
357 358
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
Chad Barb's avatar
Chad Barb committed
359 360 361 362 363 364 365

      echo "<a href=\"$TBBASE/reqaccount.php3\">";
      echo "<img alt=\"Request Account\" border=0 ";
      echo "src=\"$BASEPATH/requestaccount.gif\"></a>";

      echo "<br /><b>or</b><br />";

Chad Barb's avatar
 
Chad Barb committed
366 367 368
      echo "<a href=\"$TBBASE/login.php3\">";
      echo "<img alt=\"logon\" border=0 ";
      echo "src=\"$BASEPATH/logon.gif\"></a>\n";
Chad Barb's avatar
Chad Barb committed
369

Chad Barb's avatar
 
Chad Barb committed
370
      echo "</td></tr>\n";
371
    }
372

373
    #
Chad Barb's avatar
 
Chad Barb committed
374
    # Login message. Set via 'web/message' site variable
375
    #
Chad Barb's avatar
 
Chad Barb committed
376 377 378
    $message = TBGetSiteVar("web/message");
    if (0 != strcmp($message,"")) {
	WRITESIDEBARNOTICE($message);    	
379
    }
Chad Barb's avatar
 
Chad Barb committed
380

Chad Barb's avatar
 
Chad Barb committed
381
    echo "</table>\n";
382 383
}

Chad Barb's avatar
 
Chad Barb committed
384 385 386 387
#
# spits out beginning part of page
#
function PAGEBEGINNING( $title ) {
Chad Barb's avatar
Chad Barb committed
388 389
    global $BASEPATH, $TBMAINSITE, $THISHOMEBASE;
    global $TBDIR, $WWW;
Chad Barb's avatar
 
Chad Barb committed
390 391
    global $MAINPAGE;

Chad Barb's avatar
Chad Barb committed
392
    $MAINPAGE = !strcmp($TBDIR, "/usr/testbed/"); 
Chad Barb's avatar
 
Chad Barb committed
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
  
    echo "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 
          'http://www.w3.org/TR/html4/loose.dtd'>
	<html>
	  <head>
	    <title>$THISHOMEBASE - $title</title>
    	    <!-- dumbed-down style sheet for any browser that groks (eg NS47). -->
	    <link REL='stylesheet' HREF='$BASEPATH/common-style.css' TYPE='text/css' />
    	    <!-- don't import full style sheet into NS47, since it does a bad job
            of handling it. NS47 doesn't understand '@import'. -->
    	    <style type='text/css' media='all'>
            <!-- @import '$BASEPATH/style.css'; -->";

    if (!$MAINPAGE) {
	echo "<!-- @import '$BASEPATH/style-nonmain.css'; -->";
    } 

    echo "</style>";

    if ($TBMAINSITE) {
	echo "<meta NAME='keywords' CONTENT='network, emulation, internet, emulator'>";
	echo "<meta NAME='ROBOTS' CONTENT='NOARCHIVE'>";
    }

    echo "</head>
            <body bgcolor='#FFFFFF' 
             topmargin='0' leftmargin='0' marginheight='0' marginwidth='0'>
            <table cellpadding='0' cellspacing='0' width='100%'>
            <tr>
              <td valign='top' class='bannercell' 
              background='$BASEPATH/headerbgbb.jpg'
              bgcolor=#3D627F ><img width=369 height=100 
              src='$BASEPATH/overlay.".strtolower($THISHOMEBASE).".gif' 
              alt='$THISHOMEBASE - the network testbed' />";
    if (!$MAINPAGE) {
	echo "<font size='+1' color='#CCFFCC'>&nbsp;<b>$WWW</b></font>";
    }
    echo "</td></tr></table>\n";

    echo "<table cellpadding='8' cellspacing='0' height='100%' width='100%'>
            <tr height='100%'>
              <td valign='top' class='leftcell' bgcolor='#ccddee'>
              <!-- sidebar begins -->";
Chad Barb's avatar
 
Chad Barb committed
436 437 438 439 440 441 442
}

#
# finishes sidebar td
#
function FINISHSIDEBAR()
{
Chad Barb's avatar
 
Chad Barb committed
443
    echo "<!-- sidebar ends -->
Chad Barb's avatar
 
Chad Barb committed
444
        </td>
Chad Barb's avatar
 
Chad Barb committed
445
        <td valign='top' width='100%' class='rightcell'>
446
          <!-- content body table -->
Chad Barb's avatar
 
Chad Barb committed
447
          <table class='content' width='100%' cellpadding='0' cellspacing='0'>
Chad Barb's avatar
 
Chad Barb committed
448
            <tr>
Chad Barb's avatar
 
Chad Barb committed
449
              <td class='contentheader'>";
Chad Barb's avatar
 
Chad Barb committed
450 451
}

452 453 454 455
#
# Spit out a vanilla page header.
#
function PAGEHEADER($title) {
456 457
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
458
    global $TBMAINSITE;
459 460

    $drewheader = 1;
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476

    #
    # Determine the proper basepath, which depends on whether the page
    # was loaded as http or https. This lets us be consistent in the URLs
    # we spit back, so that users do not get those pesky warnings. These
    # warnings are generated when a page *loads* (say, images, style files),
    # a mix of http and https. Links can be mixed, and in fact when there
    # is no login active, we want to spit back http for the documentation,
    # but https for the start/join pages.
    #
    if (isset($SSL_PROTOCOL)) {
	$BASEPATH = $TBBASE;
    }
    else {
	$BASEPATH = $TBDOCBASE;
    }
477

478
    #
479
    # Figure out who is logged in, if anyone.
480
    # 
481 482 483 484
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
485 486 487
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
488 489 490
	}
    }

491
    #
492 493
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
494 495
    # and logout anyone else that is currently logged in!
    #
496 497 498 499
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
500
    }
501
    
502 503
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
504
    if (1) {
505 506 507 508 509 510 511
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
    }
    else {
	header("Expires: " . gmdate("D, d M Y H:i:s", time() + 300) . " GMT"); 
    }
Chad Barb's avatar
 
Chad Barb committed
512 513 514 515

    PAGEBEGINNING( $title );
    WRITESIDEBAR();
    FINISHSIDEBAR();
516
    echo "<h2 class=\"nomargin\">\n";
Chad Barb's avatar
 
Chad Barb committed
517

518
    if ($login_uid && ISADMINISTRATOR()) {
Chad Barb's avatar
 
Chad Barb committed
519 520 521 522 523 524 525 526 527 528
	if (ISADMIN($login_uid)) {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=1>
	             <img src='/redball.gif'
                          border=0 alt='Admin On'></a>\n";
	}
	else {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=0>
	             <img src='/greenball.gif'
                          border=0 alt='Admin Off'></a>\n";
	}
529
    }
530 531
    $now = date("D M d g:ia T");
    echo "$title</h2></td>\n";
532
    echo "<td class=contentheader align=right>\n";
Chad Barb's avatar
 
Chad Barb committed
533
    if ($login_uid) {
534 535 536 537
	echo "<font size=-1><b>$login_uid</b> logged in<br>$now</font>\n";
    }
    else {
	echo "$now";
Chad Barb's avatar
 
Chad Barb committed
538 539 540 541
    }
    echo "</td>";
    echo "</tr>\n";
    echo "<tr><td colspan=3 class=\"contentbody\" width=*>";
Chad Barb's avatar
 
Chad Barb committed
542
    echo "<!-- begin content -->\n";
543 544 545 546 547 548
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
Chad Barb's avatar
 
Chad Barb committed
549 550
  echo "</td></tr></table>";
  echo "</td></tr></table>";
551 552 553 554 555 556
}

#
# Spit out a vanilla page footer.
#
function PAGEFOOTER() {
557
    global $TBDOCBASE, $TBMAILADDR, $THISHOMEBASE;
Leigh B. Stoller's avatar
Leigh B. Stoller committed
558
    global $TBMAINSITE, $SSL_PROTOCOL;
559

560 561
    $today = getdate();
    $year  = $today["year"];
Chad Barb's avatar
 
Chad Barb committed
562

563
    echo "<!-- end content -->
Chad Barb's avatar
 
Chad Barb committed
564
              </td>
565 566 567 568 569 570 571 572 573 574 575
            </tr>
            <tr>
              <td colspan=2 class=contentbody>
	        <center>
                <font size=-1>
		[&nbsp;<a href=http://www.cs.utah.edu/flux/>
                    The&nbsp;Flux&nbsp;Research&nbsp;Group</a>&nbsp;]
		[&nbsp;<a href=http://www.cs.utah.edu/>
                    School&nbsp;of&nbsp;Computing</a>&nbsp;]
		[&nbsp;<a href=http://www.utah.edu/>
                    The&nbsp;University&nbsp;of&nbsp;Utah</a>&nbsp;]
576 577
		</font>
		<br>
Chad Barb's avatar
 
Chad Barb committed
578
                <!-- begin copyright -->
579
                <font size=-2>
580 581 582 583
                <a href='$TBDOCBASE/docwrapper.php3?docname=copyright.html'>
                    Copyright &copy; 2000-$year The University of Utah</a>
                </font>
                <br>
584 585
		</center>
                <p align=right>
Chad Barb's avatar
 
Chad Barb committed
586 587
		  <font size=-2>
                    Problems?
588
	            Contact $TBMAILADDR; 
Chad Barb's avatar
 
Chad Barb committed
589 590
                  </font>
                </p>
591
                <!-- end copyright -->\n";
Chad Barb's avatar
 
Chad Barb committed
592 593

    ENDPAGE();
594 595 596

    if ($TBMAINSITE) {
	echo "<p>
Chad Barb's avatar
 
Chad Barb committed
597
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";#
Leigh B. Stoller's avatar
Leigh B. Stoller committed
598 599 600 601 602 603 604 605

	if (! isset($SSL_PROTOCOL)) {
	    echo "<a href=http://www.addme.com>
	             <img width=8 height=2
	                 src='http://www.addme.com/link8.gif'
   	                 alt='Add Me!' border=0>
	          </a>\n";
	}
606
    }
Chad Barb's avatar
 
Chad Barb committed
607
    echo "</body></html>\n";
608
}
609 610 611 612 613 614 615 616 617 618 619 620

function PAGEERROR($msg) {
    global $drewheader;

    if (! $drewheader)
	PAGEHEADER("");

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
621 622 623 624 625

#
# Sub Page/Menu Stuff
#
function WRITESUBMENUBUTTON($text, $link) {
Chad Barb's avatar
 
Chad Barb committed
626 627


628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
    echo "<!-- Table row for button $text -->
          <tr>
            <td valign=center align=left nowrap>
                <b>
         	 <a class=sidebarbutton href='$link'>$text</a>\n";

    echo "      </b>
            </td>
          </tr>\n";
}

#
# Start/End a page within a page. 
#
function SUBPAGESTART() {
Chad Barb's avatar
 
Chad Barb committed
643
    echo "<!-- begin subpage -->";
Chad Barb's avatar
 
Chad Barb committed
644
    echo "<table class=\"stealth\"
645
	  cellspacing='0' cellpadding='0' width='100%' border='0'>\n
646
            <tr>\n
Chad Barb's avatar
 
Chad Barb committed
647
              <td class=\"stealth\"valign=top>\n";
648 649 650 651 652 653
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
 
Chad Barb committed
654
    echo "<!-- end subpage -->";
655 656 657 658 659 660 661
}

#
# Start/End a sub menu, located in the upper left of the main frame.
# Note that these cannot be used outside of the SUBPAGE macros above.
#
function SUBMENUSTART($title) {
Chad Barb's avatar
 
Chad Barb committed
662 663
?>
    <!-- begin submenu -->
664
    <table class='menu' cellpadding="0" cellspacing="0"
Chad Barb's avatar
 
Chad Barb committed
665
	style="margin-right: 6px;" >
Chad Barb's avatar
 
Chad Barb committed
666 667 668 669
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
670 671 672
}

function SUBMENUEND() {
Chad Barb's avatar
 
Chad Barb committed
673 674 675 676
?>
    </table>
    <!-- end submenu -->
  </td>
677
  <td class="stealth" valign=top align=left width='100%'>
Chad Barb's avatar
 
Chad Barb committed
678
<?php
679 680
}

681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698
# Start a new section in an existing submenu
# This includes ending the one before it
function SUBMENUSECTION($title) {
    SUBMENUSECTIONEND();
?>
      <!-- new submenu section -->
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
}

# End a submenu section - only need this on the last one of the table.
function SUBMENUSECTIONEND() {
?>
      <tr height=5><td></td></tr>
<?php
}
Chad Barb's avatar
 
Chad Barb committed
699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715

# These are here so you can wedge something else under the menu in the left column.

function SUBMENUEND_2A() {
?>
    </table>
    <!-- end submenu -->
<?php
}

function SUBMENUEND_2B() {
?>
  </td>
  <td class="stealth" valign=top align=left width='85%'>
<?php
}

716
?>