menu.php3 20.4 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");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
155
	WRITESIDEBARBUTTON_NEW("Software", $TBDOCBASE, "software.php3");
Chad Barb's avatar
 
Chad Barb committed
156 157
	WRITESIDEBARBUTTON("People", $TBDOCBASE, "people.php3");
	WRITESIDEBARBUTTON("Photo Gallery", $TBDOCBASE, "gallery/gallery.php3");
Chad Barb's avatar
 
Chad Barb committed
158 159
	WRITESIDEBARBUTTON_NEW("Emulab Users", $TBDOCBASE,
			   "doc/docwrapper.php3?docname=users.html");
Chad Barb's avatar
 
Chad Barb committed
160 161 162 163 164 165
	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");
280 281 282
		WRITESIDEBARBUTTON("View Testbed Stats",
				   $TBBASE, "showstats.php3");
		
Chad Barb's avatar
 
Chad Barb committed
283 284 285 286
		if (ISADMIN($login_uid)) {
		    WRITESIDEBARBUTTON("Edit Site Variables",
				       $TBBASE, "editsitevars.php3");
		}
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 = "'$login_uid' Logged in.";
320 321
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
Chad Barb's avatar
Chad Barb committed
322
	    $login_message = "$login_message<br>(Password Expired!)";
323
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
Chad Barb's avatar
Chad Barb committed
324
	    $login_message = "$login_message<br>(Unapproved!)";
325
	break;
326
    case CHECKLOGIN_TIMEDOUT:
Chad Barb's avatar
Chad Barb committed
327
	$login_message = "Login Timed out.";
328
	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
      echo "<tr>";
Chad Barb's avatar
Chad Barb committed
336
      echo "<td class=\"menufooter\" style='padding-top: 6px;' ><center><b>";
Chad Barb's avatar
 
Chad Barb committed
337 338
      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
  
    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>
399 400
            <!--<link rel=\"SHORTCUT ICON\" HREF=\"netbed.ico\">-->
            <link rel=\"SHORTCUT ICON\" HREF=\"netbed.png\" TYPE=\"image/png\">
Chad Barb's avatar
 
Chad Barb committed
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 436 437
    	    <!-- 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
438 439 440 441 442 443 444
}

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

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

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

    #
    # 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;
    }
479

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

493
    #
494 495
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
496 497
    # and logout anyone else that is currently logged in!
    #
498 499 500 501
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
502
    }
503
    
504 505
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
506
    if (1) {
507 508 509 510 511 512 513
	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
514 515 516 517

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

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

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

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

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

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

    ENDPAGE();
596 597 598

    if ($TBMAINSITE) {
	echo "<p>
599
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";
600
    }
Chad Barb's avatar
 
Chad Barb committed
601
    echo "</body></html>\n";
602
}
603 604 605 606 607 608 609 610 611 612 613 614

function PAGEERROR($msg) {
    global $drewheader;

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

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
615 616 617 618 619

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


622 623 624 625 626 627 628 629 630 631 632 633 634 635 636
    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
637
    echo "<!-- begin subpage -->";
Chad Barb's avatar
 
Chad Barb committed
638
    echo "<table class=\"stealth\"
639
	  cellspacing='0' cellpadding='0' width='100%' border='0'>\n
640
            <tr>\n
Chad Barb's avatar
 
Chad Barb committed
641
              <td class=\"stealth\"valign=top>\n";
642 643 644 645 646 647
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
 
Chad Barb committed
648
    echo "<!-- end subpage -->";
649 650 651 652 653 654 655
}

#
# 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
656 657
?>
    <!-- begin submenu -->
658
    <table class='menu' cellpadding="0" cellspacing="0"
Chad Barb's avatar
 
Chad Barb committed
659
	style="margin-right: 6px;" >
Chad Barb's avatar
 
Chad Barb committed
660 661 662 663
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
664 665 666
}

function SUBMENUEND() {
Chad Barb's avatar
 
Chad Barb committed
667 668 669 670
?>
    </table>
    <!-- end submenu -->
  </td>
671
  <td class="stealth" valign=top align=left width='100%'>
Chad Barb's avatar
 
Chad Barb committed
672
<?php
673 674
}

675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
# 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
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709

# 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
}

710
?>