menu.php3 26.7 KB
Newer Older
1
<?php
Leigh B. Stoller's avatar
Leigh B. Stoller committed
2
3
#
# EMULAB-COPYRIGHT
4
# Copyright (c) 2000-2004 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
# TOPBARCELL - Make a cell for the topbar. Actually, the name lies, it can be
# used for cells in a bottombar too.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#
function TOPBARCELL($contents) {
    echo "<td class=\"topbaropt\">";
    echo "<span class=\"topbaroption\">&nbsp;";
    echo $contents;
    echo "&nbsp;</span>";
    echo "</td>";
    echo "\n";
}

#
# SIDEBARCELL - Make a cell for the sidebar
#
function SIDEBARCELL($contents, $last = 0) {
    echo "<tr>";
    if ($last) {
	echo "<td class=\"menuoptb\">";
    } else {
	echo "<td class=\"menuopt\">";
    }
41
    echo "$contents";
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    echo "</td>";
    echo "</tr>";
    echo "\n";
}

#
# WRITETOPBARBUTTON(text, base, link): Write a button in the topbar
#
function WRITETOPBARBUTTON($text, $base, $link ) {
    $link = "$base/$link";
    TOPBARCELL("<a href=\"$link\">$text</a>");
}
# same as above with "new" gif next to it.
function WRITETOPBARBUTTON_NEW($text, $base, $link ) {
    $link = "$base/$link";
    TOPBARCELL("<a href=\"$link\">$text</a>&nbsp;<img src=\"/new.gif\" />");
}

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#
# WRITESIDEBARDIVIDER(): Put a bit of whitespace in the sidebar
#
function WRITESIDEBARDIVIDER() {
    global $BASEPATH;
    echo "<tr>";
    echo "<td class=\"menuoptdiv\">";
    # We have to put something in this cell, or IE ignores it. But, we don't
    # want to make the table row full line-height, so a space will not do.
    echo "<img src=\"$BASEPATH/1px.gif\" border=0 height=1 width=1 />";
    echo "</td>";
    echo "</tr>";
    echo "\n";
}

75
76
77
78
79
#
# 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
80
function WRITESIDEBARBUTTON($text, $base, $link ) {
81
    $link = "$base/$link";
82
    SIDEBARCELL("<a href=\"$link\">$text</a>");
Chad Barb's avatar
   
Chad Barb committed
83
}
84

Chad Barb's avatar
   
Chad Barb committed
85
86
87
# same as above with "new" gif next to it.
function WRITESIDEBARBUTTON_NEW($text, $base, $link ) {
    $link = "$base/$link";
88
    SIDEBARCELL("<a href=\"$link\">$text</a>&nbsp;<img src=\"/new.gif\" />");
Chad Barb's avatar
   
Chad Barb committed
89
90
}

Chad Barb's avatar
   
Chad Barb committed
91
92
93
# same as above with "cool" gif next to it.
function WRITESIDEBARBUTTON_COOL($text, $base, $link ) {
    $link = "$base/$link";
94
    SIDEBARCELL("<a href=\"$link\">$text</a>&nbsp;<img src=\"/cool.gif\" />");
Chad Barb's avatar
   
Chad Barb committed
95
96
}

Leigh B. Stoller's avatar
Leigh B. Stoller committed
97
98
function WRITESIDEBARBUTTON_ABS($text, $base, $link ) {
    $link = "$link";
99
    SIDEBARCELL("<a href=\"$link\">$text</a>\n");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
100
101
}

Chad Barb's avatar
   
Chad Barb committed
102
103
function WRITESIDEBARBUTTON_ABSCOOL($text, $base, $link ) {
    $link = "$link";
104
    SIDEBARCELL("<a href=\"$link\">$text</a>&nbsp;<img src=\"/cool.gif\" />");
Chad Barb's avatar
   
Chad Barb committed
105
106
}

Chad Barb's avatar
   
Chad Barb committed
107
108
109
110
111
# 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";
112
    SIDEBARCELL("<a href=\"$link\">$text</a>",1);
Chad Barb's avatar
   
