menu.php3 18.8 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
# 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
52
    echo "<tr><td class=\"menuoptb\"><a href=\"$link\">$text</a></td></tr>\n";
Chad Barb's avatar
   
Chad Barb committed
53
54
55
56
}

# writes a message to the sidebar, without clickability.
function WRITESIDEBARNOTICE($text) {
Chad Barb's avatar
   
Chad Barb committed
57
    echo "<tr><td class=\"menuopt\"><b>$text</b></td></tr>\n";
58
59
60
61
62
63
64
}

#
# WRITESIDEBAR(): Write the menu. The actual menu options the user
# sees depends on the login status and the DB status.
#
function WRITESIDEBAR() {
65
66
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
67
    global $THISHOMEBASE;
68
69
70

    #
    # The document base cannot be a mix of secure and nonsecure.
71
    #
Chad Barb's avatar
   
Chad Barb committed
72
73
74
    
    # create the main menu table, which also happens to reside in a form
    # (for search.)
Chad Barb's avatar
   
Chad Barb committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

    #
    # 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
105
106
107
108
109
?>
<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
110
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
111
    WRITESIDEBARBUTTON_ABS("Univ. Kentucky Emulab", $TBDOCBASE,
Leigh B. Stoller's avatar
Leigh B. Stoller committed
112
113
			   "http://www.uky.emulab.net");
    
Chad Barb's avatar
   
Chad Barb committed
114
    WRITESIDEBARBUTTON_COOL("Join Netbed (CD)",
115
			   $TBDOCBASE, "cdrom.php");
Chad Barb's avatar
   
Chad Barb committed
116

Chad Barb's avatar
   
Chad Barb committed
117
118
119
120
121
122
    if ($newNews) {
	WRITESIDEBARBUTTON_NEW("News $newsDate", $newsBase, "news.php3");
    } else {
	WRITESIDEBARBUTTON("News $newsDate", $newsBase, "news.php3");
    }

123
    WRITESIDEBARBUTTON("Documentation", $TBDOCBASE, "doc.php3");
Chad Barb's avatar
   
Chad Barb committed
124
125
    WRITESIDEBARBUTTON("Papers", $TBDOCBASE, "pubs.php3");
    WRITESIDEBARBUTTON("Software", $TBDOCBASE, "software.php3");
126
    WRITESIDEBARBUTTON("People", $TBDOCBASE, "people.php3");
127
    WRITESIDEBARBUTTON("Photo Gallery", $TBDOCBASE, "gallery/gallery.php3");
Chad Barb's avatar
   
Chad Barb committed
128
    WRITESIDEBARBUTTON("Projects on Emulab", $TBDOCBASE,
129
		       "projectlist.php3");
Chad Barb's avatar
   
Chad Barb committed
130
    WRITESIDEBARLASTBUTTON("Sponsors", $TBDOCBASE,
Mike Hibler's avatar
Mike Hibler committed
131
		       "docwrapper.php3?docname=sponsors.html");
132

Chad Barb's avatar
   
Chad Barb committed
133
134
135
136
137
138
    # 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
139
140
      <a href="<?php echo "$TBDOCBASE/search.php3"; ?>">Advanced 
      Search</a> ]</td></tr>
Chad Barb's avatar
   
Chad Barb committed
141
142
143
144
145
    </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
146
<?php # BACK TO PHP
147

148
    if ($login_status & CHECKLOGIN_LOGGEDIN) {
Chad Barb's avatar
   
Chad Barb committed
149
150
         $freepcs = TBFreePCs();
	 WRITESIDEBARNOTICE( "($freepcs Free PCs.)" );
151
    }
152

153
154
155
156
157
158
159
160
    #
    # 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>",
161
162
			   $TBDOCBASE, "nologins.php3");

Chad Barb's avatar
   
Chad Barb committed
163
164
165
        if (!$login_uid || !ISADMIN($login_uid)) {	
	    WRITESIDEBARNOTICE("Please Try Again Later");
        }
166
    }
Chad Barb's avatar
   
Chad Barb committed
167

168
169
170
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
171
		WRITESIDEBARBUTTON("Change Your Password",
172
				   $TBBASE, "moduserinfo.php3");
173
	    }
