--- loncom/interface/lonmodifycourse.pm 2006/12/29 17:30:11 1.29 +++ loncom/interface/lonmodifycourse.pm 2007/12/30 23:22:41 1.37 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # handler for DC-only modifiable course settings # -# $Id: lonmodifycourse.pm,v 1.29 2006/12/29 17:30:11 raeburn Exp $ +# $Id: lonmodifycourse.pm,v 1.37 2007/12/30 23:22:41 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,7 +33,7 @@ use Apache::lonnet; use Apache::loncommon; use Apache::lonhtmlcommon; use Apache::lonlocal; -use Apache::londropadd; +use Apache::lonuserutils; use Apache::lonpickcourse; use LONCAPA::Enrollment; use lib '/home/httpd/lib/perl'; @@ -67,7 +67,7 @@ sub get_enrollment_settings { } else { $enrollvar{$type} = localtime($settings{$item}); } - } elsif ($type eq "sectionums") { + } elsif ($type eq "sectionnums") { $enrollvar{$type} = $settings{$item}; $enrollvar{$type} =~ s/,/, /g; } elsif ($type eq "authtype" @@ -108,22 +108,12 @@ sub print_course_search_page { my $action = '/adm/modifycourse'; my $cctitle = &Apache::lonnet::plaintext('cc',$type); my $dctitle = &Apache::lonnet::plaintext('dc'); - my %lt=&Apache::lonlocal::texthash( - 'some' => "Certain settings which control auto-enrollment of students from your institution's student information system.", - 'crqo' => 'The total disk space allocated for storage of portfolio files in all groups in a course.', - 'tmod' => 'To view or modify these settings use the criteria below to select a course from this domain.', - ); - $r->print('

'. - &mt('Course settings which only a [_1] may modify.' - ,$dctitle).'

'. - &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).' -'. -$lt{'tmod'}.' ('.$domdesc.') -

- '); + $r->print( + '

'.&mt('Search for a course in the [_1] domain',$domdesc).'

'. + &mt('Actions available after selecting a course:').''); $r->print(&Apache::lonpickcourse::build_filters($filterlist,$type, undef,undef,$filter,$action,'modifycourse')); } @@ -149,18 +139,22 @@ sub print_course_selection_page { $filter{'domainfilter'} = $dom; my %courses = &Apache::lonpickcourse::search_courses($r,$type,0, \%filter); - if (keys(%courses) > 0) { - $r->print(&mt("Click a 'Select' button to view or modify settings for a [_1] which may only be modified by a [_2] in this domain.",lc($type),$dctitle).'

'); - } - &Apache::lonpickcourse::display_matched_courses($r,$type,0,$action, %courses); return; } sub print_modification_menu { - my ($r,$cdesc) = @_; + my ($r,$cdesc,$domdesc) = @_; &print_header($r,$cdesc); + my $type = 'Course'; + my $action = '/adm/modifycourse'; + my $cctitle = &Apache::lonnet::plaintext('cc',$type); + my $dctitle = &Apache::lonnet::plaintext('dc'); + my %lt=&Apache::lonlocal::texthash( + 'some' => "Certain settings which control auto-enrollment of students from your institution's student information system.", + 'crqo' => 'The total disk space allocated for storage of portfolio files in all groups in a course.', + ); my @menu = ( { text => 'Modify quota for group portfolio files', @@ -174,8 +168,14 @@ sub print_modification_menu { } ); my $menu_html = '

'.&mt('View/Modify settings for: ').$cdesc.'

'."\n". - '
'."\n". - &hidden_form_elements(); + &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).' + +'."\n". + &hidden_form_elements(); + foreach my $menu_item (@menu) { $menu_html.='