Chad Barb committed
113
114
}

Chad Barb's avatar
Chad Barb committed
115
116
function WRITESIDEBARLASTBUTTON_COOL($text, $base, $link) {
    $link = "$base/$link";
117
    SIDEBARCELL("<a href=\"$link\">$text</a>&nbsp;<img src=\"/cool.gif\" />",1);
Chad Barb's avatar
Chad Barb committed
118
119
}

Chad Barb's avatar
   
Chad Barb committed
120
121
# writes a message to the sidebar, without clickability.
function WRITESIDEBARNOTICE($text) {
122
123
124
125
126
127
128
129
130
131
132
133
134
135
    SIDEBARCELL("<b>$text</b>");
}

#
# Something like the sidebar, but across the top, with only a few options.
# Think Google. For PlanetLab users, but it would be easy enough to make
# others. Still a work in progress.
#
function WRITEPLABTOPBAR() {
    echo "<table class=\"topbar\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\">\n";
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
    global $THISHOMEBASE;

136
137
    WRITETOPBARBUTTON("Create a Slice",
        $TBBASE, "plab_ez.php3");
138

139
    WRITETOPBARBUTTON("Nodes",
140
141
142
143
144
145
146
147
148
149
        $TBBASE, "plabmetrics.php3");

    WRITETOPBARBUTTON("My Testbed",
	$TBBASE,
	"showuser.php3?target_uid=$login_uid");


    WRITETOPBARBUTTON("Advanced Experiment",
        $TBBASE, "beginexp.php3");

150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
    if ($login_status & CHECKLOGIN_TRUSTED) {
	# Only project/group leaders can do these options
	# Show a "new" icon if there are people waiting for approval
	$query_result =
	DBQueryFatal("select g.* from group_membership as authed ".
		     "left join group_membership as g on ".
		     " g.pid=authed.pid and g.gid=authed.gid ".
		     "left join users as u on u.uid=g.uid ".
		     "where u.status!='".
		     TBDB_USERSTATUS_UNVERIFIED . "' and ".
		     " 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') ".
		     "ORDER BY g.uid,g.pid,g.gid");
	if (mysql_num_rows($query_result) > 0) {
	     WRITETOPBARBUTTON_NEW("Approve Users",
				   $TBBASE, "approveuser_form.php3");
	} else {
	    WRITETOPBARBUTTON("Approve Users",
			       $TBBASE, "approveuser_form.php3");
	}
    }

    WRITETOPBARBUTTON("Log Out", $TBBASE, "logout.php3?next_page=" .
	urlencode($TBBASE . "/login_plab.php3"));

179
180
181
    echo "</table>\n";
    echo "<br>\n";

182
183
}

184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200

#
# Put a few things that PlanetLab users should see, but are non-essential,
# across the bottom of the page rather than the top
#
function WRITEPLABBOTTOMBAR() {
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
    global $THISHOMEBASE;

    if ($login_uid) {
	$newsBase = $TBBASE; 
    } else {
	$newsBase = $TBDOCBASE;
    }

    echo "
201
202
203
204
205
206
207
208
	   <center>
	   <br>
	   <font size=-1>
	   <form method=get action='/cgi-bin/webglimpse/usr/testbed/webglimpse'>
	   [ <a href='$TBDOCBASE/doc.php3'>
		Documentation</a> : <input name=query size = 15/>
		  <input type=submit style='font-size:10px;' value='Search' /> ]
	   [ <a href='$newsBase/news.php3'>
209
		News</a> ]
210
211
212
213
	   </form>
	   </font>
	   <br>
	   </center>\n";
214
215
216

}

