menu.php3 15.9 KB
Newer Older
1
<?php
Leigh B. Stoller's avatar
Leigh B. Stoller committed
2
3
4
5
6
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2002 University of Utah and the Flux Group.
# 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
23
#
# 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.
#
function WRITESIDEBARBUTTON($text, $base, $link) {
24
    $link = "$base/$link";
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    
    echo "<!-- Table row for button $text -->
          <tr>
            <td valign=center align=left nowrap>
                <b>
         	 <a class=sidebarbutton href=\"$link\">$text</a>\n";
    #
    # XXX these blanks look bad in lynx, but add required
    #     spacing between menu and body
    #
    echo "       &nbsp;&nbsp;\n";

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

#
# WRITESIDEBAR(): Write the menu. The actual menu options the user
# sees depends on the login status and the DB status.
#
function WRITESIDEBAR() {
47
48
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
49
    global $THISHOMEBASE;
50
51
52

    #
    # The document base cannot be a mix of secure and nonsecure.
53
    #
54
55
    echo "<table cellspacing=2 cellpadding=2 border=0 width=150>\n";

56
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
57
58
    WRITESIDEBARBUTTON("Tutorial at SIGCOMM'02 <img src=/new.gif>",
		       $TBDOCBASE, "sc2002tut.php3");
59
    WRITESIDEBARBUTTON("News (Updated Apr 19)", $TBDOCBASE,
60
		       "docwrapper.php3?docname=news.html");
61
62
    WRITESIDEBARBUTTON("Tutorial", $TBDOCBASE, "tutorial/tutorial.php3");
    WRITESIDEBARBUTTON("FAQ", $TBDOCBASE, "faq.php3");
63
    WRITESIDEBARBUTTON("Documentation", $TBDOCBASE, "doc.php3");
64
    WRITESIDEBARBUTTON("Search Documentation", $TBDOCBASE, "search.php3");
65
    WRITESIDEBARBUTTON("Publications", $TBDOCBASE, "pubs.php3");
66
    WRITESIDEBARBUTTON("People", $TBDOCBASE, "people.php3");
67
    WRITESIDEBARBUTTON("The Gallery", $TBDOCBASE, "gallery/gallery.php3");
68
    WRITESIDEBARBUTTON("Projects Using $THISHOMEBASE", $TBDOCBASE,
69
		       "projectlist.php3");
70
71
72
73

    echo "<tr>
            <td height=30 valign=center align=center nowrap>
             <b><span class=sidebarbutton>
74
75
                  Web Interface Options\n";

76
    if ($login_status & CHECKLOGIN_LOGGEDIN) {
77
78
	$freepcs = TBFreePCs();
	
79
80
81
	echo "    <br>($freepcs Free PCs)\n";
    }
    echo "      </span>
82
83
84
85
             </b>
            </td>
          </tr>\n";

86
87
88
89
90
91
92
93
    #
    # 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>",
94
95
			   $TBDOCBASE, "nologins.php3");

96
97
98
99
100
101
102
103
104
	if (!$login_uid || !ISADMIN($login_uid)) {	
	    echo "<tr>
                    <td height=30 valign=center align=center nowrap>
                    <b><span class=sidebarbutton>
                         Please Try Again Later
                       </span>
                    </b>
                 </td>
                </tr>\n";
105
	}
106
107
108
109
    }
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
110
		WRITESIDEBARBUTTON("Change Your Password",
111
				   $TBBASE, "moduserinfo.php3");
112
	    }
