--- loncom/interface/courseprefs.pm 2016/08/05 20:28:14 1.49.2.20 +++ loncom/interface/courseprefs.pm 2013/04/08 23:57:21 1.55 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.49.2.20 2016/08/05 20:28:14 raeburn Exp $ +# $Id: courseprefs.pm,v 1.55 2013/04/08 23:57:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -215,15 +215,10 @@ use Apache::lonnet; use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonconfigsettings; -use Apache::lonrelrequtils; use Apache::lonparmset; -use Apache::courseclassifier; use Apache::lonlocal; use LONCAPA qw(:DEFAULT :match); -my $registered_cleanup; -my $modified_courses; - sub handler { my $r=shift; if ($r->header_only) { @@ -233,7 +228,7 @@ sub handler { } my $context = 'course'; my $cid = $env{'request.course.id'}; - my ($cnum,$cdom,$chome) = &get_course($cid); + my ($cnum,$cdom) = &get_course($cid); my $crstype = &Apache::loncommon::course_type(); my $parm_permission = &Apache::lonnet::allowed('opa',$cid); my $navmap = Apache::lonnavmaps::navmap->new(); @@ -262,9 +257,6 @@ sub handler { return HTTP_NOT_ACCEPTABLE; } - $registered_cleanup=0; - @{$modified_courses}=(); - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['phase','actions','origin']); &Apache::lonhtmlcommon::clear_breadcrumbs(); @@ -280,7 +272,6 @@ sub handler { edit => 'Edit Community Settings', gens => 'General community settings', idnu => 'Community ID or number', - unco => 'Unique code', desc => 'Community Description', ownr => 'Community Owner', cown => 'Community Co-owners', @@ -297,7 +288,7 @@ sub handler { stuv => 'Member-viewable membership list options', stul => 'Member agreement needed to be listed', clas => 'Membership and facilitator listing', - prus => 'Privileged users (Domain Coordinators) in facilitator listing', + priv => 'Privileged users (Domain Coordinators) in facilitator listing', defc => 'Default Community Spreadsheet', defs => 'Default User Spreadsheet', seme => 'Send message to member when clicking Done on Tasks' @@ -308,9 +299,8 @@ sub handler { edit => 'Edit Course Settings', gens => 'General course settings', idnu => 'Course ID or number', - unco => 'Unique code', desc => 'Course Description', - cred => 'Student credits', + cred => 'Student credits', ownr => 'Course Owner', cown => 'Course Co-owners', catg => 'Categorize course', @@ -326,8 +316,7 @@ sub handler { stuv => 'Student-viewable classlist options', stul => 'Student agreement needed to be listed', clas => 'Classlists and staff listing', - prus => 'Privileged users (Domain Coordinators) in staff listing', - prdo => "Domains to check for privileged users (besides course's domain)", + priv => 'Privileged users (Domain Coordinators) in staff listing', defc => 'Default Course Spreadsheet', defs => 'Default Student Spreadsheet', seme => 'Send message to student when clicking Done on Tasks', @@ -352,14 +341,7 @@ sub handler { if ($phase eq 'releaseinfo') { my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'}; if ($loncaparev) { - if (&display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype)) { - push(@{$modified_courses},[$cdom,$cnum,$chome,$crstype]); - unless ($registered_cleanup) { - my $handlers = $r->get_handlers('PerlCleanupHandler'); - $r->set_handlers('PerlCleanupHandler' => [\&update_releasereq,@{$handlers}]); - $registered_cleanup=1; - } - } + &display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype); return OK; } } @@ -374,23 +356,20 @@ sub handler { { text => $lt{'gens'}, help => 'Course_Prefs_General', ordered => ['owner','co-owners','loncaparev','description', - 'clonedfrom','courseid','uniquecode','categories', - 'hidefromcat','externalsyllabus','cloners','url', - 'rolenames'], + 'courseid','categories','hidefromcat', + 'externalsyllabus','cloners','url','rolenames'], itemtext => { 'owner' => $lt{'ownr'}, 'co-owners' => $lt{'cown'}, 'description' => $lt{'desc'}, 'courseid' => $lt{'idnu'}, - 'uniquecode' => $lt{'unco'}, 'categories' => $lt{'catg'}, 'hidefromcat' => $lt{'excc'}, 'cloners' => $lt{'clon'}, - 'externalsyllabus' => 'Syllabus status', + 'externalsyllabus' => 'URL of Syllabus', 'url' => 'Top Level Map', 'rolenames' => $lt{'rept'}, 'loncaparev' => $lt{'lcrv'}, - 'clonedfrom' => 'Cloned from', }, }, 'localization' => @@ -445,14 +424,12 @@ sub handler { ordered => ['default_enrollment_start_date', 'default_enrollment_end_date', 'defaultcredits', - 'nothideprivileged','checkforpriv', - 'student_classlist_view', + 'nothideprivileged','student_classlist_view', 'student_classlist_opt_in','student_classlist_portfiles'], itemtext => { default_enrollment_start_date => 'Start date', default_enrollment_end_date => 'End date', - nothideprivileged => $lt{'prus'}, - checkforpriv => $lt{'prdo'}, + nothideprivileged => $lt{'priv'}, student_classlist_view => $lt{'stuv'}, student_classlist_opt_in => $lt{'stul'}, student_classlist_portfiles => 'Include link to accessible portfolio files', @@ -464,15 +441,13 @@ sub handler { help => 'Course_Prefs_Display', ordered => ['default_xml_style','pageseparators', 'disable_receipt_display','texengine', - 'tthoptions','uselcmath','usejsme'], + 'tthoptions'], itemtext => { default_xml_style => 'Default XML style file', pageseparators => 'Visibly Separate Items on Pages', disable_receipt_display => 'Disable display of problem receipts', texengine => 'Force use of a specific math rendering engine', tthoptions => 'Default set of options to pass to tth/m when converting TeX', - uselcmath => 'Student formula entry uses inline preview, not DragMath pop-up', - usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)', }, }, 'grading' => @@ -493,7 +468,7 @@ sub handler { help => 'Course_Prefs_Printouts', ordered => ['problem_stream_switch','suppress_tries', 'default_paper_size','print_header_format', - 'disableexampointprint'], + 'disableexampointprint','canuse_pdfforms'], itemtext => { problem_stream_switch => 'Allow problems to be split over pages', suppress_tries => 'Suppress number of tries in printing', @@ -541,7 +516,7 @@ sub handler { \@prefs_order,\%prefs,\%values, $cnum,undef,\@allitems,'coursepref'); } elsif ($phase eq 'display') { - my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values); + my $jscript = &get_jscript($cid,$cdom,$phase,$crstype); my @allitems = &get_allitems(%prefs); &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype,'coursepref'); @@ -593,15 +568,8 @@ sub print_config_box { exists $item->{'header'}->[0]->{'col2'}) { $output .= ' - '.&mt($item->{'header'}->[0]->{'col1'}).''; - if ($action eq 'feedback') { - $output .= ' - '; - } else { - $output .= ' - '; - } - $output .= &mt($item->{'header'}->[0]->{'col2'}).' + '.&mt($item->{'header'}->[0]->{'col1'}).' + '.&mt($item->{'header'}->[0]->{'col2'}).' '; } $rowtotal ++; @@ -619,14 +587,8 @@ sub print_config_box { '; - if ($action eq 'classlists') { - $output .= ' - + $output .= ' + '; if ($action eq 'classlists') { $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). @@ -655,14 +617,8 @@ sub print_config_box { exists $item->{'header'}->[0]->{'col2'}) { $output .= ' - '; - if (($action eq 'courseinfo') || ($action eq 'localization') || - ($action eq 'print_discussion')) { - $output .= ' + + '; } } @@ -727,8 +683,7 @@ sub process_changes { next if (($entry eq 'categories') && (!$can_categorize)); next if (($entry eq 'loncaparev') || - ($entry eq 'owner') || - ($entry eq 'clonedfrom')); + ($entry eq 'owner')); push(@ordered,$entry); } } elsif ($action eq 'classlists') { @@ -787,7 +742,7 @@ sub process_changes { my @clonedoms; if (exists($env{'form.cloners_activate'})) { my $actnum = $env{'form.cloners_activate'}; - if ($actnum ne '-1') { + if ($actnum ne '') { if ($env{'form.cloners_dom_'.$actnum} ne '') { my $clonedom = $env{'form.cloners_dom_'.$actnum}; if (&check_clone($clonedom,$disallowed) eq 'ok') { @@ -805,7 +760,7 @@ sub process_changes { my $clonedom = $env{'form.cloners_dom_'.$i}; if (&check_clone($clonedom,$disallowed) eq 'ok') { if (!grep(/^\*:\Q$clonedom\E$/,@clonedoms)) { - push(@clonedoms,'*:'.$clonedom); + push (@clonedoms,'*:'.$clonedom); } } } @@ -851,37 +806,6 @@ sub process_changes { } } } - if (ref($values) eq 'HASH') { - my (@code_order,%codedefaults); - &Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, - \@code_order); - my $clonebycode; - if ($env{'form.cloners_instcode'}) { - if (@code_order > 0) { - my @standardnames = &Apache::loncommon::get_standard_codeitems(); - my %local_to_standard; - for (my $i=0; $i<@code_order; $i++) { - $local_to_standard{$code_order[$i]} = $standardnames[$i]; - } - foreach my $item (@code_order) { - my $key = $local_to_standard{$item}; - if ($key ne '') { - if ($env{'form.'.$key}) { - $clonebycode .= $key.'='.&escape($env{'form.'.$key}).'&'; - } - } - } - $clonebycode =~ s/\&$//; - } - } - if ($clonebycode) { - if ($newvalues{$entry}) { - $newvalues{$entry} .= ','.$clonebycode; - } else { - $newvalues{$entry} = $clonebycode; - } - } - } } if (ref($disallowed) eq 'HASH') { if (ref($disallowed->{'cloners'}) eq 'HASH') { @@ -1081,14 +1005,14 @@ sub process_changes { my ($classorder,$classtitles) = &discussion_vote_classes(); my $fontchange = 0; foreach my $class (@{$classorder}) { - my $ext_entry = $entry.'_'.$class; + my $ext_entry = $entry.'_'.$class; my $size = $env{'form.'.$ext_entry.'_size'}; my $unit = $env{'form.'.$ext_entry.'_unit'}; my $weight = $env{'form.'.$ext_entry.'_weight'}; my $style = $env{'form.'.$ext_entry.'_style'}; my $other = $env{'form.'.$ext_entry.'_other'}; $size =~ s/,//g; - $unit =~ s/,//g; + $unit =~ s/,//g; $weight =~ s/,//g; $style =~ s/,//g; $other =~ s/[^\w;:\s\-\%.]//g; @@ -1096,7 +1020,7 @@ sub process_changes { $newvalues{$ext_entry} = join(',',($size.$unit,$weight,$style,$other)); my $current = $values->{$ext_entry}; if ($values->{$ext_entry} eq '') { - $current = ',,,'; + $current = ',,,'; } if ($newvalues{$ext_entry} ne $current) { $changes->{$ext_entry} = $newvalues{$ext_entry}; @@ -1105,7 +1029,7 @@ sub process_changes { } if ($fontchange) { $changes->{$entry} = 1; - } + } } elsif ($entry eq 'nothideprivileged') { my @curr_nothide; my @new_nothide; @@ -1180,43 +1104,32 @@ sub process_changes { my $newtext = $maxnum-1; $newhdr[$env{'form.printfmthdr_pos_'.$newtext}] = $env{'form.printfmthdr_text_'.$newtext}; $newvalues{$entry} = join('',@newhdr); - } elsif (($entry eq 'languages') || - ($entry eq 'checkforpriv')) { - my $settings; + } elsif ($entry eq 'languages') { + my $langstr; my $total = $env{'form.'.$entry.'_total'}; if ($total) { my @deletes = &Apache::loncommon::get_env_multiple('form.'.$entry.'_delete'); for (my $i=0; $i<$total; $i++) { unless (grep(/^$i$/,@deletes)) { - $settings .= $env{'form.'.$entry.'_'.$i}.','; + $langstr .= $env{'form.'.$entry.'_'.$i}.','; } } } else { $total = 0; } if ($env{'form.'.$entry.'_'.$total} ne '') { - my $new = $env{'form.'.$entry.'_'.$total}; - if ($entry eq 'languages') { - my %langchoices = &get_lang_choices(); - if ($langchoices{$new}) { - $settings .= $new; - } else { - $settings =~ s/,$//; - $disallowed->{'localization'}{$entry} = $new; - } + my $newlang = $env{'form.'.$entry.'_'.$total}; + my %langchoices = &get_lang_choices(); + if ($langchoices{$newlang}) { + $langstr .= $newlang; } else { - my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); - if ($domains{$new}) { - $settings .= $new; - } else { - $settings =~ s/,$//; - $disallowed->{'classlists'}{$entry} = $new; - } + $langstr =~ s/,$//; + $disallowed->{'localization'}{$entry} = $newlang; } } else { - $settings =~ s/,$//; + $langstr =~ s/,$//; } - $newvalues{$entry} = $settings; + $newvalues{$entry} = $langstr; } else { $newvalues{$entry} = $env{'form.'.$entry}; } @@ -1439,7 +1352,7 @@ sub store_changes { $displayval = &Apache::lonlocal::locallocaltime($displayval); } elsif ($key eq 'categories') { $displayval = $env{'form.categories_display'}; - } elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') || ($key eq 'uselcmath')) { + } elsif ($key eq 'canuse_pdfforms') { if ($changes->{$item}{$key} eq '1') { $displayval = &mt('Yes'); } elsif ($changes->{$item}{$key} eq '0') { @@ -1711,98 +1624,16 @@ sub get_course { } my $cdom=$env{'course.'.$courseid.'.domain'}; my $cnum=$env{'course.'.$courseid.'.num'}; - my $chome=$env{'course.'.$courseid.'.home'}; - return ($cnum,$cdom,$chome); + return ($cnum,$cdom); } sub get_jscript { - my ($cid,$cdom,$phase,$crstype,$settings) = @_; + my ($cid,$cdom,$phase,$crstype) = @_; my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); - my ($jscript,$categorize_js,$loncaparev_js,$instcode_js); + my ($jscript,$categorize_js,$loncaparev_js); my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); my $cloners_js = &cloners_javascript($phase); - my @code_order; - if ($crstype ne 'Community') { - if (ref($settings) eq 'HASH') { - my %codedefaults; - &Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, - \@code_order); - if (@code_order > 0) { - if ($phase eq 'display') { - my @actions = &Apache::loncommon::get_env_multiple('form.actions'); - if (grep(/^courseinfo$/,@actions)) { - if ($settings->{'cloners'} ne '') { - unless ($settings->{'cloners'} eq '*') { - my @cloners = split(/,/,$settings->{'cloners'}); - my @standardnames = &Apache::loncommon::get_standard_codeitems(); - my %local_to_standard; - for (my $i=0; $i<@code_order; $i++) { - $local_to_standard{$code_order[$i]} = $standardnames[$i]; - } - foreach my $cloner (@cloners) { - if (($cloner !~ /^\Q*:\E$match_domain$/) && - ($cloner !~ /^$match_username\:$match_domain$/)) { - foreach my $item (split(/\&/,$cloner)) { - my ($key,$val) = split(/\=/,$item); - $val = &unescape($val); - foreach my $code (@code_order) { - if ($key eq $local_to_standard{$code}) { - $env{'form.'.$key} = $val; - } - } - } - } - } - } - } - } - } - my @codetitles; - (undef,$instcode_js) = - &Apache::courseclassifier::instcode_selectors($cdom,'display',undef, - \@codetitles); - $instcode_js .= <'."\n". - ''."\n".$stubrowse_js."\n"; + $cloners_js."\n".''."\n".$stubrowse_js."\n"; return $jscript; } @@ -1881,7 +1697,7 @@ function update_cloners(caller,num) { if (document.$formname.cloners_activate[i].value == '0') { document.$formname.cloners_activate[i].checked = false; } - if (document.$formname.cloners_activate[i].value == '-1') { + if (document.$formname.cloners_activate[i].value == '') { document.$formname.cloners_activate[i].checked = true; } } @@ -1938,10 +1754,9 @@ sub print_courseinfo { unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } - my ($cathash,$categoriesform,$autocoowner,$clonedefaults); + my ($cathash,$categoriesform,$autocoowner); my %domconf = - &Apache::lonnet::get_dom('configuration', - ['coursecategories','autoenroll','coursedefaults'],$cdom); + &Apache::lonnet::get_dom('configuration',['coursecategories','autoenroll'],$cdom); if (ref($domconf{'coursecategories'}) eq 'HASH') { $cathash = $domconf{'coursecategories'}{'cats'}; if (ref($cathash) eq 'HASH') { @@ -1953,60 +1768,11 @@ sub print_courseinfo { if (ref($domconf{'autoenroll'}) eq 'HASH') { $autocoowner = $domconf{'autoenroll'}{'co-owners'}; } - my ($currcanclone,@code_order,$cloner_instcode); - my %codedefaults; - &Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults, - \@code_order); - if ($settings->{'cloners'}) { - unless ($settings->{'cloners'} eq '*') { - my @currclone = split(/,/,$settings->{'cloners'}); - foreach my $item (@currclone) { - unless ($item eq '*') { - if (($item !~ /\:/) && ($item =~ /=/)) { - $cloner_instcode = 1; - } - } - } - } - } - if (ref($domconf{'coursedefaults'}) eq 'HASH') { - my $canclone = $domconf{'coursedefaults'}{'canclone'}; - if (ref($canclone) eq 'HASH') { - if (ref($canclone->{'instcode'}) eq 'ARRAY') { - if ($settings->{'internal.coursecode'}) { - my @posscodes; - if (@code_order > 0) { - $currcanclone = 'instcode'; - foreach my $item (@{$canclone->{'instcode'}}) { - if (grep(/^\Q$item\E$/,@code_order)) { - push(@posscodes,$item); - } - } - my $codestr = join(' + ',@posscodes); - $clonedefaults = &mt('Default for official courses is to also allow cloning if [_1] match in cloner and cloned.', - '"'.$codestr.'"').'
'; - } - } - } - } elsif ($canclone eq 'domain') { - $clonedefaults = &mt('Default is for any course requester in [_1] domain to be able to clone.', - ''.$cdom.'').'
'; - $currcanclone = 'domain'; - } - if ($clonedefaults) { - if ($settings->{'cloners'} ne '') { - $clonedefaults .= '
'.&mt('Default does [_1]not[_2] currently apply because values have been set in the course.','',''); - } else { - $clonedefaults .= &mt('Default is disregarded if [_1]any[_2] values are set here in the course.','',''); - } - $clonedefaults = '

