version 1.231, 2009/08/11 13:01:10
|
version 1.253.2.2, 2009/12/08 05:19:08
|
Line 62 use Apache::lonlocal;
|
Line 62 use Apache::lonlocal;
|
use Apache::lonnet; |
use Apache::lonnet; |
use LONCAPA; |
use LONCAPA; |
|
|
|
|
|
sub coursepreflink { |
|
my ($text,$category)=@_; |
|
if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { |
|
return '<a href="/adm/courseprefs?phase=display&actions='.$category.'">'.$text.'</a>'; |
|
} else { |
|
return ''; |
|
} |
|
} |
|
|
|
sub raw_href_to_link { |
|
my ($message)=@_; |
|
$message=~s/(https?\:\/\/[^\s\'\"]+)(\s|$)/<a href="$1"><tt>$1<\/tt><\/a>$2/gi; |
|
return $message; |
|
} |
|
|
############################################## |
############################################## |
############################################## |
############################################## |
|
|
Line 82 sub confirm_success {
|
Line 98 sub confirm_success {
|
.'</span>'."\n"; |
.'</span>'."\n"; |
} else { |
} else { |
return '<span class="LC_success">'."\n" |
return '<span class="LC_success">'."\n" |
.'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('Ok').'" /> '."\n" |
.'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('OK').'" /> '."\n" |
.$message."\n" |
.$message."\n" |
.'</span>'."\n"; |
.'</span>'."\n"; |
} |
} |
Line 111 sub dragmath_button {
|
Line 127 sub dragmath_button {
|
} |
} |
my $buttontext=&mt('Edit Math'); |
my $buttontext=&mt('Edit Math'); |
return <<ENDDRAGMATH; |
return <<ENDDRAGMATH; |
<input type="button" value="$buttontext", onclick="javascript:mathedit('$textarea',document)" />$help_text |
<input type="button" value="$buttontext" onclick="javascript:mathedit('$textarea',document)" />$help_text |
ENDDRAGMATH |
ENDDRAGMATH |
} |
} |
|
|
Line 160 sub authorbombs {
|
Line 176 sub authorbombs {
|
$url=&Apache::lonnet::declutter($url); |
$url=&Apache::lonnet::declutter($url); |
my ($udom,$uname)=($url=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)/}); |
my ($udom,$uname)=($url=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)/}); |
my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom); |
my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom); |
foreach (keys %bombs) { |
foreach my $bomb (keys(%bombs)) { |
if ($_=~/^$udom\/$uname\//) { |
if ($bomb =~ /^$udom\/$uname\//) { |
return '<a href="/adm/bombs/'.$url. |
return '<a href="/adm/bombs/'.$url. |
'"><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/bomb.gif').'" alt="'.&mt('Bomb').'" border="0" /></a>'. |
'"><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/bomb.gif').'" alt="'.&mt('Bomb').'" border="0" /></a>'. |
&Apache::loncommon::help_open_topic('About_Bombs'); |
&Apache::loncommon::help_open_topic('About_Bombs'); |
Line 222 sub select_recent {
|
Line 238 sub select_recent {
|
unless ($value =~/^error\:/) { |
unless ($value =~/^error\:/) { |
my $escaped = &Apache::loncommon::escape_url($value); |
my $escaped = &Apache::loncommon::escape_url($value); |
&Apache::loncommon::inhibit_menu_check(\$escaped); |
&Apache::loncommon::inhibit_menu_check(\$escaped); |
|
if ($area eq 'residx') { |
|
next if ((!&Apache::lonnet::allowed('bre',$value)) && (!&Apache::lonnet::allowed('bro',$value))); |
|
} |
$return.="\n<option value='$escaped'>". |
$return.="\n<option value='$escaped'>". |
&unescape((split(/\&/,$recent{$value}))[1]). |
&unescape((split(/\&/,$recent{$value}))[1]). |
'</option>'; |
'</option>'; |
Line 239 sub get_recent {
|
Line 258 sub get_recent {
|
# Begin filling return_hash with any 'always_include' option |
# Begin filling return_hash with any 'always_include' option |
my %time_hash = (); |
my %time_hash = (); |
my %return_hash = (); |
my %return_hash = (); |
foreach my $item (keys %recent) { |
foreach my $item (keys(%recent)) { |
my ($thistime,$thisvalue)=(split(/\&/,$recent{$item})); |
my ($thistime,$thisvalue)=(split(/\&/,$recent{$item})); |
if ($thistime eq 'always_include') { |
if ($thistime eq 'always_include') { |
$return_hash{$item} = &unescape($thisvalue); |
$return_hash{$item} = &unescape($thisvalue); |
Line 1117 sub r_print {
|
Line 1136 sub r_print {
|
# ------------------------------------------------------- Puts directory header |
# ------------------------------------------------------- Puts directory header |
|
|
sub crumbs { |
sub crumbs { |
my ($uri,$target,$prefix,$form,$size,$noformat,$skiplast)=@_; |
my ($uri,$target,$prefix,$form,$skiplast)=@_; |
if (! defined($size)) { |
|
$size = '+2'; |
|
} |
|
if ($target) { |
if ($target) { |
$target = ' target="'. |
$target = ' target="'. |
&Apache::loncommon::escape_single($target).'"'; |
&Apache::loncommon::escape_single($target).'"'; |
} |
} |
my $output=''; |
my $output='<span class="LC_filename">'; |
unless ($noformat) { $output.='<br /><tt><b>'; } |
$output.=$prefix.'/'; |
$output.='<font size="'.$size.'">'.$prefix.'/'; |
if (($env{'user.adv'}) || ($env{'user.author'})) { |
if ($env{'user.adv'}) { |
my $path=$prefix.'/'; |
my $path=$prefix.'/'; |
foreach my $dir (split('/',$uri)) { |
foreach my $dir (split('/',$uri)) { |
|
if (! $dir) { next; } |
if (! $dir) { next; } |
$path .= $dir; |
$path .= $dir; |
if ($path eq $uri) { |
if ($path eq $uri) { |
if ($skiplast) { |
if ($skiplast) { |
$output.=$dir; |
$output.=$dir; |
last; |
last; |
} |
} |
} else { |
} else { |
$path.='/'; |
$path.='/'; |
} |
} |
my $href_path = &HTML::Entities::encode($path,'<>&"'); |
my $href_path = &HTML::Entities::encode($path,'<>&"'); |
&Apache::loncommon::inhibit_menu_check(\$href_path); |
&Apache::loncommon::inhibit_menu_check(\$href_path); |
if ($form) { |
if ($form) { |
my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();'; |
my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();'; |
$output.=qq{<a href="$href" $target>$dir</a>/}; |
$output.=qq{<a href="$href"$target>$dir</a>/}; |
} else { |
} else { |
$output.=qq{<a href="$href_path" $target>$dir</a>/}; |
$output.=qq{<a href="$href_path"$target>$dir</a>/}; |
} |
} |
} |
} |
} else { |
} else { |
foreach my $dir (split('/',$uri)) { |
foreach my $dir (split('/',$uri)) { |
if (! $dir) { next; } |
if (! $dir) { next; } |
$output.=$dir.'/'; |
$output.=$dir.'/'; |
} |
} |
} |
} |
if ($uri !~ m|/$|) { $output=~s|/$||; } |
if ($uri !~ m|/$|) { $output=~s|/$||; } |
return $output.'</font>'.($noformat?'':'</b></tt><br />'); |
$output.='</span>'; |
|
|
|
return $output; |
} |
} |
|
|
# --------------------- A function that generates a window for the spellchecker |
# --------------------- A function that generates a window for the spellchecker |
Line 1342 returns: nothing
|
Line 1359 returns: nothing
|
############################################################ |
############################################################ |
{ |
{ |
my @Crumbs; |
my @Crumbs; |
|
my %tools = (); |
|
|
sub breadcrumbs { |
sub breadcrumbs { |
my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $CourseBreadcrumbs) = @_; |
my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $CourseBreadcrumbs) = @_; |
Line 1360 returns: nothing
|
Line 1378 returns: nothing
|
# The first one should be the course or a menu link |
# The first one should be the course or a menu link |
if (!defined($menulink)) { $menulink=1; } |
if (!defined($menulink)) { $menulink=1; } |
if ($menulink) { |
if ($menulink) { |
my $description = 'Menu'; |
if ($menulink eq '_nomenu') { |
my $no_mt_descr = 0; |
return unless($last); |
if (exists($env{'request.course.id'}) && |
|
$env{'request.course.id'} ne '') { |
|
$description = |
|
$env{'course.'.$env{'request.course.id'}.'.description'}; |
|
$no_mt_descr = 1; |
|
} |
|
$menulink = { href =>'/adm/menu', |
|
title =>'Go to main menu', |
|
target =>'_top', |
|
text =>$description, |
|
no_mt =>$no_mt_descr, }; |
|
if($last) { |
|
#$last set, so we have some crumbs |
|
unshift(@Crumbs,$menulink); |
|
} else { |
} else { |
#only menulink crumb present |
my $description = 'Menu'; |
$last = $menulink; |
my $no_mt_descr = 0; |
|
$menulink = { href =>'/adm/menu', |
|
title =>'Go to main menu', |
|
target =>'_top', |
|
text =>$description, |
|
no_mt =>$no_mt_descr, }; |
|
if($last) { |
|
#$last set, so we have some crumbs |
|
unshift(@Crumbs,$menulink); |
|
} else { |
|
#only menulink crumb present |
|
$last = $menulink; |
|
} |
} |
} |
} |
} |
my $links = join "", |
my $links = join "", |
Line 1438 returns: nothing
|
Line 1454 returns: nothing
|
.$links; |
.$links; |
} |
} |
|
|
|
#SD START (work in progress!) |
|
add_tools(\$links); |
|
#SD END |
$links = htmltag('div', $links, |
$links = htmltag('div', $links, |
{ id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ; |
{ id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ; |
|
add_advtools(\$links); |
|
|
# Return the @Crumbs stack to what we started with |
# Return the @Crumbs stack to what we started with |
push(@Crumbs,$last); |
push(@Crumbs,$last); |
Line 1450 returns: nothing
|
Line 1470 returns: nothing
|
|
|
sub clear_breadcrumbs { |
sub clear_breadcrumbs { |
undef(@Crumbs); |
undef(@Crumbs); |
|
undef(%tools); |
} |
} |
|
|
sub add_breadcrumb { |
sub add_breadcrumb { |
push (@Crumbs,@_); |
push(@Crumbs,@_); |
|
} |
|
|
|
|
|
#SD START (work in progress!) |
|
sub add_breadcrumb_tool { |
|
my ($category, $html) = @_; |
|
return unless $html; |
|
if (!defined(%tools)) { |
|
my %tools = ( A => [], B => [], C => []); |
|
} |
|
push @{$tools{$category}}, $html; |
|
} |
|
|
|
sub clear_breadcrumb_tools { |
|
undef(%tools); |
|
} |
|
|
|
sub add_tools { |
|
my ($links) = @_; |
|
return unless defined %tools; |
|
my $html = '<ul class="LC_bct">'; |
|
for my $category ('A','B') { |
|
$html .= '<li class="LC_breadcrumb_tools">' |
|
. '<ul class="LC_breadcrumb_tools' |
|
. " LC_breadcrumb_tools_$category\">"; |
|
for my $item (@{$tools{$category}}){ |
|
#SD ugly! I'll fix that later on |
|
$item =~ s/align="(right|left)"//; |
|
$item =~ s/<span(.*?)\/span>//; |
|
$html .= "<li>$item</li>"; |
|
} |
|
$html .= '</ul></li>'; |
|
if ($category eq 'A') { $html .= "<li>$$links</li>"; } |
|
} |
|
$$links = $html.'</ul>'; |
|
} |
|
|
|
sub add_advtools { |
|
my ($links) = @_; |
|
return unless (defined $tools{'C'}) and (scalar (@{$tools{'C'}}) > 0); |
|
my $html = start_funclist(); |
|
for my $item (@{$tools{'C'}}){ |
|
next unless $item; |
|
$item =~ s/align="(right|left)"//; |
|
$html .= add_item_funclist($item); |
|
} |
|
$html .= end_funclist(); |
|
$html = Apache::loncommon::head_subbox($html); |
|
$$links .= $html; |
} |
} |
|
#SD END |
|
|
} # End of scope for @Crumbs |
} # End of scope for @Crumbs |
|
|
Line 1547 END
|
Line 1618 END
|
} |
} |
|
|
sub row_title { |
sub row_title { |
my ($title,$css_title_class,$css_value_class) = @_; |
my ($title,$css_title_class,$css_value_class, $css_value_furtherAttributes) = @_; |
$row_count[0]++; |
$row_count[0]++; |
my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row'; |
my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row'; |
$css_title_class ||= 'LC_pick_box_title'; |
$css_title_class ||= 'LC_pick_box_title'; |
Line 1559 sub row_title {
|
Line 1630 sub row_title {
|
$title .= ':'; |
$title .= ':'; |
} |
} |
my $output = <<"ENDONE"; |
my $output = <<"ENDONE"; |
<tr class="LC_pick_box_row"> |
<tr class="LC_pick_box_row" $css_value_furtherAttributes> |
<td $css_title_class> |
<td $css_title_class> |
$title |
$title |
</td> |
</td> |
Line 1590 ENDTWO
|
Line 1661 ENDTWO
|
|
|
sub role_select_row { |
sub role_select_row { |
my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_; |
my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_; |
|
my $crstype = 'Course'; |
|
if ($cdom ne '' && $cnum ne '') { |
|
$crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum); |
|
} |
my $output; |
my $output; |
if (defined($title)) { |
if (defined($title)) { |
$output = &row_title($title,$css_class); |
$output = &row_title($title,$css_class); |
Line 1614 sub role_select_row {
|
Line 1689 sub role_select_row {
|
$plrole = &mt('Custom Role'); |
$plrole = &mt('Custom Role'); |
} |
} |
} else { |
} else { |
$plrole=&Apache::lonnet::plaintext($role); |
$plrole=&Apache::lonnet::plaintext($role,$crstype); |
} |
} |
if (($role ne 'cr') || (!$show_separate_custom)) { |
if (($role ne 'cr') || (!$show_separate_custom)) { |
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
Line 1629 sub role_select_row {
|
Line 1704 sub role_select_row {
|
|
|
sub course_select_row { |
sub course_select_row { |
my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles, |
my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles, |
$css_class) = @_; |
$css_class,$crstype) = @_; |
my $output = &row_title($title,$css_class); |
my $output = &row_title($title,$css_class); |
$output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles); |
$output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype); |
$output .= &row_closure(); |
$output .= &row_closure(); |
return $output; |
return $output; |
} |
} |
|
|
sub course_selection { |
sub course_selection { |
my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_; |
my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype) = @_; |
my $output = qq| |
my $output = qq| |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
Line 1666 sub course_selection {
|
Line 1741 sub course_selection {
|
// ]]> |
// ]]> |
</script> |
</script> |
|; |
|; |
|
|
|
my ($allcrs,$pickspec); |
|
if ($crstype eq 'Community') { |
|
$allcrs = &mt('All communities'); |
|
$pickspec = &mt('Pick specific communities:'); |
|
} else { |
|
$allcrs = &mt('All courses'); |
|
$pickspec = &mt('Pick specific course(s):'); |
|
} |
|
|
my $courseform='<b>'.&Apache::loncommon::selectcourse_link |
my $courseform='<b>'.&Apache::loncommon::selectcourse_link |
($formname,'pickcourse','pickdomain','coursedesc','',1).'</b>'; |
($formname,'pickcourse','pickdomain','coursedesc','',1,$crstype).'</b>'; |
$output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.&mt('All courses').'<br />'; |
$output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.$allcrs.'<br />'; |
if ($totcodes > 0) { |
if ($totcodes > 0) { |
my $numtitles = @$codetitles; |
my $numtitles = @$codetitles; |
if ($numtitles > 0) { |
if ($numtitles > 0) { |
Line 1713 sub course_selection {
|
Line 1798 sub course_selection {
|
$output .= '</tr></table><br />'; |
$output .= '</tr></table><br />'; |
} |
} |
} |
} |
$output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."','dccourse','dcdomain','coursedesc','','1'".')" />'.&mt('Pick specific course(s):').' '.$courseform.' <input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n"; |
$output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."','dccourse','dcdomain','coursedesc','','1','$crstype'".')" />'.$pickspec.' '.$courseform.' <input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n"; |
return $output; |
return $output; |
} |
} |
|
|
Line 1801 sub course_custom_roles {
|
Line 1886 sub course_custom_roles {
|
|
|
# topic_bar |
# topic_bar |
# |
# |
# Generates a div containing a numbered (static image) followed by a title |
# Generates a div containing an (optional) number with a white background followed by a |
# with a background color defined in the corresponding CSS: LC_topic_bar |
# title with a background color defined in the corresponding CSS: LC_topic_bar |
# |
# Inputs: |
|
# 1. number to display. |
|
# If input for number is empty only the title will be displayed. |
|
# 2. title text to display. |
|
# Outputs - a scalar containing html mark-up for the div. |
|
|
sub topic_bar { |
sub topic_bar { |
my ($imgnum,$title) = @_; |
my ($num,$title) = @_; |
return '<div class="LC_topic_bar">' |
my $number = ''; |
.'<img src="/res/adm/pages/bl_step'.$imgnum.'.gif"' |
if ($num ne '') { |
.' alt="'.&mt('Step [_1]',$imgnum).'" />' |
$number = '<span>'.$num.'</span>'; |
.' '.$title |
} |
.'</div>'; |
return '<div class="LC_topic_bar">'.$number.$title.'</div>'; |
} |
} |
|
|
############################################## |
############################################## |
Line 1945 sub set_form_elements {
|
Line 2035 sub set_form_elements {
|
$values{$name}[$i] =~ s/([\r\n\f]+)/\\n/g; |
$values{$name}[$i] =~ s/([\r\n\f]+)/\\n/g; |
$values{$name}[$i] =~ s/"/\\"/g; |
$values{$name}[$i] =~ s/"/\\"/g; |
} |
} |
if ($$elements{$name} eq 'text') { |
if (($$elements{$name} eq 'text') || ($$elements{$name} eq 'hidden')) { |
my $numvalues = @{$values{$name}}; |
my $numvalues = @{$values{$name}}; |
if ($numvalues > 1) { |
if ($numvalues > 1) { |
my $valuestring = join('","',@{$values{$name}}); |
my $valuestring = join('","',@{$values{$name}}); |
Line 1980 sub set_form_elements {
|
Line 2070 sub set_form_elements {
|
$output .= qq| |
$output .= qq| |
if (courseForm.elements['$name'].value == "$value") { |
if (courseForm.elements['$name'].value == "$value") { |
courseForm.elements['$name'].checked = true; |
courseForm.elements['$name'].checked = true; |
|
} else { |
|
courseForm.elements['$name'].checked = false; |
}|; |
}|; |
} |
} |
} |
} |
Line 2021 sub set_form_elements {
|
Line 2113 sub set_form_elements {
|
} |
} |
} |
} |
$output .= " |
$output .= " |
|
return; |
}\n"; |
}\n"; |
return $output; |
return $output; |
} |
} |
Line 2194 sub generate_menu {
|
Line 2287 sub generate_menu {
|
# create the markup for the current $link and push it into @links. |
# create the markup for the current $link and push it into @links. |
# each entry consists of an image and a text optionally followed |
# each entry consists of an image and a text optionally followed |
# by a help link. |
# by a help link. |
push @links, $li->( |
push(@links,$li->( |
$a->( |
$a->( |
$img->("", { |
$img->("", { |
class => "LC_noBorder LC_middle", |
class => "LC_noBorder LC_middle", |
Line 2212 sub generate_menu {
|
Line 2305 sub generate_menu {
|
}). |
}). |
(defined($$link{help}) ? |
(defined($$link{help}) ? |
Apache::loncommon::help_open_topic($$link{help}) : ''), |
Apache::loncommon::help_open_topic($$link{help}) : ''), |
{class => "LC_menubuttons_inline_text"}); |
{class => "LC_menubuttons_inline_text"})); |
} |
} |
|
|
# wrap categorytitle in <h3>, concatenate with |
# wrap categorytitle in <h3>, concatenate with |
Line 2222 sub generate_menu {
|
Line 2315 sub generate_menu {
|
# such that each element looks like: |
# such that each element looks like: |
# <div><h3>title</h3><ul><li>...</li>...</ul></div> |
# <div><h3>title</h3><ul><li>...</li>...</ul></div> |
# the category won't be added if there aren't any links |
# the category won't be added if there aren't any links |
push @categories, |
push(@categories, |
$div->($h3->(mt($$category{categorytitle}), {class=>"LC_hcell"}). |
$div->($h3->(mt($$category{categorytitle}), {class=>"LC_hcell"}). |
$ul->(join('' ,@links), {class =>"LC_ListStyleNormal" }), |
$ul->(join('' ,@links), {class =>"LC_ListStyleNormal" }), |
{class=>"LC_Box LC_400Box"}) if scalar(@links); |
{class=>"LC_Box LC_400Box"})) if scalar(@links); |
} |
} |
|
|
# wrap the joined @categories in another <div> (column layout) |
# wrap the joined @categories in another <div> (column layout) |
Line 2268 Returns: HTML code with function list st
|
Line 2361 Returns: HTML code with function list st
|
sub start_funclist { |
sub start_funclist { |
my($legendtext)=@_; |
my($legendtext)=@_; |
$legendtext=&mt('Functions') if !$legendtext; |
$legendtext=&mt('Functions') if !$legendtext; |
return "<fieldset>\n<legend>$legendtext</legend>\n" |
return '<ul class="LC_funclist"><li style="font-weight:bold; margin-left:0.8em;">'.$legendtext.'</li>'."\n"; |
.'<ul class="LC_funclist">'."\n"; |
|
} |
} |
|
|
|
|
Line 2327 Returns: HTML code with function list en
|
Line 2419 Returns: HTML code with function list en
|
############################################## |
############################################## |
|
|
sub end_funclist { |
sub end_funclist { |
my($r)=@_; |
return "</ul>\n"; |
return "</ul>\n</fieldset>\n"; |
|
} |
} |
|
|
1; |
1; |