113
114
115
116
	    else {
		WRITESIDEBARBUTTON("My $THISHOMEBASE",
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
117
	    
118
		if (ISADMIN($login_uid)) {
119
120
121
122
123
124
125
126
127
128
129
130
131
132
		    WRITESIDEBARBUTTON("New Project Approval",
				       $TBBASE, "approveproject_list.php3");
		}
		if ($login_status & CHECKLOGIN_TRUSTED) {
                    # Only project/group leaders can do these options
		    WRITESIDEBARBUTTON("New User Approval",
				       $TBBASE, "approveuser_form.php3");
		}
		
                #
                # 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.
                #
Leigh B. Stoller's avatar
Leigh B. Stoller committed
133
		WRITESIDEBARBUTTON("Project List",
134
				   $TBBASE, "showproject_list.php3");
135
	    
136
		if (ISADMIN($login_uid)) {
137
138
139
140
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		}
	    
Leigh B. Stoller's avatar
Leigh B. Stoller committed
141
142
		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");
143
144
		WRITESIDEBARBUTTON("Begin an Experiment",
				   $TBBASE, "beginexp.php3");
145
		WRITESIDEBARBUTTON("Update User Information",
146
147
				   $TBBASE, "moduserinfo.php3");
		WRITESIDEBARBUTTON("Node Reservation Status",
148
				   $TBBASE, "nodecontrol_list.php3");
149
150
151
152
153
154
155
		WRITESIDEBARBUTTON("Node Up/Down Status",
				   $TBDOCBASE, "updown.php3");
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
		}
156
	    }
157
	}
158
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
159
160
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
161
	    WRITESIDEBARBUTTON("Update User Information",
162
			       $TBBASE, "moduserinfo.php3");
163
	}
164
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
165
	    WRITESIDEBARBUTTON("Update User Information",
166
			       $TBBASE, "moduserinfo.php3");
167
168
169
170
171
	}
    }
    #
    # Standard options for anyone.
    #
172
    if (! NOLOGINS()) {
173
174
	WRITESIDEBARBUTTON("Start Project", $TBBASE, "newproject.php3");
	WRITESIDEBARBUTTON("Join Project",  $TBBASE, "joinproject.php3");
175
    }
176

177
178
179
180
181
    #
    # Cons up a nice message.
    # 
    switch ($login_status & CHECKLOGIN_STATUSMASK) {
    case CHECKLOGIN_LOGGEDIN:
182
	$login_message = "$login_uid Logged In";
183
184
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
185
	    $login_message = "$login_message<br>(Password Expired!)";
186
187
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
	    $login_message = "$login_message<br>(Unapproved!)";
188
	break;
189
    case CHECKLOGIN_TIMEDOUT:
190
191
	$login_message = "Login Timed Out";
	break;
192
193
    default:
	$login_message = 0;
194
	break;
195
196
197
198
    }

    #
    # Now the login/logout box. Remember, already inside a table.
199
200
    # 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
201
    # http or https, since we do not want to mix them, since they
202
    # cause warnings.
203
    # 
204
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
205
	echo "<tr>
206
207
208
209
210
               <td align=center height=50 valign=center>
                <a href=\"$TBBASE/logout.php3?uid=$login_uid\">
	           <img alt=\"logout\" border=0
                        src=\"$BASEPATH/logoff.gif\"></a>
               </td>
211
212
              </tr>\n";
    }
213
    elseif (!NOLOGINS()) {
214
	echo "<tr>
215
               <td align=center height=50 valign=center>
216
                <a href=\"$TBBASE/login.php3\">
217
218
219
	           <img alt=\"logon\" border=0
                        src=\"$BASEPATH/logon.gif\"></a>
               </td>
220
221
              </tr>\n";
    }
222

223
224
225
226
227
228
229
230
231
232
233
    if ($login_message) {
	echo "<tr>
                <td align=center>
                 <b>
                   <span class=sidebarbutton>
                      $login_message
                   </span>
                 <b>
                </td>
              </tr>\n";
    }
234

235
    #
236
    # MOTD. Set this with the webcontrol script.
237
    #
238
239
    $query_result =
	DBQueryFatal("SELECT message FROM loginmessage");
