--- loncom/interface/loncommon.pm 2004/07/03 19:12:41 1.195 +++ loncom/interface/loncommon.pm 2004/10/12 23:26:48 1.219 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.195 2004/07/03 19:12:41 albertel Exp $ +# $Id: loncommon.pm,v 1.219 2004/10/12 23:26:48 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -250,8 +250,11 @@ of the element the selection from the se =cut sub browser_and_searcher_javascript { + my ($mode)=@_; + if (!defined($mode)) { $mode='edit'; } my $resurl=&lastresurl(); return <<END; +// <!-- BEGIN LON-CAPA Internal var editbrowser = null; function openbrowser(formname,elementname,only,omit,titleelement) { var url = '$resurl/?'; @@ -259,20 +262,26 @@ sub browser_and_searcher_javascript { url += 'launch=1&'; } url += 'catalogmode=interactive&'; - url += 'mode=edit&'; + url += 'mode=$mode&'; url += 'form=' + formname + '&'; if (only != null) { url += 'only=' + only + '&'; - } + } else { + url += 'only=&'; + } if (omit != null) { url += 'omit=' + omit + '&'; - } + } else { + url += 'omit=&'; + } if (titleelement != null) { url += 'titleelement=' + titleelement + '&'; - } + } else { + url += 'titleelement=&'; + } url += 'element=' + elementname + ''; var title = 'Browser'; - var options = 'scrollbars=1,resizable=1,menubar=0'; + var options = 'scrollbars=1,resizable=1,menubar=1,location=1'; options += ',width=700,height=600'; editbrowser = open(url,title,options,'1'); editbrowser.focus(); @@ -284,11 +293,13 @@ sub browser_and_searcher_javascript { url += 'launch=1&'; } url += 'catalogmode=interactive&'; - url += 'mode=edit&'; + url += 'mode=$mode&'; url += 'form=' + formname + '&'; if (titleelement != null) { url += 'titleelement=' + titleelement + '&'; - } + } else { + url += 'titleelement=&'; + } url += 'element=' + elementname + ''; var title = 'Search'; var options = 'scrollbars=1,resizable=1,menubar=0'; @@ -296,6 +307,7 @@ sub browser_and_searcher_javascript { editsearcher = open(url,title,options,'1'); editsearcher.focus(); } +// END LON-CAPA Internal --> END } @@ -481,7 +493,7 @@ sub linked_select_forms { my $first = "document.$formname.$firstselectname"; # output the javascript to do the changing my $result = ''; - $result.="<script>\n"; + $result.="<script type=\"text/javascript\">\n"; $result.="var select2data = new Object();\n"; $" = '","'; my $debug = ''; @@ -609,8 +621,9 @@ sub help_open_topic { # Add the graphic my $title = &mt('Online Help'); + my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)" /></a> + <a href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -648,7 +661,7 @@ sub help_open_menu { $width = 620 if (not defined $width); $height = 600 if (not defined $height); my $link=''; - my $title = &mt('Choose your help'); + my $title = &mt('Get help'); my $origurl = $ENV{'REQUEST_URI'}; my $timestamp = time; foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { @@ -660,10 +673,18 @@ sub help_open_menu { } else { $link = "javascript:helpMenu('display')"; } - my $banner_link = "/adm/helpmenu?page=banner&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp"; + my $banner_link = "/adm/helpmenu?page=banner&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp&stayonpage=$stayOnPage"; my $details_link = "/adm/helpmenu?page=body&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp"; - my $template .= <<"ENDTEMPLATE"; - <script> + my $template; + if ($text ne "") { + $template .= + "<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>". + "<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; + } + my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif"); + $template .= <<"ENDTEMPLATE"; + <script type="text/javascript"> +//<!-- BEGIN LON-CAPA Internal function helpMenu(caller) { if (caller == 'open') { newWindow = window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" ) @@ -679,9 +700,24 @@ function helpMenu(caller) { caller.focus() } } +// END LON-CAPA Internal --> </script> - <a href="$link" title="$title"><image src="/adm/lonMisc/smallFAQ.gif" border="0" alt="(Help Menu)" /></a> + <a href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help Menu)" /></a> ENDTEMPLATE + if ($component_help) { + if (!$text) { + $template=&help_open_topic($component_help,undef,$stayOnPage, + $width,$height).' '.$template; + } else { + my $help_text; + $help_text=&Apache::lonnet::unescape($topic); + $template='<table><tr><td>'. + &help_open_topic($component_help,$help_text,$stayOnPage, + $width,$height).'</td><td>'.$template. + '</td></tr></table>'; + } + } + if ($text ne '') { $template.='</td></tr></table>' }; return $template; } @@ -721,8 +757,9 @@ sub help_open_bug { # Add the graphic my $title = &mt('Report a Bug'); + my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/lonMisc/smallBug.gif" border="0" alt="(Bug: $topic)" /></a> + <a href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -765,8 +802,9 @@ sub help_open_faq { # Add the graphic my $title = &mt('View the FAQ'); + my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif"); $template .= <<"ENDTEMPLATE"; - <a href="$link" title="$title"><image src="/adm/lonMisc/smallFAQ.gif" border="0" alt="(FAQ: $topic)" /></a> + <a href="$link" title="$title"><img src="$faqicon" border="0" alt="(FAQ: $topic)" /></a> ENDTEMPLATE if ($text ne '') { $template.='</td></tr></table>' }; return $template; @@ -790,7 +828,7 @@ format. sub csv_translate { my $text = shift; $text =~ s/\"/\"\"/g; - $text =~ s/\n//g; + $text =~ s/\n/ /g; return $text; } @@ -841,7 +879,7 @@ sub define_excel_formats { $format->{'h2'} = $workbook->add_format(bold=>1, size=>16); $format->{'h3'} = $workbook->add_format(bold=>1, size=>14); $format->{'date'} = $workbook->add_format(num_format=> - 'mmm d yyyy hh:mm AM/PM'); + 'mm/dd/yyyy hh:mm:ss'); return $format; } @@ -1743,8 +1781,19 @@ if the user does not sub nickname { my ($uname,$udom)=@_; - my %names=&Apache::lonnet::get('environment', - ['nickname','firstname','middlename','lastname','generation'],$udom,$uname); + my %names; + if ($uname eq $ENV{'user.name'} && + $udom eq $ENV{'user.domain'}) { + %names=('nickname' => $ENV{'environment.nickname'} , + 'firstname' => $ENV{'environment.firstname'} , + 'middlename' => $ENV{'environment.middlename'}, + 'lastname' => $ENV{'environment.lastname'} , + 'generation' => $ENV{'environment.generation'}); + } else { + %names=&Apache::lonnet::get('environment', + ['nickname','firstname','middlename', + 'lastname','generation'],$udom,$uname); + } my $name=$names{'nickname'}; if ($name) { $name='"'.$name.'"'; @@ -1770,17 +1819,21 @@ Gets a users screenname and returns it a sub screenname { my ($uname,$udom)=@_; - my %names= - &Apache::lonnet::get('environment',['screenname'],$udom,$uname); + if ($uname eq $ENV{'user.name'} && + $udom eq $ENV{'user.domain'}) {return $ENV{'environment.screenname'};} + my %names=&Apache::lonnet::get('environment',['screenname'],$udom,$uname); return $names{'screenname'}; } + # ------------------------------------------------------------- Message Wrapper sub messagewrapper { - my ($link,$un,$do)=@_; + my ($link,$username,$domain)=@_; return -"<a href='/adm/email?compose=individual&recname=$un&recdom=$do'>$link</a>"; + '<a href="/adm/email?compose=individual&'. + 'recname='.$username.'&recdom='.$domain.'" '. + 'title="'.&mt('Send message').'">'.$link.'</a>'; } # --------------------------------------------------------------- Notes Wrapper @@ -1793,8 +1846,8 @@ sub noteswrapper { sub aboutmewrapper { my ($link,$username,$domain,$target)=@_; - return "<a href='/adm/$domain/$username/aboutme'". - ($target?" target='$target'":'').">$link</a>"; + return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'. + ($target?' target="$target"':'').' title="'.&mt('View this users personal page').'">'.$link.'</a>'; } # ------------------------------------------------------------ Syllabus Wrapper @@ -1805,9 +1858,28 @@ sub syllabuswrapper { if ($fontcolor) { $linktext='<font color="'.$fontcolor.'">'.$linktext.'</font>'; } - return "<a href='/public/$domain/$coursedir/syllabus'>$linktext</a>"; + return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>}; } +sub track_student_link { + my ($linktext,$sname,$sdom,$target) = @_; + my $link ="/adm/trackstudent"; + my $title = 'View recent activity'; + if (defined($sname) && $sname !~ /^\s*$/ && + defined($sdom) && $sdom !~ /^\s*$/) { + $link .= "?selected_student=$sname:$sdom"; + $title .= ' of this student'; + } + if (defined($target) && $target !~ /^\s*$/) { + $target = qq{target="$target"}; + } else { + $target = ''; + } + return qq{<a href="$link" title="$title" $target>$linktext</a>}; +} + + + =pod =back @@ -1874,6 +1946,9 @@ returns description of a specified copyr sub copyrightdescription { return &mt($cprtag{shift(@_)}); } + +=pod + =item * source_copyrightids() returns list of all source copyrights @@ -2285,7 +2360,7 @@ sub maketime { my %th=@_; return POSIX::mktime( ($th{'seconds'},$th{'minutes'},$th{'hours'}, - $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,$th{'dlsav'})); + $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1)); } ######################################### @@ -2356,10 +2431,8 @@ sub domainlogo { my $domain = &determinedomain(shift); # See if there is a logo if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { - my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; - if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } - return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort. - '/adm/lonDomLogos/'.$domain.'.gif" alt="'.$domain.'" />'; + my $logo=&lonhttpdurl("/adm/lonDomLogos/$domain.gif"); + return '<img src="'.$logo.'" alt="'.$domain.'" />'; } elsif(exists($Apache::lonnet::domaindescription{$domain})) { return $Apache::lonnet::domaindescription{$domain}; } else { @@ -2496,10 +2569,26 @@ END '<h1>LON-CAPA: '.$title.'</h1>'; } elsif ($ENV{'environment.remote'} eq 'off') { # No Remote + my $roleinfo=(<<ENDROLE); +<td bgcolor="$tabbg" align="right"> +<p> +<font size="2" face="Arial, Helvetica, sans-serif"> + $ENV{'environment.firstname'} + $ENV{'environment.middlename'} + $ENV{'environment.lastname'} + $ENV{'environment.generation'} + </font> +<br /> +<font size="2" face="Arial, Helvetica, sans-serif">$role</font> +<br /> +<font size="2" face="Arial, Helvetica, sans-serif">$realm</font> +</p> +</td> +ENDROLE return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', $forcereg). - '<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td bgcolor="'.$tabbg.'"><font face="Arial, Helvetica, sans-serif" size="+3" color="'.$font.'"><b>'.$title. -'</b></font></td></tr></table>'; + '<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'"><font face="Arial, Helvetica, sans-serif" size="+3" color="'.$font.'"><b>'.$title. +'</b></font></td>'.$roleinfo.'</tr></table>'; } # @@ -2529,7 +2618,7 @@ $upperleft</td> </td></tr> <tr> <td bgcolor="$tabbg" align="right"><font size="2" face="Arial, Helvetica, sans-serif">$realm</font> </td></tr> -</table><br> +</table><br /> ENDBODY } @@ -2670,12 +2759,12 @@ returns cache-controlling header code =cut sub cacheheader { - unless ($ENV{'request.method'} eq 'GET') { return ''; } - my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); - my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> + unless ($ENV{'request.method'} eq 'GET') { return ''; } + my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); + my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> <meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" /> <meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />'; - return $output; + return $output; } =pod @@ -2687,12 +2776,13 @@ specifies header code to not have cache =cut sub no_cache { - my ($r) = @_; - unless ($ENV{'request.method'} eq 'GET') { return ''; } - #my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); - $r->no_cache(1); - $r->header_out("Pragma" => "no-cache"); - #$r->header_out("Expires" => $date); + my ($r) = @_; + if ($ENV{'REQUEST_METHOD'} ne 'GET' && + $ENV{'request.method'} ne 'GET') { return ''; } + my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime(time)); + $r->no_cache(1); + $r->header_out("Expires" => $date); + $r->header_out("Pragma" => "no-cache"); } sub content_type { @@ -3486,8 +3576,8 @@ Inputs: sub chartlink { my ($linktext, $sname, $sdomain) = @_; my $link = '<a href="/adm/statistics?reportSelected=student_assessment'. - '&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). - '&chartoutputmode='.HTML::Entities::encode('html, with all links'). + '&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). + '&chartoutputmode='.HTML::Entities::encode('html, with all links'). '">'.$linktext.'</a>'; } @@ -3624,6 +3714,20 @@ sub icon { return $iconname; } +sub lonhttpdurl { + my ($url)=@_; + my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'}; + if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; } + return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url; +} + +sub connection_aborted { + my ($r)=@_; + $r->print(" ");$r->rflush(); + my $c = $r->connection; + return $c->aborted(); +} + =pod =back