'.$clonedefaults; - } - } if (!defined($categoriesform)) { $categoriesform = &mt('No categories defined in this domain.'); } + my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $replace; if ($crstype eq 'Community') { @@ -2037,22 +1803,15 @@ sub print_courseinfo { 'co-owners' => { text => ''.&mt($itemtext->{'co-owners'}).'', }, - 'clonedfrom' => { - text => ''.&mt($itemtext->{'clonedfrom'}).'', - }, 'courseid' => { text => ''.&mt($itemtext->{'courseid'}).'
'.'('. &mt('internal, optional').')', input => 'textbox', size => '25', }, - 'uniquecode' => { - text => ''.&mt($itemtext->{'uniquecode'}).'', - }, 'cloners' => { text => ''.&mt($itemtext->{'cloners'}).'
'. - &mt('Owner and Coordinators included automatically'). - $clonedefaults, + &mt('Owner and Coordinators included automatically'), input => 'textbox', size => '40' }, @@ -2064,10 +1823,10 @@ sub print_courseinfo { advanced => 1 }, 'externalsyllabus' => { - text => ''.&mt($itemtext->{'externalsyllabus'}).'
'. - &mt('(Syllabus type in use)').(' ' x2). - &mt('[_1]Edit[_2]','', - ''), + text => ''.&mt($itemtext->{'externalsyllabus'}).'
('. + &mt('not using syllabus template)'), + input => 'textbox', + size => '40', }, 'hidefromcat' => { text => ''.&mt($itemtext->{'hidefromcat'}).'
'. @@ -2090,30 +1849,23 @@ sub print_courseinfo { my $datatable; my $count = 0; foreach my $item (@{$ordered}) { - my $colspan; if ($item eq 'hidefromcat') { next if (!$can_toggle_cat); } elsif ($item eq 'categories') { next if (!$can_categorize); - } elsif ($item eq 'uniquecode') { - next if (!$env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'}); - } - unless (($item eq 'cloners') || ($item eq 'rolenames')) { - $colspan = 2; } $count ++; if (exists $items{$item}{advanced} && $items{$item}{advanced} == 1) { - $datatable .= &item_table_row_start($items{$item}{text},$count,"advanced",$colspan); + $datatable .= &item_table_row_start($items{$item}{text},$count,"advanced"); } else { - $datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); + $datatable .= &item_table_row_start($items{$item}{text},$count); } if ($items{$item}{input} eq 'radio') { $datatable .= &yesno_radio($item,$settings); } elsif ($item eq 'cloners') { my $includeempty = 1; my $num = 0; - $datatable .= '
'. + "'cloners_all'".');"/>'.&mt('No').''. &Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(). - '
'.&mt($item->{'header'}->[1]->{'col1'}).''; - } else { - $output .= ' - '; - } - $output .= &mt($item->{'header'}->[1]->{'col2'}).''.&mt($item->{'header'}->[1]->{'col2'}).'
'.&mt($item->{'header'}->[0]->{'col1'}).''; - } else { - $output .= ''; - } - $output .= &mt($item->{'header'}->[0]->{'col2'}).''.&mt($item->{'header'}->[0]->{'col1'}).''.&mt($item->{'header'}->[0]->{'col2'}).'
'. - &Apache::loncommon::start_data_table(). + $datatable .= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). ''. - (' 'x2).'
'.&mt('Or'). - '
'. + '
'.&mt('Or'). + '
'. &Apache::loncommon::start_data_table(); my @cloners; if ($settings->{$item} eq '') { - my $default; - if ($currcanclone eq 'domain') { - $default = '0'; - } - $datatable .= &new_cloners_dom_row($cdom,'0',$default); + $datatable .= &new_cloners_dom_row($cdom,'0'); } elsif ($settings->{$item} ne '*') { my @entries = split(/,/,$settings->{$item}); if (@entries > 0) { @@ -2189,8 +1936,8 @@ sub print_courseinfo { ''. ''.&Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(). - '
'.&mt('And'). - '
'. + '
'.&mt('And'). + '
'. &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). ''. @@ -2200,40 +1947,8 @@ sub print_courseinfo { $items{$item}{'size'}). ''.&Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(); - if (@code_order > 0) { - my (%cat_items,@codetitles,%cat_titles,%cat_order); - my ($jscript,$totcodes,$numtitles,$lasttitle) = - &Apache::courseclassifier::instcode_selectors_data($cdom,'display', - \%cat_items,\@codetitles, - \%cat_titles,\%cat_order); - my $showncodes = 'off'; - my $checkedoff = ' checked="checked"'; - my $checkedon = ''; - if ($cloner_instcode) { - $checkedon = $checkedoff; - $checkedoff = ''; - $showncodes = 'on'; - } - $datatable .= '
'.&mt('And'). - '
'. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_row(). - ''. - &mt('Cloning by official course(s) based on course category').(' 'x2). - ''. - (' '). - ''. - &Apache::courseclassifier::build_instcode_selectors($numtitles, - $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order, - $showncodes,'LC_cloners_instcodes','LC_cloners_instcode'). - ''.&Apache::loncommon::end_data_table_row(). - &Apache::loncommon::end_data_table(); - } } elsif ($item eq 'rolenames') { - $datatable .= ''. - &Apache::loncommon::start_data_table(); + $datatable .= &Apache::loncommon::start_data_table(); my @roles; if ($crstype eq 'Community') { @roles = ('co'); @@ -2253,7 +1968,7 @@ sub print_courseinfo { } $datatable .= &Apache::loncommon::end_data_table().''; } elsif ($item eq 'categories') { - my $launcher = 'onfocus="this.blur();javascript:catsbrowser();"'; + my $launcher = 'onFocus="this.blur();javascript:catsbrowser();";'; $datatable .= ''. &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item}, $items{$item}{size},$launcher); @@ -2268,22 +1983,8 @@ sub print_courseinfo { $owner = &mt('None specified'); } $datatable .= $owner; - } elsif ($item eq 'clonedfrom') { - my $clonesrc = $env{'course.'.$env{'request.course.id'}.'.clonedfrom'}; - my $clonedfrom = &mt('None'); - if ($clonesrc =~ m{/$match_domain/$match_courseid}) { - my %clonesrcinfo = &Apache::lonnet::coursedescription($clonesrc); - if ($clonesrcinfo{'description'}) { - $clonedfrom = $clonesrcinfo{'description'}.' '.($clonesrc); - } - } - $datatable .= $clonedfrom; - } elsif ($item eq 'uniquecode') { - my $code = $env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'}; - if ($code) { - $datatable .= $code; - } } elsif ($item eq 'co-owners') { + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}; my @currcoown; if ($coowners) { @@ -2302,36 +2003,6 @@ sub print_courseinfo { $datatable .= &manage_coownership($cnum,$cdom,@currcoown); } } - } elsif ($item eq 'externalsyllabus') { - my $external = $env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}; - my $uploaded = $env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}; - my $minimal = $env{'course.'.$env{'request.course.id'}.'.minimalsyllabus'}; - if (($minimal =~/\w/) || ($uploaded =~/\w/)) { - if ($minimal =~/\w/) { - if ($external =~ m{\Q$minimal\E$}) { - undef($external); - } - } elsif ($uploaded =~/\w/) { - if ($external =~ m{\Q$uploaded\E$}) { - undef($external); - } - } - } elsif ($external!~/\w/) { - undef($external); - } - if ($external) { - $datatable .= &mt('External URL'); - } elsif ($minimal) { - $datatable .= &mt('Minimal template'); - } elsif ($uploaded) { - $datatable .= &mt('Uploaded file'); - } else { - $datatable .= &mt('Standard template'); - } - $datatable .= (' ' x 2). - &mt('[_1]View[_2]', - '', - ''); } elsif ($item eq 'loncaparev') { my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; my $showreqd; @@ -2352,24 +2023,19 @@ sub print_courseinfo { } sub new_cloners_dom_row { - my ($newdom,$num,$default) = @_; - my ($output,$checkedon,$checkedoff); + my ($newdom,$num) = @_; + my $output; if ($newdom ne '') { - if ($num eq $default) { - $checkedon = 'checked="checked" '; - } else { - $checkedoff = 'checked="checked" '; - } $output .= &Apache::loncommon::start_data_table_row(). ''. &mt('Any user in domain:').' '.$newdom.''. (' 'x2).''.(' 'x2). ' @@ -2507,7 +2172,6 @@ ENDSCRIPT sub display_loncaparev_constraints { my ($r,$navmap,$loncaparev,$crstype) = @_; - my ($reqdmajor,$reqdminor); my $cid = $env{'request.course.id'}; my $cdom = $env{'course.'.$cid.'.domain'}; my $cnum = $env{'course.'.$cid.'.num'}; @@ -2517,45 +2181,25 @@ sub display_loncaparev_constraints { 'section/group' => 'section/group', 'user' => 'user', ); - &Apache::lonrelrequtils::init_global_hashes(); - if (defined($Apache::lonrelrequtils::checkcrstypes{$crstype})) { - ($reqdmajor,$reqdminor) = split(/\./,$Apache::lonrelrequtils::checkcrstypes{$crstype}); + my (%checkparms,%checkresponsetypes,%checkcrstypes,%anonsurvey,%randomizetry); + &Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, + \%checkcrstypes,\%anonsurvey,\%randomizetry); + if (defined($checkcrstypes{$crstype})) { $output .= '

'.&mt('Course type: [_1] requires [_2] or newer',$crstype, - $Apache::lonrelrequtils::checkcrstypes{$crstype}).'

'; + $checkcrstypes{$crstype}).''; } my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps, - %byresponsetype,%bysubmission,%fromblocks); + %byresponsetype,%bysubmission); @scopeorder = ('all','section/group','user'); - my $now = time; my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom); if (ref($resourcedata) eq 'HASH') { foreach my $key (keys(%{$resourcedata})) { - foreach my $item (keys(%Apache::lonrelrequtils::checkparms)) { + foreach my $item (keys(%checkparms)) { if ($key =~ /(\Q$item\E)$/) { - if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') { + if (ref($checkparms{$item}) eq 'ARRAY') { my $value = $resourcedata->{$key}; - if ($item eq 'examcode') { - if (&Apache::lonnet::validCODE($value)) { - $value = 'valid'; - } else { - $value = ''; - } - } elsif ($item eq 'printstartdate') { - if ($value =~ /^\d+$/) { - if ($value > $now) { - $value = 'future'; - } - } - } elsif ($item eq 'printenddate') { - if ($value =~ /^\d+$/) { - if ($value < $now) { - $value = 'past'; - } - } - - } my ($middle,$scope,$which,$level,$map,$resource); - if (grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) { + 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); @@ -2647,9 +2291,6 @@ sub display_loncaparev_constraints { ''.&mt('Extent').''.&mt('Setting').''. &Apache::loncommon::end_data_table_header_row(); foreach my $rev (keys(%fromparam)) { - my ($major,$minor) = split(/\./,$rev); - ($reqdmajor,$reqdminor) = - &Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); $output .= &Apache::loncommon::start_data_table_row(). ''.$rev.''; my $newrow; @@ -2680,75 +2321,6 @@ sub display_loncaparev_constraints { } } - my %comm_blocks = &Apache::lonnet::dump('comm_block',$cdom,$cnum); - my $now = time; - if (keys(%comm_blocks) > 0) { - foreach my $block (keys(%comm_blocks)) { - if ($block =~ /^firstaccess____(.+)$/) { - my $rev = $Apache::lonnet::needsrelease{'course:commblock:timer'}; - if (ref($comm_blocks{$block}) eq 'HASH') { - push(@{$fromblocks{'timer'}{$rev}},&unescape($comm_blocks{$block}{'event'}). - ' '.&mt('set by [_1]', - &Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); - } - next; - } elsif ($block =~ /^(\d+)____(\d+)$/) { - my ($start,$end) = ($1,$2); - next if ($end < $now); - } - if (ref($comm_blocks{$block}) eq 'HASH') { - if (ref($comm_blocks{$block}{'blocks'}) eq 'HASH') { - if (ref($comm_blocks{$block}{'blocks'}{'docs'}) eq 'HASH') { - if (keys(%{$comm_blocks{$block}{'blocks'}{'docs'}}) > 0) { - my $rev = $Apache::lonnet::needsrelease{'course:commblock:docs'}; - push(@{$fromblocks{'docs'}{$rev}},&unescape($comm_blocks{$block}{'event'}). - ' '. - &mt('set by [_1]', - &Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); - } - } elsif ($comm_blocks{$block}{'blocks'}{'printout'} eq 'on') { - my $rev = $Apache::lonnet::needsrelease{'course:commblock:printout'}; - push(@{$fromblocks{'printout'}{$rev}},&unescape($comm_blocks{$block}{'event'}). - ' '. - &mt('set by [_1]', - &Apache::loncommon::plainname(split(/:/,$comm_blocks{$block}{'setter'})))); - - } - } - } - } - if (keys(%fromblocks)) { - my %lt = ( - docs => 'Content blocking', - printout => 'Printout generation', - timer => 'Timed quiz trigger', - ); - $output .= '

'.&mt('Requirements from exam blocking').'

'. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - ''.&mt('Release').''.&mt('Setting').''. - ''.&mt('Event(s)').''. - &Apache::loncommon::end_data_table_header_row(); - foreach my $type ('docs','printout','timer') { - if (ref($fromblocks{$type}) eq 'HASH') { - foreach my $rev (keys(%{$fromblocks{$type}})) { - my ($major,$minor) = split(/\./,$rev); - ($reqdmajor,$reqdminor) = - &Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); - $output .= &Apache::loncommon::start_data_table_row(). - ''.$rev.''.$lt{$type}.''; - foreach my $event (sort(@{$fromblocks{$type}{$rev}})) { - $output .= $event.'
'; - } - $output =~ s{\Q
\E$}{}; - $output .= ''.&Apache::loncommon::end_data_table_row(); - } - } - } - $output .= &Apache::loncommon::end_data_table().'
'; - } - } - if (defined($navmap)) { my %anonsubms=&Apache::lonnet::dump('nohist_anonsurveys',$cdom,$cnum); my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}; @@ -2758,7 +2330,7 @@ sub display_loncaparev_constraints { my $stdname=&Apache::lonparmset::standard_parameter_names('type'); my $valanon=&get_param_description($stdtype,'anonsurvey'); my $valrandtry=&get_param_description($stdtype,'randomizetry'); - my %checkedrev; + foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { my @parts = @{$res->parts()}; my $symb = $res->symb(); @@ -2775,13 +2347,6 @@ sub display_loncaparev_constraints { push(@{$bysubmission{$symb}{$rev}},$what); } $allmaps{$enclosing_map} = 1; - unless ($checkedrev{'anonsurvey'}) { - my ($major,$minor) = split(/\./,$rev); - ($reqdmajor,$reqdminor) = - &Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, - $reqdmajor,$reqdminor); - $checkedrev{'anonsurvey'} = 1; - } } if (exists($randtrysubms{$symb."\0".$part})) { my $rev = $rev_randtry; @@ -2794,27 +2359,12 @@ sub display_loncaparev_constraints { push(@{$bysubmission{$symb}{$rev}},$what); } $allmaps{$enclosing_map} = 1; - unless ($checkedrev{'randomizetry'}) { - my ($major,$minor) = split(/\./,$rev); - ($reqdmajor,$reqdminor) = - &Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, - $reqdmajor,$reqdminor); - $checkedrev{'randomizetry'} = 1; - } } } my %responses = $res->responseTypes(); foreach my $key (keys(%responses)) { - if (exists($Apache::lonrelrequtils::checkresponsetypes{$key})) { - my $rev = $Apache::lonrelrequtils::checkresponsetypes{$key}; - unless ($checkedrev{$key}) { - my ($major,$minor) = split(/\./,$rev); - ($reqdmajor,$reqdminor) = - &Apache::lonrelrequtils::update_reqd_loncaparev($major,$minor, - $reqdmajor,$reqdminor); - $checkedrev{$key} = 1; - } - push(@{$byresponsetype{$symb}{$rev}},$key); + if (exists($checkresponsetypes{$key})) { + push(@{$byresponsetype{$symb}{$checkresponsetypes{$key}}},$key); $allmaps{$enclosing_map} = 1; } } @@ -2832,9 +2382,9 @@ sub display_loncaparev_constraints { } foreach my $map (keys(%allmaps)) { my $mapres = $navmap->getResourceByUrl($map); + my $mapsymb = $mapres->symb(); + $toshow{$mapsymb} = 1; if (ref($mapres)) { - my $mapsymb = $mapres->symb(); - $toshow{$mapsymb} = 1; my $pcslist = $mapres->map_hierarchy(); if ($pcslist ne '') { foreach my $pc (split(/,/,$pcslist)) { @@ -2875,10 +2425,6 @@ sub display_loncaparev_constraints { '

'); } $r->print(&Apache::loncommon::end_page()); - my ($currmajor,$currminor) = split(/\./,$loncaparev); - if (($currmajor != $reqdmajor) || ($currminor != $reqdminor)) { - return 1; - } return; } @@ -2897,7 +2443,7 @@ sub show_contents_view { ''.&mt('Attribute/Setting').''. &Apache::loncommon::end_data_table_header_row(). &Apache::loncommon::start_data_table_row(). - ' '.$icon.' '.&mt('Main Content').''); + ' '.$icon.' '.&mt('Main Course Documents').''); &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); @@ -3020,19 +2566,13 @@ sub show_contents_view { } $r->print(&Apache::loncommon::end_data_table()); } - return; } sub releases_by_map { my ($r,$bymap,$url,$scopeorder,$lt) = @_; return unless ((ref($bymap) eq 'HASH') && (ref($scopeorder) eq 'ARRAY')); - my $newrow = 0; if (ref($bymap->{$url}) eq 'HASH') { foreach my $rev (sort(keys(%{$bymap->{$url}}))) { - if ($newrow) { - $r->print(&Apache::loncommon::end_data_table_row(). - &Apache::loncommon::continue_data_table_row()); - } $r->print(''.$rev.''); if (ref($bymap->{$url}{$rev}) eq 'HASH') { $r->print(''); @@ -3054,7 +2594,6 @@ sub releases_by_map { $r->print('
'); } $r->print(''); - $newrow = 1; } } else { $r->print(' '); @@ -3080,27 +2619,9 @@ sub get_param_description { return $name; } -sub update_releasereq { - my $readmap = 1; - my $getrelreq = 1; - if (ref($modified_courses) eq 'ARRAY') { - foreach my $item (@{$modified_courses}) { - if (ref($item) eq 'ARRAY') { - my ($cdom,$cnum,$chome,$crstype) = @{$item}; - &Apache::lonrelrequtils::modify_course_relreq(undef,undef,$cnum,$cdom, - $chome,$crstype,$cdom.'_'.$cnum, - $readmap,$getrelreq); - } - } - $modified_courses = []; - } - undef($registered_cleanup); - return; -} - sub show_autocoowners { my (@currcoown) = @_; - my $output = ''.&mt('Co-ownership is set automatically when a Course Coordinator role[_1] is assigned to official course personnel (from institutional data).','
').'
'; + my $output = ''.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').''; if (@currcoown > 0) { $output .= '
'.&mt('Current co-owners are:').' '. join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown)); @@ -3244,11 +2765,7 @@ sub print_localization { my $count = 0; foreach my $item (@{$ordered}) { $count ++; - my $colspan; - unless ($item eq 'languages') { - $colspan = 2; - } - $datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); + $datatable .= &item_table_row_start($items{$item}{text},$count); if ($item eq 'timezone') { my $includeempty = 1; my $timezone = &Apache::lonlocal::gettimezone(); @@ -3267,13 +2784,12 @@ sub print_localization { undef,$includeempty); } else { if ($settings->{$item} eq '') { - $datatable .= ''. + $datatable .= &Apache::loncommon::select_language('languages_0','',1); } else { my $num = 0; my @languages = split(/\s*[,;:]\s*/,$settings->{$item}); - $datatable .= '
'. - &Apache::loncommon::start_data_table(); + $datatable .= &Apache::loncommon::start_data_table(); if (@languages > 0) { my %langchoices = &get_lang_choices(); foreach my $lang (@languages) { @@ -3300,7 +2816,7 @@ sub print_localization { &Apache::loncommon::select_language('languages_'.$num,'',1). ''. ''.&Apache::loncommon::end_data_table_row(). - &Apache::loncommon::end_data_table().'
'; + &Apache::loncommon::end_data_table(); } } $datatable .= &item_table_row_end(); @@ -3362,12 +2878,11 @@ sub print_feedback { if ($position eq 'top') { $datatable .= &item_table_row_start($items{$item}{text},$count); } else { - $datatable .= &item_table_row_start($items{$item}{text}."
(Custom text)",$count, "advanced",2); + $datatable .= &item_table_row_start($items{$item}{text}."
(Custom text)",$count, "advanced"); } if ($position eq 'top') { my $includeempty = 0; - $datatable .= ''. - &user_table($cdom,$item,\@sections, + $datatable .= &user_table($cdom,$item,\@sections, $settings->{$item},\%lt); } else { $datatable .= &Apache::lonhtmlcommon::textbox($item.'.text', @@ -3387,7 +2902,7 @@ sub user_table { } else { my $num = 0; my @curr = split(/,/,$currvalue); - $output .= ''; + $output .= '
'; my ($currusers); foreach my $val (@curr) { next if ($val eq ''); @@ -3551,52 +3066,43 @@ sub print_discussion { del => 'Delete?', sec => 'Sections:', ); + foreach my $item (@{$ordered}) { $count ++; - my $colspan; - if ($item eq 'allow_limited_html_in_feedback') { - $colspan = 2; - } - $datatable .= &item_table_row_start($items{$item}{text},$count,undef,$colspan); + $datatable .= &item_table_row_start($items{$item}{text},$count); if ($item eq 'plc.roles.denied') { - $datatable .= ''. &Apache::loncommon::end_data_table_row(). &role_checkboxes($cdom,$cnum,$item,$settings,1). - &Apache::loncommon::end_data_table().'
'; + &Apache::loncommon::end_data_table(); } elsif ($item eq 'discussion_post_fonts') { - $datatable .= ''. ''. ''. ''. - ''. + ''. &Apache::loncommon::end_data_table_row(). &set_discussion_fonts($cdom,$cnum,$item,$settings). - &Apache::loncommon::end_data_table().'
'; + &Apache::loncommon::end_data_table(); } $datatable .= &item_table_row_end(); } @@ -3765,7 +3271,7 @@ sub set_discussion_fonts { sub discussion_vote_classes { my $classorder = ['twoplus','oneplus','zero','oneminus','twominus']; - my %classtitles = &Apache::lonlocal::texthash( + my %classtitles = &Apache::lonlocal::texthash( 'twoplus' => 'Two sigma above mean', 'oneplus' => 'One sigma above mean', 'zero' => 'Within one sigma of mean', @@ -3797,7 +3303,7 @@ sub print_classlists { push(@ordered,'defaultcredits'); } } elsif ($position eq 'middle') { - @ordered = ('nothideprivileged','checkforpriv'); + @ordered = ('nothideprivileged'); } else { @ordered = ('student_classlist_view', 'student_classlist_opt_in', @@ -3831,17 +3337,12 @@ sub print_classlists { 'defaultcredits' => { text => ''.&mt($itemtext->{'defaultcredits'}).'', }, - + 'nothideprivileged' => { text => ''.&mt($itemtext->{'nothideprivileged'}).'', input => 'checkbox', }, - 'checkforpriv' => { - text => ''.&mt($itemtext->{'checkforpriv'}).'', - input => 'selectbox', - }, - 'student_classlist_view' => { text => ''.&mt($itemtext->{'student_classlist_view'}).'', input => 'selectbox', @@ -3862,7 +3363,7 @@ sub print_classlists { ($settings->{'student_classlist_view'} eq 'section')) { $settings->{'student_classlist_view'} = 'disabled'; } - return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'classlists'); + return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); } sub print_appearance { @@ -3898,11 +3399,11 @@ sub print_appearance { text => ''.&mt($itemtext->{'texengine'}).'', input => 'selectbox', options => { - MathJax => 'MathJax', + jsMath => 'jsMath', mimetex => &mt('Convert to Images'), tth => &mt('TeX to HTML'), }, - order => ['MathJax','mimetex','tth'], + order => ['jsMath','mimetex','tth'], nullval => $mathdef, }, 'tthoptions' => { @@ -3910,16 +3411,8 @@ sub print_appearance { input => 'textbox', size => 40, }, - 'uselcmath' => { - text => ''.&mt($itemtext->{'uselcmath'}).'', - input => 'radio', - }, - 'usejsme' => { - text => ''.&mt($itemtext->{'usejsme'}).'', - input => 'radio', - }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'appearance'); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_grading { @@ -3934,11 +3427,12 @@ sub print_grading { input => 'selectbox', options => { standard => &mt('Standard: shows points'), + categories => &mt('Categories: shows points according to categories'), external => &mt('External: shows number of completed parts and totals'), externalnototals => &mt('External: shows only number of completed parts'), spreadsheet => &mt('Spreadsheet: (with link to detailed scores)'), }, - order => ['standard','external','externalnototals','spreadsheet'], + order => ['standard','categories','external','externalnototals','spreadsheet'], }, 'rndseed' => { text => ''.&mt($itemtext->{'rndseed'}).''. @@ -3974,7 +3468,7 @@ sub print_grading { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading'); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_printouts { @@ -4027,7 +3521,7 @@ sub print_printouts { nullval => &mt('None specified - use domain default'), } ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'printouts'); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_spreadsheet { @@ -4063,7 +3557,7 @@ sub print_spreadsheet { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'spreadsheet'); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_bridgetasks { @@ -4105,7 +3599,7 @@ sub print_bridgetasks { input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks'); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_other { @@ -4130,7 +3624,7 @@ sub print_other { input => 'textbox', size => '30', }; - my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype,'other'); + my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); } sub get_other_items { @@ -4148,9 +3642,7 @@ sub get_other_items { ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) || ($parameter eq 'type') || ($parameter =~ m/^(cc|co|in|ta|ep|ad|st)\.plaintext$/) - || ($parameter =~ m/^discussion_post_fonts/) || - ($parameter =~ m{^(minimal|updated|uploaded|external)syllabus$}) || - ($parameter eq 'clonedfrom')) { + || ($parameter =~ m/^discussion_post_fonts/)) { push(@ordered,$parameter); } } @@ -4159,18 +3651,13 @@ sub get_other_items { } sub item_table_row_start { - my ($text,$count,$add_class,$colspan) = @_; + my ($text,$count,$add_class) = @_; my $output; - my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; - $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq ''); - $output .= ''."\n". - ''; - if ($colspan) { - $output .= ''."\n";; + $output .= ''. - &Apache::loncommon::end_data_table_row(); - $num ++; - unless (grep(/^\Q$currdom\E$/,@excdoms)) { - push(@excdoms,$currdom); - } - } - } - if ((scalar(keys(%domains)) - scalar(@excdoms)) > 0) { - $datatable .= - &Apache::loncommon::start_data_table_row(). - ''.&Apache::loncommon::end_data_table_row(); - } - $datatable .= &Apache::loncommon::end_data_table(). - ''. - '
'; - } - return $datatable; -} - sub print_hdrfmt_row { my ($item,$settings) = @_; my @curr; @@ -4518,8 +3928,7 @@ function getIndexByName(item) { ENDJS - $output .= '
'. - ''.&role_checkboxes($cdom,$cnum,$item,$settings). + $datatable .= '
'.&role_checkboxes($cdom,$cnum,$item,$settings). '
'; } elsif ($item eq 'plc.users.denied') { - $datatable .= '
'. - &user_table($cdom,$item,undef, + $datatable .= &user_table($cdom,$item,undef, $settings->{$item},\%lt); } elsif ($item eq 'pch.roles.denied') { - $datatable .= ''. - ''.&role_checkboxes($cdom,$cnum,$item,$settings). + $datatable .= '
'.&role_checkboxes($cdom,$cnum,$item,$settings). '
'; } elsif ($item eq 'pch.users.denied') { - $datatable .= '
'. - &user_table($cdom,$item,undef, + $datatable .= &user_table($cdom,$item,undef, $settings->{$item},\%lt); } elsif ($item eq 'allow_limited_html_in_feedback') { $datatable .= &yesno_radio($item,$settings); } elsif ($item eq 'allow_discussion_post_editing') { - $datatable .= '
'. - &Apache::loncommon::start_data_table(). + $datatable .= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). '
'.&mt('Role').''. &mt('Sections').'
'. - &Apache::loncommon::start_data_table(). + $datatable .= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). '
'.&mt('Sum of likes/dislikes').''.&mt('font-size').''.&mt('font-weight').''.&mt('font-style').''.&mt('Other css').''.&mt('Other css').'
'.$text. - ''; - } else { - $output .= ''; - } + my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row'; + $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq ''); + $output .= '
'.$text. + ''; return $output; } @@ -4179,30 +3666,20 @@ sub item_table_row_end { } sub yesno_radio { - my ($item,$settings,$unsetdefault,$valueyes,$valueno) = @_; + my ($item,$settings) = @_; my $itemon = ' '; my $itemoff = ' checked="checked" '; - if (($valueyes eq '') && ($valueno eq '')) { - $valueyes = 'yes'; - $valueno = ''; - } if (ref($settings) eq 'HASH') { - if ($settings->{$item} eq $valueyes) { + if ($settings->{$item} eq 'yes') { $itemon = $itemoff; $itemoff = ' '; } - unless (exists($settings->{$item})) { - if ($unsetdefault eq $valueyes) { - $itemon = $itemoff; - $itemoff = ' '; - } - } } return ' '. + $itemon.' value="yes" />'.&mt('Yes').' '. ''; + $itemoff.' value="" />'.&mt('No').''; } sub select_from_options { @@ -4251,21 +3728,16 @@ sub select_from_options { } sub make_item_rows { - my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype,$caller) = @_; + my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype) = @_; my $datatable; if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { my $count = 0; foreach my $item (@{$ordered}) { $count ++; - my $colspan; - if ((($caller eq 'classlists') && ($item eq 'nothideprivileged')) || - (($caller eq 'printouts') && ($item ne 'print_header_format'))) { - $colspan = 2; - } if (exists $items->{$item}{advanced} && $items->{$item}{advanced} == 1) { - $datatable .= &item_table_row_start($items->{$item}{text},$count,"advanced",$colspan); + $datatable .= &item_table_row_start($items->{$item}{text},$count,"advanced"); } else { - $datatable .= &item_table_row_start($items->{$item}{text},$count,undef,$colspan); + $datatable .= &item_table_row_start($items->{$item}{text},$count); } if ($item eq 'defaultcredits') { my $defaultcredits = $env{'course.'.$env{'request.course.id'}.'.internal.defaultcredits'}; @@ -4278,8 +3750,6 @@ sub make_item_rows { $datatable .= $showcredits; } elsif ($item eq 'nothideprivileged') { $datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype); - } elsif ($item eq 'checkforpriv') { - $datatable .= &checkforpriv_row($cdom,$item,$settings,$crstype); } elsif ($item eq 'print_header_format') { $datatable .= &print_hdrfmt_row($item,$settings); } elsif ($items->{$item}{input} eq 'dates') { @@ -4287,16 +3757,7 @@ sub make_item_rows { &Apache::lonhtmlcommon::date_setter('display',$item, $settings->{$item}); } elsif ($items->{$item}{input} eq 'radio') { - my ($unsetdefault,$valueyes,$valueno); - if (($item eq 'usejsme') || ($item eq 'uselcmath')) { - my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); - unless ($domdefs{$item} eq '0') { - $unsetdefault = 1; - } - $valueyes = "1"; - $valueno = "0"; - } - $datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno); + $datatable .= &yesno_radio($item,$settings); } elsif ($items->{$item}{input} eq 'selectbox') { my $curr = $settings->{$item}; $datatable .= @@ -4320,7 +3781,8 @@ sub make_item_rows { sub nothidepriv_row { my ($cdom,$item,$settings,$crstype) = @_; my ($cnum) = &get_course(); - my ($datatable,%nothide,@checkdoms); + my %nothide; + my $datatable; if (ref($settings) eq 'HASH') { if ($settings->{$item} ne '') { foreach my $user (split(/\s*\,\s*/,$settings->{$item})) { @@ -4331,30 +3793,38 @@ sub nothidepriv_row { } } } - if ($settings->{'checkforpriv'}) { - @checkdoms = split(/,/,$settings->{'checkforpriv'}); - } } - push(@checkdoms,$cdom); - my %coursepersonnel = - &Apache::lonnet::get_my_roles($cnum,$cdom,'',['previous','future','active']); + my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + my $now = time; my @privusers; + my %privileged; foreach my $person (keys(%coursepersonnel)) { - my ($uname,$udom,$role) = split(/:/,$person); - my $user = $uname.':'.$udom; - my ($start,$end) = split(/:/,$coursepersonnel{$person}); + my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/); + $user =~ s/:$//; + my ($end,$start) = split(/:/,$coursepersonnel{$person}); if ($end == -1 || $start == -1) { next; } - foreach my $dom (@checkdoms) { - if (&Apache::lonnet::privileged($uname,$udom,\@checkdoms,['dc','su'])) { - unless (grep(/^\Q$user\E$/,@privusers)) { - push(@privusers,$user); + my ($uname,$udom) = split(':',$user); + unless (ref($privileged{$udom}) eq 'HASH') { + my %dompersonnel = &Apache::lonnet::get_domain_roles($udom,['dc'],undef,$now); + $privileged{$udom} = {}; + if (keys(%dompersonnel)) { + foreach my $server (keys(%dompersonnel)) { + foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { + my ($trole,$uname,$udom) = split(/:/,$user); + $privileged{$udom}{$uname} = $trole; + } } } } + if (exists($privileged{$udom}{$uname})) { + unless (grep(/^\Q$user\E$/,@privusers)) { + push(@privusers,$user); + } + } } - if (@privusers > 0) { + if (@privusers) { $datatable .= ''; foreach my $user (sort(@privusers)) { my $hideon = ' checked="checked" '; @@ -4372,8 +3842,7 @@ sub nothidepriv_row { ' '. - ''. + ''. ''; } $datatable .= '
'; @@ -4387,65 +3856,6 @@ sub nothidepriv_row { return $datatable; } -sub checkforpriv_row { - my ($cdom,$item,$settings,$crstype) = @_; - my $datatable; - my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); - if (keys(%domains) == 1) { - $datatable = '
'. - &mt("Course's domain is only domain"); - return $datatable; - } - my @excdoms = ($cdom); - my $num = 0; - if ($settings->{$item} eq '') { - $datatable = ''. - &Apache::loncommon::select_dom_form('','checkforpriv_'.$num, - 1,1,undef,undef,\@excdoms); - } else { - my @privdoms = split(/,/,$settings->{$item}); - my %domains=map { $_ => 1; } &Apache::lonnet::all_domains(); - $datatable = '
'. - &Apache::loncommon::start_data_table(); - if (@privdoms > 0) { - foreach my $currdom (@privdoms) { - next unless ($domains{$currdom}); - my $domdesc = &Apache::lonnet::domain($currdom,'description'); - if ($domdesc eq '') { - $domdesc = $currdom; - } - $datatable .= - &Apache::loncommon::start_data_table_row(). - '
'. - &mt('Domain:').' '.$domdesc. - '
'. - '
'. - &mt('Additional domain:'). '
'. - &Apache::loncommon::select_dom_form('','checkforpriv_'.$num,1, - 1,undef,undef,\@excdoms). - '

'. - $currstr.''; + $output .= $currstr.'
'; if (@curr > 0) { for (my $i=0; $i<@curr; $i++) { my $pos = $i+1; @@ -4559,7 +3968,7 @@ ENDJS ''. ''. - '

'; + '
'; return $output; } @@ -4626,19 +4035,17 @@ sub change_clone { foreach my $currclone (@allowclone) { if (!grep(/^$currclone$/,@$oldcloner)) { if ($currclone ne '*') { - if ($currclone =~ /:/) { - my ($uname,$udom) = split(/:/,$currclone); - if ($uname && $udom && $uname ne '*') { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} eq '') { - $currclonecrs{'cloneable'} = $clone_crs; - } else { - $currclonecrs{'cloneable'} .= ','.$clone_crs; - } - &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); + my ($uname,$udom) = split(/:/,$currclone); + if ($uname && $udom && $uname ne '*') { + if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { + my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); + if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { + if ($currclonecrs{'cloneable'} eq '') { + $currclonecrs{'cloneable'} = $clone_crs; + } else { + $currclonecrs{'cloneable'} .= ','.$clone_crs; } + &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); } } } @@ -4648,26 +4055,24 @@ sub change_clone { foreach my $oldclone (@$oldcloner) { if (!grep(/^\Q$oldclone\E$/,@allowclone)) { if ($oldclone ne '*') { - if ($oldclone =~ /:/) { - my ($uname,$udom) = split(/:/,$oldclone); - if ($uname && $udom && $uname ne '*' ) { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - my %newclonecrs = (); - if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} =~ /,/) { - my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; - foreach my $crs (@currclonecrs) { - if ($crs ne $clone_crs) { - $newclonecrs{'cloneable'} .= $crs.','; - } + my ($uname,$udom) = split(/:/,$oldclone); + if ($uname && $udom && $uname ne '*' ) { + if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { + my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); + my %newclonecrs = (); + if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { + if ($currclonecrs{'cloneable'} =~ /,/) { + my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; + foreach my $crs (@currclonecrs) { + if ($crs ne $clone_crs) { + $newclonecrs{'cloneable'} .= $crs.','; } - $newclonecrs{'cloneable'} =~ s/,$//; - } else { - $newclonecrs{'cloneable'} = ''; } - &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); + $newclonecrs{'cloneable'} =~ s/,$//; + } else { + $newclonecrs{'cloneable'} = ''; } + &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); } } }