240
241
242
243
244
    
    if (mysql_num_rows($query_result)) {
    	$row = mysql_fetch_row($query_result);
	$message = $row[0];
    
245
246
	echo "<tr>
                <td align=center>
247
                 <b>
248
249
                   <span class=sidebarbutton>
                    <font size=\"+1\" color=RED>
250
                      $message
251
252
                    </font>
                   </span>
253
                 <b>
254
255
256
                </td>
              </tr>\n";
    }
257
258
259
260
261
262
263
264
265
    echo "</table>
          <br>\n";
}

#
# WRITEBANNER(): write the page banner for a page.
# Called by _STARTPAGE
#
function WRITEBANNER($title) {
266
    global $BANNERCOLOR, $THISPROJECT, $THISHOMEBASE, $BASEPATH;
267
    global $login_uid;
268
269

    echo "<!-- This is the page Banner -->\n";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
270
271

    echo "<table cellpadding=0 cellspacing=0 border=0 width=50%>";
272
    echo "<tr>
273
            <td align=left valign=top width=0%>
274
275
276
             <table cellpadding=5 cellspacing=0 border=0 bgcolor=\"#880000\">
              <tr>
                <td>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
277
                 <b><font size=5 color=white face=Helvetica>
278
                        $THISHOMEBASE
279
280
281
282
283
284
                    </font>
                 </b>
                </td>
              </tr>
             </table>
            </td>
285
            <td align=left valign=top width=70%>
286
287
288
                <table cellpadding=5 cellspacing=0 border=0
                         bgcolor=$BANNERCOLOR>
                  <tr>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
289
                   <td nowrap>
290
                     <b>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
291
                       <font size=5 face=helvetica color=\"#000000\">
292
293
294
295
296
297
298
                            $THISPROJECT
                       </font>
                     </b>
                   </td>
                  <tr>
                </table>
            </td>
299
300
301
302
303
304
305
            <td align=left valign=center width=50%>
                <table cellpadding=0 cellspacing=0 border=0>
                  <tr>
                   <td nowrap align=right>\n";
    if ($login_uid && ISADMININSTRATOR()) {
	if (ISADMIN($login_uid)) {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=1>
306
307
	             <img src='/autostatus-icons/redball.gif'
                          border=0 alt='Admin On'></a>\n";
308
309
310
	}
	else {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=0>
311
312
	             <img src='/autostatus-icons/greenball.gif'
                          border=0 alt='Admin Off'></a>\n";
313
314
315
316
317
318
319
320
321
322
323
324
325
	}
    }
    else {
	echo "       <b>
                       <font size=5 face=helvetica color=\"#000000\">
                            &nbsp
                       </font>
                     </b>\n";
    }
    echo "         </td>
                  <tr>
                </table>
            </td>
326
327
328
329
330
331
332
333
334
          </tr>
          </table>\n";
}

#
# _WRITETITLE(title): write the page title for a page.
# Called by _STARTPAGE
#
function WRITETITLE($title) {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
335
    global $TITLECOLOR, $BASEPATH;
336
337
338
339
    
    echo "<!-- This is the page Title -->
          <table width=\"100%\">
            <tr>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
340
               <td width=\"10%\" align=left>\n";
341
342
343
                 #
                 # Insert a small logo here if you like.
                 #
Leigh B. Stoller's avatar
Leigh B. Stoller committed
344
    
345
    echo "     </td>
346
               <td align=left width=\"90%\">
Leigh B. Stoller's avatar
Leigh B. Stoller committed
347
                   <b><font size=5 color=$TITLECOLOR>$title</font></b>
348
349
350
351
352
353
354
355
356
               </td>
            </tr>
          </table>\n";
}

#
# Spit out a vanilla page header.
#
function PAGEHEADER($title) {
357
358
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
359
    global $TBMAINSITE;
360
361

    $drewheader = 1;
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377

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

379
    #
380
    # Figure out who is logged in, if anyone.
381
    # 
382
383
384
385
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
386
387
388
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
389
390
391
	}
    }

392
    #
393
394
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
395
396
    # and logout anyone else that is currently logged in!
    #
397
398
399
400
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
401
    }
402
    