217
218
219
220
221
#
# WRITESIDEBAR(): Write the menu. The actual menu options the user
# sees depends on the login status and the DB status.
#
function WRITESIDEBAR() {
222
223
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
224
    global $THISHOMEBASE;
225
226
227

    #
    # The document base cannot be a mix of secure and nonsecure.
228
    #
Chad Barb's avatar
   
Chad Barb committed
229
230
231
    
    # create the main menu table, which also happens to reside in a form
    # (for search.)
Chad Barb's avatar
   
Chad Barb committed
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261

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

262
    echo "<FORM method=get ACTION=\"/cgi-bin/webglimpse/usr/testbed/webglimpse\">\n";
Chad Barb's avatar
   
Chad Barb committed
263
?>
264
  <table class="menu" width=210 cellpadding="0" cellspacing="0">
Chad Barb's avatar
   
Chad Barb committed
265
266
    <tr><td class="menuheader"><b>Information</b></td></tr>
<?php
Chad Barb's avatar
   
Chad Barb committed
267
268
269
270
271
272
    if (0 == strcasecmp($THISHOMEBASE, "emulab.net")) {
	$rootEmulab = 1;
    } else {
	$rootEmulab = 0;
    }

273
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
274

Chad Barb's avatar
   
Chad Barb committed
275
276

    if ($rootEmulab) {
277
	WRITESIDEBARBUTTON("Other Emulabs", $TBDOCBASE,
Chad Barb's avatar
   
Chad Barb committed
278
279
280
281
282
283
			       "docwrapper.php3?docname=otheremulabs.html");
    } else {
	WRITESIDEBARBUTTON_ABS("Utah Emulab", $TBDOCBASE,
			       "http://www.emulab.net/");

    }
Chad Barb's avatar
   
Chad Barb committed
284

Chad Barb's avatar
   
Chad Barb committed
285
286
287
288
289
290
    if ($newNews) {
	WRITESIDEBARBUTTON_NEW("News $newsDate", $newsBase, "news.php3");
    } else {
	WRITESIDEBARBUTTON("News $newsDate", $newsBase, "news.php3");
    }

291
    WRITESIDEBARBUTTON("Documentation", $TBDOCBASE, "doc.php3");
Chad Barb's avatar
   
Chad Barb committed
292
293

    if ($rootEmulab) {
294
	WRITESIDEBARBUTTON("Papers (Oct 28)", $TBDOCBASE, "pubs.php3");
295
	WRITESIDEBARBUTTON("Software <font size=-1> ".
296
			       "(Oct 21)</font>",
297
			       $TBDOCBASE, "software.php3");
298
299
300
301
302
303
304
305
306
307
	WRITESIDEBARBUTTON("Add Widearea Node (CD)",
				$TBDOCBASE, "cdrom.php");

	SIDEBARCELL("<a href=\"$TBDOCBASE/people.php3\">People</a> and " .
	            "<a href=\"$TBDOCBASE/gallery/gallery.php3\">Photos</a>");

	SIDEBARCELL("Emulab <a href=\"$TBDOCBASE/doc/docwrapper.php3? " .
		    "docname=users.html\">Users</a> and " .
	            "<a href=\"$TBDOCBASE/docwrapper.php3? " .
		    "docname=sponsors.html\">Sponsors</a>",1);
Chad Barb's avatar
   
Chad Barb committed
308
    } else {
309
310
311
	# Link ALWAYS TO UTAH
	WRITESIDEBARBUTTON_ABSCOOL("Add Widearea Node (CD)",
			       $TBDOCBASE, "http://www.emulab.net/cdrom.php");
Chad Barb's avatar
   
Chad Barb committed
312
313
314
	WRITESIDEBARLASTBUTTON("Projects on Emulab", $TBDOCBASE,
			       "projectlist.php3");
    }
315

Chad Barb's avatar
   
Chad Barb committed
316
317
318
    # create the search bit, then the second table for the Web Interface.
?>
    <tr><td class="menuoptst"><b>Search Documentation:</b></td></tr>
319
320
321
322
    <tr><td class="menuoptsb"><input name=query size = 15/>
      <input type=submit style="font-size:10px;" value="Go" /><br>
      [ <a href="<?php echo "$TBDOCBASE/search.php3"; ?>">Advanced Search</a> ]
    </td></tr>
323
324
325
326
<?php # BACK TO PHP
    echo "</table>\n";
    echo "</form>\n";
?>
327
<table class="menu" width=210 cellpadding="0" cellspacing="0">
328
329
330
    <tr><td class="menuheader">
      <b>Interaction</b>
    </td></tr>
Chad Barb's avatar
   
Chad Barb committed
331
<?php # BACK TO PHP
332

333
    if ($login_status & CHECKLOGIN_LOGGEDIN) {
Chad Barb's avatar
   
Chad Barb committed
334
         $freepcs = TBFreePCs();
335
	 WRITESIDEBARNOTICE( "($freepcs free PCs)" );
336
    }
337

338
339
340
341
342
343
344
345
    #
    # 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>",
346
347
			   $TBDOCBASE, "nologins.php3");

