version 1.29, 2010/08/21 04:04:54
|
version 1.41, 2011/01/14 00:18:47
|
Line 215 use Apache::lonnet;
|
Line 215 use Apache::lonnet;
|
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonconfigsettings; |
use Apache::lonconfigsettings; |
|
use Apache::lonparmset; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
|
Line 267 sub handler {
|
Line 268 sub handler {
|
my %lt; |
my %lt; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
%lt = ( |
%lt = ( |
conf => 'Community Configuration', |
conf => 'Community Settings', |
edit => 'Edit Community Configuration', |
edit => 'Edit Community Settings', |
gens => 'General community settings', |
gens => 'General community settings', |
idnu => 'Community ID or number', |
idnu => 'Community ID or number', |
desc => 'Community Description', |
desc => 'Community Description', |
Line 294 sub handler {
|
Line 295 sub handler {
|
); |
); |
} else { |
} else { |
%lt = ( |
%lt = ( |
conf => 'Course Configuration', |
conf => 'Course Settings', |
edit => 'Edit Course Configuration', |
edit => 'Edit Course Settings', |
gens => 'General course settings', |
gens => 'General course settings', |
idnu => 'Course ID or number', |
idnu => 'Course ID or number', |
desc => 'Course Description', |
desc => 'Course Description', |
Line 320 sub handler {
|
Line 321 sub handler {
|
seme => 'Send message to student when clicking Done on Tasks', |
seme => 'Send message to student when clicking Done on Tasks', |
); |
); |
} |
} |
|
$lt{'lcrv'} = 'Required LON-CAPA version'; |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs', |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs', |
text=>$lt{'conf'}}); |
text=>$lt{'conf'}}); |
my $breadcrumbs = |
my $breadcrumbs = |
Line 335 sub handler {
|
Line 337 sub handler {
|
return OK; |
return OK; |
} |
} |
|
|
|
if ($phase eq 'releaseinfo') { |
|
my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'}; |
|
if ($loncaparev) { |
|
&display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype); |
|
return OK; |
|
} |
|
} |
|
|
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); |
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); |
my @prefs_order = ('courseinfo','localization','feedback','discussion', |
my @prefs_order = ('courseinfo','localization','feedback','discussion', |
'classlists','appearance','grading','printouts', |
'classlists','appearance','grading','printouts', |
Line 344 sub handler {
|
Line 354 sub handler {
|
'courseinfo' => |
'courseinfo' => |
{ text => $lt{'gens'}, |
{ text => $lt{'gens'}, |
help => 'Course_Environment', |
help => 'Course_Environment', |
ordered => ['owner','co-owners','description','courseid', |
ordered => ['owner','co-owners','loncaparev','description', |
'categories','hidefromcat','externalsyllabus', |
'courseid','categories','hidefromcat', |
'cloners','url','rolenames'], |
'externalsyllabus','cloners','url','rolenames'], |
itemtext => { |
itemtext => { |
'owner' => $lt{'ownr'}, |
'owner' => $lt{'ownr'}, |
'co-owners' => $lt{'cown'}, |
'co-owners' => $lt{'cown'}, |
Line 358 sub handler {
|
Line 368 sub handler {
|
'externalsyllabus' => 'URL of Syllabus', |
'externalsyllabus' => 'URL of Syllabus', |
'url' => 'Top Level Map', |
'url' => 'Top Level Map', |
'rolenames' => $lt{'rept'}, |
'rolenames' => $lt{'rept'}, |
|
'loncaparev' => $lt{'lcrv'}, |
}, |
}, |
}, |
}, |
'localization' => |
'localization' => |
Line 385 sub handler {
|
Line 396 sub handler {
|
'discussion' => |
'discussion' => |
{ text => 'Discussion and Chat', |
{ text => 'Discussion and Chat', |
help => 'Course_Environment', |
help => 'Course_Environment', |
ordered => ['plc.roles.denied','plc.users.denied', |
ordered => ['pch.roles.denied','pch.users.denied', |
'pch.roles.denied','pch.users.denied', |
'plc.roles.denied','plc.users.denied', |
'allow_limited_html_in_feedback', |
'allow_limited_html_in_feedback', |
'allow_discussion_post_editing'], |
'allow_discussion_post_editing'], |
itemtext => { |
itemtext => { |
'plc.roles.denied' => 'No Resource Discussion', |
'pch.roles.denied' => 'No Resource Discussion', |
'plc.users.denied' => 'No Resource Discussion', |
'pch.users.denied' => 'No Resource Discussion', |
'pch.roles.denied' => 'No Chat room use', |
'plc.roles.denied' => 'No Chat room use', |
'pch.users.denied' => 'No Chat room use', |
'plc.users.denied' => 'No Chat room use', |
allow_limited_html_in_feedback => 'Allow limited HTML in discussion', |
allow_limited_html_in_feedback => 'Allow limited HTML in discussion', |
allow_discussion_post_editing => 'Users can edit/delete own discussion posts', |
allow_discussion_post_editing => 'Users can edit/delete own discussion posts', |
}, |
}, |
Line 500 sub handler {
|
Line 511 sub handler {
|
\@prefs_order,\%prefs,\%values, |
\@prefs_order,\%prefs,\%values, |
$cnum,undef,\@allitems); |
$cnum,undef,\@allitems); |
} elsif ($phase eq 'display') { |
} elsif ($phase eq 'display') { |
my $jscript = &get_jscript($cdom,$phase,$crstype); |
my $jscript = &get_jscript($cid,$cdom,$phase,$crstype); |
my @allitems = &get_allitems(%prefs); |
my @allitems = &get_allitems(%prefs); |
&Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, |
&Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, |
\@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype); |
\@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype); |
Line 679 sub process_changes {
|
Line 690 sub process_changes {
|
} |
} |
} else { |
} else { |
foreach my $entry (@ordered) { |
foreach my $entry (@ordered) { |
|
next if (($entry eq 'loncaparev') || ($entry eq 'owner')); |
if ($entry eq 'cloners') { |
if ($entry eq 'cloners') { |
if ($env{'form.cloners_all'}) { |
if ($env{'form.cloners_all'}) { |
$newvalues{$entry} = '*'; |
$newvalues{$entry} = '*'; |
Line 687 sub process_changes {
|
Line 699 sub process_changes {
|
if (exists($env{'form.cloners_activate'})) { |
if (exists($env{'form.cloners_activate'})) { |
my $actnum = $env{'form.cloners_activate'}; |
my $actnum = $env{'form.cloners_activate'}; |
if ($actnum ne '') { |
if ($actnum ne '') { |
if ($env{'form.clonersdom_'.$actnum} ne '') { |
if ($env{'form.cloners_dom_'.$actnum} ne '') { |
my $clonedom = $env{'form.clonersdom_'.$actnum}; |
my $clonedom = $env{'form.cloners_dom_'.$actnum}; |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
if (&check_clone($clonedom,$disallowed) eq 'ok') { |
$newvalues{$entry} = '*:'.$clonedom; |
$newvalues{$entry} = '*:'.$clonedom; |
push(@clonedoms,$newvalues{$entry}); |
push(@clonedoms,$newvalues{$entry}); |
Line 1296 sub store_changes {
|
Line 1308 sub store_changes {
|
if ($key eq 'url') { |
if ($key eq 'url') { |
my $bkuptime=time; |
my $bkuptime=time; |
$output .= (' 'x2).&mt('(Previous URL backed up)').': '. |
$output .= (' 'x2).&mt('(Previous URL backed up)').': '. |
$storehash{'top level map backup '.$bkuptime} => $values->{$key}; |
$storehash{'top level map backup '.$bkuptime} = $values->{$key}; |
} |
} |
$output .= '</li>'; |
$output .= '</li>'; |
} |
} |
Line 1511 sub get_course {
|
Line 1523 sub get_course {
|
} |
} |
|
|
sub get_jscript { |
sub get_jscript { |
my ($cdom,$phase,$crstype) = @_; |
my ($cid,$cdom,$phase,$crstype) = @_; |
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); |
my ($jscript,$categorize_js); |
my ($jscript,$categorize_js,$loncaparev_js); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); |
my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $cloners_js = &cloners_javascript($phase); |
my $cloners_js = &cloners_javascript($phase); |
Line 1530 function catsbrowser() {
|
Line 1542 function catsbrowser() {
|
} |
} |
ENDSCRIPT |
ENDSCRIPT |
} |
} |
|
my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'}; |
|
if ($loncaparev) { |
|
$loncaparev_js = <<ENDSCRIPT; |
|
function loncaparevinfo() { |
|
var lcrevwin = null; |
|
var url = '/adm/courseprefs?phase=releaseinfo'; |
|
if (!lcrevwin || lcrevwin.closed) { |
|
lcrevwin=window.open(url,'releasewin','height=480,width=600,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
|
} else { |
|
lcrevwin.focus(); |
|
} |
|
} |
|
ENDSCRIPT |
|
} |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
$jscript = '<script type="text/javascript" language="Javascript">'."\n". |
$browse_js."\n".$categorize_js."\n".$cloners_js."\n".'</script>'. |
$browse_js."\n".$categorize_js."\n".$loncaparev_js."\n". |
"\n".$stubrowse_js."\n"; |
$cloners_js."\n".'</script>'."\n".$stubrowse_js."\n"; |
return $jscript; |
return $jscript; |
} |
} |
|
|
Line 1682 sub print_courseinfo {
|
Line 1708 sub print_courseinfo {
|
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'. |
&mt('Owner and Coordinators included automatically'), |
&mt('Owner and Coordinators included automatically'), |
input => 'textbox', |
input => 'textbox', |
size => '40', |
size => '40' |
advanced => 1 |
|
}, |
}, |
'rolenames' => { |
'rolenames' => { |
text => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'. |
Line 1709 sub print_courseinfo {
|
Line 1734 sub print_courseinfo {
|
input => 'textbox', |
input => 'textbox', |
size => '25', |
size => '25', |
}, |
}, |
|
'loncaparev' => { |
|
text => '<b>'.&mt($itemtext->{'loncaparev'}).'</b>', |
|
}, |
); |
); |
my $datatable; |
my $datatable; |
my $count = 0; |
my $count = 0; |
Line 1846 sub print_courseinfo {
|
Line 1874 sub print_courseinfo {
|
} else { |
} else { |
$owner = &mt('None specified'); |
$owner = &mt('None specified'); |
} |
} |
my $domdesc = &Apache::lonnet::domain($cdom,'description'); |
|
$datatable .= $owner; |
$datatable .= $owner; |
} elsif ($item eq 'co-owners') { |
} elsif ($item eq 'co-owners') { |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
Line 1868 sub print_courseinfo {
|
Line 1895 sub print_courseinfo {
|
$datatable .= &manage_coownership($cnum,$cdom,@currcoown); |
$datatable .= &manage_coownership($cnum,$cdom,@currcoown); |
} |
} |
} |
} |
|
} elsif ($item eq 'loncaparev') { |
|
my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
|
my $showreqd; |
|
if ($loncaparev) { |
|
$showreqd = &mt('[_1] or newer',$loncaparev).' <a href="javascript:loncaparevinfo()">'. |
|
&mt('Details').'</a>'; |
|
} else { |
|
$showreqd = &mt('No specific version required'); |
|
} |
|
$datatable .= $showreqd; |
} else { |
} else { |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); |
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); |
} |
} |
Line 2025 ENDSCRIPT
|
Line 2062 ENDSCRIPT
|
return; |
return; |
} |
} |
|
|
|
sub display_loncaparev_constraints { |
|
my ($r,$navmap,$loncaparev,$crstype) = @_; |
|
my $cid = $env{'request.course.id'}; |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my $output; |
|
my %lt = &Apache::lonlocal::texthash ( |
|
'all' => 'all', |
|
'section/group' => 'section/group', |
|
'user' => 'user', |
|
); |
|
my (%checkparms,%checkresponsetypes,%checkcrstypes,%anonsurvey,%randomizetry); |
|
&Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, |
|
\%checkcrstypes,\%anonsurvey,\%randomizetry); |
|
if (defined($checkcrstypes{$crstype})) { |
|
$output .= '<h4>'.&mt('Course type: [_1] requires [_2] or newer',$crstype, |
|
$checkcrstypes{$crstype}).'</h4>'; |
|
} |
|
my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, |
|
%byresponsetype,%bysubmission); |
|
@scopeorder = ('all','section/group','user'); |
|
my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom); |
|
if (ref($resourcedata) eq 'HASH') { |
|
foreach my $key (keys(%{$resourcedata})) { |
|
foreach my $item (keys(%checkparms)) { |
|
if ($key =~ /(\Q$item\E)$/) { |
|
if (ref($checkparms{$item}) eq 'ARRAY') { |
|
my $value = $resourcedata->{$key}; |
|
my ($middle,$scope,$which,$level,$map,$resource); |
|
if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) { |
|
my $stdtype = &Apache::lonparmset::standard_parameter_types($item); |
|
my $stdname = &Apache::lonparmset::standard_parameter_names($item); |
|
my $valname = &get_param_description($stdtype,$value); |
|
my $rev = $Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}; |
|
my $start = $cid.'.'; |
|
if ($key =~ /^\Q$start\E(\[useropt\:($match_username\:$match_domain)\]\.)/) { |
|
$middle = $1; |
|
$which = $2; |
|
$scope = 'user'; |
|
} elsif ($key =~ /^\Q$start\E(\[(\w+)\]\.)/) { |
|
$middle = $1; |
|
$which = $2; |
|
$scope = 'section/group'; |
|
} else { |
|
$scope = 'all'; |
|
} |
|
my $what="$stdname=$valname"; |
|
if ($key =~ /^\Q$start$middle\E\w+\.\Q$item\E$/) { |
|
$level = 'general'; |
|
if ($scope eq 'all') { |
|
if (ref($fromparam{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}})) { |
|
push(@{$fromparam{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$fromparam{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($fromparam{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}{$which}})) { |
|
push(@{$fromparam{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$fromparam{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
$rowspan{$rev} ++; |
|
} elsif ($key =~ /^\Q$start$middle\E(.+)___\(all\).\w+\.\Q$item\E$/) { |
|
$level = 'folder'; |
|
$map = $1; |
|
if ($scope eq 'all') { |
|
if (ref($bymap{$map}{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}})) { |
|
push(@{$bymap{$map}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$bymap{$map}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($bymap{$map}{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}{$which}})) { |
|
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
} elsif ($key =~ /^\Q$start$middle\E(.+)\.\w+\.\Q$item\E$/) { |
|
$level = 'resource'; |
|
$resource = $1; |
|
if ($scope eq 'all') { |
|
if (ref($byresource{$resource}{$rev}{$scope}) eq 'ARRAY') { |
|
unless(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}})) { |
|
push(@{$byresource{$resource}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
push(@{$byresource{$resource}{$rev}{$scope}},$what); |
|
} |
|
} else { |
|
if (ref($byresource{$resource}{$rev}{$scope}{$which}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}{$which}})) { |
|
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); |
|
} |
|
} else { |
|
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (keys(%fromparam)) { |
|
$output .= '<h4>'.&mt('Requirements from general settings').'</h4>'. |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Release').'</th><th>'.&mt('Scope').'</th>'. |
|
'<th>'.&mt('Extent').'</th><th>'.&mt('Setting').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(); |
|
foreach my $rev (keys(%fromparam)) { |
|
$output .= &Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan{$rev}.'">'.$rev.'</td>'; |
|
my $newrow; |
|
foreach my $scope (@scopeorder) { |
|
if (ref($fromparam{$rev}{$scope}) eq 'HASH') { |
|
if ($newrow) { |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
} |
|
$output .= '<td>'.$lt{$scope}.'</td>'; |
|
foreach my $which (sort(keys(%{$fromparam{$rev}{$scope}}))) { |
|
$output .= '<td>'.$which.'</td><td>'. |
|
join('<br />',@{$fromparam{$rev}{$scope}{$which}}).'</td>'; |
|
} |
|
$output .= &Apache::loncommon::end_data_table_row(); |
|
$newrow = 1; |
|
} elsif (ref($fromparam{$rev}{$scope}) eq 'ARRAY') { |
|
if ($newrow) { |
|
$output .= &Apache::loncommon::continue_data_table_row(); |
|
} |
|
$output .= '<td>'.$lt{$scope}.'</td><td> </td><td>'. |
|
join('<br />',@{$fromparam{$rev}{$scope}}).'</td>'. |
|
&Apache::loncommon::end_data_table_row(); |
|
$newrow = 1; |
|
} |
|
} |
|
} |
|
$output .= &Apache::loncommon::end_data_table().'<br />'; |
|
} |
|
} |
|
|
|
if (defined($navmap)) { |
|
my %anonsubms=&Apache::lonnet::dump('nohist_anonsurveys',$cdom,$cnum); |
|
my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}; |
|
my %randtrysubms=&Apache::lonnet::dump('nohist_randomizetry',$cdom,$cnum); |
|
my $rev_randtry=$Apache::lonnet::needsrelease{'parameter:type:randomizetry'}; |
|
my $stdtype=&Apache::lonparmset::standard_parameter_types('type'); |
|
my $stdname=&Apache::lonparmset::standard_parameter_names('type'); |
|
my $valanon=&get_param_description($stdtype,'anonsurvey'); |
|
my $valrandtry=&get_param_description($stdtype,'randomizetry'); |
|
|
|
foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { |
|
my @parts = @{$res->parts()}; |
|
my $symb = $res->symb(); |
|
my $enclosing_map = &Apache::lonnet::declutter($res->enclosing_map_src()); |
|
foreach my $part (@parts) { |
|
if (exists($anonsubms{$symb."\0".$part})) { |
|
my $rev = $rev_anonsurv; |
|
my $what="$stdname=$valanon"; |
|
if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
} else { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
$allmaps{$enclosing_map} = 1; |
|
} |
|
if (exists($randtrysubms{$symb."\0".$part})) { |
|
my $rev = $rev_randtry; |
|
my $what="$stdname=$valrandtry"; |
|
if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') { |
|
unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
} else { |
|
push(@{$bysubmission{$symb}{$rev}},$what); |
|
} |
|
$allmaps{$enclosing_map} = 1; |
|
} |
|
} |
|
my %responses = $res->responseTypes(); |
|
foreach my $key (keys(%responses)) { |
|
if (exists($checkresponsetypes{$key})) { |
|
push(@{$byresponsetype{$symb}{$checkresponsetypes{$key}}},$key); |
|
$allmaps{$enclosing_map} = 1; |
|
} |
|
} |
|
} |
|
if (keys(%byresource) > 0) { |
|
foreach my $symb (keys(%byresource)) { |
|
my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb); |
|
$allmaps{$map} = 1; |
|
} |
|
} |
|
if (keys(%bymap) > 0) { |
|
foreach my $map (keys(%bymap)) { |
|
$allmaps{$map} = 1; |
|
} |
|
} |
|
foreach my $map (keys(%allmaps)) { |
|
my $mapres = $navmap->getResourceByUrl($map); |
|
my $mapsymb = $mapres->symb(); |
|
$toshow{$mapsymb} = 1; |
|
if (ref($mapres)) { |
|
my $pcslist = $mapres->map_hierarchy(); |
|
if ($pcslist ne '') { |
|
foreach my $pc (split(/,/,$pcslist)) { |
|
my $res = $navmap->getByMapPc($pc); |
|
if (ref($res)) { |
|
my $symb = $res->symb(); |
|
unless ($symb eq '______') { |
|
$toshow{$symb} = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
my $mapres_header = '<h4>'. |
|
&mt('Requirements for specific folders or resources'). |
|
'</h4>'; |
|
if ((keys(%toshow) > 0) || (keys(%byresource) > 0) || |
|
(keys(%bysubmission) > 0) || (keys(%byresponsetype))) { |
|
$output .= $mapres_header; |
|
} |
|
my $top_header = '<h3>'.&mt('LON-CAPA version dependencies').'</h3>'; |
|
my $title = 'Version Constraints'; |
|
my $start_page = |
|
&Apache::loncommon::start_page($title,undef,{'only_body' => 1,}); |
|
$r->print($start_page.$top_header); |
|
if ($output) { |
|
$r->print($output); |
|
if (defined($navmap)) { |
|
&show_contents_view($r,$navmap,$cid,\%toshow,\%bymap,\%byresource,\%bysubmission, |
|
\%byresponsetype,\@scopeorder,\%lt); |
|
} |
|
$r->print('<br /><br />'); |
|
} else { |
|
$r->print('<p class="LC_info">'. |
|
&mt('No version requirements from resource content or settings.'). |
|
'</p>'); |
|
} |
|
$r->print(&Apache::loncommon::end_page()); |
|
return; |
|
} |
|
|
|
sub show_contents_view { |
|
my ($r,$navmap,$cid,$toshow,$bymap,$byresource,$bysubmission,$byresponsetype, |
|
$scopeorder,$lt) = @_; |
|
if ((keys(%{$toshow}) > 0) || (keys(%{$byresource}) > 0) || |
|
(keys(%{$bysubmission}) > 0) || (keys(%{$byresponsetype}) > 0)) { |
|
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
|
my $whitespace = '<img src="'.$location.'/whitespace_21.gif" alt="" />'; |
|
my $icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
|
my $topmap = $env{'course.'.$cid.'.url'}; |
|
$r->print(&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'. |
|
'<th>'.&mt('Attribute/Setting').'</th>'. |
|
&Apache::loncommon::end_data_table_header_row(). |
|
&Apache::loncommon::start_data_table_row(). |
|
'<td> '.$icon.' '.&mt('Main Course Documents').'</td>'); |
|
&releases_by_map($r,$bymap,$topmap,$scopeorder,$lt); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
my $it=$navmap->getIterator(undef,undef,undef,1,1,undef); |
|
my $curRes; |
|
my $depth = 0; |
|
my %parent = (); |
|
my $startcount = 5; |
|
my $lastcontainer = $startcount; |
|
while ($curRes = $it->next()) { |
|
if ($curRes == $it->BEGIN_MAP()) { |
|
$depth++; |
|
$parent{$depth}= $lastcontainer; |
|
} |
|
if ($curRes == $it->END_MAP()) { |
|
$depth--; |
|
$lastcontainer = $parent{$depth}; |
|
} |
|
my $indent; |
|
for (my $i=0; $i<$depth; $i++) { |
|
$indent.= $whitespace; |
|
} |
|
if (ref($curRes)) { |
|
my $symb = $curRes->symb(); |
|
my $ressymb = $symb; |
|
my $srcf = $curRes->src(); |
|
my $title = &Apache::lonnet::gettitle($srcf); |
|
if (($curRes->is_sequence()) || ($curRes->is_page())) { |
|
next unless($toshow->{$symb}); |
|
my ($parent,$ind,$url) = &Apache::lonnet::decode_symb($symb); |
|
$icon = '<img src="'.$location.'/navmap.folder.open.gif" alt="" />'; |
|
if ($curRes->is_page()) { |
|
$icon = '<img src="'.$location.'/navmap.page.open.gif" alt="" />'; |
|
} |
|
my $rowspan = 1; |
|
if (ref($bymap->{$url}) eq 'HASH') { |
|
$rowspan = scalar(keys(%{$bymap->{$url}})); |
|
} |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan.'">'.$indent.$icon.' '.$title.'</td>'); |
|
&releases_by_map($r,$bymap,$url,$scopeorder); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
} else { |
|
my $rowspan; |
|
if (ref($byresource->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$byresource->{$symb}})); |
|
} |
|
if (ref($bysubmission->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$bysubmission->{$symb}})); |
|
} |
|
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
|
$rowspan += scalar(keys(%{$byresponsetype->{$symb}})); |
|
} |
|
next if (!$rowspan); |
|
$icon = '<img class="LC_contentImage" src="'.$location.'/problem.gif" alt="'. |
|
&mt('Problem').'" />'; |
|
$r->print(&Apache::loncommon::start_data_table_row(). |
|
'<td rowspan="'.$rowspan.'">'.$indent.$icon.' '.$title.'</td>'); |
|
my $newrow; |
|
if (ref($byresource->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$byresource->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td valign="middle">'.$rev.'</td><td>'); |
|
if (ref($byresource->{$symb}{$rev}) eq 'HASH') { |
|
$r->print('<table border="0">'); |
|
foreach my $scope (@{$scopeorder}) { |
|
if (ref($byresource->{$symb}{$rev}{$scope}) eq 'HASH') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'); |
|
foreach my $which (sort(keys(%{$byresource->{$symb}{$rev}{$scope}}))) { |
|
$r->print('<td>'.$which.'</td><td>'. |
|
join('<br />',@{$byresource->{$symb}{$rev}{$scope}{$which}}). |
|
'</td>'); |
|
} |
|
$r->print('</tr>'); |
|
} elsif (ref($byresource->{$symb}{$rev}{$scope}) eq 'ARRAY') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'. |
|
'<td> </td><td>'. |
|
join('<br />',@{$byresource->{$symb}{$rev}{$scope}}).'</td></tr>'); |
|
} |
|
} |
|
$r->print('</table>'); |
|
} |
|
$r->print('</td>'); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
$newrow = 1; |
|
} |
|
} |
|
if (ref($bysubmission->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$bysubmission->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td>'.$rev.'</td><td>'); |
|
if (ref($bysubmission->{$symb}{$rev}) eq 'ARRAY') { |
|
$r->print(&mt('Submissions to: ').' '. |
|
join(', ',@{$bysubmission->{$symb}{$rev}})); |
|
} |
|
$r->print('</td>'); |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
$newrow = 1; |
|
} |
|
} |
|
if (ref($byresponsetype->{$symb}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$byresponsetype->{$symb}}))) { |
|
if ($newrow) { |
|
$r->print(&Apache::loncommon::continue_data_table_row()); |
|
} |
|
$r->print('<td>'.$rev.'</td><td>'); |
|
if (ref($byresponsetype->{$symb}{$rev}) eq 'ARRAY') { |
|
$r->print(&mt('Response Type(s): ').' '. |
|
join('<br />',@{$byresponsetype->{$symb}{$rev}})); |
|
} |
|
$r->print('</td>'); |
|
} |
|
$r->print(&Apache::loncommon::end_data_table_row()); |
|
} |
|
} |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
|
} |
|
|
|
sub releases_by_map { |
|
my ($r,$bymap,$url,$scopeorder,$lt) = @_; |
|
return unless ((ref($bymap) eq 'HASH') && (ref($scopeorder) eq 'ARRAY')); |
|
if (ref($bymap->{$url}) eq 'HASH') { |
|
foreach my $rev (sort(keys(%{$bymap->{$url}}))) { |
|
$r->print('<td valign="middle">'.$rev.'</td><td>'); |
|
if (ref($bymap->{$url}{$rev}) eq 'HASH') { |
|
$r->print('<table border="0">'); |
|
foreach my $scope (@{$scopeorder}) { |
|
if (ref($bymap->{$url}{$rev}{$scope}) eq 'HASH') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}).'</td>'); |
|
foreach my $which (sort(keys(%{$bymap->{$url}{$rev}{$scope}}))) { |
|
$r->print('<td>'.$which.'</td><td>'. |
|
join('<br />',@{$bymap->{$url}{$rev}{$scope}{$which}}). |
|
'</td>'); |
|
} |
|
$r->print('</tr>'); |
|
} elsif (ref($bymap->{$url}{$rev}{$scope}) eq 'ARRAY') { |
|
$r->print('<tr><td>'.&mt('Setting - scope: [_1]',$lt->{$scope}). |
|
'</td><td> </td><td>'. |
|
join('<br />',@{$bymap->{$url}{$rev}{$scope}}).'</td></tr>'); |
|
} |
|
} |
|
$r->print('</table>'); |
|
} |
|
$r->print('</td>'); |
|
} |
|
} else { |
|
$r->print('<td colspan="2"> </td>'); |
|
} |
|
return; |
|
} |
|
|
|
sub get_param_description { |
|
my ($stdtype,$value) = @_; |
|
my $name = $value; |
|
my $paramstrings = &Apache::lonparmset::standard_string_options($stdtype); |
|
unless (ref($paramstrings) eq 'ARRAY') { |
|
return $name; |
|
} |
|
foreach my $possibilities (@{$paramstrings}) { |
|
next unless (ref($possibilities) eq 'ARRAY'); |
|
my ($thing, $description) = @{ $possibilities }; |
|
if ($thing eq $value) { |
|
$name = $description; |
|
last; |
|
} |
|
} |
|
return $name; |
|
} |
|
|
sub show_autocoowners { |
sub show_autocoowners { |
my (@currcoown) = @_; |
my (@currcoown) = @_; |
my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>'; |
my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>'; |
Line 2556 sub role_checkboxes {
|
Line 3042 sub role_checkboxes {
|
$output .= '<tr>'; |
$output .= '<tr>'; |
} |
} |
} |
} |
$output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name='. |
$output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$item.'" value="'.$role.'"'.$checked.'/> '. |
$item.'" value="'.$role.'"'.$checked.'/> '. |
$plrole.'</label></span></td>'; |
$plrole.'</label></span></td>'; |
if ($showsections) { |
if ($showsections) { |
Line 2588 sub role_checkboxes {
|
Line 3074 sub role_checkboxes {
|
$output .= '<tr>'; |
$output .= '<tr>'; |
} |
} |
} |
} |
$output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name='. |
$output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="'. |
$item.'" value="'.$value.'"'.$checked.' /> '.$rolename. |
$item.'" value="'.$value.'"'.$checked.' /> '.$rolename. |
'</label></span></td>'; |
'</label></span></td>'; |
if ($showsections) { |
if ($showsections) { |
Line 2742 sub print_grading {
|
Line 3228 sub print_grading {
|
input => 'selectbox', |
input => 'selectbox', |
options => { |
options => { |
standard => &mt('Standard: shows points'), |
standard => &mt('Standard: shows points'), |
|
categories => &mt('Categories: shows points according to categories'), |
external => &mt('External: shows number of completed parts and totals'), |
external => &mt('External: shows number of completed parts and totals'), |
externalnototals => &mt('External: shows only number of completed parts'), |
externalnototals => &mt('External: shows only number of completed parts'), |
spreadsheet => &mt('Spreadsheet: (with link to detailed scores)'), |
spreadsheet => &mt('Spreadsheet: (with link to detailed scores)'), |
}, |
}, |
order => ['standard','external','externalnototals','spreadsheet'], |
order => ['standard','categories','external','externalnototals','spreadsheet'], |
}, |
}, |
'rndseed' => { |
'rndseed' => { |
text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'. |
text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'. |
Line 2763 sub print_grading {
|
Line 3250 sub print_grading {
|
'64bit5' => '64bit5', |
'64bit5' => '64bit5', |
}, |
}, |
order => ['32bit','64bit','64bit2','64bit3','64bit4','64bit5'], |
order => ['32bit','64bit','64bit2','64bit3','64bit4','64bit5'], |
|
advanced => 1 |
}, |
}, |
'receiptalg' => { |
'receiptalg' => { |
text => '<b>'.&mt($itemtext->{'receiptalg'}).'</b><br />'. |
text => '<b>'.&mt($itemtext->{'receiptalg'}).'</b><br />'. |
Line 2774 sub print_grading {
|
Line 3262 sub print_grading {
|
receipt3 => 'receipt3', |
receipt3 => 'receipt3', |
}, |
}, |
order => ['receipt','receipt2','receipt3'], |
order => ['receipt','receipt2','receipt3'], |
|
advanced => 1 |
}, |
}, |
'disablesigfigs' => { |
'disablesigfigs' => { |
text => '<b>'.&mt($itemtext->{'disablesigfigs'}).'</b>', |
text => '<b>'.&mt($itemtext->{'disablesigfigs'}).'</b>', |
Line 3045 sub make_item_rows {
|
Line 3534 sub make_item_rows {
|
my $count = 0; |
my $count = 0; |
foreach my $item (@{$ordered}) { |
foreach my $item (@{$ordered}) { |
$count ++; |
$count ++; |
$datatable .= &item_table_row_start($items->{$item}{text},$count); |
if (exists $items->{$item}{advanced} && $items->{$item}{advanced} == 1) { |
|
$datatable .= &item_table_row_start($items->{$item}{text},$count,"advanced"); |
|
} else { |
|
$datatable .= &item_table_row_start($items->{$item}{text},$count); |
|
} |
if ($item eq 'nothideprivileged') { |
if ($item eq 'nothideprivileged') { |
$datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype); |
$datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype); |
} elsif ($item eq 'print_header_format') { |
} elsif ($item eq 'print_header_format') { |