403
404
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
405
    if (1) {
406
407
408
409
410
411
412
	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"); 
    }
413

414
415
    echo "<html>
          <head>
416
           <title>$THISHOMEBASE - $title</title>\n";
417

418
419
420
421
422
    if ($TBMAINSITE) {
	echo "  <meta NAME=\"keywords\"
                      CONTENT=\"network, emulation, internet, emulator\">
                <meta NAME=\"ROBOTS\" CONTENT=\"NOARCHIVE\">\n";
    }
423
    
424
    echo " <link rel=\"stylesheet\" href=\"$BASEPATH/tbstyle.css\"
425
426
                 type=\"text/css\">
          </head>\n";
427
    echo "<body>\n";
428
429
430
431
432
433
434
435
436
437
438
439

    WRITEBANNER($title);
    WRITETITLE($title);

    echo "<br>
          <!-- Under banner is a table with two columns: menu and content -->
          <table cellpadding=3 width=\"100%\" height=\"60%\" border=2>
          <tr>
           <!-- everthing is in a single row: two tables side-by-side -->

           <!-- MENU -->
           <td valign=top>\n";
440

441
442
443
444
445
446
    WRITESIDEBAR();

    echo " </td>

           <!-- PAGE BODY -->
           <td valign=top align=left width=\"85%\">
Leigh B. Stoller's avatar
Leigh B. Stoller committed
447

448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
               <!-- Content follows this macro ... -->\n";
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
    echo "     <!-- ... end of page content. -->
            </td>
           </tr>
          </table>
          <br>
          <hr size=2 noshade>\n";
}

#
# Spit out a vanilla page footer.
#
function PAGEFOOTER() {
467
    global $TBDOCBASE, $TBMAILADDR, $THISHOMEBASE;
Leigh B. Stoller's avatar
Leigh B. Stoller committed
468
    global $TBMAINSITE, $SSL_PROTOCOL;
469
470
471
472
473

    ENDPAGE();

    echo "<!-- Force full window! -->
	  <base target=_top>
474
          <center>[<a href=\"$TBDOCBASE\">$THISHOMEBASE Home</a>]</center>
475
476
477
478
479
480
481
          <center>
           [<a href=\"http://www.cs.utah.edu/flux/\">Flux Research Group</a>]
           [<a href=\"http://www.cs.utah.edu/\">School of Computing</a>]
           [<a href=\"http://www.utah.edu/\">University of Utah</a>]
          </center>
         <p align=right>
         <font size=-2>
482
483
484
485
486
          Problems? Contact $TBMAILADDR\n";

    if ($TBMAINSITE) {
	echo "<p>
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
487
488
489
490
491
492
493
494

	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";
	}
495
496
497
    }

    echo "</font>
498
499
500
          </body>
          </html>\n";
}
501
502
503
504
505
506
507
508
509
510
511
512

function PAGEERROR($msg) {
    global $drewheader;

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

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566

#
# Sub Page/Menu Stuff
#
function WRITESUBMENUBUTTON($text, $link) {
    echo "<!-- Table row for button $text -->
          <tr>
            <td valign=center align=left nowrap>
                <b>
         	 <a class=sidebarbutton href='$link'>$text</a>\n";
    #
    # XXX these blanks look bad in lynx, but add required
    #     spacing between menu and body
    #
    echo "       &nbsp;&nbsp;\n";

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

#
# Start/End a page within a page. 
#
function SUBPAGESTART() {
    echo "<table cellspacing=2 cellpadding=2 width='85%' border=0>\n
            <tr>\n
              <td valign=top>\n";
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
}

#
# 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) {
    echo "      <table cellspacing=2 cellpadding=2 border=0 width=200>\n
                  <tr>\n
                    <td align=center><b>$title</b></td>\n
                  </tr>\n
                  <tr></tr>\n";
}

function SUBMENUEND() {
    echo "      </table>\n
              </td>\n
              <td valign=top align=left width='85%'>\n";
}

567
?>