Chad Barb's avatar
   
Chad Barb committed
348
349
350
        if (!$login_uid || !ISADMIN($login_uid)) {	
	    WRITESIDEBARNOTICE("Please Try Again Later");
        }
351
    }
Chad Barb's avatar
   
Chad Barb committed
352

353
354
355
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
356
		WRITESIDEBARBUTTON("Change Your Password",
357
				   $TBBASE, "moduserinfo.php3");
358
	    }
359
360
361
362
363
364
365
	    elseif ($login_status & CHECKLOGIN_WEBONLY) {
		WRITESIDEBARBUTTON("My Emulab",
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
	    
		WRITESIDEBARBUTTON("Update User Information",
				   $TBBASE, "moduserinfo.php3");
366
367
368
369
370
371
372
373
374

	        if (ISADMIN($login_uid)) {
		    WRITESIDEBARBUTTON("Approve New Projects",
				       $TBBASE, "approveproject_list.php3");
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		    WRITESIDEBARBUTTON("New User Approval",
				       $TBBASE, "approveuser_form.php3");
		}
375
	    }
376
	    else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
377
		WRITESIDEBARBUTTON("My Emulab",
378
379
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
380
	    
381
382
383
384
                # Since a user can be a member of more than one project,
                # display this option, and let the form decide if the 
                # user is allowed to do this.
                #
385

386
		WRITESIDEBARDIVIDER();
387

388
                if ($login_status & CHECKLOGIN_STUDLY) {
389
390
391
392
393
394
395
 		    WRITESIDEBARBUTTON("Begin an Experiment",
				       $TBBASE, "beginexp_html.php3");
                }
                else {
 		    WRITESIDEBARBUTTON("Begin an Experiment",
				       $TBBASE, "beginexp.php3");
                }
396

397
398
		# Put _NEW back when Plab is working again.
		WRITESIDEBARBUTTON("Create a PlanetLab Slice",
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
				       $TBBASE, "plab_ez.php3");

		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");

		WRITESIDEBARDIVIDER();

		WRITESIDEBARBUTTON("Node Status",
				   $TBBASE, "nodecontrol_list.php3");

		WRITESIDEBARBUTTON("ImageIDs and OSIDs",
				   $TBBASE, "showimageid_list.php3");
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
415
416
		}
		if ($login_status & CHECKLOGIN_TRUSTED) {
417
		  WRITESIDEBARDIVIDER();
418
419
420
                  # Only project/group leaders can do these options
                  # Show a "new" icon if there are people waiting for approval
		  $query_result =
421
422
423
		    DBQueryFatal("select g.* from group_membership as authed ".
				 "left join group_membership as g on ".
				 " g.pid=authed.pid and g.gid=authed.gid ".
424
				 "left join users as u on u.uid=g.uid ".
425
				 "where u.status!='".
426
				 TBDB_USERSTATUS_UNVERIFIED . "' and ".
427
428
429
430
431
432
				 " 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') ".
433
434
435
436
437
				 "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 {
438
439

		      WRITESIDEBARBUTTON("New User Approval",
440
				       $TBBASE, "approveuser_form.php3");
441
		  }
442
		}
443
		if (ISADMIN($login_uid)) {
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
		    WRITESIDEBARDIVIDER();

		    SIDEBARCELL("List <a " .
				" href=\"$TBBASE/showproject_list.php3\">" .
		                "Projects</a> or <a " .
		                "href=\"$TBBASE/showuser_list.php3\">Users</a>");

		    WRITESIDEBARBUTTON("View Testbed Stats",
				       $TBBASE, "showstats.php3");

		    WRITESIDEBARBUTTON("Approve New Projects",
				       $TBBASE, "approveproject_list.php3");

		    WRITESIDEBARBUTTON("Approve Widearea User",
				       $TBBASE, "approvewauser_form.php3");
459

Chad Barb's avatar
   
Chad Barb committed
460
461
		    WRITESIDEBARBUTTON("Edit Site Variables",
				       $TBBASE, "editsitevars.php3");
462
463
464
465
466
467
468
469
470
471

		    $query_result
		      = DBQUeryFatal("select new_node_id from new_nodes");
                    if (mysql_num_rows($query_result) > 0) {
		        WRITESIDEBARBUTTON_NEW("Add Testbed Nodes",
				           $TBBASE, "newnodes_list.php3");
		    } else {
		        WRITESIDEBARBUTTON("Add Testbed Nodes",
				           $TBBASE, "newnodes_list.php3");
		    }
472

473
		}
474

475
	    }