174
175
176
177
178
179
180
181
	    elseif ($login_status & CHECKLOGIN_WEBONLY) {
		WRITESIDEBARBUTTON("My Emulab",
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
	    
		WRITESIDEBARBUTTON("Update User Information",
				   $TBBASE, "moduserinfo.php3");
	    }
182
	    else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
183
		WRITESIDEBARBUTTON("My Emulab",
184
185
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
186
	    
187
		if (ISADMIN($login_uid)) {
188
189
		    WRITESIDEBARBUTTON("New Project Approval",
				       $TBBASE, "approveproject_list.php3");
190
191
192

		    WRITESIDEBARBUTTON("Widearea User Approval",
				       $TBBASE, "approvewauser_form.php3");
193
194
		}
		if ($login_status & CHECKLOGIN_TRUSTED) {
195
196
197
                  # Only project/group leaders can do these options
                  # Show a "new" icon if there are people waiting for approval
		  $query_result =
198
199
200
		    DBQueryFatal("select g.* from group_membership as authed ".
				 "left join group_membership as g on ".
				 " g.pid=authed.pid and g.gid=authed.gid ".
201
				 "left join users as u on u.uid=g.uid ".
202
				 "where u.status!='".
203
				 TBDB_USERSTATUS_UNVERIFIED . "' and ".
204
205
206
207
208
209
				 " 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') ".
210
211
212
213
214
				 "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 {
215
216

		      WRITESIDEBARBUTTON("New User Approval",
217
				       $TBBASE, "approveuser_form.php3");
218
		  }
219
		}
220

221
222
                #
                # Since a user can be a member of more than one project,
223
224
                # display this option, and let the form decide if the 
                # user is allowed to do this.
225
                #
Leigh B. Stoller's avatar
Leigh B. Stoller committed
226
		WRITESIDEBARBUTTON("Project List",
227
				   $TBBASE, "showproject_list.php3");
228
	    
229
		if (ISADMIN($login_uid)) {
230
231
232
233
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		}
	    
Leigh B. Stoller's avatar
Leigh B. Stoller committed
234
235
		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");
236
237
		WRITESIDEBARBUTTON("Begin an Experiment",
				   $TBBASE, "beginexp.php3");
238
239
		WRITESIDEBARBUTTON("ImageIDs and OSIDs",
				   $TBBASE, "showimageid_list.php3");
240
		WRITESIDEBARBUTTON("Update User Information",
241
242
				   $TBBASE, "moduserinfo.php3");
		WRITESIDEBARBUTTON("Node Reservation Status",
243
				   $TBBASE, "nodecontrol_list.php3");
244
245
		WRITESIDEBARBUTTON("Node Up/Down Status",
				   $TBDOCBASE, "updown.php3");
Chad Barb's avatar
   
Chad Barb committed
246
247
248
249
250

		if (ISADMIN($login_uid)) {
		    WRITESIDEBARBUTTON("Edit Site Variables",
				       $TBBASE, "editsitevars.php3");
		}
251
252
253
254
255
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
		}
256
	    }
257
	}
258
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
259
260
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
261
	    WRITESIDEBARBUTTON("Update User Information",
262
			       $TBBASE, "moduserinfo.php3");
263
	}
264
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
265
	    WRITESIDEBARBUTTON("Update User Information",
266
			       $TBBASE, "moduserinfo.php3");
267
	}
268
269
270
	#
	# Standard options for logged in users!
	# 
271
	WRITESIDEBARBUTTON("Start Project", $TBBASE, "newproject.php3");
Chad Barb's avatar
   
Chad Barb committed
272
	WRITESIDEBARLASTBUTTON("Join Project",  $TBBASE, "joinproject.php3");
273
    }
274
275
276
277
278
    else {
        #
        # Standard options for anyone else not logged in.
        #
        if (! NOLOGINS()) {
Chad Barb's avatar
   
Chad Barb committed
279
280
281
282
283
	    echo "<tr><td class='menuopt'>".
	         "<center><a href='$TBBASE/reqaccount.php3'>".
	         "<img border=0 src='requestaccount.gif' ".
		 " alt='Request Account' />".
	         "</a></center></td></tr>";
284
285
	}
    }
286

287
288
289
290
291
    #
    # Cons up a nice message.
    # 
    switch ($login_status & CHECKLOGIN_STATUSMASK) {
    case CHECKLOGIN_LOGGEDIN:
Chad Barb's avatar
   
Chad Barb committed
292
	$login_message = "&quot;$login_uid&quot; Logged In.";
293
294
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
295
	    $login_message = "$login_message<br>(Password Expired!)";
296
297
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
	    $login_message = "$login_message<br>(Unapproved!)";
298
	break;
299
    case CHECKLOGIN_TIMEDOUT:
300
301
	$login_message = "Login Timed Out";
	break;
302
303
    default:
	$login_message = 0;
304
	break;
305
306
    }

