--- loncom/interface/lonmodifycourse.pm 2010/08/24 13:51:52 1.57 +++ loncom/interface/lonmodifycourse.pm 2014/01/15 18:47:56 1.66 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # handler for DC-only modifiable course settings # -# $Id: lonmodifycourse.pm,v 1.57 2010/08/24 13:51:52 raeburn Exp $ +# $Id: lonmodifycourse.pm,v 1.66 2014/01/15 18:47:56 bisitz 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}; @@ -211,21 +219,27 @@ sub print_course_selection_page { sub print_modification_menu { my ($r,$cdesc,$domdesc,$dom,$type) = @_; &print_header($r,$type); - my ($ccrole,$categorytitle,$setquota_text,$setparams_text,$cat_text); + my ($ccrole,$categorytitle,$setquota_text,$setuploadquota_text,$setparams_text,$cat_text); if ($type eq 'Community') { $ccrole = 'co'; } else { $ccrole = 'cc'; - } + } if ($type eq 'Community') { $categorytitle = 'View/Modify Community Settings'; $setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a community.'); + $setuploadquota_text = &mt('Disk space allocated for storage of content uploaded directly to a community via Content Editor.'); $setparams_text = 'View/Modify community owner'; $cat_text = 'View/Modify catalog settings for community'; } 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'; + $setuploadquota_text = &mt('Disk space allocated for storage of content uploaded directly to a course via Content Editor.'); + 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'; @@ -249,7 +263,7 @@ sub print_modification_menu { linktitle => '' }, { - linktext => 'View/Modify quota for group portfolio files', + linktext => 'View/Modify quotas for group portfolio files, and for uploaded content.', url => &phaseurl('setquota'), permission => 1, #help => '', @@ -300,8 +314,12 @@ sub print_modification_menu { } else { $menu_html .= '<li>'.&mt('Course owner (permitted to assign Course Coordinator roles in the course).').'</li>'. '<li>'.&mt("Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).").'</li>'; + if (&showcredits($dom)) { + $menu_html .= '<li>'.&mt('Default credits earned by student on course completion.').'</li>'; + } } $menu_html .= '<li>'.$setquota_text.'</li>'. + '<li>'.$setuploadquota_text.'</li>'. '<li>'.$anon_text.'</li>'."\n"; foreach my $item (@additional_params) { if ($type eq 'Community') { @@ -357,7 +375,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')) { @@ -389,9 +407,13 @@ sub print_settings_display { ' <span class="LC_nobreak">'.$cdesc.'</span></h3>'. '<form action="/adm/modifycourse" method="post" name="viewparms">'."\n". '<p>'.$lt{'cose'}.'<ul>'. - '<li>'.&mt('Settings modifiable by a [_1] via the [_2]Automated Enrollment Manager[_3] in a course.',$cctitle,'<a href="'.$escuri.'">','</a>').'</li>'. - '<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication[_3].',$dctitle,'<a href="javascript:changePage(document.viewparms,'."'setparms'".');">','</a>')."\n". - '</li></ul></p>'. + '<li>'.&mt('Settings modifiable by a [_1] via the [_2]Automated Enrollment Manager[_3] in a course.',$cctitle,'<a href="'.$escuri.'">','</a>').'</li>'); + if (&showcredits($cdom)) { + $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication and credits[_3].',$dctitle,'<a href="javascript:changePage(document.viewparms,'."'setparms'".');">','</a>')."\n"); + } else { + $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication[_3].',$dctitle,'<a href="javascript:changePage(document.viewparms,'."'setparms'".');">','</a>')."\n"); + } + $r->print('</li></ul></p>'. '<p>'.$lt{'cour'}.'</p><p>'.$disp_table.'</p><p>'. '<a href="javascript:changePage(document.viewparms,'."'menu'".')">'.$lt{'back'}.'</a>'."\n". &hidden_form_elements(). @@ -401,28 +423,57 @@ sub print_settings_display { sub print_setquota { my ($r,$cdom,$cnum,$cdesc,$type) = @_; + my $lctype = lc($type); + my $headline = &mt("Set disk space quotas for $lctype: [_1]", + '<span class="LC_nobreak">'.$cdesc.'</span>'); my %lt = &Apache::lonlocal::texthash( - 'cquo' => 'Disk space for storage of group portfolio files for:', - 'gpqu' => 'Course portfolio files disk space', + 'gpqu' => 'Disk space for storage of group portfolio files', + 'upqu' => 'Disk space for storage of content directly uploaded to course via Content Editor', 'modi' => 'Save', 'back' => 'Pick another action', ); - if ($type eq 'Community') { - $lt{'gpqu'} = &mt('Community portfolio files disk space'); - } - my %settings = &Apache::lonnet::get('environment',['internal.coursequota'],$cdom,$cnum); + my %staticdefaults = ( + coursequota => 20, + uploadquota => 500, + ); + my %settings = &Apache::lonnet::get('environment',['internal.coursequota','internal.uploadquota','internal.instcode'], + $cdom,$cnum); my $coursequota = $settings{'internal.coursequota'}; + my $uploadquota = $settings{'internal.uploadquota'}; if ($coursequota eq '') { - $coursequota = 20; + $coursequota = $staticdefaults{'coursequota'}; + } + if ($uploadquota eq '') { + my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + if ($type eq 'Community') { + $uploadquota = $domdefs{$lctype.'quota'}; + } elsif ($settings{'internal.instcode'}) { + $uploadquota = $domdefs{'officialquota'}; + } elsif ($settings{'internal.textbook'}) { + $uploadquota = $domdefs{'textbookquota'}; + } else { + $uploadquota = $domdefs{'unofficialquota'}; + } + if ($uploadquota eq '') { + $uploadquota = $staticdefaults{'uploadquota'}; + } } &print_header($r,$type); my $hidden_elements = &hidden_form_elements(); - my $helpitem = &Apache::loncommon::help_open_topic('Modify_Course_Quota'); + my $porthelpitem = &Apache::loncommon::help_open_topic('Modify_Course_Quota'); + my $uploadhelpitem = &Apache::loncommon::help_open_topic('Modify_Course_Upload_Quota'); $r->print(<<ENDDOCUMENT); <form action="/adm/modifycourse" method="post" name="setquota" onsubmit="return verify_quota();"> -<h3>$lt{'cquo'} <span class="LC_nobreak">$cdesc</span></h3> +<h3>$headline</h3> +<p><span class="LC_nobreak"> +$porthelpitem $lt{'gpqu'}: <input type="text" size="4" name="coursequota" value="$coursequota" /> MB +</span> +<br /> +<span class="LC_nobreak"> +$uploadhelpitem $lt{'upqu'}: <input type="text" size="4" name="uploadquota" value="$uploadquota" /> MB +</span> +</p> <p> -$helpitem $lt{'gpqu'}: <input type="text" size="4" name="coursequota" value="$coursequota" /> Mb <input type="submit" value="$lt{'modi'}" /> </p> $hidden_elements @@ -639,14 +690,21 @@ sub print_course_modification_page { &Apache::loncommon::help_open_topic('Modify_Course_Instcode'). ' '.&mt('Course Code'))."\n". '<input type="text" size="10" name="coursecode" value="'.$enrollvar{'coursecode'}.'" />'. - &Apache::lonhtmlcommon::row_closure(). - &Apache::lonhtmlcommon::row_title( - &Apache::loncommon::help_open_topic('Modify_Course_Defaultauth'). - ' '.&mt('Default Authentication method'))."\n". - $authenitems."\n". - &Apache::lonhtmlcommon::row_closure(). - &Apache::lonhtmlcommon::row_title( - &Apache::loncommon::help_open_topic('Modify_Course_Owner'). + &Apache::lonhtmlcommon::row_closure()); + if (&showcredits($cdom)) { + $r->print(&Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Credithours'). + ' '.&mt('Credits (students)'))."\n". + '<input type="text" size="3" name="defaultcredits" value="'.$enrollvar{'defaultcredits'}.'" />'. + &Apache::lonhtmlcommon::row_closure()); + } + $r->print(&Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Defaultauth'). + ' '.&mt('Default Authentication method'))."\n". + $authenitems."\n". + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Owner'). ' '.&mt('Course Owner'))."\n"); } $r->print($ownertable."\n".&Apache::lonhtmlcommon::row_closure(1). @@ -657,7 +715,7 @@ sub print_course_modification_page { } else { $r->print('javascript:verify_message(this.form);"'); } - $r->print('value="'.$lt{'gobt'}.'" /></p></form>'); + $r->print(' value="'.$lt{'gobt'}.'" /></p></form>'); return; } @@ -718,12 +776,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}; } @@ -742,7 +803,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 { @@ -781,6 +842,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'}) ) { @@ -816,10 +883,10 @@ sub modify_course { } } if (@changes > 0) { - $chgresponse = &mt("The following settings have been changed:<br/><ul>"); + $chgresponse = &mt('The following settings have been changed:').'<br/><ul>'; } if (@nochanges > 0) { - $nochgresponse = &mt("The following settings remain unchanged:<br/><ul>"); + $nochgresponse = &mt('The following settings remain unchanged:').'<br/><ul>'; } if (@changes > 0) { my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom,$cnum); @@ -845,6 +912,8 @@ sub modify_course { push(@warnings,&mt('There is no owner associated with this LON-CAPA course.'). '<br />'.&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) { @@ -853,7 +922,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).'<br/>'); @@ -870,7 +939,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)); } @@ -886,7 +955,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)); } @@ -927,18 +996,19 @@ sub modify_course { $reply = '<h3>'.$mainheader.' <span class="LC_nobreak">'.$cdesc.'</span></h3>'."\n". '<p>'.$reply.'</p>'."\n". '<form action="/adm/modifycourse" method="post" name="processparms">'. - &hidden_form_elements(). - '<a href="javascript:changePage(document.processparms,'."'menu'".')">'. - &mt('Pick another action').'</a>'; + &hidden_form_elements(); + my @actions = + ('<a href="javascript:changePage(document.processparms,'."'menu'".')">'. + &mt('Pick another action').'</a>'); if ($numwarnings) { my $newrole = $ccrole.'./'.$cdom.'/'.$cnum; my $escuri = &HTML::Entities::encode('/adm/roles?selectrole=1&'.$newrole. '=1&destinationurl=/adm/populate','&<>"'); - $reply .= '<br /><a href="'.$escuri.'">'. - &mt('Go to Automated Enrollment Manager for course').'</a>'; + push(@actions, '<a href="'.$escuri.'">'. + &mt('Go to Automated Enrollment Manager for course').'</a>'); } - $reply .= '</form>'; + $reply .= &Apache::lonhtmlcommon::actionbox(\@actions).'</form>'; $r->print($reply); return; } @@ -1040,7 +1110,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); @@ -1089,58 +1159,104 @@ sub update_coowners { sub modify_quota { my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_; &print_header($r,$type); + my $lctype = lc($type); + my $headline = &mt("Disk space quotas for $lctype: [_1]", + '<span class="LC_nobreak">'.$cdesc.'</span>'); $r->print('<form action="/adm/modifycourse" method="post" name="processquota">'."\n". - '<h3>'.&mt('Disk space for storage of group portfolio files for:'). - ' <span class="LC_nobreak">'.$cdesc.'</span></h3><br />'); - my %oldsettings = &Apache::lonnet::get('environment',['internal.coursequota'],$cdom,$cnum); - my $defaultquota = 20; - if ($env{'form.coursequota'} ne '') { - my $newquota = $env{'form.coursequota'}; - if ($newquota =~ /^\s*(\d+\.?\d*|\.\d+)\s*$/) { - $newquota = $1; - if ($oldsettings{'internal.coursequota'} eq $env{'form.coursequota'}) { - $r->print(&mt('The disk space allocated for group portfolio files remains unchanged as [_1] Mb.',$env{'form.coursequota'})); + '<h3>'.$headline.'</h3>'); + my %oldsettings = &Apache::lonnet::get('environment',['internal.coursequota','internal.uploadquota'],$cdom,$cnum); + my %staticdefaults = ( + coursequota => 20, + uploadquota => 500, + ); + my %default; + $default{'coursequota'} = $staticdefaults{'coursequota'}; + my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + $default{'uploadquota'} = $domdefs{'uploadquota'}; + if ($default{'uploadquota'} eq '') { + $default{'uploadquota'} = $staticdefaults{'uploadquota'}; + } + my (%cenv,%showresult); + foreach my $item ('coursequota','uploadquota') { + if ($env{'form.'.$item} ne '') { + my $newquota = $env{'form.'.$item}; + if ($newquota =~ /^\s*(\d+\.?\d*|\.\d+)\s*$/) { + $newquota = $1; + if ($oldsettings{'internal.'.$item} == $newquota) { + if ($item eq 'coursequota') { + $r->print(&mt('The disk space allocated for group portfolio files remains unchanged as [_1] MB.',$newquota).'<br />'); + } else { + $r->print(&mt('The disk space allocated for files uploaded via the Content Editor remains unchanged as [_1] MB.',$newquota).'<br />'); + } + } else { + $cenv{'internal.'.$item} = $newquota; + $showresult{$item} = 1; + } } else { - my %cenv = ( - 'internal.coursequota' => $env{'form.coursequota'}, - ); - my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom, - $cnum); - if (($oldsettings{'internal.coursequota'} eq '') && - ($env{'form.coursequota'} == $defaultquota)) { + if ($item eq 'coursequota') { + $r->print(&mt('The proposed group portfolio quota contained invalid characters, so the quota is unchanged.').'<br />'); + } else { + $r->print(&mt('The proposed quota for content uploaded via the Content Editor contained invalid characters, so the quota is unchanged.').'<br />'); + + } + } + } + } + if (keys(%cenv)) { + my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom, + $cnum); + foreach my $key (sort(keys(%showresult))) { + if (($oldsettings{'internal.'.$key} eq '') && + ($env{'form.'.$key} == $default{$key})) { + if ($key eq 'uploadquota') { if ($type eq 'Community') { - $r->print(&mt('The disk space allocated for group portfolio files in this community is the default quota for this domain: [_1] Mb.',$defaultquota)); + $r->print(&mt('The disk space allocated for files uploaded to this community via the Content Editor is the default quota for this domain: [_1] MB.', + $default{$key}).'<br />'); } else { - $r->print(&mt('The disk space allocated for group portfolio files in this course is the default quota for this domain: [_1] Mb.',$defaultquota)); + $r->print(&mt('The disk space allocated for files uploaded to this course via the Content Editor is the default quota for this domain: [_1] MB.', + $default{$key}).'<br />'); } - } 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.','<b>'.$updatedsettings{'internal.coursequota'}.'</b>')); - my $usage = &Apache::longroup::sum_quotas($cdom.'_'.$cnum); - if ($usage >= $updatedsettings{'internal.coursequota'}) { - my $newoverquota; - if ($usage < $oldsettings{'internal.coursequota'}) { - $newoverquota = 'now'; - } - $r->print('<p>'); - if ($type eq 'Community') { - $r->print(&mt('Disk usage [_1] exceeds the quota for this community.',$newoverquota).' '. - &mt('Upload of new portfolio files and assignment of a non-zero Mb quota to new groups in the community will not be possible until some files have been deleted, and total usage is below community quota.')); - } else { - $r->print(&mt('Disk usage [_1] exceeds the quota for this course.',$newoverquota).' '. - &mt('Upload of new portfolio files and assignment of a non-zero Mb quota to new groups in the course will not be possible until some files have been deleted, and total usage is below course quota.')); - } - $r->print('</p>'); - } + } else { + if ($type eq 'Community') { + $r->print(&mt('The disk space allocated for group portfolio files in this community is the default quota for this domain: [_1] MB.', + $default{$key}).'<br />'); } else { - $r->print(&mt('An error occurred storing the quota for group portfolio files: '). - $putreply); + $r->print(&mt('The disk space allocated for group portfolio files in this course is the default quota for this domain: [_1] MB.', + $default{$key}).'<br />'); + } + } + delete($showresult{$key}); + } + } + if ($putreply eq 'ok') { + my %updatedsettings = &Apache::lonnet::get('environment',['internal.coursequota','internal.uploadquota'],$cdom,$cnum); + if ($showresult{'coursequota'}) { + $r->print(&mt('The disk space allocated for group portfolio files is now: [_1] MB.', + '<b>'.$updatedsettings{'internal.coursequota'}.'</b>').'<br />'); + my $usage = &Apache::longroup::sum_quotas($cdom.'_'.$cnum); + if ($usage >= $updatedsettings{'internal.coursequota'}) { + my $newoverquota; + if ($usage < $oldsettings{'internal.coursequota'}) { + $newoverquota = 'now'; } + $r->print('<p>'); + if ($type eq 'Community') { + $r->print(&mt('Disk usage [_1] exceeds the quota for this community.',$newoverquota).' '. + &mt('Upload of new portfolio files and assignment of a non-zero MB quota to new groups in the community will not be possible until some files have been deleted, and total usage is below community quota.')); + } else { + $r->print(&mt('Disk usage [_1] exceeds the quota for this course.',$newoverquota).' '. + &mt('Upload of new portfolio files and assignment of a non-zero MB quota to new groups in the course will not be possible until some files have been deleted, and total usage is below course quota.')); + } + $r->print('</p>'); } } + if ($showresult{'uploadquota'}) { + $r->print(&mt('The disk space allocated for content uploaded directly via the Content Editor is now: [_1] MB.', + '<b>'.$updatedsettings{'internal.uploadquota'}.'</b>').'<br />'); + } } else { - $r->print(&mt('The new quota requested contained invalid characters, so the quota is unchanged.')); + $r->print(&mt('An error occurred storing the quota(s) for group portfolio files and/or uploaded content: '). + $putreply); } } $r->print('<p>'. @@ -1343,7 +1459,7 @@ sub print_header { $phase = $env{'form.phase'}; } my $js = qq| -<script type="text/javascript"> + function changePage(formname,newphase) { formname.phase.value = newphase; if (newphase == 'processparms') { @@ -1351,29 +1467,32 @@ function changePage(formname,newphase) { } formname.submit(); } -</script> + |; if ($phase eq 'setparms') { - $js .= qq| -<script type="text/javascript"> -$javascript_validations -</script> -|; + $js .= $javascript_validations; } elsif ($phase eq 'courselist') { $js .= qq| -<script type="text/javascript"> + function gochoose(cname,cdom,cdesc) { document.courselist.pickedcourse.value = cdom+'_'+cname; document.courselist.submit(); } -</script> + +function hide_searching() { + if (document.getElementById('searching')) { + document.getElementById('searching').style.display = 'none'; + } + return; +} + |; } elsif ($phase eq 'setquota') { my $invalid = &mt('The quota you entered contained invalid characters.'); my $alert = &mt('You must enter a number'); my $regexp = '/^\s*(\d+\.?\d*|\.\d+)\s*$/'; $js .= <<"ENDSCRIPT"; -<script type="text/javascript"> + function verify_quota() { var newquota = document.setquota.coursequota.value; var num_reg = $regexp; @@ -1385,14 +1504,14 @@ function verify_quota() { } return true; } -</script> + ENDSCRIPT } elsif ($phase eq 'setanon') { my $invalid = &mt('The responder threshold you entered is invalid.'); my $alert = &mt('You must enter a positive integer.'); my $regexp = ' /^\s*\d+\s*$/'; $js .= <<"ENDSCRIPT"; -<script type="text/javascript"> + function verify_anon_threshold() { var newthreshold = document.setanon.threshold.value; var num_reg = $regexp; @@ -1409,17 +1528,23 @@ function verify_anon_threshold() { } return true; } -</script> + 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'; @@ -1495,6 +1620,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; @@ -1505,11 +1631,19 @@ sub hidden_form_elements { &Apache::lonhtmlcommon::echo_form_input(['gosearch','updater','coursecode', 'prevphase','numlocalcc','courseowner','login','coursequota','intarg', 'locarg','krbarg','krbver','counter','hidefromcat','usecategory', - 'threshold'])."\n". + 'threshold','defaultcredits','uploadquota'])."\n". '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />'; return $hidden_elements; } +sub showcredits { + my ($dom) = @_; + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'} || $domdefaults{'textbokcredits'}) { + return 1; + } +} + sub handler { my $r = shift; if ($r->header_only) {