476
	}
477
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
478
479
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
480
	    WRITESIDEBARBUTTON("Update User Information",
481
			       $TBBASE, "moduserinfo.php3");
482
	}
483
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
484
	    WRITESIDEBARBUTTON("Update User Information",
485
			       $TBBASE, "moduserinfo.php3");
486
	}
487
488
489
	#
	# Standard options for logged in users!
	# 
490
491
492
493
	WRITESIDEBARDIVIDER();
	SIDEBARCELL("<a href=\"$TBBASE/newproject.php3\">Start</a> or " .
	            "<a href=\"$TBBASE/joinproject.php3\">Join</a> a Project",
		    1);
494
    }
495

496
497
    #WRITESIDEBARLASTBUTTON_COOL("Take our Survey",
    #    $TBDOCBASE, "survey.php3");
498

499
500
501
502
503
    #
    # Cons up a nice message.
    # 
    switch ($login_status & CHECKLOGIN_STATUSMASK) {
    case CHECKLOGIN_LOGGEDIN:
Chad Barb's avatar
Chad Barb committed
504
	$login_message = "'$login_uid' Logged in.";
505
506
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
Chad Barb's avatar
Chad Barb committed
507
	    $login_message = "$login_message<br>(Password Expired!)";
508
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
Chad Barb's avatar
Chad Barb committed
509
	    $login_message = "$login_message<br>(Unapproved!)";
510
	break;
511
    case CHECKLOGIN_TIMEDOUT:
Chad Barb's avatar
Chad Barb committed
512
	$login_message = "Login Timed out.";
513
	break;
514
515
    default:
	$login_message = 0;
516
	break;
517
518
    }

Chad Barb's avatar
   
Chad Barb committed
519
    if ($login_message) {
Chad Barb's avatar
   
Chad Barb committed
520
      echo "<tr>";
Chad Barb's avatar
Chad Barb committed
521
      echo "<td class=\"menufooter\" style='padding-top: 6px;' ><center><b>";
Chad Barb's avatar
   
Chad Barb committed
522
523
      echo "$login_message</b></center></td>";
      echo "</tr>";
Chad Barb's avatar
   
Chad Barb committed
524
525
    }

526
527
    #
    # Now the login/logout box. Remember, already inside a table.
528
529
    # 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
530
    # http or https, since we do not want to mix them, since they
531
    # cause warnings.
532
    # 
533
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
Chad Barb's avatar
   
Chad Barb committed
534
535
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
536
      echo "<a href=\"$TBBASE/logout.php3?target_uid=$login_uid\">";
Chad Barb's avatar
   
Chad Barb committed
537
538
539
      echo "<img alt=\"logoff\" border=0 ";
      echo "src=\"$BASEPATH/logoff.gif\"></a>\n";
      echo "</td></tr>\n";
540
    }