Chad Barb's avatar
   
Chad Barb committed
307
    if ($login_message) {
Chad Barb's avatar
   
Chad Barb committed
308
309
310
311
      echo "<tr>";
      echo "<td class=\"menufooter\"><center><b>";
      echo "$login_message</b></center></td>";
      echo "</tr>";
Chad Barb's avatar
   
Chad Barb committed
312
313
    }

314
315
    #
    # Now the login/logout box. Remember, already inside a table.
316
317
    # 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
318
    # http or https, since we do not want to mix them, since they
319
    # cause warnings.
320
    # 
321
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
Chad Barb's avatar
   
Chad Barb committed
322
323
324
325
326
327
      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";
328
    }
329
    elseif (!NOLOGINS()) {
Chad Barb's avatar
   
Chad Barb committed
330
331
332
333
334
335
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
      echo "<a href=\"$TBBASE/login.php3\">";
      echo "<img alt=\"logon\" border=0 ";
      echo "src=\"$BASEPATH/logon.gif\"></a>\n";
      echo "</td></tr>\n";
336
    }
337

338
    #
Chad Barb's avatar
   
Chad Barb committed
339
    # Login message. Set via 'web/message' site variable
340
    #
Chad Barb's avatar
   
Chad Barb committed
341
342
343
    $message = TBGetSiteVar("web/message");
    if (0 != strcmp($message,"")) {
	WRITESIDEBARNOTICE($message);    	
344
    }
Chad Barb's avatar
   
Chad Barb committed
345

Chad Barb's avatar
   
Chad Barb committed
346
    echo "</table>\n";
347
348
}

Chad Barb's avatar
   
Chad Barb committed
349
350
351
352
#
# spits out beginning part of page
#
function PAGEBEGINNING( $title ) {
Chad Barb's avatar
   
Chad Barb committed
353
    global $BASEPATH, $TBMAINSITE, $THISHOMEBASE;
Chad Barb's avatar
   
Chad Barb committed
354
355
356
357
358
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
Chad Barb's avatar
   
Chad Barb committed
359
    <title><?php echo "$THISHOMEBASE - $title"; ?></title>
Chad Barb's avatar
   
Chad Barb committed
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
    <!-- dumbed-down style sheet for any browser that groks (eg NS47). -->
    <link REL="stylesheet" HREF="<?php echo "$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 "<?php echo "$BASEPATH/style.css" ?>"; --></style>
<?php if ($TBMAINSITE) { ?>
    <meta NAME="keywords" CONTENT="network, emulation, internet, emulator">
    <meta NAME="ROBOTS" CONTENT="NOARCHIVE">
<?php } ?>
  </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="<?php echo "$BASEPATH/headerbgbb.jpg" ?>"
            bgcolor=#3D627F ><img width=369 height=100 
Chad Barb's avatar
   
Chad Barb committed
379
380
381
            src="<?php echo "$BASEPATH/overlay." . strtolower($THISHOMEBASE) 
                                                 . ".gif" ?>" 
            alt="<?php echo "$THISHOMEBASE" ?> - the network testbed" /></td>
Chad Barb's avatar
   
Chad Barb committed
382
      </tr>
383
384
    </table>
    <table cellpadding="8" cellspacing="0" height="100%" width="100%">
Chad Barb's avatar
   
Chad Barb committed
385
386
387
388
389
390
391
392
393
394
395
396
397
398
      <tr height=100%>
        <td valign="top" class="leftcell" bgcolor=#ccddee>
<!-- sidebar begins -->
<?php
}

#
# finishes sidebar td
#
function FINISHSIDEBAR()
{
?>
<!-- sidebar ends -->
        </td>
399
400
401
        <td valign="top" width="100%" class="rightcell">
          <!-- content body table -->
          <table class="content" width="100%" cellpadding="0" cellspacing="0">
Chad Barb's avatar
   
Chad Barb committed
402
            <tr>
403
              <td class="contentheader">
Chad Barb's avatar
   
Chad Barb committed
404
405
406
<?php
}

407
408
409
410
#
# Spit out a vanilla page header.
#
function PAGEHEADER($title) {
411
412
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
413
    global $TBMAINSITE;
414
415

    $drewheader = 1;
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431

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

433
    #
434
    # Figure out who is logged in, if anyone.
435
    # 
436
437
438
439
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
440
441
442
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
443
444
445
	}
    }

446
    #
447
448
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
449
450
    # and logout anyone else that is currently logged in!
    #