'; $menu_html.=''; @@ -189,6 +189,16 @@ sub print_modification_menu { return; } +sub print_ccrole_selected { + my ($r,$cdesc,$domdesc) = @_; + &print_header($r); + my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'}); + $r->print(' + + +'); +} + sub print_settings_display { my ($r,$cdom,$cnum,$cdesc,$type) = @_; my %enrollvar = &get_enrollment_settings($cdom,$cnum); @@ -239,7 +249,7 @@ sub print_settings_display {

'.$lt{'back'}.'     '.&mt('Modify [_1]-only settings',$dctitle).''."\n". -&hidden_form_elements(). +&hidden_form_elements(). ''); } @@ -313,7 +323,7 @@ all settings except course code, course 'usrd' => 'Use the radio buttons to select a different course owner.', 'deam' => "Default Authentication method", 'deus' => "The default authentication method, and default authentication parameter (domain, initial password or argument) are used when automatic enrollment of students in a course requires addition of new user accounts in your domain, and the class list file contains empty entries for the <authtype> and <autharg> properties for the new student. If you choose 'internally authenticated', and leave the initial password field empty, the automated enrollment process will create a randomized password for each new student account that it adds to your LON-CAPA domain.", - 'gobt' => "Modify settings", + 'gobt' => "Save", ); my @bgcolors = ('#eeeeee','#cccccc'); @@ -368,19 +378,24 @@ all settings except course code, course } unless ($curr_authtype eq '') { $curr_authfield = $curr_authtype.'arg'; - } - my $javascript_validations=&Apache::londropadd::javascript_validations('modifycourse',$krbdefdom,$curr_authtype,$curr_authfield); - my %param = ( formname => 'document.cmod', + } + my $javascript_validations=&Apache::lonuserutils::javascript_validations('modifycourse',$krbdefdom,$curr_authtype,$curr_authfield); + my %param = ( formname => 'document.'.$env{'form.phase'}, kerb_def_dom => $krbdefdom, kerb_def_auth => $krbdef, mode => 'modifycourse', curr_authtype => $curr_authtype, curr_autharg => $enrollvar{'autharg'} ); - my $krbform = &Apache::loncommon::authform_kerberos(%param); - my $intform = &Apache::loncommon::authform_internal(%param); - my $locform = &Apache::loncommon::authform_local(%param); - + my (%authform,$authenitems); + $authform{'krb'} = &Apache::loncommon::authform_kerberos(%param); + $authform{'int'} = &Apache::loncommon::authform_internal(%param); + $authform{'loc'} = &Apache::loncommon::authform_local(%param); + foreach my $item ('krb','int','loc') { + if ($authform{$item} ne '') { + $authenitems .= $authform{$item}.'
'; + } + } if ($numlocalcc == 0) { $ownertable = $lt{'nocc'}; } @@ -432,12 +447,12 @@ all settings except course code, course my $mainheader = &mt('Course settings modifiable by [_1] only.',$dctitle); my $hidden_elements = &hidden_form_elements(); $r->print(< +

$mainheader

- + @@ -483,7 +493,7 @@ ENDDOCUMENT } sub modify_course { - my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_; + my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_; my %longtype = &course_settings_descrip(); my %settings = &Apache::lonnet::get('environment',['internal.courseowner','internal.coursecode','internal.authtype','internal.autharg','internal.sectionnums','internal.crosslistings','description'],$cdom,$cnum); my %currattr = (); @@ -560,10 +570,18 @@ sub modify_course { } } if ($changeowner == 1 || $changecode == 1) { - my $courseid_entry = &escape($cdom.'_'.$cnum).'='.&escape($description).':'.&escape($env{'form.coursecode'}).':'.&escape($env{'form.courseowner'}); - &Apache::lonnet::courseidput($cdom,$courseid_entry,&Apache::lonnet::homeserver($cnum,$cdom)); + my $courseid_entry = &escape($cdom.'_'.$cnum).'='.&escape($description).':'.&escape($env{'form.coursecode'}).':'.&escape($env{'form.courseowner'}).':'.&escape($type); + my %courseid_entry = ( + $cdom.'_'.$cnum => { + description => $description, + inst_code => $env{'form.coursecode'}, + owner => $env{'form.courseowner'}, + type => $type, + }, + ); + &Apache::lonnet::courseidput($cdom,\%courseid_entry, + &Apache::lonnet::homeserver($cnum,$cdom),'notime'); } - foreach my $param (@modifiable_params) { if ($currattr{$param} eq $newattr{$param}) { push(@nochanges,$param); @@ -573,17 +591,16 @@ sub modify_course { push(@changes,$param); } } - if (@changes > 0) { $chgresponse = &mt("The following automated enrollment parameters have been changed:
    "); } if (@nochanges > 0) { $nochgresponse = &mt("The following automated enrollment parameters remain unchanged:
      "); } - if (@changes > 0) { + if (@changes > 0) { my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom,$cnum); if ($putreply !~ /^ok$/) { - $response = &mt("There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.
      "); + $response = &mt("There was a problem processing your requested changes. The automated enrollment settings for this course have been left unchanged.
      ").&mt('Error: ').$putreply; } else { foreach my $attr (@modifiable_params) { if (grep/^$attr$/,@changes) { @@ -781,8 +798,14 @@ function verify_quota(formname) { ENDSCRIPT } + my $starthash; + if ($env{'form.phase'} eq 'ccrole') { + $starthash = { + add_entries => {'onload' => "javascript:document.ccrole.submit();"}, + }; + } $r->print(&Apache::loncommon::start_page('View/Modify Course Settings', - $js)); + $js,$starthash)); my $bread_text = "View/Modify Courses"; if ($cdesc ne '') { $bread_text = "Course Settings: $cdesc"; @@ -800,28 +823,36 @@ sub print_footer { sub check_course { my ($r,$dom,$domdesc) = @_; my ($ok_course,$description,$instcode,$owner); - if (defined($env{'form.pickedcourse'})) { - my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'}); - if ($cdom eq $dom) { - my %courseIDs = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.', - $cnum,undef,undef,'.'); - if (keys(%courseIDs) > 0) { - $ok_course = 'ok'; + my %args = ( + one_time => 1, + ); + my %coursehash = + &Apache::lonnet::coursedescription($env{'form.pickedcourse'},\%args); + my $cnum = $coursehash{'num'}; + my $cdom = $coursehash{'domain'}; + if ($cdom eq $dom) { + my $description; + my %courseIDs = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.', + $cnum,undef,undef,'.'); + if (keys(%courseIDs) > 0) { + $ok_course = 'ok'; + my ($instcode,$owner); + if (ref($courseIDs{$cdom.'_'.$cnum}) eq 'HASH') { + $description = $courseIDs{$cdom.'_'.$cnum}{'description'}; + $instcode = $courseIDs{$cdom.'_'.$cnum}{'inst_code'}; + $owner = $courseIDs{$cdom.'_'.$cnum}{'owner'}; + } else { ($description,$instcode,$owner) = - split(/:/,$courseIDs{$cdom.'_'.$cnum}); - $description = &unescape($description); - $instcode = &unescape($instcode); - if ($instcode) { - $description .= " ($instcode)"; - } + split(/:/,$courseIDs{$cdom.'_'.$cnum}); + } + $description = &unescape($description); + $instcode = &unescape($instcode); + if ($instcode) { + $description .= " ($instcode)"; } + return ($ok_course,$description); } } - - if ($ok_course ne 'ok') { - $r->print('
      '.&mt('The LON-CAPA course selected was not a valid course for the [_1] domain',$domdesc)); - } - return ($ok_course,$description); } sub course_settings_descrip { @@ -846,8 +877,9 @@ sub course_settings_descrip { sub hidden_form_elements { my $hidden_elements = &Apache::lonhtmlcommon::echo_form_input(['gosearch','coursecode', - 'numlocalcc','courseowner', - 'login','coursequota','intarg', 'locarg','krbarg','krbver']); + 'prevphase','numlocalcc','courseowner','login','coursequota','intarg', + 'locarg','krbarg','krbver','counter'])."\n". + ''; return $hidden_elements; } @@ -859,7 +891,7 @@ sub handler { return OK; } my $dom = $env{'request.role.domain'}; - my $domdesc = $Apache::lonnet::domaindescription{$dom}; + my $domdesc = &Apache::lonnet::domain($dom,'description'); if (&Apache::lonnet::allowed('ccc',$dom)) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; @@ -867,21 +899,24 @@ sub handler { &Apache::lonhtmlcommon::clear_breadcrumbs(); my $phase = $env{'form.phase'}; - &Apache::lonhtmlcommon::add_breadcrumb + if ($phase eq '') { + &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/modifycourse", text=>"Course search"}); - if ($phase eq '') { &print_course_search_page($r,$dom,$domdesc); } else { + my $firstform = $phase; + if ($phase eq 'courselist') { + $firstform = 'filterpicker'; + } &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'courselist')", + ({href=>"javascript:changePage(document.$firstform,'')", + text=>"Course search"}, + {href=>"javascript:changePage(document.$phase,'courselist')", text=>"Choose a course"}); if ($phase eq 'courselist') { &print_course_selection_page($r,$dom,$domdesc); } else { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'menu')", - text=>"Pick action"}); my ($checked,$cdesc) = &check_course($r,$dom,$domdesc); my $type = $env{'form.type'}; if ($type eq '') { @@ -889,8 +924,19 @@ sub handler { } if ($checked eq 'ok') { if ($phase eq 'menu') { - &print_modification_menu($r,$cdesc); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'menu')", + text=>"Pick action"}); + &print_modification_menu($r,$cdesc,$domdesc); + } elsif ($phase eq 'ccrole') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'ccrole')", + text=>"Enter course"}); + &print_ccrole_selected($r,$cdesc,$domdesc); } else { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'menu')", + text=>"Pick action"}); my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'}); if ($phase eq 'setquota') { &Apache::lonhtmlcommon::add_breadcrumb @@ -922,11 +968,11 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:changePage(document.$phase,'$phase')", text=>"Result"}); - &modify_course($r,$cdom,$cnum,$cdesc,$domdesc); + &modify_course($r,$cdom,$cnum,$cdesc,$domdesc,$type); } } } else { - $r->print(&mt('The course you selected is not a valid course in this domain')." ($domdesc)"); + $r->print(''.&mt('The course you selected is not a valid course in this domain')." ($domdesc)".''); } } }
Use the appropriate text boxes and radio buttons below to change some or all of the four automated enrollment settings that may only be changed by a Domain Coordinator. Click the "$lt{'gobt'}" button to save your changes.Use the appropriate text boxes and radio buttons below to change some or all of the four automated enrollment settings that may only be changed by a Domain Coordinator.
@@ -455,12 +470,7 @@ all settings except course code, course
$lt{'deam'}:

- $krbform -
- $intform -
- $locform -
+ $authenitems
$lt{'deus'}.