541
    elseif (!NOLOGINS()) {
Chad Barb's avatar
   
Chad Barb committed
542
543
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
Chad Barb's avatar
Chad Barb committed
544
545
546
547
548
549
550

      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
551
552
553
      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
554

Chad Barb's avatar
   
Chad Barb committed
555
      echo "</td></tr>\n";
556
    }
557

558
    #
Chad Barb's avatar
   
Chad Barb committed
559
    # Login message. Set via 'web/message' site variable
560
    #
Chad Barb's avatar
   
Chad Barb committed
561
562
    $message = TBGetSiteVar("web/message");
    if (0 != strcmp($message,"")) {
Robert Ricci's avatar
Robert Ricci committed
563
	WRITESIDEBARNOTICE($message);    	
564
    }
Chad Barb's avatar
   
Chad Barb committed
565

Chad Barb's avatar
   
Chad Barb committed
566
    echo "</table>\n";
567
568
}

Chad Barb's avatar
   
Chad Barb committed
569
570
571
#
# spits out beginning part of page
#
572
function PAGEBEGINNING( $title, $nobanner = 0 ) {
Chad Barb's avatar
Chad Barb committed
573
574
    global $BASEPATH, $TBMAINSITE, $THISHOMEBASE;
    global $TBDIR, $WWW;
Chad Barb's avatar
   
Chad Barb committed
575
    global $MAINPAGE;
576
    global $TBDOCBASE;
Chad Barb's avatar
   
Chad Barb committed
577

Chad Barb's avatar
Chad Barb committed
578
    $MAINPAGE = !strcmp($TBDIR, "/usr/testbed/"); 
Chad Barb's avatar
   
Chad Barb committed
579
580
581
582
583
584
  
    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>
585
586
            <!--<link rel=\"SHORTCUT ICON\" HREF=\"netbed.ico\">-->
            <link rel=\"SHORTCUT ICON\" HREF=\"netbed.png\" TYPE=\"image/png\">
Chad Barb's avatar
   
Chad Barb committed
587
588
589
590
591
592
593
594
595
596
597
    	    <!-- 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'; -->";
    } 

Leigh B. Stoller's avatar
Leigh B. Stoller committed
598
    echo "</style>\n";
Chad Barb's avatar
   
Chad Barb committed
599
600

    if ($TBMAINSITE) {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
601
602
603
604
605
606
607
	echo "<meta NAME=\"keywords\" ".
	           "CONTENT=\"network, emulation, internet, emulator\">\n";
	echo "<meta NAME=\"robots\" ".
	           "CONTENT=\"NOARCHIVE\">\n";
	echo "<meta NAME=\"description\" ".
                   "CONTENT=\"emulab - network emulation testbed home\">\n";
    }
Chad Barb's avatar
   
Chad Barb committed
608
609
610

    echo "</head>
            <body bgcolor='#FFFFFF' 
611
612
             topmargin='0' leftmargin='0' marginheight='0' marginwidth='0'>\n";
    if (! $nobanner ) {
613
614
615
616
617
618
	echo "<map name=overlaymap>
                 <area shape=rect coords=\"100,60,369,100\"
                       href='http://www.emulab.net/index.php3'>
                 <area shape=rect coords=\"0,0,369,100\"
                       href='$TBDOCBASE/index.php3'>
              </map>
Chad Barb's avatar
   
Chad Barb committed
619
620
621
622
            <table cellpadding='0' cellspacing='0' width='100%'>
            <tr>
              <td valign='top' class='bannercell' 
              background='$BASEPATH/headerbgbb.jpg'
623
624
              bgcolor=#3D627F>
              <img width=369 height=100 border=0 usemap=\"#overlaymap\" 
Chad Barb's avatar
   
Chad Barb committed
625
              src='$BASEPATH/overlay.".strtolower($THISHOMEBASE).".gif' 
626
              alt='$THISHOMEBASE - the network testbed'>\n";
627
628
629
630
	      if (!$MAINPAGE) {
		  echo "<font size='+1' color='#CCFFCC'>&nbsp;<b>$WWW</b></font>";
	      }
	      echo "</td></tr></table>\n";
Chad Barb's avatar
   
Chad Barb committed
631
632
633
634
635
636
    }

    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
