version 1.198, 2004/07/12 17:02:07
|
version 1.223, 2004/10/23 00:38:01
|
Line 250 of the element the selection from the se
|
Line 250 of the element the selection from the se
|
=cut |
=cut |
|
|
sub browser_and_searcher_javascript { |
sub browser_and_searcher_javascript { |
|
my ($mode)=@_; |
|
if (!defined($mode)) { $mode='edit'; } |
my $resurl=&lastresurl(); |
my $resurl=&lastresurl(); |
return <<END; |
return <<END; |
|
// <!-- BEGIN LON-CAPA Internal |
var editbrowser = null; |
var editbrowser = null; |
function openbrowser(formname,elementname,only,omit,titleelement) { |
function openbrowser(formname,elementname,only,omit,titleelement) { |
var url = '$resurl/?'; |
var url = '$resurl/?'; |
Line 259 sub browser_and_searcher_javascript {
|
Line 262 sub browser_and_searcher_javascript {
|
url += 'launch=1&'; |
url += 'launch=1&'; |
} |
} |
url += 'catalogmode=interactive&'; |
url += 'catalogmode=interactive&'; |
url += 'mode=edit&'; |
url += 'mode=$mode&'; |
url += 'form=' + formname + '&'; |
url += 'form=' + formname + '&'; |
if (only != null) { |
if (only != null) { |
url += 'only=' + only + '&'; |
url += 'only=' + only + '&'; |
} |
} else { |
|
url += 'only=&'; |
|
} |
if (omit != null) { |
if (omit != null) { |
url += 'omit=' + omit + '&'; |
url += 'omit=' + omit + '&'; |
} |
} else { |
|
url += 'omit=&'; |
|
} |
if (titleelement != null) { |
if (titleelement != null) { |
url += 'titleelement=' + titleelement + '&'; |
url += 'titleelement=' + titleelement + '&'; |
} |
} else { |
|
url += 'titleelement=&'; |
|
} |
url += 'element=' + elementname + ''; |
url += 'element=' + elementname + ''; |
var title = 'Browser'; |
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'; |
options += ',width=700,height=600'; |
editbrowser = open(url,title,options,'1'); |
editbrowser = open(url,title,options,'1'); |
editbrowser.focus(); |
editbrowser.focus(); |
Line 284 sub browser_and_searcher_javascript {
|
Line 293 sub browser_and_searcher_javascript {
|
url += 'launch=1&'; |
url += 'launch=1&'; |
} |
} |
url += 'catalogmode=interactive&'; |
url += 'catalogmode=interactive&'; |
url += 'mode=edit&'; |
url += 'mode=$mode&'; |
url += 'form=' + formname + '&'; |
url += 'form=' + formname + '&'; |
if (titleelement != null) { |
if (titleelement != null) { |
url += 'titleelement=' + titleelement + '&'; |
url += 'titleelement=' + titleelement + '&'; |
} |
} else { |
|
url += 'titleelement=&'; |
|
} |
url += 'element=' + elementname + ''; |
url += 'element=' + elementname + ''; |
var title = 'Search'; |
var title = 'Search'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
Line 296 sub browser_and_searcher_javascript {
|
Line 307 sub browser_and_searcher_javascript {
|
editsearcher = open(url,title,options,'1'); |
editsearcher = open(url,title,options,'1'); |
editsearcher.focus(); |
editsearcher.focus(); |
} |
} |
|
// END LON-CAPA Internal --> |
END |
END |
} |
} |
|
|
Line 481 sub linked_select_forms {
|
Line 493 sub linked_select_forms {
|
my $first = "document.$formname.$firstselectname"; |
my $first = "document.$formname.$firstselectname"; |
# output the javascript to do the changing |
# output the javascript to do the changing |
my $result = ''; |
my $result = ''; |
$result.="<script>\n"; |
$result.="<script type=\"text/javascript\">\n"; |
$result.="var select2data = new Object();\n"; |
$result.="var select2data = new Object();\n"; |
$" = '","'; |
$" = '","'; |
my $debug = ''; |
my $debug = ''; |
Line 609 sub help_open_topic {
|
Line 621 sub help_open_topic {
|
|
|
# Add the graphic |
# Add the graphic |
my $title = &mt('Online Help'); |
my $title = &mt('Online Help'); |
|
my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif"); |
$template .= <<"ENDTEMPLATE"; |
$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 |
ENDTEMPLATE |
if ($text ne '') { $template.='</td></tr></table>' }; |
if ($text ne '') { $template.='</td></tr></table>' }; |
return $template; |
return $template; |
Line 648 sub help_open_menu {
|
Line 661 sub help_open_menu {
|
$width = 620 if (not defined $width); |
$width = 620 if (not defined $width); |
$height = 600 if (not defined $height); |
$height = 600 if (not defined $height); |
my $link=''; |
my $link=''; |
my $title = &mt('Choose your help'); |
my $title = &mt('Get help'); |
my $origurl = $ENV{'REQUEST_URI'}; |
my $origurl = $ENV{'REQUEST_URI'}; |
my $timestamp = time; |
my $timestamp = time; |
foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { |
foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { |
Line 665 sub help_open_menu {
|
Line 678 sub help_open_menu {
|
my $template; |
my $template; |
if ($text ne "") { |
if ($text ne "") { |
$template .= |
$template .= |
"<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<td bgcolor='#448844'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; |
"<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; |
} |
} |
|
my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif"); |
$template .= <<"ENDTEMPLATE"; |
$template .= <<"ENDTEMPLATE"; |
<script> |
<script type="text/javascript"> |
|
//<!-- BEGIN LON-CAPA Internal |
function helpMenu(caller) { |
function helpMenu(caller) { |
if (caller == 'open') { |
if (caller == 'open') { |
newWindow = window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" ) |
newWindow = window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" ) |
Line 685 function helpMenu(caller) {
|
Line 700 function helpMenu(caller) {
|
caller.focus() |
caller.focus() |
} |
} |
} |
} |
|
// END LON-CAPA Internal --> |
</script> |
</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 |
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>' }; |
if ($text ne '') { $template.='</td></tr></table>' }; |
return $template; |
return $template; |
} |
} |
Line 728 sub help_open_bug {
|
Line 757 sub help_open_bug {
|
|
|
# Add the graphic |
# Add the graphic |
my $title = &mt('Report a Bug'); |
my $title = &mt('Report a Bug'); |
|
my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif"); |
$template .= <<"ENDTEMPLATE"; |
$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 |
ENDTEMPLATE |
if ($text ne '') { $template.='</td></tr></table>' }; |
if ($text ne '') { $template.='</td></tr></table>' }; |
return $template; |
return $template; |
Line 772 sub help_open_faq {
|
Line 802 sub help_open_faq {
|
|
|
# Add the graphic |
# Add the graphic |
my $title = &mt('View the FAQ'); |
my $title = &mt('View the FAQ'); |
|
my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif"); |
$template .= <<"ENDTEMPLATE"; |
$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 |
ENDTEMPLATE |
if ($text ne '') { $template.='</td></tr></table>' }; |
if ($text ne '') { $template.='</td></tr></table>' }; |
return $template; |
return $template; |
Line 797 format.
|
Line 828 format.
|
sub csv_translate { |
sub csv_translate { |
my $text = shift; |
my $text = shift; |
$text =~ s/\"/\"\"/g; |
$text =~ s/\"/\"\"/g; |
$text =~ s/\n//g; |
$text =~ s/\n/ /g; |
return $text; |
return $text; |
} |
} |
|
|
Line 848 sub define_excel_formats {
|
Line 879 sub define_excel_formats {
|
$format->{'h2'} = $workbook->add_format(bold=>1, size=>16); |
$format->{'h2'} = $workbook->add_format(bold=>1, size=>16); |
$format->{'h3'} = $workbook->add_format(bold=>1, size=>14); |
$format->{'h3'} = $workbook->add_format(bold=>1, size=>14); |
$format->{'date'} = $workbook->add_format(num_format=> |
$format->{'date'} = $workbook->add_format(num_format=> |
'mmm d yyyy hh:mm AM/PM'); |
'mm/dd/yyyy hh:mm:ss'); |
return $format; |
return $format; |
} |
} |
|
|
Line 1750 if the user does not
|
Line 1781 if the user does not
|
|
|
sub nickname { |
sub nickname { |
my ($uname,$udom)=@_; |
my ($uname,$udom)=@_; |
my %names=&Apache::lonnet::get('environment', |
my %names; |
['nickname','firstname','middlename','lastname','generation'],$udom,$uname); |
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'}; |
my $name=$names{'nickname'}; |
if ($name) { |
if ($name) { |
$name='"'.$name.'"'; |
$name='"'.$name.'"'; |
Line 1777 Gets a users screenname and returns it a
|
Line 1819 Gets a users screenname and returns it a
|
|
|
sub screenname { |
sub screenname { |
my ($uname,$udom)=@_; |
my ($uname,$udom)=@_; |
my %names= |
if ($uname eq $ENV{'user.name'} && |
&Apache::lonnet::get('environment',['screenname'],$udom,$uname); |
$udom eq $ENV{'user.domain'}) {return $ENV{'environment.screenname'};} |
|
my %names=&Apache::lonnet::get('environment',['screenname'],$udom,$uname); |
return $names{'screenname'}; |
return $names{'screenname'}; |
} |
} |
|
|
|
|
# ------------------------------------------------------------- Message Wrapper |
# ------------------------------------------------------------- Message Wrapper |
|
|
sub messagewrapper { |
sub messagewrapper { |
my ($link,$un,$do)=@_; |
my ($link,$username,$domain)=@_; |
return |
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 |
# --------------------------------------------------------------- Notes Wrapper |
|
|
Line 1800 sub noteswrapper {
|
Line 1846 sub noteswrapper {
|
|
|
sub aboutmewrapper { |
sub aboutmewrapper { |
my ($link,$username,$domain,$target)=@_; |
my ($link,$username,$domain,$target)=@_; |
return "<a href='/adm/$domain/$username/aboutme'". |
return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'. |
($target?" target='$target'":'').">$link</a>"; |
($target?' target="$target"':'').' title="'.&mt('View this users personal page').'">'.$link.'</a>'; |
} |
} |
|
|
# ------------------------------------------------------------ Syllabus Wrapper |
# ------------------------------------------------------------ Syllabus Wrapper |
Line 1812 sub syllabuswrapper {
|
Line 1858 sub syllabuswrapper {
|
if ($fontcolor) { |
if ($fontcolor) { |
$linktext='<font color="'.$fontcolor.'">'.$linktext.'</font>'; |
$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 |
=pod |
|
|
=back |
=back |
Line 2295 sub maketime {
|
Line 2360 sub maketime {
|
my %th=@_; |
my %th=@_; |
return POSIX::mktime( |
return POSIX::mktime( |
($th{'seconds'},$th{'minutes'},$th{'hours'}, |
($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)); |
} |
} |
|
|
######################################### |
######################################### |
Line 2366 sub domainlogo {
|
Line 2431 sub domainlogo {
|
my $domain = &determinedomain(shift); |
my $domain = &determinedomain(shift); |
# See if there is a logo |
# See if there is a logo |
if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { |
if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { |
my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
my $logo=&lonhttpdurl("/adm/lonDomLogos/$domain.gif"); |
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
return '<img src="'.$logo.'" alt="'.$domain.'" />'; |
return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort. |
|
'/adm/lonDomLogos/'.$domain.'.gif" alt="'.$domain.'" />'; |
|
} elsif(exists($Apache::lonnet::domaindescription{$domain})) { |
} elsif(exists($Apache::lonnet::domaindescription{$domain})) { |
return $Apache::lonnet::domaindescription{$domain}; |
return $Apache::lonnet::domaindescription{$domain}; |
} else { |
} else { |
Line 2506 END
|
Line 2569 END
|
'<h1>LON-CAPA: '.$title.'</h1>'; |
'<h1>LON-CAPA: '.$title.'</h1>'; |
} elsif ($ENV{'environment.remote'} eq 'off') { |
} elsif ($ENV{'environment.remote'} eq 'off') { |
# No Remote |
# 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', |
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
$forcereg). |
$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. |
'<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></tr></table>'; |
'</b></font></td>'.$roleinfo.'</tr></table>'; |
} |
} |
|
|
# |
# |
Line 2539 $upperleft</td>
|
Line 2618 $upperleft</td>
|
</td></tr> |
</td></tr> |
<tr> |
<tr> |
<td bgcolor="$tabbg" align="right"><font size="2" face="Arial, Helvetica, sans-serif">$realm</font> </td></tr> |
<td bgcolor="$tabbg" align="right"><font size="2" face="Arial, Helvetica, sans-serif">$realm</font> </td></tr> |
</table><br> |
</table><br /> |
ENDBODY |
ENDBODY |
} |
} |
|
|
Line 2680 returns cache-controlling header code
|
Line 2759 returns cache-controlling header code
|
=cut |
=cut |
|
|
sub cacheheader { |
sub cacheheader { |
unless ($ENV{'request.method'} eq 'GET') { return ''; } |
unless ($ENV{'request.method'} eq 'GET') { return ''; } |
my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); |
my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); |
my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> |
my $output .='<meta HTTP-EQUIV="Expires" CONTENT="'.$date.'" /> |
<meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" /> |
<meta HTTP-EQUIV="Cache-control" CONTENT="no-cache" /> |
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />'; |
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache" />'; |
return $output; |
return $output; |
} |
} |
|
|
=pod |
=pod |
Line 2697 specifies header code to not have cache
|
Line 2776 specifies header code to not have cache
|
=cut |
=cut |
|
|
sub no_cache { |
sub no_cache { |
my ($r) = @_; |
my ($r) = @_; |
unless ($ENV{'request.method'} eq 'GET') { return ''; } |
if ($ENV{'REQUEST_METHOD'} ne 'GET' && |
#my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime); |
$ENV{'request.method'} ne 'GET') { return ''; } |
$r->no_cache(1); |
my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime(time)); |
$r->header_out("Pragma" => "no-cache"); |
$r->no_cache(1); |
#$r->header_out("Expires" => $date); |
$r->header_out("Expires" => $date); |
|
$r->header_out("Pragma" => "no-cache"); |
} |
} |
|
|
sub content_type { |
sub content_type { |
Line 3213 sub DrawBarGraph {
|
Line 3293 sub DrawBarGraph {
|
} |
} |
# |
# |
my ($height,$width,$xskip,$bar_width) = (200,120,1,15); |
my ($height,$width,$xskip,$bar_width) = (200,120,1,15); |
if ($NumBars < 10) { |
if ($NumBars < 5) { |
|
$width = 120+$NumBars*25; |
|
$xskip = 1; |
|
$bar_width = 25; |
|
} elsif ($NumBars < 10) { |
$width = 120+$NumBars*15; |
$width = 120+$NumBars*15; |
$xskip = 1; |
$xskip = 1; |
$bar_width = 15; |
$bar_width = 15; |
Line 3496 Inputs:
|
Line 3580 Inputs:
|
sub chartlink { |
sub chartlink { |
my ($linktext, $sname, $sdomain) = @_; |
my ($linktext, $sname, $sdomain) = @_; |
my $link = '<a href="/adm/statistics?reportSelected=student_assessment'. |
my $link = '<a href="/adm/statistics?reportSelected=student_assessment'. |
'&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). |
'&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). |
'&chartoutputmode='.HTML::Entities::encode('html, with all links'). |
'&chartoutputmode='.HTML::Entities::encode('html, with all links'). |
'">'.$linktext.'</a>'; |
'">'.$linktext.'</a>'; |
} |
} |
|
|
Line 3634 sub icon {
|
Line 3718 sub icon {
|
return $iconname; |
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(); |
|
} |
|
|
|
# Escapes strings that may have embedded 's that will be put into |
|
# strings as 'strings'. |
|
sub escape_single { |
|
my ($input) = @_; |
|
$input =~ s/\\/\\\\/g; # Escape the \'s..(must be first)> |
|
$input =~ s/\'/\\\'/g; # Esacpe the 's.... |
|
return $input; |
|
} |
|
|
|
# Same as escape_single, but escape's "'s This |
|
# can be used for "strings" |
|
sub escape_double { |
|
my ($input) = @_; |
|
$input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)> |
|
$input =~ s/\"/\\\"/g; # Esacpe the "s.... |
|
return $input; |
|
} |
|
|
|
# Escapes the last element of a full URL. |
|
sub escape_url { |
|
my ($url) = @_; |
|
my @urlslices = split(/\//, $url); |
|
my $lastitem = &Apache::lonnet::escape(pop(@urlslices)); |
|
return join('/',@urlslices).'/'.$lastitem; |
|
} |
=pod |
=pod |
|
|
=back |
=back |