--- loncom/interface/lonmodifycourse.pm 2005/09/16 16:01:18 1.19 +++ loncom/interface/lonmodifycourse.pm 2006/07/11 02:28:22 1.26 @@ -1,3 +1,8 @@ +# The LearningOnline Network with CAPA +# automated enrollment course setup handler +# +# $Id: lonmodifycourse.pm,v 1.26 2006/07/11 02:28:22 raeburn Exp $ +# # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). @@ -30,6 +35,7 @@ use Apache::lonlocal; use Apache::londropadd; use LONCAPA::Enrollment; use lib '/home/httpd/lib/perl'; +use LONCAPA; sub print_course_selection_page { my ($r,$tasklongref) = @_; @@ -45,7 +51,7 @@ sub print_course_selection_page { ); # Determine the courses - my %courseIDs = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.'); + my %courseIDs = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',undef,undef,'.'); &print_header($r,$tasklongref); $r->print(<<ENDBLOCK); <form action="/adm/modifycourse" method="post" name="cmod"> @@ -96,12 +102,15 @@ ENDBLOCK if ($item =~ m/^($dom)_(\w+)$/) { $crs = $2; if ($courseIDs{$item} =~ /^([^:]*):([^:]*):([^:]*)/) { - $description = &Apache::lonnet::unescape($1); - $owner = &Apache::lonnet::unescape($3); + $description = &unescape($1); + $owner = &unescape($3); + if (($owner ne '') && ($owner !~ /^([^:]+):([^:]+)$/)) { + $owner = $owner.':'.$dom; + } } elsif ($courseIDs{$item} =~ /^([^:]*):([^:]*)$/) { - $description = &Apache::lonnet::unescape($1); + $description = &unescape($1); } else { - $description = &Apache::lonnet::unescape($courseIDs{$item}); + $description = &unescape($courseIDs{$item}); } # Get course owner if ($owner eq '') { @@ -111,7 +120,16 @@ ENDBLOCK } } unless ($owner eq '') { - $ownername = &Apache::loncommon::plainname($owner,$dom); + my ($owneruname,$ownerdom); + if ($owner =~ /^([^:]+):([^:]+)$/) { + $owneruname = $1; + $ownerdom = $2; + } else { + $owneruname = $owner; + $ownerdom = $dom; + } + $ownername = &Apache::loncommon::plainname($owneruname, + $ownerdom); } $r->print("<option value=\"$crs\">$showcode -- $description ---------- $ownername"); } @@ -160,7 +178,7 @@ sub print_course_modification_page { 'noen' => "No end date", 'ownr' => "Owner", 'name' => "Name", - 'unme' => "Username", + 'unme' => "Username:Domain", 'stus' => "Status", 'aecs' => "Automated Enrollment Course Settings", 'cose' => "Course settings for LON-CAPA courses that control automated student enrollment based on classlist data available from your institution's student information system fall into two groups: (a) settings that can be modified by a Course Coordinator using the ", @@ -190,26 +208,42 @@ all settings except course code, course $enrollvar{'autharg'} = ''; $enrollvar{'authtype'} = ''; foreach my $item (keys %settings) { - if ($item =~ m/^internal\.(.+)$/) { - if ( ($1 eq "autoadds") || ($1 eq "autodrops") ) { + if ($item =~ m/^internal\.(.+)$/) { + my $type = $1; + + if ( ($type eq "autoadds") || ($type eq "autodrops") ) { if ($settings{$item} == 1) { - $enrollvar{$1} = "ON"; + $enrollvar{$type} = "ON"; } else { - $enrollvar{$1} = "OFF"; + $enrollvar{$type} = "OFF"; } - } elsif ( ($1 eq "autostart") || ($1 eq "autoend") ) { - if ( ($1 eq "autoend") && ($settings{$item} == 0) ) { - $enrollvar{$1} = $lt{'noen'}; + } elsif ( ($type eq "autostart") || ($type eq "autoend") ) { + if ( ($type eq "autoend") && ($settings{$item} == 0) ) { + $enrollvar{$type} = $lt{'noen'}; } else { - $enrollvar{$1} = localtime($settings{$item}); + $enrollvar{$type} = localtime($settings{$item}); } - } elsif ($1 eq "courseowner" || $1 eq "authtype" || $1 eq "autharg" || $1 eq "sectionnums" || $1 eq "coursecode" || $1 eq "crosslistings") { - $enrollvar{$1} = $settings{$item}; + } elsif ($type eq "sectionums") { + $enrollvar{$type} = $settings{$item}; + $enrollvar{$type} =~ s/,/, /g; + } elsif ($type eq "authtype" + || $type eq "autharg" || $type eq "coursecode" + || $type eq "crosslistings") { + $enrollvar{$type} = $settings{$item}; + } elsif ($type eq 'courseowner') { + if ($settings{$item} =~ /^[^:]+:[^:]+$/) { + $enrollvar{$type} = $settings{$item}; + } else { + if ($settings{$item} ne '') { + $enrollvar{$type} = $settings{$item}.':'.$dom; + } + } } } elsif ($item =~ m/^default_enrollment_(start|end)_date$/) { - if ( ($1 eq 'end') && ($settings{$item} == 0) ) { + my $type = $1; + if ( ($type eq 'end') && ($settings{$item} == 0) ) { $enrollvar{$item} = $lt{'noen'}; - } elsif ( ($1 eq 'start') && ($settings{$item} eq '') ) { + } elsif ( ($type eq 'start') && ($settings{$item} eq '') ) { $enrollvar{$item} = 'When enrolled'; } else { $enrollvar{$item} = localtime($settings{$item}); @@ -222,23 +256,31 @@ all settings except course code, course my %cc_status = (); my %pname = (); my $active_cc; - foreach (@coursepersonnel) { - my @roleinfo = split/:/,$_; - if ( ($roleinfo[0] eq 'cc') && ($roleinfo[2] eq $dom) ) { - unless (grep/^$roleinfo[1]$/,@local_ccs) { - $active_cc = &Apache::loncommon::check_user_status($roleinfo[2],$roleinfo[1],$dom,$course,'cc'); + foreach my $person (@coursepersonnel) { + my ($role,$user) = split(/:/,$person,2); + $user =~ s/:$//; + if (($role eq 'cc') && ($user ne '')) { + if (!grep(/^\Q$user\E$/,@local_ccs)) { + my ($ccname,$ccdom) = split(/:/,$user); + $active_cc = + &Apache::loncommon::check_user_status($ccdom,$ccname,$dom, + $course,'cc'); if ($active_cc eq 'active') { - push @local_ccs, $roleinfo[1]; - $pname{$roleinfo[1]} = &Apache::loncommon::plainname($roleinfo[1],$roleinfo[2]); - $cc_status{$roleinfo[1]} = $lt{'actv'}; + push(@local_ccs,$user); + $pname{$user} = &Apache::loncommon::plainname($ccname,$ccdom); + $cc_status{$user} = $lt{'actv'}; } } } } - unless ( (grep/^$enrollvar{'courseowner'}$/,@local_ccs) || ($enrollvar{'courseowner'} eq '') ) { - push @local_ccs, $enrollvar{'courseowner'}; - $pname{$enrollvar{'courseowner'}} = &Apache::loncommon::plainname($enrollvar{'courseowner'},$dom); - $active_cc = &Apache::loncommon::check_user_status($dom,$enrollvar{'coursecode'},$dom,$course,'cc'); + if ( (!grep(/^$enrollvar{'courseowner'}$/,@local_ccs)) && + ($enrollvar{'courseowner'} ne '') ) { + my ($owneruname,$ownerdom) = split(/:/,$enrollvar{'courseowner'}); + push(@local_ccs,$enrollvar{'courseowner'}); + $pname{$enrollvar{'courseowner'}} = + &Apache::loncommon::plainname($owneruname,$ownerdom); + $active_cc = &Apache::loncommon::check_user_status($ownerdom,$owneruname, + $dom,$course,'cc'); if ($active_cc eq 'active') { $cc_status{$enrollvar{'courseowner'}} = $lt{'actv'}; } else { @@ -246,7 +288,7 @@ all settings except course code, course } } my $numlocalcc = @local_ccs; - my $bodytag=&Apache::loncommon::bodytag(&mt("Modify Course Settings")); + my $helplink=&Apache::loncommon::help_open_topic('Modify_Course',&mt("Help on Modifying Courses")); my ($krbdef,$krbdefdom)=&Apache::loncommon::get_kerberos_defaults($dom); my $curr_authtype = ''; @@ -336,7 +378,7 @@ all settings except course code, course my $colflag = $i%2; $ownertable .= "<tr bgcolor=\"$bgcolors[$colflag]\" align=\"left\">"; if ($local_ccs[$i] eq $enrollvar{'courseowner'}) { - $ownertable .= "<td><input type=\"radio\" name=\"courseowner\" value=\"$local_ccs[$i]\" checked=\"true\"/></td>"; + $ownertable .= "<td><input type=\"radio\" name=\"courseowner\" value=\"$local_ccs[$i]\" checked=\"checked\" /></td>"; } else { $ownertable .= "<td><input type=\"radio\" name=\"courseowner\" value=\"$local_ccs[$i]\" /></td>"; } @@ -521,7 +563,7 @@ sub modify_course { } } if ($changeowner == 1 || $changecode == 1) { - my $courseid_entry = &Apache::lonnet::escape($dom.'_'.$crs).'='.&Apache::lonnet::escape($description).':'.&Apache::lonnet::escape($env{'form.coursecode'}).':'.&Apache::lonnet::escape($env{'form.courseowner'}); + my $courseid_entry = &escape($dom.'_'.$crs).'='.&escape($description).':'.&escape($env{'form.coursecode'}).':'.&escape($env{'form.courseowner'}); &Apache::lonnet::courseidput($dom,$courseid_entry,&Apache::lonnet::homeserver($crs,$dom)); } @@ -635,7 +677,6 @@ sub modify_course { sub print_header { my ($r,$tasklongref,$description,$javascriptref) = @_; my %lt =&Apache::lonlocal::texthash( - 'vmcs' => 'View/Modify Course Settings', 'chco' => 'Choose a course', 'main' => 'Main Menu', 'comg' => 'Course Manager', @@ -648,7 +689,7 @@ sub print_header { $description = $lt{'comg'}; } my $page = ''; - my $bodytag=&Apache::loncommon::bodytag($lt{'vmcs'}); + if ($action eq 'start') { $page = "<b>$lt{'chco'}</b>"; } else { @@ -660,21 +701,16 @@ sub print_header { $page .= " -> <b>".$$tasklongref{$action}."</b>"; } } - my $html=&Apache::lonxml::xmlbegin(); - $r->print(" -$html -<head> -"); + + my $js; if ($action eq 'display') { - $r->print(" -<script language=\"JavaScript\" type=\"text/javascript\"> -$$javascriptref -</script>"); + $js = '<script type="text/javascript"> + '.$$javascriptref.' + </script>'; } + $r->print(&Apache::loncommon::start_page('View/Modify Course Settings', + $js)); $r->print(<<ENDTHIS); -<title>The LearningOnline Network with CAPA</title> -</head> -$bodytag <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#CCCC99"> @@ -690,18 +726,14 @@ ENDTHIS } sub print_footer { - my $r = shift; - $r->print(<<ENDBASE); -<br/> -</body> -</html> -ENDBASE + my ($r) = @_; + $r->print('<br />'.&Apache::loncommon::end_page()); return; } sub check_course { my ($dom,$course) = @_; - my %courseIDs = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.'); + my %courseIDs = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',undef,undef,'.'); foreach my $key (sort keys %courseIDs) { if ($key =~ m/^($dom)_(\w+)$/) { if ($2 eq $course) { @@ -737,7 +769,7 @@ sub handler { 'default_enrollment_start_date' => 'Date of first student access', 'default_enrollment_end_date' => 'Date of last student access', 'coursecode' => 'Official course code', - 'courseowner' => "Username of course owner (\@$dom)", + 'courseowner' => "Username:domain of course owner", 'notifylist' => 'Course Coordinators to be notified of enrollment changes', 'sectionnums' => 'Course section number(:groupID)', 'crosslistings' => 'Crosslisted class(:groupID)',