637
638
639
640
641
642
643
}

#
# finishes sidebar td
#
function FINISHSIDEBAR()
{
Chad Barb's avatar
   
Chad Barb committed
644
    echo "<!-- sidebar ends -->
Chad Barb's avatar
   
Chad Barb committed
645
        </td>
Chad Barb's avatar
   
Chad Barb committed
646
        <td valign='top' width='100%' class='rightcell'>
647
          <!-- content body table -->
Chad Barb's avatar
   
Chad Barb committed
648
          <table class='content' width='100%' cellpadding='0' cellspacing='0'>
Chad Barb's avatar
   
Chad Barb committed
649
            <tr>
Chad Barb's avatar
   
Chad Barb committed
650
              <td class='contentheader'>";
Chad Barb's avatar
   
Chad Barb committed
651
652
}

653
654
655
#
# Spit out a vanilla page header.
#
656
function PAGEHEADER($title, $view = NULL) {
657
658
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
659
    global $TBMAINSITE;
660
661

    $drewheader = 1;
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677

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

679
    #
680
    # Figure out who is logged in, if anyone.
681
    # 
682
683
684
685
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
686
687
688
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
689
690
691
	}
    }

692
693
694
695
696
697
698
    #
    # If no view options were specified, get the ones for the current user
    #
    if (!$view) {
	$view = GETUSERVIEW();
    }

699
    #
700
701
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
702
703
    # and logout anyone else that is currently logged in!
    #
704
705
706
707
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
708
    }
709
    
710
711
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
712
    if (1) {
713
714
715
716
717
718
719
	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
720

721
722
723
724
725
726
727
728
729
    if (isset($view['hide_banner'])) {
	$nobanner = 1;
    } else {
	$nobanner = 0;
    }
    PAGEBEGINNING( $title, $nobanner );
    if (!isset($view['hide_sidebar'])) {
	WRITESIDEBAR();
    }
Chad Barb's avatar
   
Chad Barb committed
730
    FINISHSIDEBAR();
731
    echo "<h2 class=\"nomargin\">\n";
Chad Barb's avatar
   
Chad Barb committed
732

733
    if ($login_uid && ISADMINISTRATOR()) {
Chad Barb's avatar
   
Chad Barb committed
734
	if (ISADMIN($login_uid)) {
735
	    echo "<a href=toggle.php?target_uid=$login_uid&type=adminoff&value=1>
Chad Barb's avatar
   
Chad Barb committed
736
737
738
739
	             <img src='/redball.gif'
                          border=0 alt='Admin On'></a>\n";
	}
	else {
740
	    echo "<a href=toggle.php?target_uid=$login_uid&type=adminoff&value=0>
Chad Barb's avatar
   
Chad Barb committed
741
742
743
	             <img src='/greenball.gif'
                          border=0 alt='Admin Off'></a>\n";
	}
744
    }
745
746
    $now = date("D M d g:ia T");
    echo "$title</h2></td>\n";
747
    echo "<td class=contentheader align=right>\n";
Robert Ricci's avatar
Robert Ricci committed
748
749
    if ($login_uid) {
	echo "<font size=-1>'<b>$login_uid</b>' Logged in.<br>$now</font>\n";
750
751
    }
    else {
Robert Ricci's avatar
Robert Ricci committed
752
	echo "$now";
Chad Barb's avatar
   
Chad Barb committed
753
754
755
756
    }
    echo "</td>";
    echo "</tr>\n";
    echo "<tr><td colspan=3 class=\"contentbody\" width=*>";
Chad Barb's avatar
   
Chad Barb committed
757
    echo "<!-- begin content -->\n";
758
759
760
    if ($view['show_topbar'] == "plab") {
	WRITEPLABTOPBAR();
    }
761
762
763
764
765
766
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
Chad Barb's avatar
   
Chad Barb committed
767
768
  echo "</td></tr></table>";
  echo "</td></tr></table>";
769
770
771
772
773
}

