--- loncom/interface/courseprefs.pm 2009/04/26 00:43:14 1.2 +++ loncom/interface/courseprefs.pm 2010/01/08 00:04:04 1.19 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.2 2009/04/26 00:43:14 raeburn Exp $ +# $Id: courseprefs.pm,v 1.19 2010/01/08 00:04:04 faziophi Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,23 +57,90 @@ sub handler { $r->send_http_header; } else { if ($navmap) { - $env{'user.error.msg'}= - "/adm/courseprefs:opa:0:0:Cannot modify course settings"; + if ($crstype eq 'Community') { + $env{'user.error.msg'}= + "/adm/courseprefs:opa:0:0:Cannot modify community settings"; + } else { + $env{'user.error.msg'}= + "/adm/courseprefs:opa:0:0:Cannot modify course settings"; + } } else { - $env{'user.error.msg'}= - "/adm/courseprefs::0:1:Course environment gone, reinitialize the course"; + if ($crstype eq 'Community') { + $env{'user.error.msg'}= + "/adm/courseprefs::0:1:Course environment gone, reinitialize the community"; + } else { + $env{'user.error.msg'}= + "/adm/courseprefs::0:1:Course environment gone, reinitialize the course"; + + } } return HTTP_NOT_ACCEPTABLE; } + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['phase','actions','origin']); &Apache::lonhtmlcommon::clear_breadcrumbs(); + if ($env{'form.origin'} eq 'params') { + &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset", + text=>"Parameter Manager"}); + } + my ($brtext,$brtitle,$crsinfotext,$crsinfodesc,$crscateg,$crshide); + my %lt; + if ($crstype eq 'Community') { + %lt = ( + conf => 'Community Configuration', + edit => 'Edit Community Configuration', + gens => 'General community settings', + idnu => 'Community ID or number', + desc => 'Community Description', + catg => 'Categorize community', + excc => 'Exclude from community catalog', + clon => 'Users allowed to clone community', + rept => 'Replacement titles for standard community roles', + time => 'Timezone where the community is located', + date => 'Locale used for community calendar', + coco => 'Community Content', + copo => 'Community Policy', + priv => 'Domain Coordinators in community', + defd => 'Default dates for member access', + stuv => 'Member-viewable membership list options', + stul => 'Member agreement needed to be listed', + clas => 'Membership and 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' + ); + } else { + %lt = ( + conf => 'Course Configuration', + edit => 'Edit Course Configuration', + gens => 'General Settings', + idnu => 'ID/Number', + desc => 'Title', + catg => 'Categorize course', + excc => 'Exclude from course catalog', + clon => 'Users allowed to clone course', + rept => 'Replacement titles for standard course roles', + time => 'Timezone', + date => 'Calendar Locale', + coco => 'Course Content', + copo => 'Course Policy', + priv => 'Domain Coordinators in course', + defd => 'Default dates for student access', + stuv => 'Student-viewable classlist options', + stul => 'Student agreement needed to be listed', + clas => 'Classlists and Staff Listing', + 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', + ); + } &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs', - text=>"Course Configuration"}); + text=>$lt{'conf'}}); my $breadcrumbs = - &Apache::lonhtmlcommon::breadcrumbs('Edit Course Configuration'); - - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['phase','actions']); + &Apache::lonhtmlcommon::breadcrumbs($lt{'edit'}); my $phase = 'pickactions'; if ( exists($env{'form.phase'}) ) { @@ -81,7 +148,7 @@ sub handler { } if ($phase eq 'categorizecourse') { - &assign_course_categories($r); + &assign_course_categories($r,$crstype); return OK; } @@ -92,96 +159,149 @@ sub handler { my %prefs = ( 'courseinfo' => - { text => 'General course settings', + { text => $lt{'gens'}, help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value'}], ordered => ['description','courseid','categories', - 'hidefromcat','cloners','externalsyllabus', - 'url','rolenames'], + 'hidefromcat','externalsyllabus', + 'cloners','url','rolenames'], + itemtext => { + description => $lt{'desc'}, + courseid => $lt{'idnu'}, + categories => $lt{'catg'}, + hidefromcat => $lt{'excc'}, + cloners => $lt{'clon'}, + externalsyllabus => 'External Syllabus URL', + url => 'Top Level Map', + rolenames => $lt{'rept'}, + }, }, 'localization' => - { text => 'Language/TimeZone/Locale', + { text => 'Language & Time Localization', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value',}], ordered => ['languages','timezone','datelocale'], + itemtext => { + languages => 'Language(s)', + timezone => $lt{'time'}, + datelocale => $lt{'date'}, + }, }, 'feedback' => - { text => 'Feedback messages', + { text => 'Feedback Messages', help => 'Course_Environment', header => [{col1 => 'Questions about:', col2 => 'Recipients'}, {col1 => 'Questions about:', col2 => 'Custom Text'}], - ordered => ['question','comment','policy'], + ordered => ['question.email','comment.email','policy.email'], + itemtext => { + 'question.email' => 'Resource Content', + 'comment.email' => $lt{'coco'}, + 'policy.email' => $lt{'copo'}, + }, }, 'discussion' => { text => 'Discussion and Chat', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value',}], ordered => ['plc.roles.denied','plc.users.denied', 'pch.roles.denied','pch.users.denied', 'allow_limited_html_in_feedback', 'allow_discussion_post_editing'], + itemtext => { + 'plc.roles.denied' => 'Disable resource discussion', + 'plc.users.denied' => 'Disable resource discussion', + 'pch.roles.denied' => 'Disable chat room', + 'pch.users.denied' => 'Disable chat room', + allow_limited_html_in_feedback => 'HTML in discussion', + allow_discussion_post_editing => 'Allow users to edit/delete own discussion posts', + }, }, 'classlists' => - { text => 'Classlists and Staff Listing', + { text => $lt{'clas'}, help => 'Course_Environment', header => [{col1 => 'Type', - col2 => 'Default dates for student access'}, + col2 => $lt{'defd'}}, {col1 => 'Setting', - col2 => 'Privileged users (Domain Coordinators) in staff listing'}, + col2 => $lt{'priv'}}, {col1 => 'Setting', - col2 => 'Student-viewable classlist options'}], + col2 => $lt{'stuv'}}], ordered => ['default_enrollment_start_date', 'default_enrollment_end_date', 'nothideprivileged','student_classlist_view', 'student_opt_in','student_classlist_portfiles'], + itemtext => { + default_enrollment_start_date => 'Start date', + default_enrollment_end_date => 'End date', + nothideprivileged => $lt{'priv'}, + student_classlist_view => $lt{'stuv'}, + student_opt_in => $lt{'stul'}, + student_classlist_portfiles => 'Include link to accessible portfolio files', + }, }, 'appearance' => - { text => 'Display of resources ', + { text => 'Display of Resources ', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value'}], ordered => ['default_xml_style','pageseparators', 'disable_receipt_display','texengine', 'tthoptions'], + itemtext => { + default_xml_style => 'Default XML style file', + pageseparators => 'Separate items on composite pages', + disable_receipt_display => 'Disable problem receipts display', + texengine => 'Force specific math rendering engine', + tthoptions => 'Default set of options to pass to tth/m when converting TeX', + }, }, 'grading' => { text => 'Grading', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value',}], ordered => ['grading','rndseed', 'receiptalg','disablesigfigs'], + itemtext => { + grading => 'Grading Type', + rndseed => 'Randomization algorithm', + receiptalg => 'Receipt algorithm', + disablesigfigs => 'Disable significant figure checks', + }, + }, 'printouts' => - { text => 'Printout generation', + { text => 'Printouts', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value',}], 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', + default_paper_size => 'Default paper type', + print_header_format => 'Print header format', + disableexampointprint => 'Disable automatically printing point values on exams', + canuse_pdfforms => 'Users can print problems as PDF forms and upload later for grading', + }, }, 'spreadsheet' => { text => 'Spreadsheets', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value'}], ordered => ['spreadsheet_default_classcalc', 'spreadsheet_default_studentcalc', 'spreadsheet_default_assesscalc','hideemptyrows'], + itemtext => { + spreadsheet_default_classcalc => $lt{'defc'}, + spreadsheet_default_studentcalc => $lt{'defs'}, + spreadsheet_default_assesscalc => 'Default Assessment Spreadsheet', + hideemptyrows => 'Hide Empty Rows in Spreadsheets', + }, }, 'bridgetasks' => { text => 'Bridge tasks', help => 'Course_Environment', - header => [{col1 => 'Setting', - col2 => 'Value'}], ordered => ['task_messages','task_grading', 'suppress_embed_prompt'], + itemtext => { + task_messages => $lt{'seme'}, + task_grading => 'Bridge Task grading by instructors and TAs in sections' , + suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio', + }, }, 'other' => { text => 'Other settings', @@ -192,23 +312,15 @@ sub handler { }, ); if ($phase eq 'process') { + my @allitems = &get_allitems(%prefs); &Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context, - \@prefs_order,\%prefs,\%values); + \@prefs_order,\%prefs,\%values, + $cnum,undef,\@allitems); } elsif ($phase eq 'display') { - my $jscript = &get_jscript($cdom); - my @allitems; - foreach my $item (keys(%prefs)) { - if (ref($prefs{$item}) eq 'HASH') { - if (ref($prefs{$item}{'ordered'}) eq 'ARRAY') { - push(@allitems,@{$prefs{$item}{'ordered'}}); - if ($item eq 'feedback') { - push(@allitems,(map { $_.'.email'; } @{$prefs{$item}{'ordered'}})); - } - } - } - } + my $jscript = &get_jscript($cdom,$phase,$crstype); + my @allitems = &get_allitems(%prefs); &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, - \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems); + \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype); } else { &Apache::lonconfigsettings::display_choices($r,$phase,$context, \@prefs_order,\%prefs); @@ -216,38 +328,50 @@ sub handler { return OK; } +sub get_allitems { + my (%prefs) = @_; + my @allitems; + foreach my $item (keys(%prefs)) { + if (ref($prefs{$item}) eq 'HASH') { + if (ref($prefs{$item}{'ordered'}) eq 'ARRAY') { + push(@allitems,@{$prefs{$item}{'ordered'}}); + if ($item eq 'feedback') { + push(@allitems,(map { $_.'.text'; } @{$prefs{$item}{'ordered'}})); + } + } + } + } + return @allitems; +} + sub print_config_box { - my ($r,$cdom,$phase,$action,$item,$settings,$allitems) = @_; + my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype) = @_; my $ordered = $item->{'ordered'}; + my $itemtext = $item->{'itemtext'}; my $rowtotal = 0; my $output = - '
'. - &mt($item->{text}).' '. - &Apache::loncommon::help_open_topic($item->{'help'}).' | '."\n". - '|||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-
|
-
- |
'.
@@ -516,7 +1448,14 @@ sub print_courseinfo {
&Apache::loncommon::end_data_table();
} elsif ($item eq 'rolenames') {
$datatable .= &Apache::loncommon::start_data_table();
- foreach my $role ('cc','in','ta','ep','ad','st') {
+ my @roles;
+ if ($crstype eq 'Community') {
+ @roles = ('co');
+ } else {
+ @roles = ('cc');
+ }
+ push (@roles,('in','ta','ep','ad','st'));
+ foreach my $role (@roles) {
$datatable .= &Apache::loncommon::start_data_table_row().
' | '.
&Apache::lonnet::plaintext($role,$crstype,undef,1).
@@ -528,7 +1467,10 @@ sub print_courseinfo {
}
$datatable .= &Apache::loncommon::end_data_table().' | ';
} elsif ($item eq 'categories') {
- $datatable .= ''.&Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item},$items{$item}{size});
+ my $launcher = 'onFocus="this.blur();javascript:catsbrowser();";';
+ $datatable .= ''.
+ &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item},
+ $items{$item}{size},$launcher);
} else {
$datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size});
}
@@ -547,36 +1489,46 @@ sub new_cloners_dom_row {
&mt('Any user in domain:').' '.$newdom.''.
(' 'x2).''.(' 'x2).
''.
+ &mt('No').''.
&Apache::loncommon::end_data_table_row();
}
return $output;
}
sub can_modify_catsettings {
- my ($dom) = @_;
+ my ($dom,$crstype) = @_;
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;
+ if ($crstype eq 'Community') {
+ if ($domconf{'coursecategories'}{'togglecatscomm'} eq 'comm') {
+ $can_toggle_cat = 1;
+ }
+ if ($domconf{'coursecategories'}{'categorizecomm'} eq 'comm') {
+ $can_categorize = 1;
+ }
+ } else {
+ 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 ($r,$crstype) = @_;
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my $hascats = 0;
@@ -585,12 +1537,23 @@ sub assign_course_categories {
if (ref($domconf{'coursecategories'}) eq 'HASH') {
$cathash = $domconf{'coursecategories'}{'cats'};
if (ref($cathash) eq 'HASH') {
- $hascats = 1;
+ foreach my $cat (keys(%{$cathash})) {
+ next if ($cat eq 'instcode::0');
+ unless ($crstype eq 'Community') {
+ next if ($cat eq 'communities::0');
+ }
+ $hascats ++;
+ }
}
}
my $catwin_js;
if ($hascats) {
- my $alert = &mt('Use \"Save\" in the main window to save course categories');
+ my $alert;
+ if ($crstype eq 'Community') {
+ $alert = &mt("Use 'Save' in the main window to save community categories");
+ } else {
+ $alert = &mt("Use 'Save' in the main window to save course categories");
+ }
$catwin_js = <'.&mt('Categorize Course').''; + my $categoriesform = ''.$catcrs.''; if ($hascats) { my %currsettings = &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum); - $categoriesform .= &mt('Assign one or more categories to this course.').''. + my $cattable = &Apache::loncommon::assign_categories_table($cathash, + $currsettings{'categories'},$crstype); + if ($cattable eq '') { + $categoriesform .= &mt('No suitable categories defined for this course type in this domain.'); + } else { + $categoriesform .= $assign.' '. ' '; + } } else { - $categoriesform .= &mt('No categories defined for this domain'); + $categoriesform .= &mt('No categories defined in this domain.'); } $r->print($start_page.$categoriesform.$end_page); return; } sub print_localization { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } my %items = ( languages => { - text => &mt('Languages used').' '.&mt("(will override user's preference)"), + text => ''.&mt($itemtext->{'languages'}).' '. + &mt("(overrides individual user preference)"), input => 'selectbox', }, timezone => { - text => &mt('Timezone in which the course takes place'), + text => ''.&mt($itemtext->{'timezone'}).'', input => 'selectbox', }, datelocale => { - text => &mt('Locale used for course calendar'), + text => ''.&mt($itemtext->{'datelocale'}).'', input => 'selectbox', }, ); @@ -693,35 +1672,35 @@ sub print_localization { } else { if ($settings->{$item} eq '') { $datatable .= - &Apache::loncommon::select_language('language_0','',1); + &Apache::loncommon::select_language('languages_0','',1); } else { my $num = 0; - my @languages = split(/\s*(\,|\;|\:)\s*/,$settings->{$item}); + my @languages = split(/\s*[,;:]\s*/,$settings->{$item}); $datatable .= &Apache::loncommon::start_data_table(); if (@languages > 0) { + my %langchoices = &get_lang_choices(); foreach my $lang (@languages) { my $showlang = $lang; - my $code = &Apache::loncommon::supportedlanguagecode($lang); - if ($code) { - $showlang = &plainlanguagedescription($lang); + if (exists($langchoices{$lang})) { + $showlang = $langchoices{$lang}; } $datatable .= &Apache::loncommon::start_data_table_row(). - ' '.
+ ' | '.
&mt('Language:').' '.$showlang.
' | '.
- &Apache::loncommon::end_data_table_row().'';
+ &Apache::loncommon::end_data_table_row();
$num ++;
}
}
$datatable .= &Apache::loncommon::start_data_table_row().
- ''. ' '.
- &mt('Additional language:').' | '. - &Apache::loncommon::select_language($item); + ' '.
+ &mt('Additional language:'). ' | '.&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table();
@@ -733,26 +1712,37 @@ sub print_localization {
return $datatable;
}
+sub get_lang_choices {
+ my %langchoices;
+ foreach my $id (&Apache::loncommon::languageids()) {
+ my $code = &Apache::loncommon::supportedlanguagecode($id);
+ if ($code) {
+ $langchoices{$code} = &Apache::loncommon::plainlanguagedescription($id);
+ }
+ }
+ return %langchoices;
+}
+
sub print_feedback {
- my ($position,$cdom,$settings,$ordered,$rowtotal) = @_;
- unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) {
+ my ($position,$cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+ unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
return;
}
my %items = (
- 'question' => {
- text => ''.&mt('Resource Content').'',
+ 'question.email' => {
+ text => ''.&mt($itemtext->{'question.email'}).'',
input => 'textbox',
size => '50',
},
- 'comment' => {
- text => ''.&mt('Course Content').'',
+ 'comment.email' => {
+ text => ''.&mt($itemtext->{'comment.email'}).'',
input => 'textbox',
size => '50',
},
- 'policy' => {
- text => ''.&mt('Course Policy').'',
+ 'policy.email' => {
+ text => ''.&mt($itemtext->{'policy.email'}).'',
input => 'textbox',
size => '50',
},
@@ -776,10 +1766,10 @@ sub print_feedback {
if ($position eq 'top') {
my $includeempty = 0;
$datatable .= &user_table($cdom,$item,\@sections,
- $settings->{$item.'.email'},\%lt);
+ $settings->{$item},\%lt);
} else {
- $datatable .= &Apache::lonhtmlcommon::textbox($item.'_text',
- $settings->{$item},$items{$item}{size});
+ $datatable .= &Apache::lonhtmlcommon::textbox($item.'.text',
+ $settings->{$item.'.text'},$items{$item}{size});
}
$datatable .= &item_table_row_end();
}
@@ -795,7 +1785,7 @@ sub user_table {
} else {
my $num = 0;
my @curr = split(/,/,$currvalue);
- $output .= &Apache::loncommon::start_data_table();
+ $output .= ''. + &Apache::loncommon::select_language('languages_'.$num,'',1). ''. '
'. + &mt('(role-based)'), input => 'checkbox', }, 'plc.users.denied' => { - text => ''.&mt('No Chat room use').'', + text => ''.&mt($itemtext->{'plc.users.denied'}).' '. + &mt('(specific user(s))'), input => 'checkbox', }, 'pch.roles.denied' => { - text => ''.&mt('No Resource Discussion').''. - &Apache::loncommon::help_open_topic("Course_Disable_Discussion"), + text => ''.&mt($itemtext->{'pch.roles.denied'}).''. + &Apache::loncommon::help_open_topic("Course_Disable_Discussion").' '. + &mt('(role-based)'), input => 'checkbox', }, 'pch.users.denied' => { - text => ''.&mt('No Resource Discussion').'', + text => ''.&mt($itemtext->{'pch.users.denied'}).' '. + &mt('(specific user(s))'), input => 'checkbox', }, 'allow_limited_html_in_feedback' => { - text => ''.&mt('Allow limited HTML in discussion posts').'', + text => ''.&mt($itemtext->{'allow_limited_html_in_feedback'}).'', input => 'radio', }, 'allow_discussion_post_editing' => { - text => ''.&mt('Users can edit/delete own discussion posts').'', + text => ''.&mt($itemtext->{'allow_discussion_post_editing'}).'', input => 'checkbox', }, ); @@ -985,8 +1978,13 @@ sub print_discussion { } sub role_checkboxes { - my ($cdom,$cnum,$item,$settings,$showsections) = @_; - my @roles = ('st','ad','ta','ep','in','cc'); + my ($cdom,$cnum,$item,$settings,$showsections,$crstype) = @_; + my @roles = ('st','ad','ta','ep','in'); + if ($crstype eq 'Community') { + push(@roles,'co'); + } else { + push(@roles,'cc'); + } my $output; my (@current,@curr_roles,%currsec,@sections); if ($showsections) { @@ -1005,6 +2003,8 @@ sub role_checkboxes { if (!grep(/^\Q$sec\E/,@{$currsec{$trole}})) { push(@{$currsec{$trole}},$sec); } + } else { + $currsec{$trole} = [$sec]; } } else { push(@curr_roles,$role); @@ -1021,7 +2021,7 @@ sub role_checkboxes { if (grep(/^\Q$role\E$/,@current)) { $checked = ' checked="checked" '; } - my $plrole=&Apache::lonnet::plaintext($role); + my $plrole=&Apache::lonnet::plaintext($role,$crstype); if ($showsections) { $output .= &Apache::loncommon::start_data_table_row(); } else { @@ -1092,7 +2092,7 @@ sub role_checkboxes { } sub print_classlists { - my ($position,$cdom,$settings,$rowtotal) = @_; + my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype) = @_; my @ordered; if ($position eq 'top') { @ordered = ('default_enrollment_start_date', @@ -1103,38 +2103,50 @@ sub print_classlists { @ordered = ('student_classlist_view', 'student_opt_in','student_classlist_portfiles'); } + my %lt; + + if ($crstype eq 'Community') { + %lt = &Apache::lonlocal::texthash ( + disabled => 'No viewable membership list', + section => "Membership of viewer's section", + all => 'List of all members', + ); + } else { + %lt = &Apache::lonlocal::texthash ( + disabled => 'No viewable classlist', + section => "Classlist of viewer's section", + all => 'Classlist of all students', + ); + } + my %items = ( 'default_enrollment_start_date' => { - text => ''.&mt('Start date').'', + text => ''.&mt($itemtext->{'default_enrollment_start_date'}).'', input => 'dates', }, 'default_enrollment_end_date' => { - text => ''.&mt('End date').'', + text => ''.&mt($itemtext->{'default_enrollment_end_date'}).'', input => 'dates', }, 'nothideprivileged' => { - text => ''.&mt('Domain Coodinators in course').'', + text => ''.&mt($itemtext->{'nothideprivileged'}).'', input => 'checkbox', }, 'student_classlist_view' => { - text => ''.&mt('Student-viewable classlist').'', + text => ''.&mt($itemtext->{'student_classlist_view'}).'', input => 'selectbox', - options => { - disabled => &mt('No viewable classlist'), - section => &mt("Classlist of viewer's section"), - all => &mt('Classlist of all students'), - }, + options => \%lt, order => ['disabled','all','section'], }, 'student_opt_in' => { - text => ''.&mt('Student agreement needed to be listed').'', + text => ''.&mt($itemtext->{'student_opt_in'}).'', input => 'radio', }, 'student_classlist_portfiles' => { - text => ''.&mt('Include link to accessible portfolio files').'', + text => ''.&mt($itemtext->{'student_classlist_portfiles'}).'', input => 'radio', }, ); @@ -1142,17 +2154,23 @@ sub print_classlists { ($settings->{'student_classlist_view'} eq 'section')) { $settings->{'student_classlist_view'} = 'disabled'; } - return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal); + return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); } sub print_appearance { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } + my $mathdef; + if ($crstype eq 'Community') { + $mathdef = &mt("None specified - use member's choice"); + } else { + $mathdef = &mt("None specified - use student's choice"); + } my %items = ( 'default_xml_style' => { - text => ''.&mt('Default XML Style File').' '. + text => ''.&mt($itemtext->{'default_xml_style'}).' '. ''.&mt('Select Style File').'', @@ -1161,15 +2179,15 @@ sub print_appearance { }, 'pageseparators' => { - text => ''.&mt('Visibly Separate Items on Pages').'', + text => ''.&mt($itemtext->{'pageseparators'}).'', input => 'radio', }, 'disable_receipt_display' => { - text => ''.&mt('Disable display of problem receipts').'', + text => ''.&mt($itemtext->{'disable_receipt_display'}).'', input => 'radio', }, 'texengine' => { - text => ''.&mt('Force use of a specific math rendering engine.').'', + text => ''.&mt($itemtext->{'texengine'}).'', input => 'selectbox', options => { jsMath => 'jsMath', @@ -1177,37 +2195,38 @@ sub print_appearance { tth => &mt('TeX to HTML'), }, order => ['jsMath','mimetex','tth'], - nullval => &mt("None specified - use student's choice"), + nullval => $mathdef, }, 'tthoptions' => { - text => ''.&mt('Default set of options to pass to tth/m when converting TeX').'', + text => ''.&mt($itemtext->{'tthoptions'}).'', input => 'textbox', size => 40, }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_grading { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } my %items = ( 'grading' => { - text => ''.&mt('Grading').''. + text => ''.&mt($itemtext->{'grading'}).''. &Apache::loncommon::help_open_topic('GradingOptions'), input => 'selectbox', options => { standard => &mt('Standard: shows points'), - external => &mt('External: shows number of completed parts'), + 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','spreadsheet'], + order => ['standard','external','externalnototals','spreadsheet'], }, 'rndseed' => { - text => ''.&mt('Randomization algorithm used').''. - ''.' '. + text => ''.&mt($itemtext->{'rndseed'}).''. + ''.' '. &mt('Modifying this will make problems have different numbers and answers!'). '', input => 'selectbox', @@ -1222,8 +2241,8 @@ sub print_grading { order => ['32bit','64bit','64bit2','64bit3','64bit4','64bit5'], }, 'receiptalg' => { - text => ''.&mt('Receipt algorithm used').' '. - &mt('This controls how receipt numbers are generated.'), + text => ''.&mt($itemtext->{'receiptalg'}).' '. + &mt('This controls how receipt numbers are generated'), input => 'selectbox', options => { receipt => 'receipt', @@ -1233,29 +2252,29 @@ sub print_grading { order => ['receipt','receipt2','receipt3'], }, 'disablesigfigs' => { - text => ''.&mt('Disable checking of Significant Figures').'', + text => ''.&mt($itemtext->{'disablesigfigs'}).'', input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_printouts { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } my %items = ( problem_stream_switch => { - text => ''.&mt('Allow problems to be split over pages').'', + text => ''.&mt($itemtext->{'problem_stream_switch'}).'', input => 'radio', }, suppress_tries => { - text => ''.&mt('Suppress number of tries in printing').'', + text => ''.&mt($itemtext->{'suppress_tries'}).'', input => 'radio', }, default_paper_size => { - text => ''.&mt('Default paper type').'', + text => ''.&mt($itemtext->{'default_paper_size'}).'', input => 'selectbox', options => { Letter => &mt('Letter').' [8 1/2x11 in]', @@ -1272,71 +2291,89 @@ sub print_printouts { nullval => 'None specified', }, print_header_format => { - text => ''.&mt('Print header format').'', + text => ''.&mt($itemtext->{'print_header_format'}).'', input => 'checkbox', }, disableexampointprint => { - text => ''.&mt('Disable automatically printing point values on exams').'', + text => ''.&mt($itemtext->{'disableexampointprint'}).'', input => 'radio', }, + canuse_pdfforms => { + text => ''.&mt($itemtext->{'canuse_pdfforms'}).'', + input => 'selectbox', + options => { + 1 => &mt('Yes'), + 0 => &mt('No'), + }, + order => ['1','0'], + nullval => 'None specified - use domain default', + } ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_spreadsheet { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } my $SelectSpreadsheetFile=&mt('Select Spreadsheet File'); my %items = ( spreadsheet_default_classcalc => { - text => ''.&mt('Default Course Spreadsheet').' '. + text => ''.&mt($itemtext->{'spreadsheet_default_classcalc'}).' '. ''.$SelectSpreadsheetFile.'', input => 'textbox', }, spreadsheet_default_studentcalc => { - text => ''.&mt('Default Student Spreadsheet').' '. + text => ''.&mt($itemtext->{'spreadsheet_default_studentcalc'}).' '. ''.$SelectSpreadsheetFile.'', input => 'textbox', }, spreadsheet_default_assesscalc => { - text => ''.&mt('Default Assessment Spreadsheet').' '. + text => ''.&mt($itemtext->{'spreadsheet_default_assesscalc'}).' '. ''.$SelectSpreadsheetFile.'', input => 'textbox', }, hideemptyrows => { - text => ''.&mt('Hide Empty Rows in Spreadsheets').'', + text => ''.&mt($itemtext->{'hideemptyrows'}).'', input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal); -} + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); +} sub print_bridgetasks { - my ($cdom,$settings,$ordered,$rowtotal) = @_; - unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY')) { + my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_; + unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } + my ($stumsg,$msgnote); + if ($crstype eq 'Community') { + $stumsg = &mt('Send message to member'); + $msgnote = &mt('Message to member and add to user notes'); + } else { + $stumsg = &mt('Send message to student'); + $msgnote = &mt('Message to student and add to user notes'); + } my %items = ( task_messages => { - text => ''.&mt('Send message to student when clicking Done on Tasks').'', + text => ''.&mt($itemtext->{'task_messages'}).'', input => 'selectbox', options => { - only_student => &mt('Send message to student'), - student_and_user_notes_screen => &mt('Message to student and add to user notes'), + only_student => $stumsg, + student_and_user_notes_screen => $msgnote, }, order => ['only_student','student_and_user_notes_screen'], nullval => &mt('No message or record in user notes'), }, task_grading => { - text => ''.&mt('Bridge Task grading by instructors and TAs in sections').'', + text => ''.&mt($itemtext->{'task_grading'}).'', input => 'selectbox', options => { any => &mt('Grade BTs in any section'), @@ -1345,50 +2382,67 @@ sub print_bridgetasks { order => ['any','section'], }, suppress_embed_prompt => { - text => ''.&mt('Hi$de upload references prompt if uploading file to portfolio').' '. - &mt('(applies when current role is student)').'', + text => ''.&mt($itemtext->{'suppress_embed_prompt'}).''. + ' '.&mt('(applies when current role is student)').'', input => 'radio', }, ); - return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal); + return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype); } sub print_other { - my ($cdom,$settings,$allitems,$rowtotal) = @_; + my ($cdom,$settings,$allitems,$rowtotal,$crstype) = @_; unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) { return; } - my @ordered; + my @ordered = &get_other_items($cdom,$settings,$allitems); my %items; + foreach my $parameter (@ordered) { + $items{$parameter} = { + text => ''.$parameter.'', + input => 'textbox', + size => '15', + }, + } + push (@ordered,'newp_value'); + $items{'newp_value'} = { + text => ''.&mt('Create New Environment Variable').' '. + '', + input => 'textbox', + size => '30', + }; + my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype); +} + +sub get_other_items { + my ($cdom,$settings,$allitems) = @_; + unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) { + return; + } + my @ordered; if (ref($settings) eq 'HASH') { foreach my $parameter (sort(keys(%{$settings}))) { next if (grep/^\Q$parameter\E$/,@{$allitems}); - next if (($parameter eq 'course.helper.not.run') && - (!exists($env{'user.role.dc./'.$env{'request.role.domain'}.'/'}))); + next if (($parameter eq 'course.helper.not.run') && + (!exists($env{'user.role.dc./'.$env{'request.role.domain'}.'/'}))); unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) || ($parameter eq 'type') || - ($parameter =~ m/^(cc|in|ta|ep|ad|st)\.plaintext$/)) { + ($parameter =~ m/^(cc|co|in|ta|ep|ad|st)\.plaintext$/)) { push(@ordered,$parameter); - $items{$parameter} = { - text => $parameter, - input => 'textbox', - size => '15', - }, } } } - return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal); + return @ordered; } sub item_table_row_start { - my ($text,$count) = @_; + my ($text,$count,$add_class) = @_; my $output; - if ($count%2) { - $output .= ' '.$text.
' | ';
return $output;
@@ -1461,7 +2515,7 @@ sub select_from_options {
}
sub make_item_rows {
- my ($cdom,$items,$ordered,$settings,$rowtotal) = @_;
+ my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype) = @_;
my $datatable;
if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) {
my $count = 0;
@@ -1469,7 +2523,7 @@ sub make_item_rows {
$count ++;
$datatable .= &item_table_row_start($items->{$item}{text},$count);
if ($item eq 'nothideprivileged') {
- $datatable .= ¬hidepriv_row($cdom,$item,$settings);
+ $datatable .= ¬hidepriv_row($cdom,$item,$settings,$crstype);
} elsif ($item eq 'print_header_format') {
$datatable .= &print_hdrfmt_row($item,$settings);
} elsif ($items->{$item}{input} eq 'dates') {
@@ -1499,7 +2553,7 @@ sub make_item_rows {
}
sub nothidepriv_row {
- my ($cdom,$item,$settings) = @_;
+ my ($cdom,$item,$settings,$crstype) = @_;
my ($cnum) = &get_course();
my %nothide;
my $datatable;
@@ -1517,6 +2571,7 @@ sub nothidepriv_row {
my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
my $now = time;
my @privusers;
+ my %privileged;
foreach my $person (keys(%coursepersonnel)) {
my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/);
$user =~ s/:$//;
@@ -1525,8 +2580,22 @@ sub nothidepriv_row {
next;
}
my ($uname,$udom) = split(':',$user);
- if (&Apache::lonnet::privileged($uname,$udom)) {
- push(@privusers,$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) {
@@ -1546,13 +2615,17 @@ sub nothidepriv_row {
' | '.
' '.
- ' | '.
+ $hideon.' value="" />'.&mt('Hidden').' '.
+ ''.
'
'. @@ -1712,10 +2795,4 @@ sub substitution_selector { return $output; } -sub modify_crsenv { - my ($action,$cdom,%domconfig) = @_; - return; -} - 1; - |