version 1.81, 2008/12/06 12:49:18
|
version 1.97, 2009/11/19 14:05:46
|
Line 99 sub handler {
|
Line 99 sub handler {
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/whatsnew', |
({href=>'/adm/whatsnew', |
text=>"Display Action Items"}); |
text=>"What's New?"}); |
if (($command eq 'chgthreshold') && $checkallowed{'abovethreshold'}) { |
if (($command eq 'chgthreshold') && $checkallowed{'abovethreshold'}) { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>'/adm/whatsnew?command=chgthreshold&refpage='.$refpage, |
({href=>'/adm/whatsnew?command=chgthreshold&refpage='.$refpage, |
Line 194 sub display_main_box {
|
Line 194 sub display_main_box {
|
); |
); |
my %initpage = &Apache::lonlocal::texthash ( |
my %initpage = &Apache::lonlocal::texthash ( |
firstres => "first resource in the $lctype", |
firstres => "first resource in the $lctype", |
whatsnew => "what's new? page", |
whatsnew => "What's New Page", |
userpref => 'your general user preferences', |
userpref => 'your general user preferences', |
coursespecific => "specific setting for this $lctype", |
coursespecific => "specific setting for this $lctype", |
); |
); |
Line 267 END
|
Line 267 END
|
'; |
'; |
} |
} |
my $course_type=&Apache::loncommon::course_type(); |
my $course_type=&Apache::loncommon::course_type(); |
return &Apache::loncommon::start_page($course_type.' Action Items', |
return &Apache::loncommon::start_page("What's New?", |
$scripttag); |
$scripttag); |
} |
} |
|
|
Line 288 sub display_actions_box {
|
Line 288 sub display_actions_box {
|
my $lctype = lc($crstype); |
my $lctype = lc($crstype); |
my %stulabel = ( |
my %stulabel = ( |
'Course' => 'students', |
'Course' => 'students', |
'Group' => 'members', |
'Community' => 'members', |
); |
); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'yacc' => 'You are accessing an invalid course', |
'yacc' => 'You are accessing an invalid course', |
Line 327 sub display_actions_box {
|
Line 327 sub display_actions_box {
|
my %threshold = (); |
my %threshold = (); |
my %pagedesc = &Apache::lonlocal::texthash ( |
my %pagedesc = &Apache::lonlocal::texthash ( |
firstres => 'First resource', |
firstres => 'First resource', |
whatsnew => "What's New? page", |
whatsnew => "What's New Page", |
userpref => 'user preference', |
userpref => 'user preference', |
coursespecific => $lctype.' only', |
coursespecific => $lctype.' only', |
default => 'default', |
default => 'default', |
Line 341 sub display_actions_box {
|
Line 341 sub display_actions_box {
|
return; |
return; |
} |
} |
|
|
|
my $header = ''; |
if ($refpage eq 'start') { |
if ($refpage eq 'start') { |
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
&GDBM_READER(),0640)) { |
&GDBM_READER(),0640)) { |
my $furl=$bighash{'first_url'}; |
my $furl=$bighash{'first_url'}; |
untie(%bighash); |
untie(%bighash); |
$r->print('<span style="font-size: larger;"><a href="'.$furl.'">'.$lt{'gtfr'}. |
$header .= '<b><a href="'.$furl.'">'.$lt{'gtfr'}. |
'</a></span><br />'); |
'</a></b><br />'; |
} |
} |
} |
} |
$r->print(&mt('Page set to be displayed after you have selected a role in this '.$lctype).'.' |
$header .= &mt('Page set to be displayed after you have selected a role in this '.$lctype).'.' |
.' <span class="LC_nobreak">' |
.' <span class="LC_nobreak">' |
.&mt('Currently: [_1].','<i>'.$currinit.'</i>') |
.&mt('Currently: [_1].','<i>'.$currinit.'</i>') |
.' ' |
.' ' |
.&mt('[_1]Change[_2] for just [_3]this course[_4] or for all [_5]your courses[_6].' |
.&mt('[_1]Change[_2] for just [_3]this '.$lctype.'[_4] or for [_5]all your courses/communities[_6].' |
,'<b>' |
,'<b>' |
,'</b>' |
,'</b>' |
,'<a href="/adm/whatsnew?command=courseinit&refpage='.$refpage.'">' |
,'<a href="/adm/whatsnew?command=courseinit&refpage='.$refpage.'">' |
,'</a>' |
,'</a>' |
,'<a href="/adm/preferences?action=changecourseinit&refpage='.$refpage.'">' |
,'<a href="/adm/preferences?action=changecourseinit&refpage='.$refpage.'">' |
,'</a>') |
,'</a>') |
.' </span><br /><hr />'); |
.' </span>'; |
|
|
|
$r->print(&Apache::loncommon::head_subbox($header)); |
|
|
if ($command eq 'reset') { |
if ($command eq 'reset') { |
$result = &process_reset($cdom,$crs); |
$result = &process_reset($cdom,$crs); |
Line 378 sub display_actions_box {
|
Line 381 sub display_actions_box {
|
unless ($store_result eq 'ok') { |
unless ($store_result eq 'ok') { |
&Apache::lonnet::logthis('Error saving whatsnew settings: '. |
&Apache::lonnet::logthis('Error saving whatsnew settings: '. |
$store_result.' for '.'user '.$uname.':'.$udom.' in '.$lctype.' '.$cid); |
$store_result.' for '.'user '.$uname.':'.$udom.' in '.$lctype.' '.$cid); |
$result .= &mt('Unable to save visibility settings due to [_1]', |
$result .= '<span class="LC_error">' |
$store_result); |
.&mt('Unable to save visibility settings due to [_1]', |
|
$store_result) |
|
.'</span>'; |
} |
} |
|
|
if ($result) { |
if ($result) { |
$r->print($result.'<hr width="100%" />'); |
$r->print($result.'<hr />'); |
} |
} |
$r->rflush(); |
$r->rflush(); |
|
|
Line 490 sub display_actions_box {
|
Line 495 sub display_actions_box {
|
} |
} |
} |
} |
|
|
|
my $itemserror; |
if ($needitems) { |
if ($needitems) { |
&getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread); |
$itemserror = &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread); |
} |
} |
if ($show{'coursenormalmail'}) { |
if ($show{'coursenormalmail'}) { |
$msgcount = &getnormalmail(\@newmsgs); |
$msgcount = &getnormalmail(\@newmsgs); |
Line 533 sub display_actions_box {
|
Line 539 sub display_actions_box {
|
if ($displayed == $halfway) { |
if ($displayed == $halfway) { |
$r->print('</td><td> </td><td class="LC_right_col" >'); |
$r->print('</td><td> </td><td class="LC_right_col" >'); |
} |
} |
&display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype); |
&display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype,$itemserror); |
$displayed ++; |
$displayed ++; |
} |
} |
} |
} |
Line 593 sub display_threshold_config {
|
Line 599 sub display_threshold_config {
|
&Apache::loncommon::end_data_table_row()); |
&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print(&Apache::loncommon::end_data_table()."\n". |
$r->print(&Apache::loncommon::end_data_table()."\n". |
'<br /><input type="submit" name="threshold" value="'.&mt('Make changes').'" /> |
'<br /><input type="submit" name="threshold" value="'.&mt('Save').'" /> |
<input type="hidden" name="command" value="update" /> |
<input type="hidden" name="command" value="update" /> |
<input type="hidden" name="refpage" value="'.$refpage.'" /> |
<input type="hidden" name="refpage" value="'.$refpage.'" /> |
</form>'); |
</form>'); |
Line 649 sub display_interval_config {
|
Line 655 sub display_interval_config {
|
} |
} |
$r->print('</select> |
$r->print('</select> |
<input type="submit" name="display" value="'. |
<input type="submit" name="display" value="'. |
&mt('Change interval').'" /></form>'); |
&mt('Save').'" /></form>'); |
return; |
return; |
} |
} |
|
|
Line 680 function toggle_countunread(choice) {
|
Line 686 function toggle_countunread(choice) {
|
} |
} |
</script>'); |
</script>'); |
$r->print('<br />' |
$r->print('<br />' |
.&mt('Choose whether or not to display a count of the number of new posts for each resource or bulletin board which has unread posts.') |
.&mt('Choose whether or not to display a count of the number of new posts for each resource or discussion board which has unread posts.') |
.'<br />' |
.'<br />' |
.&mt("This can increase the time taken to gather data for the '<i>What's New?</i>' page by a few seconds.") |
.&mt("This can increase the time taken to gather data for the [_1]What's New Page[_2] by a few seconds.",'<i>','</i>') |
.' ' |
.' ' |
.&mt('Currently set to [_1].','<b>'.$current.'</b>.') |
.&mt('Currently set to [_1].','<b>'.$current.'</b>.') |
); |
); |
Line 695 function toggle_countunread(choice) {
|
Line 701 function toggle_countunread(choice) {
|
$r->print('<br/> |
$r->print('<br/> |
<input type="button" name="display" value="'. |
<input type="button" name="display" value="'. |
&mt('Change to [_1]',&mt($opposite{$current})).'" |
&mt('Change to [_1]',&mt($opposite{$current})).'" |
onclick="javascript:toggle_countunread('."'change'".')" /> |
onclick="javascript:toggle_countunread('."'change'".')" />'. |
  |
(' ' x7). |
<input type="button" name="nochange" value="'. |
'<input type="button" name="nochange" value="'. |
&mt("No change").'" |
&mt("No change").'" |
onclick="javascript:toggle_countunread('."'unchanged'".')" /> |
onclick="javascript:toggle_countunread('."'unchanged'".')" /> |
</form>'); |
</form>'); |
Line 724 sub courseinit_config {
|
Line 730 sub courseinit_config {
|
'anis' => 'and is set to display', |
'anis' => 'and is set to display', |
'padc' => 'Page display controlled by', |
'padc' => 'Page display controlled by', |
'chce' => 'Choose '.$lctype.' entry', |
'chce' => 'Choose '.$lctype.' entry', |
'moce' => 'Modify '.$lctype.' entry', |
'moce' => 'Save', |
); |
); |
$r->print(<<"END"); |
$r->print(<<"END"); |
<br />$lt{'chwp'} |
<br />$lt{'chwp'} |
Line 786 sub display_launcher {
|
Line 792 sub display_launcher {
|
$tograde,$ungraded,$bombs,$bombed,$changed,$warnings,$triggered, |
$tograde,$ungraded,$bombs,$bombed,$changed,$warnings,$triggered, |
$newdiscussions,$unread,$msgcount,$newmsgs,$critmsgcount,$critmsgs, |
$newdiscussions,$unread,$msgcount,$newmsgs,$critmsgcount,$critmsgs, |
$interval,$countunread,$expired,$expirecount,$activated,$activecount, |
$interval,$countunread,$expired,$expirecount,$activated,$activecount, |
$crstype) = @_; |
$crstype,$itemserror) = @_; |
|
|
if ($$checkallowed{$action}) { |
if ($$checkallowed{$action}) { |
&start_box($r,$show,$headings,$action,$refpage,$action); |
&start_box($r,$show,$headings,$action,$refpage,$action); |
if ($$show{$action}) { |
if ($$show{$action}) { |
if ($action eq 'handgrading') { # UNGRADED ITEMS |
if ($action eq 'handgrading') { # UNGRADED ITEMS |
&display_handgrade($r,$tograde,$ungraded); |
&display_handgrade($r,$tograde,$ungraded,$itemserror); |
} elsif ($action eq 'haserrors') { # BOMBS |
} elsif ($action eq 'haserrors') { # BOMBS |
&display_haserrors($r,$bombs,$bombed,$res_title); |
&display_haserrors($r,$bombs,$bombed,$res_title,$itemserror); |
} elsif ($action eq 'versionchanges') { # VERSION CHANGES |
} elsif ($action eq 'versionchanges') { # VERSION CHANGES |
&display_versionchanges($r,$changed,$res_title,$interval->{'versions'}); |
&display_versionchanges($r,$changed,$res_title,$interval->{'versions'},$itemserror); |
} elsif ($action eq 'abovethreshold') { # DEGDIFF/AV. TRIES TRIGGERS |
} elsif ($action eq 'abovethreshold') { # DEGDIFF/AV. TRIES TRIGGERS |
&display_abovethreshold($r,$refpage,$warnings,$triggered, |
&display_abovethreshold($r,$refpage,$warnings,$triggered, |
$res_title); |
$res_title,$itemserror); |
} elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION |
} elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION |
&display_coursediscussion($r,$newdiscussions,$unread, |
&display_coursediscussion($r,$newdiscussions,$unread, |
$countunread,$res_title); |
$countunread,$res_title,$itemserror); |
} elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES |
} elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES |
&display_coursenormalmail($r,$msgcount,$newmsgs); |
&display_coursenormalmail($r,$msgcount,$newmsgs); |
} elsif ($action eq 'coursecritmail') { # CRITICAL MESSAGES |
} elsif ($action eq 'coursecritmail') { # CRITICAL MESSAGES |
Line 825 sub getitems {
|
Line 831 sub getitems {
|
$tograde,$bombs,$warnings,$threshold,$cdom,$crs,$res_title,$show, |
$tograde,$bombs,$warnings,$threshold,$cdom,$crs,$res_title,$show, |
$starttime,$countunread) = @_; |
$starttime,$countunread) = @_; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (!defined($navmap)) { |
|
my $itemserror = '<span class="LC_warning">'.&mt('An error occurred retrieving information about the course.').'<br />'.&mt('It is recommended that you [_1]re-select the course[_2].','<a href="/adm/roles">','</a>').'</span>'; |
|
return $itemserror; |
|
} |
# force retrieve Resource to seed the part id cache we'll need it later |
# force retrieve Resource to seed the part id cache we'll need it later |
my @allres=$navmap->retrieveResources(undef, |
my @allres=$navmap->retrieveResources(undef, |
sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;}); |
sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;}); |
Line 883 sub getitems {
|
Line 893 sub getitems {
|
} |
} |
|
|
} |
} |
|
return; |
} |
} |
|
|
sub check_discussions { |
sub check_discussions { |
Line 1155 sub getnormalmail {
|
Line 1166 sub getnormalmail {
|
if (($fromcid) && ($fromcid eq $env{'request.course.id'})) { |
if (($fromcid) && ($fromcid eq $env{'request.course.id'})) { |
if (defined($sendtime) && $sendtime!~/error/) { |
if (defined($sendtime) && $sendtime!~/error/) { |
my $numsendtime = $sendtime; |
my $numsendtime = $sendtime; |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
|
if ($status eq 'new') { |
if ($status eq 'new') { |
$msgcount ++; |
$sendtime = &Apache::lonlocal::locallocaltime($sendtime); |
|
$msgcount ++; |
if ($shortsubj eq '') { |
if ($shortsubj eq '') { |
$shortsubj = &mt('No subject'); |
$shortsubj = &mt('No subject'); |
} |
} |
Line 1446 sub checkversions {
|
Line 1457 sub checkversions {
|
} |
} |
|
|
sub display_handgrade { |
sub display_handgrade { |
my ($r,$tograde,$ungraded) = @_; |
my ($r,$tograde,$ungraded,$itemserror) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'prna' => 'Problem Name', |
'prna' => 'Problem Name', |
'nmun' => 'Number ungraded', |
'nmun' => 'Number ungraded', |
Line 1469 sub display_handgrade {
|
Line 1480 sub display_handgrade {
|
} |
} |
$r->print('<tr'.$css_class.'><td><a href="'.$linkurl.'">'.$$ungraded{$res}{title}.'</a></td><td class="LC_right_item">'.$$ungraded{$res}{count}.'</td></tr>'); |
$r->print('<tr'.$css_class.'><td><a href="'.$linkurl.'">'.$$ungraded{$res}{title}.'</a></td><td class="LC_right_item">'.$$ungraded{$res}{count}.'</td></tr>'); |
} |
} |
|
} elsif ($itemserror) { |
|
$r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>'); |
} else { |
} else { |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>'); |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>'); |
} |
} |
} |
} |
|
|
sub display_haserrors { |
sub display_haserrors { |
my ($r,$bombs,$bombed,$res_title) = @_; |
my ($r,$bombs,$bombed,$res_title,$itemserror) = @_; |
my $bombnum = 0; |
my $bombnum = 0; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
reso => 'Resource', |
reso => 'Resource', |
Line 1494 sub display_haserrors {
|
Line 1507 sub display_haserrors {
|
'</td><td class="LC_right_item">'. |
'</td><td class="LC_right_item">'. |
$$bombed{$bomb}{errorcount}.'</td></tr>'); |
$$bombed{$bomb}{errorcount}.'</td></tr>'); |
} |
} |
|
} elsif ($itemserror) { |
|
$r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>'); |
} else { |
} else { |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'noer'}.'</td></tr>'); |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'noer'}.'</td></tr>'); |
} |
} |
Line 1501 sub display_haserrors {
|
Line 1516 sub display_haserrors {
|
} |
} |
|
|
sub display_abovethreshold { |
sub display_abovethreshold { |
my ($r,$refpage,$warnings,$triggered,$res_title) = @_; |
my ($r,$refpage,$warnings,$triggered,$res_title,$itemserror) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
reso => 'Resource', |
reso => 'Resource', |
part => 'Part', |
part => 'Part', |
Line 1557 sub display_abovethreshold {
|
Line 1572 sub display_abovethreshold {
|
} |
} |
} |
} |
$r->print('<tr class="LC_info_row"><td colspan="7" class="LC_right_item"><br /><input type="submit" name="counters" value="'.$lt{'rese'}.'" /></td></tr></form>'); |
$r->print('<tr class="LC_info_row"><td colspan="7" class="LC_right_item"><br /><input type="submit" name="counters" value="'.$lt{'rese'}.'" /></td></tr></form>'); |
|
} elsif ($itemserror) { |
|
$r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>'); |
} else { |
} else { |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>'); |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>'); |
} |
} |
} |
} |
|
|
sub display_versionchanges { |
sub display_versionchanges { |
my ($r,$changed,$res_title,$interval) = @_; |
my ($r,$changed,$res_title,$interval,$itemserror) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'reso' => 'Resource', |
'reso' => 'Resource', |
'revd' => 'Last revised', |
'revd' => 'Last revised', |
Line 1590 sub display_versionchanges {
|
Line 1607 sub display_versionchanges {
|
$$changed{$item}{'current'}.'</td><td>'. |
$$changed{$item}{'current'}.'</td><td>'. |
$$changed{$item}{'version'}.'</td></tr>'); |
$$changed{$item}{'version'}.'</td></tr>'); |
} |
} |
|
} elsif ($itemserror) { |
|
$r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>'); |
} else { |
} else { |
$r->print('<tr class="LC_empty_row"><td>' |
$r->print('<tr class="LC_empty_row"><td>' |
.&mt('No '.$interval).'</td></tr>'); |
.&mt('No '.$interval).'</td></tr>'); |
Line 1655 sub display_rolechanges {
|
Line 1674 sub display_rolechanges {
|
} |
} |
|
|
sub display_coursediscussion { |
sub display_coursediscussion { |
my ($r,$newdiscussions,$unread,$countunread,$res_title) = @_; |
my ($r,$newdiscussions,$unread,$countunread,$res_title,$itemserror) = @_; |
my $lctype = lc(&Apache::loncommon::course_type()); |
my $lctype = lc(&Apache::loncommon::course_type()); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'loca' => 'Location', |
'loca' => 'Location', |
Line 1685 sub display_coursediscussion {
|
Line 1704 sub display_coursediscussion {
|
my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb); |
my $feedurl=&Apache::lonfeedback::get_feedurl($ressymb); |
my $disclink = $feedurl.'?symb='.$$unread{$ressymb}{symb}; |
my $disclink = $feedurl.'?symb='.$$unread{$ressymb}{symb}; |
if ($feedurl =~ /bulletinboard/) { |
if ($feedurl =~ /bulletinboard/) { |
$type = 'Bulletin Board'; |
$type = 'Discussion Board'; |
} |
} |
if ($$unread{$ressymb}{'enclink'}) { |
if ($$unread{$ressymb}{'enclink'}) { |
$disclink = $$unread{$ressymb}{'enclink'}.'?symb='.$$unread{$ressymb}{'encsymb'}; |
$disclink = $$unread{$ressymb}{'enclink'}.'?symb='.$$unread{$ressymb}{'encsymb'}; |
Line 1703 sub display_coursediscussion {
|
Line 1722 sub display_coursediscussion {
|
} |
} |
$r->print("</tr>\n"); |
$r->print("</tr>\n"); |
} |
} |
|
} elsif ($itemserror) { |
|
$r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>'); |
} else { |
} else { |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'noun'}.'</td></tr>'); |
$r->print('<tr class="LC_empty_row"><td>'.$lt{'noun'}.'</td></tr>'); |
} |
} |