--- loncom/interface/lonparmset.pm 2008/06/20 17:38:51 1.401 +++ loncom/interface/lonparmset.pm 2008/08/28 03:54:53 1.407 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.401 2008/06/20 17:38:51 bisitz Exp $ +# $Id: lonparmset.pm,v 1.407 2008/08/28 03:54:53 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1899,7 +1899,7 @@ ENDTABLEHEADFOUR } $r->print('

' .&mt('Set Defaults for All Resources in [_1]Specifically for [_2][_3]' - ,$foldermap.'
$showtitle
' + ,$foldermap.'
'.$showtitle.'
' ,$tmp ,''.$coursename.'' ) @@ -2126,6 +2126,8 @@ sub crsenv { $setoutput.=&mt('Set').' '.$name.' '.&mt('to').' '; if ($name =~ /^default_enrollment_(start|end)_date$/) { $setoutput .= &Apache::lonlocal::locallocaltime($value); + } elsif ($name eq 'categories') { + $setoutput .= $env{'form.categories_display'}; } else { $setoutput .= $value; } @@ -2134,11 +2136,12 @@ sub crsenv { &change_clone($value,\@oldcloner); } # Update environment and nohist_courseids.db - if ($name eq 'description' || $name eq 'cloners') { + if (($name eq 'description') || ($name eq 'cloners') || + ($name eq 'hidefromcat') || ($name eq 'categories')) { if ($chome eq '') { %crsinfo = &Apache::lonnet::courseiddump($dom,'.',1,'.','.', - $crs,undef,undef,'Course'); + $crs,undef,undef,'.'); $chome = &Apache::lonnet::homeserver($crs,$dom); } } @@ -2151,9 +2154,10 @@ sub crsenv { $chome,'notime'); } } - if ($name eq 'cloners') { + if (($name eq 'cloners') || ($name eq 'hidefromcat') || ($name eq 'categories')) { if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') { - $crsinfo{$env{'request.course.id'}}{'cloners'} = $value; + &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$name => $value}); + $crsinfo{$env{'request.course.id'}}{$name} = $value; my $putresult = &Apache::lonnet::courseidput($dom,\%crsinfo, $chome,'notime'); @@ -2209,6 +2213,7 @@ sub crsenv { my $SelectStyleFile=&mt('Select Style File'); my $SelectSpreadsheetFile=&mt('Select Spreadsheet File'); my $output=''; + my $can_categorize; if (! exists($values{'con_lost'})) { my %descriptions= ('url' => ''.&mt('Top Level Map').'
'. @@ -2345,12 +2350,27 @@ sub crsenv { 'suppress_embed_prompt' => ''.&mt('Suppress prompt to upload items referenced in a web page being uploaded to portfolio, when current role is student.').'
'. - ' ('.&mt('[_1] to suppress, anything else to not suppress','"yes"').')', - ); - my @Display_Order = ('url','description','courseid','cloners','grading', + ' ('.&mt('[_1] to suppress, anything else to not suppress','"yes"').')', + 'hidefromcat' + => ''.&mt('Exclude from course catalog').'
'. + ' ('.&mt('[_1] to exclude, anything else to include - included if assigned an institutional code, or manually catagorized','"yes"').')', + 'categories' + => ''.&mt('Categorize course').' '. + &mt('Display Categories').'', + ); + my @Display_Order = ('url','description','courseid','cloners'); + (my $can_toggle_cat,$can_categorize) = &can_modify_catsettings($dom); + if ($can_toggle_cat) { + push(@Display_Order,'hidefromcat'); + } + if ($can_categorize) { + push(@Display_Order,'categories'); + } + push (@Display_Order,('grading', 'externalsyllabus', 'default_xml_style','pageseparators', - 'question.email','question.email.text','comment.email','comment.email.text','policy.email','policy.email.text', + 'question.email','question.email.text','comment.email', + 'comment.email.text','policy.email','policy.email.text', 'student_classlist_view', 'student_classlist_opt_in', 'student_classlist_portfiles', @@ -2379,10 +2399,11 @@ sub crsenv { 'texengine', 'disablesigfigs', 'disableexampointprint', - 'task_messages','task_grading', - ); + 'task_messages','task_grading')); foreach my $parameter (sort(keys(%values))) { - unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./)) { + unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || + ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) + || ($parameter eq 'type')) { if (! $descriptions{$parameter}) { $descriptions{$parameter}=$parameter; push(@Display_Order,$parameter); @@ -2412,6 +2433,21 @@ sub crsenv { &Apache::loncommon::select_timezone($parameter.'_value', $timezone, $onchange,$includeempty).''; + } elsif ($parameter eq 'categories') { + my $catdisplay; + if ($values{'categories'} ne '') { + my @curritems = split(/\&/,$values{'categories'}); + foreach my $item (@curritems) { + my ($name,$parent,$pos) = split(/:/,$item); + $catdisplay .= &unescape($name).'&'; + } + $catdisplay =~ s/\&$//; + } + $output .= ''. + ''. + ''; } else { $output .= ''. &Apache::lonhtmlcommon::textbox($parameter.'_value', @@ -2445,14 +2481,26 @@ sub crsenv { my $Parameter=&mt('Parameter'); my $Value=&mt('Value'); my $Set=&mt('Set'); - my $browse_js= - ''; - + my ($jscript,$categorize_js); + my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); + if ($can_categorize) { + $categorize_js = <'; my $start_page = &Apache::loncommon::start_page('Set Course Environment', - $browse_js); + $jscript); my $end_page = &Apache::loncommon::end_page(); my $end_table=&Apache::loncommon::end_data_table(); @@ -2473,6 +2521,98 @@ $end_table $end_page ENDENV } + +sub can_modify_catsettings { + my ($dom) = @_; + my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom); + my ($can_toggle_cat,$can_categorize); + if (ref($domconf{'coursecategories'}) eq 'HASH') { + if ($domconf{'coursecategories'}{'togglecats'} eq 'crs') { + $can_toggle_cat = 1; + } + if ($domconf{'coursecategories'}{'categorize'} eq 'crs') { + $can_categorize = 1; + } + } + return ($can_toggle_cat,$can_categorize); +} + +sub assign_course_categories { + my ($r) = @_; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $hascats = 0; + my $cathash; + my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom); + if (ref($domconf{'coursecategories'}) eq 'HASH') { + $cathash = $domconf{'coursecategories'}{'cats'}; + if (ref($cathash) eq 'HASH') { + $hascats = 1; + } + } + my $catwin_js; + if ($hascats) { + my $alert = &mt('Use \"Save\" in the main window to save course categories'); + $catwin_js = < + +function updateCategories() { + var newcategories = ''; + var unescapedcats = ''; + if (document.chgcats.usecategory.length) { + for (var i=0; i 0) { + newcategories = newcategories.slice(0,-1); + } + if (unescapedcats.length > 0) { + usescapedcats = unescapedcats.slice(0,-3); + } + } else { + if (document.chgcats.usecategory.checked == true) { + newcategories = document.chgcats.usecategory.value; + unescapedcats = document.chgcats.catname.value; + } + } + opener.document.envform.categories_value.value = newcategories; + opener.document.envform.categories_display.value = unescapedcats; + opener.document.envform.categories_setparmval.checked = true; + alert("$alert"); + self.close(); + return; +} + + +ENDSCRIPT + } else { + my $onload; + } + my $start_page = + &Apache::loncommon::start_page('Course Categories',$catwin_js, + {'only_body' => 1,}); + my $end_page = &Apache::loncommon::end_page(); + my $categoriesform = '

'.&mt('Categorize Course').'

'; + if ($hascats) { + my %currsettings = + &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum); + $categoriesform .= &mt('Assign one or more categories to this course.').'

'. + '
'."\n" + .&Apache::loncommon::assign_categories_table($cathash, + $currsettings{'categories'})."\n" + .'

'; + } else { + $categoriesform .= &mt('No categories defined for this domain'); + } + $r->print($start_page.$categoriesform.$end_page); + return; +} + ################################################## # Overview mode ################################################## @@ -4334,7 +4474,9 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'}, text=>"Shifting Dates"}); &date_shift_two($r); - } + } elsif ($env{'form.action'} eq 'categorizecourse' && $parm_permission) { + &assign_course_categories($r); + } } else { # ----------------------------- Not in a course, or not allowed to modify parms if ($exists) {