![]() ![]() | ![]() |
- lots of \w -> probper regexp replacements
1: # The LearningOnline Network 2: # Login Screen 3: # 4: # $Id: lonlogin.pm,v 1.85 2006/12/05 02:55:56 albertel Exp $ 5: # 6: # Copyright Michigan State University Board of Trustees 7: # 8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA). 9: # 10: # LON-CAPA is free software; you can redistribute it and/or modify 11: # it under the terms of the GNU General Public License as published by 12: # the Free Software Foundation; either version 2 of the License, or 13: # (at your option) any later version. 14: # 15: # LON-CAPA is distributed in the hope that it will be useful, 16: # but WITHOUT ANY WARRANTY; without even the implied warranty of 17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18: # GNU General Public License for more details. 19: # 20: # You should have received a copy of the GNU General Public License 21: # along with LON-CAPA; if not, write to the Free Software 22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23: # 24: # /home/httpd/html/adm/gpl.txt 25: # 26: # http://www.lon-capa.org/ 27: # 28: 29: package Apache::lonlogin; 30: 31: use strict; 32: use Apache::Constants qw(:common); 33: use CGI::Cookie(); 34: use Apache::File (); 35: use Apache::lonnet; 36: use Apache::loncommon(); 37: use Apache::lonauth(); 38: use Apache::lonlocal; 39: use Apache::migrateuser(); 40: use lib '/home/httpd/lib/perl/'; 41: use LONCAPA; 42: 43: 44: sub additional_machine_domains { 45: my @domains; 46: open(my $fh,"<".$Apache::lonnet::perlvar{'lonTabDir'}.'/expected_domains.tab'); 47: while( my $line = <$fh>) { 48: $line =~ s/\s//g; 49: push(@domains,$line); 50: } 51: return @domains; 52: } 53: 54: sub handler { 55: my $r = shift; 56: 57: &Apache::loncommon::get_unprocessed_cgi 58: (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'}, 59: $ENV{'REDIRECT_QUERY_STRING'}), 60: ['interface','username','domain','firsturl','localpath','localres', 61: 'token']); 62: 63: # -- check if they are a migrating user 64: if (defined($env{'form.token'})) { 65: return &Apache::migrateuser::handler($r); 66: } 67: 68: &Apache::loncommon::no_cache($r); 69: &Apache::lonlocal::get_language_handle($r); 70: &Apache::loncommon::content_type($r,'text/html'); 71: $r->send_http_header; 72: return OK if $r->header_only; 73: 74: 75: # Are we re-routing? 76: if (-e '/home/httpd/html/lon-status/reroute.txt') { 77: &Apache::lonauth::reroute($r); 78: return OK; 79: } 80: 81: 82: # -------------------------------- Prevent users from attempting to login twice 83: my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); 84: my $lonid=$cookies{'lonID'}; 85: my $cookie; 86: if ($lonid) { 87: my $handle=&LONCAPA::clean_handle($lonid->value); 88: my $lonidsdir=$r->dir_config('lonIDsDir'); 89: if (-e "$lonidsdir/$handle.id") { 90: # Is there an existing token file? 91: if ($handle=~/^publicuser\_/) { 92: # For "public user" - remove it, we apparently really want to login 93: unlink("$lonidsdir/$handle.id"); 94: } elsif ($handle ne '') { 95: # Indeed, a valid token is found 96: my $start_page = 97: &Apache::loncommon::start_page('Already logged in'); 98: my $end_page = 99: &Apache::loncommon::end_page(); 100: $r->print(<<ENDFAILED); 101: $start_page 102: <h1>You are already logged in</h1> 103: <p>Please either <a href="/adm/roles">continue the current session</a> or 104: <a href="/adm/logout">logout</a>.</p> 105: <p> 106: <a href="/adm/loginproblems.html">Problems?</a></p> 107: $end_page 108: ENDFAILED 109: return OK; 110: } 111: } 112: } 113: 114: # ---------------------------------------------------- No valid token, continue 115: 116: # ---------------------------- Not possible to really login to domain "public" 117: if ($env{'form.domain'} eq 'public') { 118: $env{'form.domain'}=''; 119: $env{'form.username'}=''; 120: } 121: # ----------------------------------------------------------- Process Interface 122: $env{'form.interface'}=~s/\W//g; 123: 124: my $textbrowsers=$r->dir_config('lonTextBrowsers'); 125: my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; 126: 127: foreach (split(/\:/,$textbrowsers)) { 128: if ($httpbrowser=~/$_/i) { 129: $env{'form.interface'}='textual'; 130: } 131: } 132: 133: my $fullgraph=($env{'form.interface'} ne 'textual'); 134: my $port_to_use=$r->dir_config('lonhttpdPort'); 135: if (!defined($port_to_use)) { 136: $port_to_use='8080'; 137: } 138: my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':'.$port_to_use. 139: $r->dir_config('lonIconsURL'); 140: my $domain = $r->dir_config('lonDefDomain'); 141: my $testdomain=(split(/\./,$ENV{'HTTP_HOST'}))[0]; 142: foreach my $posdom (&Apache::lonnet::current_machine_domains(), 143: &additional_machine_domains()) { 144: if (lc($posdom) eq lc($testdomain)) { $domain=$posdom; } 145: } 146: if (($env{'form.domain'}) && 147: ($Apache::lonnet::domaindescription{$env{'form.domain'}})) { 148: $domain=$env{'form.domain'}; 149: } 150: my $role = $r->dir_config('lonRole'); 151: my $loadlim = $r->dir_config('lonLoadLim'); 152: my $lonhost = $r->dir_config('lonHostID'); 153: my $tabdir = $r->dir_config('lonTabDir'); 154: my $include = $r->dir_config('lonIncludes'); 155: my $expire = $r->dir_config('lonExpire'); 156: my $version = $r->dir_config('lonVersion'); 157: my $host_name = $Apache::lonnet::hostname{$lonhost}; 158: 159: # --------------------------------------------- Default values for login fields 160: 161: my $authusername=($env{'form.username'}?$env{'form.username'}:''); 162: my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); 163: 164: # ---------------------------------------------------------- Determine own load 165: my $loadavg; 166: { 167: my $loadfile=Apache::File->new('/proc/loadavg'); 168: $loadavg=<$loadfile>; 169: } 170: $loadavg =~ s/\s.*//g; 171: my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim); 172: my $userloadpercent=&Apache::lonnet::userload(); 173: 174: # ------------------------------------------------------- Do the load balancing 175: my $otherserver= &Apache::lonnet::absolute_url($host_name); 176: my $firsturl= 177: ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'}); 178: # ---------------------------------------- Are we access server and overloaded? 179: if (($role eq 'access') && 180: (($userloadpercent>100.0)||($loadpercent>100.0))) { 181: my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent); 182: if ($unloaded) { $otherserver=$unloaded; } 183: } 184: 185: # ----------------------------------------------------------- Get announcements 186: my $announcements=&Apache::lonnet::getannounce(); 187: # -------------------------------------------------------- Set login parameters 188: 189: my @hexstr=('0','1','2','3','4','5','6','7', 190: '8','9','a','b','c','d','e','f'); 191: my $lkey=''; 192: for (0..7) { 193: $lkey.=$hexstr[rand(15)]; 194: } 195: 196: my $ukey=''; 197: for (0..7) { 198: $ukey.=$hexstr[rand(15)]; 199: } 200: 201: my $lextkey=hex($lkey); 202: if ($lextkey>2147483647) { $lextkey-=4294967296; } 203: 204: my $uextkey=hex($ukey); 205: if ($uextkey>2147483647) { $uextkey-=4294967296; } 206: 207: # -------------------------------------------------------- Store away log token 208: my $logtoken=Apache::lonnet::reply( 209: 'tmpput:'.$ukey.$lkey.'&'.$firsturl, 210: $lonhost); 211: 212: # ------------------- If we cannot talk to ourselves, we are in serious trouble 213: 214: if ($logtoken eq 'con_lost') { 215: my $spares=''; 216: my $last; 217: foreach my $hostid (sort 218: { 219: $Apache::lonnet::hostname{$a} cmp 220: $Apache::lonnet::hostname{$b}; 221: } 222: keys(%Apache::lonnet::spareid)) { 223: next if ($hostid eq $lonhost); 224: next if ($last eq $Apache::lonnet::hostname{$hostid}); 225: $spares.='<br /><font size="+1"><a href="http://'. 226: $Apache::lonnet::hostname{$hostid}. 227: '/adm/login?domain='.$authdomain.'">'. 228: $Apache::lonnet::hostname{$hostid}.'</a>'. 229: ' (preferred)</font>'.$/; 230: $last=$Apache::lonnet::hostname{$hostid}; 231: } 232: $spares.= '<br />'; 233: foreach my $hostid (sort 234: { 235: $Apache::lonnet::hostname{$a} cmp 236: $Apache::lonnet::hostname{$b}; 237: } 238: keys(%Apache::lonnet::hostname)) { 239: next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid}); 240: next if ($last eq $Apache::lonnet::hostname{$hostid}); 241: $spares.='<br /><a href="http://'. 242: $Apache::lonnet::hostname{$hostid}. 243: '/adm/login?domain='.$authdomain.'">'. 244: $Apache::lonnet::hostname{$hostid}.'</a>'; 245: $last=$Apache::lonnet::hostname{$hostid}; 246: } 247: $r->print(<<ENDTROUBLE); 248: <html> 249: <head><title>The LearningOnline Network with CAPA</title></head> 250: <body bgcolor="#FFFFFF"> 251: <img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" /> 252: <h3>This LON-CAPA server is temporarily not available for login</h3> 253: <p>Please attempt to login to one of the following servers:</p>$spares 254: </body> 255: </html> 256: ENDTROUBLE 257: return OK; 258: } 259: 260: # ----------------------------------------------- Apparently we are in business 261: 262: my $domainlogo=&Apache::loncommon::domainlogo($domain); 263: 264: # --------------------------------------------------- Print login screen header 265: $r->print(<<ENDHEADER); 266: <html> 267: <head> 268: <meta HTTP-EQUIV="Refresh" CONTENT="$expire; url=/adm/roles" /> 269: <title>The LearningOnline Network with CAPA Login</title> 270: </head> 271: ENDHEADER 272: # ---------------------------------------------------- Serve out DES JavaScript 273: { 274: my $jsh=Apache::File->new($include."/londes.js"); 275: $r->print(<$jsh>); 276: } 277: 278: # ----------------------------------------------------------- Front page design 279: my $pgbg= 280: ($fullgraph?&Apache::loncommon::designparm('login.pgbg',$domain):'#FFFFFF'); 281: my $font= 282: ($fullgraph?&Apache::loncommon::designparm('login.font',$domain):'#000000'); 283: my $link= 284: ($fullgraph?&Apache::loncommon::designparm('login.link',$domain):'#0000FF'); 285: my $vlink= 286: ($fullgraph?&Apache::loncommon::designparm('login.vlink',$domain):'#0000FF'); 287: my $alink=&Apache::loncommon::designparm('login.alink',$domain); 288: my $mainbg= 289: ($fullgraph?&Apache::loncommon::designparm('login.mainbg',$domain):'#FFFFFF'); 290: my $sidebg= 291: ($fullgraph?&Apache::loncommon::designparm('login.sidebg',$domain):'#FFFFFF'); 292: my $logo=&Apache::loncommon::designparm('login.logo',$domain); 293: my $img=&Apache::loncommon::designparm('login.img',$domain); 294: 295: # ----------------------------------------------------------------------- Texts 296: 297: my %lt=&Apache::lonlocal::texthash( 298: 'un' => 'Username', 299: 'pw' => 'Password', 300: 'dom' => 'Domain', 301: 'perc' => 'percent', 302: 'load' => 'Load', 303: 'userload' => 'User Load', 304: 'about' => 'About LON-CAPA', 305: 'access' => 'Accessibility Options', 306: 'catalog' => 'Course Catalog', 307: 'auth' => 'userauthentication.gif', 308: 'log' => 'Log in', 309: 'help' => 'Log-in Help', 310: 'serv' => 'Server', 311: 'helpdesk' => 'Contact Helpdesk', 312: 'forgotpw' => 'Forgot password?'); 313: # -------------------------------------------------- Change password field name 314: my $now=time; 315: my $forgotpw = &forgotpwdisplay(%lt); 316: my $loginhelp = &loginhelpdisplay(%lt); 317: # ---------------------------------------------------------- Serve rest of page 318: $r->print(<<ENDSCRIPT); 319: 320: <body bgcolor="$pgbg" text="$font" link="$link" vlink="$vlink" alink="$alink" 321: topmargin=0 leftmargin=0 marginwidth=0 marginheight=0> 322: 323: <script language="JavaScript"> 324: function send() 325: { 326: this.document.server.elements.uname.value 327: =this.document.client.elements.uname.value; 328: 329: this.document.server.elements.udom.value 330: =this.document.client.elements.udom.value; 331: 332: this.document.server.elements.imagesuppress.value 333: =this.document.client.elements.imagesuppress.checked; 334: 335: this.document.server.elements.embedsuppress.value 336: =this.document.client.elements.embedsuppress.checked; 337: 338: this.document.server.elements.appletsuppress.value 339: =this.document.client.elements.appletsuppress.checked; 340: 341: this.document.server.elements.fontenhance.value 342: =this.document.client.elements.fontenhance.checked; 343: 344: this.document.server.elements.blackwhite.value 345: =this.document.client.elements.blackwhite.checked; 346: 347: this.document.server.elements.remember.value 348: =this.document.client.elements.remember.checked; 349: 350: uextkey=this.document.client.elements.uextkey.value; 351: lextkey=this.document.client.elements.lextkey.value; 352: initkeys(); 353: 354: this.document.server.elements.upass0.value 355: =crypted(this.document.client.elements.upass$now.value.substr(0,15)); 356: this.document.server.elements.upass1.value 357: =crypted(this.document.client.elements.upass$now.value.substr(15,15)); 358: this.document.server.elements.upass2.value 359: =crypted(this.document.client.elements.upass$now.value.substr(30,15)); 360: 361: this.document.client.elements.uname.value=''; 362: this.document.client.elements.upass$now.value=''; 363: 364: this.document.server.submit(); 365: return false; 366: } 367: </script> 368: ENDSCRIPT 369: 370: if ($fullgraph) { 371: $r->print( 372: '<table width="100%" cellpadding=0 cellspacing=0 border=0>'); 373: } 374: 375: $r->print(<<ENDSERVERFORM); 376: <form name="server" action="$otherserver/adm/authenticate" method="post" target="_top"> 377: <input type="hidden" name="logtoken" value="$logtoken" /> 378: <input type="hidden" name="serverid" value="$lonhost" /> 379: <input type="hidden" name="interface" value="$env{'form.interface'}" /> 380: <input type="hidden" name="uname" value="" /> 381: <input type="hidden" name="upass0" value="" /> 382: <input type="hidden" name="upass1" value="" /> 383: <input type="hidden" name="upass2" value="" /> 384: <input type="hidden" name="udom" value="" /> 385: <input type="hidden" name="imagesuppress" value="" /> 386: <input type="hidden" name="appletsuppress" value="" /> 387: <input type="hidden" name="embedsuppress" value="" /> 388: <input type="hidden" name="fontenhance" value="" /> 389: <input type="hidden" name="blackwhite" value="" /> 390: <input type="hidden" name="remember" value="" /> 391: <input type="hidden" name="localpath" value="$env{'form.localpath'}" /> 392: <input type="hidden" name="localres" value="$env{'form.localres'}" /> 393: </form> 394: ENDSERVERFORM 395: if ($fullgraph) { $r->print(<<ENDTOP); 396: <!-- The LON-CAPA Header --> 397: <tr> 398: 399: <!-- Row 1 Columns 2-4 --> 400: <td width="100%" height=75 colspan=4 align="left" valign="top" bgcolor="$pgbg"><img src="$img" border=0 alt="The Learning Online Network with CAPA" /></td> 401: </tr> 402: 403: <!-- The gray bar that starts the two table frames --> 404: <tr> 405: 406: <!-- Row 2 Column 1 --> 407: <td width=182 height=27 bgcolor="$sidebg"> </td> 408: 409: <!-- Row 2 Column 2 --> 410: <td width=27 height=27 align="left" background="$iconpath/filltop.gif"><img src="$iconpath/upperleft.gif" border=0 alt="" /></td> 411: 412: <!-- Row 2 Column 3 --> 413: <td height=27 background="$iconpath/filltop.gif"><img src="$iconpath/filltop.gif" alt="" /></td> 414: 415: <!-- Row 2 Column 4 --> 416: <td width=27 height=27 align="right" background="$iconpath/filltop.gif"><img src="$iconpath/upperright.gif" border=0 alt="" /></td> 417: </tr> 418: <tr> 419: 420: <!-- A cell that will hold the 'access', 'about', and 'catalog' links --> 421: <!-- Row 3 Column 1 --> 422: <td valign="top" height=60 align="left" bgcolor="$sidebg"> 423: <table cellpadding="0" cellspacing="2" border="0"> 424: <tr> 425: <td> </td> 426: <td><a href="/adm/login?interface=textual"><b>$lt{'access'}</b></a></td> 427: </tr> 428: <tr> 429: <td> </td> 430: <td><a href="/adm/about.html"><b>$lt{'about'}</b></a></td> 431: </tr> 432: <tr> 433: <td> </td> 434: <td><a href="/adm/coursecatalog"><b>$lt{'catalog'}</b></a></td> 435: </tr> 436: <tr> 437: <td colspan="2"> </td> 438: </tr> 439: </table> 440: <!-- The shaded space between the two main columns --> 441: <!-- Row 3 Column 2 --> 442: <td width=27 height=60 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td> 443: 444: <!-- The right main column holding the large LON-CAPA logo--> 445: <!-- Rows 3-4 Column 3 --> 446: <td align="center" valign="top" width="100%" height="100%" bgcolor="$mainbg"> 447: <center> 448: <img src="$logo" alt="" /> 449: </center> 450: </td> 451: 452: <!-- Row 3 Column 4 --> 453: <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td> 454: </tr> 455: <tr> 456: 457: <!-- The entry form --> 458: <!-- Row 4 Column 1 --> 459: <td align="center" valign="middle" bgcolor="$sidebg"> 460: ENDTOP 461: } else { 462: $r->print('<h1>The Learning<i>Online</i> Network with CAPA</h1><h2>Text-based Interface Login</h2>'.$announcements); 463: } 464: $r->print('<form name="client" onsubmit="return(send())">'); 465: unless ($fullgraph) { 466: $r->print(<<ENDACCESSOPTIONS); 467: <h3>Select Accessibility Options</h3> 468: <label><input type="checkbox" name="imagesuppress" /> Suppress rendering of images</label><br /> 469: <label><input type="checkbox" name="appletsuppress" /> Suppress Java applets</label><br /> 470: <label><input type="checkbox" name="embedsuppress" /> Suppress rendering of embedded multimedia</label><br /> 471: <label><input type="checkbox" name="fontenhance" /> Increase font size</label><br /> 472: <label><input type="checkbox" name="blackwhite" /> Switch to black and white mode</label><br /> 473: <input type="checkbox" name="remember" /> Remember these settings for next login<hr /> 474: ENDACCESSOPTIONS 475: } else { 476: $r->print(<<ENDNOOPT); 477: <input type="hidden" name="imagesuppress" value="" /> 478: <input type="hidden" name="embedsuppress" value="" /> 479: <input type="hidden" name="appletsuppress" value="" /> 480: <input type="hidden" name="fontenhance" value="" /> 481: <input type="hidden" name="blackwhite" value="" /> 482: <input type="hidden" name="remember" value="" /> 483: ENDNOOPT 484: } 485: $r->print(<<ENDLOGIN); 486: <input type="hidden" name="lextkey" value="$lextkey"> 487: <input type="hidden" name="uextkey" value="$uextkey"> 488: 489: <!-- Start the sub-table for text and input alignment --> 490: <table border=0 cellspacing=0 cellpadding=0> 491: <tr><td bgcolor="$sidebg" colspan=2><img src="$iconpath/$lt{'auth'}" alt="User Authentication" /></td></tr> 492: <tr> 493: <td bgcolor="$mainbg"><br /><font size=-1><b> $lt{'un'}:</b></font></td> 494: <td bgcolor="$mainbg"><br /><input type="text" name="uname" size="10" value="$authusername" /></td> 495: </tr> 496: <tr> 497: <td bgcolor="$mainbg"><font size=-1><b> $lt{'pw'}:</b></font></td> 498: <td bgcolor="$mainbg"><input type="password" name="upass$now" size="10" /></td> 499: </tr> 500: <tr> 501: <td bgcolor="$mainbg"><font size=-1><b> $lt{'dom'}:</b></font></td> 502: <td bgcolor="$mainbg"><input type="text" name="udom" size="10" value="$authdomain" /></td> 503: </tr> 504: <tr> 505: <td bgcolor="$mainbg"> </td> 506: <td bgcolor="$mainbg" valign="bottom" align="center"> 507: <br /> 508: <input type="submit" value="$lt{'log'}" /> 509: </td> 510: </tr> 511: <tr> 512: <td bgcolor="$mainbg" valign="bottom" align="left" colspan="2"> 513: $loginhelp 514: $forgotpw 515: </td> 516: </tr> 517: </table> 518: <!-- End sub-table --> 519: </form> 520: ENDLOGIN 521: if ($fullgraph) { 522: my $helpdeskscript; 523: my $contactblock = &contactdisplay(\%lt,$version,$authdomain,\$helpdeskscript); 524: $r->print(<<ENDDOCUMENT); 525: </td> 526: 527: <!-- Row 4 Column 2 --> 528: <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td> 529: 530: <!-- Row 4 Column 3 --> 531: <td bgcolor="$mainbg">$announcements</td> 532: 533: <!-- Row 4 Column 4 --> 534: <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td> 535: </tr> 536: <tr> 537: 538: <!-- Row 5 Column 1 --> 539: <td bgcolor="$sidebg" valign="middle" align="left"> 540: <br /> 541: <table border=0 cellspacing=0 cellpadding=0> 542: <tr> 543: <td bgcolor="$sidebg" align="left" valign="top"> 544: <small><b> $lt{'dom'}: </b></small> 545: </td> 546: <td bgcolor="$sidebg" align="left" valign="top"> 547: <small><tt> $domain</tt></small> 548: </td> 549: </tr> 550: <tr> 551: <td bgcolor="$sidebg" align="left" valign="top"> 552: <small><b> $lt{'serv'}: </b></small> 553: </td> 554: <td bgcolor="$sidebg" align="left" valign="top"> 555: <small><tt> $lonhost ($role)</tt></small> 556: </td> 557: </tr> 558: <tr> 559: <td bgcolor="$sidebg" align="left" valign="top"> 560: <small><b> $lt{'load'}: </b></small> 561: </td> 562: <td bgcolor="$sidebg" align="left" valign="top"> 563: <small><tt> $loadpercent $lt{'perc'}</tt></small> 564: </td> 565: </tr> 566: <tr> 567: <td bgcolor="$sidebg" align="left" valign="top"> 568: <small><b> $lt{'userload'}: </b></small> 569: </td> 570: <td bgcolor="$sidebg" align="left" valign="top"> 571: <small><tt> $userloadpercent $lt{'perc'}</tt></small> 572: </td> 573: </tr> 574: </table> 575: <br /> 576: $contactblock 577: </td> 578: 579: <!-- Row 5 Column 2 --> 580: <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td> 581: 582: <!-- Row 5 Column 3 --> 583: <td width="100%" valign="bottom" bgcolor="$mainbg"> 584: $domainlogo 585: </td> 586: 587: <!-- Row 5 Column 4 --> 588: <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td> 589: </tr> 590: <tr> 591: 592: <!-- Row 6 Column 1 --> 593: <td bgcolor="$sidebg"> </td> 594: 595: <!-- Row 6 Column 2 --> 596: <td align="left" background="$iconpath/fillbottom.gif"><img src="$iconpath/lowerleft.gif" alt="" /></td> 597: 598: <!-- Row 6 Column 3 --> 599: <td background="$iconpath/fillbottom.gif"><img src="$iconpath/fillbottom.gif" alt="" /></td> 600: 601: <!-- Row 6 Column 4 --> 602: <td align="right" background="$iconpath/fillbottom.gif"><img src="$iconpath/lowerright.gif" alt="" /></td> 603: </tr> 604: </table> 605: 606: <script type="text/javascript"> 607: // the if prevents the script error if the browser can not handle this 608: if ( document.client.uname ) { document.client.uname.focus(); } 609: </script> 610: $helpdeskscript 611: 612: ENDDOCUMENT 613: } 614: $r->print('</body></html>'); 615: return OK; 616: } 617: 618: sub contactdisplay { 619: my ($lt,$version,$authdomain,$helpdeskscript) = @_; 620: my $contactblock; 621: my $showhelpdesk = 0; 622: my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; 623: if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) { 624: $showhelpdesk = 1; 625: } 626: if ($showhelpdesk) { 627: $contactblock .= '<b> <a href="javascript:helpdesk()"><font size="+1">'.$lt->{'helpdesk'}.'</font></a></b><br />'; 628: my $thisurl = &escape('/adm/login'); 629: $$helpdeskscript = <<"ENDSCRIPT"; 630: <script type="text/javascript"> 631: function helpdesk() { 632: var codedom = document.client.udom.value; 633: if (codedom == '') { 634: codedom = "$authdomain"; 635: } 636: var querystr = "origurl=$thisurl&codedom="+codedom; 637: document.location.href = "/adm/helpdesk?"+querystr; 638: return; 639: } 640: </script> 641: ENDSCRIPT 642: } 643: $contactblock .= <<"ENDBLOCK"; 644: $version 645: ENDBLOCK 646: return $contactblock; 647: } 648: 649: sub forgotpwdisplay { 650: my (%lt) = @_; 651: my $prompt_for_resetpw = 1; 652: if ($prompt_for_resetpw) { 653: return '<br /> <a href="/adm/resetpw">'.$lt{'forgotpw'}.'</a></b><br /><br />'; 654: } 655: return; 656: } 657: 658: sub loginhelpdisplay { 659: my (%lt) = @_; 660: my $login_help = 1; 661: if ($login_help) { 662: return ' <a href="/adm/loginproblems.html">'.$lt{'help'}.'</a></b>'; 663: } 664: return; 665: } 666: 667: 1; 668: __END__