451
452
453
454
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
455
    }
456
    
457
458
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
459
    if (1) {
460
461
462
463
464
465
466
	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
467
468
469
470

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

473
    if ($login_uid && ISADMINISTRATOR()) {
Chad Barb's avatar
   
Chad Barb committed
474
475
476
477
478
479
480
481
482
483
	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";
	}
484
    }
485
486
    $now = date("D M d g:ia T");
    echo "$title</h2></td>\n";
Chad Barb's avatar
   
Chad Barb committed
487
488
    echo "<td class=\"contentheader\" align=right>Generated ";
    if ($login_uid) {
489
	echo "for <b>$login_uid</b>,<br>";
Chad Barb's avatar
   
Chad Barb committed
490
491
492
493
494
    }
    echo "$now.";
    echo "</td>";
    echo "</tr>\n";
    echo "<tr><td colspan=3 class=\"contentbody\" width=*>";
Chad Barb's avatar
   
Chad Barb committed
495
    echo "<!-- begin content -->\n";
496
497
498
499
500
501
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
Chad Barb's avatar
   
Chad Barb committed
502
503
  echo "</td></tr></table>";
  echo "</td></tr></table>";
504
505
506
507
508
509
}

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

Chad Barb's avatar
   
Chad Barb committed
513
514
515
516
517
518
519
#    echo "<!-- Force full window! -->
#	  <base target=_top>

?>
<!-- end content -->
              </td>
            </tr><tr>
520
              <td colspan=2 class="contentbody">
521
	        <center><font size=-1>
522
		[&nbsp;<a href="http://www.cs.utah.edu/flux/"
523
524
                >The&nbsp;Flux&nbsp;Research&nbsp;Group</a>&nbsp;]
		[&nbsp;<a href="http://www.cs.utah.edu/"
525
                >School&nbsp;of&nbsp;Computing</a>&nbsp;]
526
		[&nbsp;<a href="http://www.utah.edu/"
527
528
529
                >The&nbsp;University&nbsp;of&nbsp;Utah</a>&nbsp;]
		</font>
		<br>
Chad Barb's avatar
   
Chad Barb committed
530
                <!-- begin copyright -->
531
                <font size=-2>
Chad Barb's avatar
   
Chad Barb committed
532
<a href="<?php echo "$TBDOCBASE"; ?>/docwrapper.php3?docname=copyright.html">
533
                    Copyright &copy; 2000-2002 The University of Utah</a>
Chad Barb's avatar
   
Chad Barb committed
534
535
                  </font>
                  <br />
536
537
		</center>
                <p align=right>
Chad Barb's avatar
   
Chad Barb committed
538
539
540
541
542
543
544
545
546
		  <font size=-2>
                    Problems?
	            Contact <?php echo "$TBMAILADDR\n"; ?>
                  </font>
                </p>
                <!-- end copyright -->
<?php

    ENDPAGE();
547
548
549

    if ($TBMAINSITE) {
	echo "<p>
Chad Barb's avatar
   
Chad Barb committed
550
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";#
Leigh B. Stoller's avatar
Leigh B. Stoller committed
551
552
553
554
555
556
557
558

	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";
	}
559
    }
Chad Barb's avatar
   
Chad Barb committed
560
    echo "</body></html>\n";
561
}
562
563
564
565
566
567
568
569
570
571
572
573

function PAGEERROR($msg) {
    global $drewheader;

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

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
574
575
576
577
578

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


581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
    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
596
    echo "<!-- begin subpage -->";
Chad Barb's avatar
   
Chad Barb committed
597
598
    echo "<table class=\"stealth\" cellspacing=0 cellpadding=0 width='85%' 
          border=0>\n
599
            <tr>\n
Chad Barb's avatar
   
Chad Barb committed
600
              <td class=\"stealth\"valign=top>\n";
601
602
603
604
605
606
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
   
Chad Barb committed
607
    echo "<!-- end subpage -->";
608
609
610
611
612
613
614
}

#
# 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
615
616
617
618
619
620
621
?>
    <!-- begin submenu -->
    <table class="menu" width=200 cellpadding="0" cellspacing="0">
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
622
623
624
}

function SUBMENUEND() {
Chad Barb's avatar
   
Chad Barb committed
625
626
627
628
629
630
?>
    </table>
    <!-- end submenu -->
  </td>
  <td class="stealth" valign=top align=left width='85%'>
<?php
631
632
}

Chad Barb's avatar
   
Chad Barb committed
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649

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

650
?>