#
# Spit out a vanilla page footer.
#
774
function PAGEFOOTER($view = NULL) {
775
    global $TBDOCBASE, $TBMAILADDR, $THISHOMEBASE;
Leigh B. Stoller's avatar
Leigh B. Stoller committed
776
    global $TBMAINSITE, $SSL_PROTOCOL;
777

778
779
780
781
    if (!$view) {
	$view = GETUSERVIEW();
    }

782
783
    $today = getdate();
    $year  = $today["year"];
Chad Barb's avatar
   
Chad Barb committed
784

785
786
787
788
789
790
    echo "<!-- end content -->\n";
    if ($view['show_bottombar'] == "plab") {
	WRITEPLABBOTTOMBAR();
    }

    echo "
Chad Barb's avatar
   
Chad Barb committed
791
              </td>
792
793
            </tr>
            <tr>
794
795
796
              <td colspan=2 class=contentbody>\n";
    if (!$view['hide_copyright']) {
	echo "
797
798
	        <center>
                <font size=-1>
799
800
801
802
803
804
		[ <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> ]
805
806
		</font>
		<br>
Chad Barb's avatar
   
Chad Barb committed
807
                <!-- begin copyright -->
808
                <font size=-2>
809
810
811
812
                <a href='$TBDOCBASE/docwrapper.php3?docname=copyright.html'>
                    Copyright &copy; 2000-$year The University of Utah</a>
                </font>
                <br>
813
814
815
		</center>\n";
    }
    echo "
816
                <p align=right>
Chad Barb's avatar
   
Chad Barb committed
817
818
		  <font size=-2>
                    Problems?
819
	            Contact $TBMAILADDR.
Chad Barb's avatar
   
Chad Barb committed
820
821
                  </font>
                </p>
822
                <!-- end copyright -->\n";
Chad Barb's avatar
   
Chad Barb committed
823
824

    ENDPAGE();
825

Leigh B. Stoller's avatar
Leigh B. Stoller committed
826
827
828
    # Plug the home site from all others.
    echo "\n<p><a href=\"www.emulab.net/netemu.php3\"></a>\n";

Chad Barb's avatar
   
Chad Barb committed
829
    echo "</body></html>\n";
830
}
831
832
833
834
835

function PAGEERROR($msg) {
    global $drewheader;

    if (! $drewheader)
836
	PAGEHEADER("Page Error");
837
838
839
840
841
842

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
843
844
845
846
847

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


850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
    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
865
    echo "<!-- begin subpage -->";
Chad Barb's avatar
   
Chad Barb committed
866
    echo "<table class=\"stealth\"
867
	  cellspacing='0' cellpadding='0' width='100%' border='0'>\n
868
            <tr>\n
Chad Barb's avatar
   
Chad Barb committed
869
              <td class=\"stealth\"valign=top>\n";
870
871
872
873
874
875
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
   
Chad Barb committed
876
    echo "<!-- end subpage -->";
877
878
879
880
881
882
883
}

#
# 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
884
885
?>
    <!-- begin submenu -->
886
    <table class='menu' cellpadding="0" cellspacing="0"
Chad Barb's avatar
   
Chad Barb committed
887
	style="margin-right: 6px;" >
Chad Barb's avatar
   
Chad Barb committed
888
889
890
891
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
892
893
894
}

function SUBMENUEND() {
Chad Barb's avatar
   
Chad Barb committed
895
896
897
898
?>
    </table>
    <!-- end submenu -->
  </td>
899
  <td class="stealth" valign=top align=left width='100%'>
Chad Barb's avatar
   
Chad Barb committed
900
<?php
901
902
}

903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
# 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
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937

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

938
939
940
941
942
943
944
945
946
947
948
949
950
951
#
# Get a view, for use with PAGEHEADER and PAGEFOOTER, for the current user
#
function GETUSERVIEW() {
    if (GETUID() && ISPLABUSER()) {
	return array('hide_sidebar' => 1, 'hide_banner' => 1,
	    'show_topbar' => "plab", 'show_bottombar' => 'plab',
	    'hide_copyright' => 1);
    } else {
	# Most users get the default view
	return array();
    }
}

952
?>