--- loncom/interface/lonmodifycourse.pm 2010/07/08 23:19:19 1.56
+++ loncom/interface/lonmodifycourse.pm 2013/03/01 05:01:26 1.60
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# handler for DC-only modifiable course settings
#
-# $Id: lonmodifycourse.pm,v 1.56 2010/07/08 23:19:19 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.60 2013/03/01 05:01:26 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -39,18 +39,22 @@ use lib '/home/httpd/lib/perl';
use LONCAPA;
sub get_dc_settable {
- my ($type) = @_;
+ my ($type,$cdom) = @_;
if ($type eq 'Community') {
return ('courseowner');
} else {
- return ('courseowner','coursecode','authtype','autharg');
+ my @items = ('courseowner','coursecode','authtype','autharg');
+ if (&showcredits($cdom)) {
+ push(@items,'defaultcredits');
+ }
+ return @items;
}
}
sub autoenroll_keys {
- my $internals = ['coursecode','courseowner','authtype','autharg','autoadds','autodrops',
- 'autostart','autoend','sectionnums','crosslistings',
- 'co-owners'];
+ my $internals = ['coursecode','courseowner','authtype','autharg','defaultcredits',
+ 'autoadds','autodrops','autostart','autoend','sectionnums',
+ 'crosslistings','co-owners'];
my $accessdates = ['default_enrollment_start_date','default_enrollment_end_date'];
return ($internals,$accessdates);
}
@@ -114,6 +118,10 @@ sub get_enrollment_settings {
|| $type eq "autharg" || $type eq "coursecode"
|| $type eq "crosslistings") {
$enrollvar{$type} = $settings{$item};
+ } elsif ($type eq 'defaultcredits') {
+ if (&showcredits($cdom)) {
+ $enrollvar{$type} = $settings{$item};
+ }
} elsif ($type eq 'courseowner') {
if ($settings{$item} =~ /^[^:]+:[^:]+$/) {
$enrollvar{$type} = $settings{$item};
@@ -225,9 +233,14 @@ sub print_modification_menu {
} else {
$categorytitle = 'View/Modify Course Settings';
$setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a course.');
- $setparams_text = 'View/Modify course owner, institutional code, and default authentication';
- $cat_text = 'View/Modify catalog settings for course';
+ if (&showcredits($dom)) {
+ $setparams_text = 'View/Modify course owner, institutional code, and default authentication and credits';
+ } else {
+ $setparams_text = 'View/Modify course owner, institutional code, and default authentication';
+ }
+ $cat_text = 'View/Modify catalog settings for course';
}
+ my $anon_text = 'Responder threshold required to display anonymous survey submissions';
my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom);
my @additional_params = &catalog_settable($domconf{'coursecategories'},$type);
@@ -256,6 +269,14 @@ sub print_modification_menu {
linktitle => ''
},
{
+ linktext => 'View/Modify responders threshold for anonymous survey submissions display',
+ url => &phaseurl('setanon'),
+ permission => 1,
+ #help => '',
+ icon => 'anonsurveythreshold.png',
+ linktitle => ''
+ },
+ {
linktext => $cat_text,
url => &phaseurl('catsettings'),
permission => (@additional_params > 0),
@@ -291,8 +312,12 @@ sub print_modification_menu {
} else {
$menu_html .= '
'.&mt('Course owner (permitted to assign Course Coordinator roles in the course).').''.
''.&mt("Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).").'';
+ if (&showcredits($dom)) {
+ $menu_html .= ''.&mt('Default credits earned by student on course completion.').'';
+ }
}
- $menu_html .= ''.$setquota_text.''."\n";
+ $menu_html .= ''.$setquota_text.''.
+ ''.$anon_text.''."\n";
foreach my $item (@additional_params) {
if ($type eq 'Community') {
if ($item eq 'togglecats') {
@@ -347,7 +372,7 @@ sub print_settings_display {
}
my $cctitle = &Apache::lonnet::plaintext($ccrole,$type);
my $dctitle = &Apache::lonnet::plaintext('dc');
- my @modifiable_params = &get_dc_settable($type);
+ my @modifiable_params = &get_dc_settable($type,$cdom);
my ($internals,$accessdates) = &autoenroll_keys();
my @items;
if ((ref($internals) eq 'ARRAY') && (ref($accessdates) eq 'ARRAY')) {
@@ -379,9 +404,13 @@ sub print_settings_display {
' '.$cdesc.''.
'');
+ $r->print(' value="'.$lt{'gobt'}.'" />');
return;
}
@@ -669,12 +744,15 @@ sub modify_course {
unless ($type eq 'Community') {
push(@items,('internal.coursecode','internal.authtype','internal.autharg',
'internal.sectionnums','internal.crosslistings'));
+ if (&showcredits($cdom)) {
+ push(@items,'internal.defaultcredits');
+ }
}
my %settings = &Apache::lonnet::get('environment',\@items,$cdom,$cnum);
my $description = $settings{'description'};
- my ($ccrole,$response,$chgresponse,$nochgresponse,$reply,%currattr,%newattr,%cenv,%changed,
- @changes,@nochanges,@sections,@xlists,@warnings);
- my @modifiable_params = &get_dc_settable($type);
+ my ($ccrole,$response,$chgresponse,$nochgresponse,$reply,%currattr,%newattr,
+ %cenv,%changed,@changes,@nochanges,@sections,@xlists,@warnings);
+ my @modifiable_params = &get_dc_settable($type,$cdom);
foreach my $param (@modifiable_params) {
$currattr{$param} = $settings{'internal.'.$param};
}
@@ -693,7 +771,7 @@ sub modify_course {
$sections[0] = $settings{'internal.sectionnums'};
}
}
- unless ($settings{'internal.crosslistings'} eq'') {
+ unless ($settings{'internal.crosslistings'} eq '') {
if ($settings{'internal.crosslistings'} =~ m/,/) {
@xlists = split/,/,$settings{'internal.crosslistings'};
} else {
@@ -732,6 +810,12 @@ sub modify_course {
$changed{'code'} = 1;
}
}
+
+ if (&showcredits($cdom) && exists($env{'form.defaultcredits'})) {
+ $newattr{'defaultcredits'} =~ s/[^\d\.]//g;
+ $newattr{'defaultcredits'}=$env{'form.defaultcredits'};
+ }
+
}
if ( exists($env{'form.courseowner'}) ) {
@@ -796,6 +880,8 @@ sub modify_course {
push(@warnings,&mt('There is no owner associated with this LON-CAPA course.').
'
'.&mt('If automated enrollment at your institution requires validation of course owners, automated enrollment will fail.'));
} else {
+ my %crsenv = &Apache::lonnet::get('environment',['internal.co-owners'],$cdom,$cnum);
+ my $coowners = $crsenv{'internal.co-owners'};
if (@sections > 0) {
if ($changed{'code'}) {
foreach my $sec (@sections) {
@@ -804,7 +890,7 @@ sub modify_course {
my $inst_course_id = $newattr{'coursecode'}.$1;
my $course_check = &Apache::lonnet::auto_validate_courseID($cnum,$cdom,$inst_course_id);
if ($course_check eq 'ok') {
- my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$inst_course_id,$newattr{'courseowner'});
+ my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$inst_course_id,$newattr{'courseowner'},$coowners);
unless ($outcome eq 'ok') {
push(@warnings,&mt('If automatic enrollment is enabled for "[_1]", automated enrollment may fail for "[_2]" - section: [_3] for the following reason: "[_4]".',$description,$newattr{'coursecode'},$instsec,$outcome).'
');
@@ -821,7 +907,7 @@ sub modify_course {
if ($sec =~ m/^(.+):/) {
my $instsec = $1;
my $inst_course_id = $newattr{'coursecode'}.$instsec;
- my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$inst_course_id,$newattr{'courseowner'});
+ my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$inst_course_id,$newattr{'courseowner'},$coowners);
unless ($outcome eq 'ok') {
push(@warnings,&mt('If automatic enrollment is enabled for "[_1]", automated enrollment may fail for "[_2]" - section: [_3] for the following reason: "[_4]".',$description,$newattr{'coursecode'},$instsec,$outcome));
}
@@ -837,7 +923,7 @@ sub modify_course {
foreach my $xlist (@xlists) {
if ($xlist =~ m/^(.+):/) {
my $instxlist = $1;
- my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$instxlist,$newattr{'courseowner'});
+ my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$instxlist,$newattr{'courseowner'},$coowners);
unless ($outcome eq 'ok') {
push(@warnings,&mt('If automatic enrollment is enabled for "[_1]", automated enrollment may fail for crosslisted class "[_2]" for the following reason: "[_3]".',$description,$instxlist,$outcome));
}
@@ -991,7 +1077,7 @@ sub update_coowners {
if ($designhash{$cdom.'.autoassign.co-owners'}) {
my @newcoowners = ();
if ($settings->{'internal.co-owners'}) {
- my @currcoown = split(',',$settings->{'internal.coowners'});
+ my @currcoown = split(',',$settings->{'internal.co-owners'});
my ($updatecoowners,$delcoowners);
foreach my $person (@currcoown) {
my ($result,$desc) = &Apache::lonnet::auto_validate_instcode($cnum,$cdom,$newattr->{'coursecode'},$person);
@@ -1067,7 +1153,7 @@ sub modify_quota {
} else {
if ($putreply eq 'ok') {
my %updatedsettings = &Apache::lonnet::get('environment',['internal.coursequota'],$cdom,$cnum);
- $r->print(&mt('The disk space allocated for group portfolio files is now: [_1] Mb.',$updatedsettings{'internal.coursequota'}));
+ $r->print(&mt('The disk space allocated for group portfolio files is now: [_1] Mb.',''.$updatedsettings{'internal.coursequota'}.''));
my $usage = &Apache::longroup::sum_quotas($cdom.'_'.$cnum);
if ($usage >= $updatedsettings{'internal.coursequota'}) {
my $newoverquota;
@@ -1101,6 +1187,62 @@ sub modify_quota {
return;
}
+sub modify_anonsurvey_threshold {
+ my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_;
+ &print_header($r,$type);
+ $r->print('');
+ return;
+}
+
sub modify_catsettings {
my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_;
&print_header($r,$type);
@@ -1238,7 +1380,7 @@ sub print_header {
$phase = $env{'form.phase'};
}
my $js = qq|
-
+
|;
if ($phase eq 'setparms') {
- $js .= qq|
-
-|;
+ $js .= $javascript_validations;
} elsif ($phase eq 'courselist') {
$js .= qq|
-
+
+function hide_searching() {
+ if (document.getElementById('searching')) {
+ document.getElementById('searching').style.display = 'none';
+ }
+ return;
+}
+
|;
} elsif ($phase eq 'setquota') {
- $js .= <<'ENDSCRIPT';
-
+
ENDSCRIPT
}
+
my $starthash;
if ($env{'form.phase'} eq 'ccrole') {
$starthash = {
add_entries => {'onload' => "javascript:document.ccrole.submit();"},
};
+ } elsif ($phase eq 'courselist') {
+ $starthash = {
+ add_entries => {'onload' => "hide_searching();"},
+ };
}
$r->print(&Apache::loncommon::start_page('View/Modify Course/Community Settings',
- $js,$starthash));
+ &Apache::lonhtmlcommon::scripttag($js),
+ $starthash));
my $bread_text = "View/Modify Courses/Communities";
if ($type eq 'Community') {
$bread_text = 'Community Settings';
@@ -1362,6 +1541,7 @@ sub course_settings_descrip {
'notifylist' => 'Course Coordinators to be notified of enrollment changes',
'sectionnums' => 'Course section number:LON-CAPA section',
'crosslistings' => 'Crosslisted class:LON-CAPA section',
+ 'defaultcredits' => 'Credits',
);
}
return %longtype;
@@ -1371,11 +1551,20 @@ sub hidden_form_elements {
my $hidden_elements =
&Apache::lonhtmlcommon::echo_form_input(['gosearch','updater','coursecode',
'prevphase','numlocalcc','courseowner','login','coursequota','intarg',
- 'locarg','krbarg','krbver','counter','hidefromcat','usecategory'])."\n".
+ 'locarg','krbarg','krbver','counter','hidefromcat','usecategory',
+ 'threshold','defaultcredits'])."\n".
'';
return $hidden_elements;
}
+sub showcredits {
+ my ($dom) = @_;
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
+ if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) {
+ return 1;
+ }
+}
+
sub handler {
my $r = shift;
if ($r->header_only) {
@@ -1459,7 +1648,21 @@ sub handler {
({href=>"javascript:changePage(document.$phase,'$phase')",
text=>"Result"});
&modify_quota($r,$cdom,$cnum,$cdesc,$domdesc,$type);
- } elsif ($phase eq 'viewparms') {
+ } elsif ($phase eq 'setanon') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'$phase')",
+ text=>"Threshold for anonymous submissions display"});
+ &print_set_anonsurvey_threshold($r,$cdom,$cnum,$cdesc,$type);
+
+ } elsif ($phase eq 'processthreshold') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'setanon')",
+ text=>"Threshold for anonymous submissions display"});
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'$phase')",
+ text=>"Result"});
+ &modify_anonsurvey_threshold($r,$cdom,$cnum,$cdesc,$domdesc,$type);
+ } elsif ($phase eq 'viewparms') {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'viewparms')",
text=>"Display settings"});