--- loncom/interface/lonpopulate.pm 2009/07/17 22:24:08 1.64 +++ loncom/interface/lonpopulate.pm 2012/12/17 14:41:06 1.69 @@ -1,5 +1,5 @@ # automated enrollment configuration handler -# $Id: lonpopulate.pm,v 1.64 2009/07/17 22:24:08 droeschl Exp $ +# $Id: lonpopulate.pm,v 1.69 2012/12/17 14:41:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -217,26 +217,28 @@ sub print_mainbox { } elsif ($action eq "newsections") { $action = "sections"; } - $page .= "-> ".$$tasklongref{$action}." -> result"; + $page .= "» ".$$tasklongref{$action}." » result"; } else { - $page .= " -> ".$$tasklongref{$action}.""; + $page .= " » ".$$tasklongref{$action}.""; } } my $usrmang = &mt('User Management'); my $autenrl = &mt('Automated Enrollment Manager'); + #LC_pick_box is used in the following. This is only a temporary solution to adapt the site to the design. $r->print(< - - $realm -> $usrmang -> $page
+ + $realm » $usrmang » $page
- - $autenrl  + + $autenrl  - - +
+
+ ENDTHIS } @@ -247,9 +249,7 @@ sub print_navmenu { $action = $env{'form.action'}; } $r->print(<  - - - - "); @@ -671,10 +692,10 @@ ENDTWO if (@ccs > 0 || @showdom > 0) { $r->print(""; - if ($role eq 'cc') { + if ($role eq 'dc') { + $output .= ""; + } elsif ($role eq 'cc') { $output .= ""; } $output .= " @@ -1246,7 +1271,19 @@ sub notifier_tables { $output .= ''. ''; - if ($role eq 'cc') { + if ($role eq 'dc') { + $output .= ''; + } elsif ($role eq 'cc') { $output .= ''; } $output .= '
-
+
ENDONE foreach my $task (@{$tasksref}) { if ($task eq $action) { @@ -272,9 +272,7 @@ ENDONE $r->print("

 

  "); + "); } ############################################################### @@ -429,7 +427,7 @@ Note: Any students added manually by cou } my $dateshow; if ( ($oldendshow eq '') && ($oldstartshow eq '') ) { - $dateshow = "
Warning. Currently NO first enrollment or last enrollment dates are set. You must use this menu to set a start date and an end date if you plan to utilise automated adds and/or drops in this course.\n"; + $dateshow = "
Warning. Currently NO first enrollment or last enrollment dates are set. You must use this menu to set a start date and an end date if you plan to utilise automated adds and/or drops in this course.\n"; } else { $dateshow = "Currently: First enrollment: $oldstartshow, Last enrollment: $oldendshow\n"; } @@ -508,8 +506,7 @@ ENDTWO } elsif ($action eq "notify") { my $notifycount = 0; my @notified = split(/,/,$enrollvar{notifylist}); - my @domcoord; - my @showdom; + my (@domcoord,@showdom,@olddomcoord,@futuredomcoord); for (my $i=0; $i<@notified; $i++) { if ($notified[$i] !~ /:/) { $notified[$i] =~ s/\@/:/; @@ -522,12 +519,26 @@ ENDTWO } else { $noteset = "OFF"; } + my $now = time; my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']); foreach my $server (keys(%dompersonnel)) { foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - if (!grep(/^$uname:$udom$/,@domcoord)) { - push(@domcoord,$uname.':'.$udom); + my ($end,$start) = split(':',$dompersonnel{$server}{$user}); + if (($end eq '') || ($end == 0) || ($end > $now)) { + if ($start > $now) { + if (!grep(/^\Q$uname\E:\Q$udom\E$/,@futuredomcoord)) { + push(@futuredomcoord,$uname.':'.$udom); + } + } else { + if (!grep(/^\Q$uname\E:\Q$udom\E$/,@domcoord)) { + push(@domcoord,$uname.':'.$udom); + } + } + } else { + if (!grep(/^\Q$uname\E:\Q$udom\E$/,@olddomcoord)) { + push(@olddomcoord,$uname.':'.$udom); + } } } } @@ -565,7 +576,6 @@ ENDTWO my %pname; my %notifystate; my %status; - my $now = time; foreach my $person (sort(keys(%coursepersonnel))) { my $match = 0; my ($role,$user,$usec) = ($person =~ /^([^:]+):([^:]+:[^:]+):([^:]*)/); @@ -601,6 +611,7 @@ ENDTWO usnm => 'username:domain', coac => 'Course Access', curn => 'Current notification status', + doms => 'Domain Coordinator status', notf => 'Notification?', ntac => 'Notification active', ntin => 'Notification inactive', @@ -630,7 +641,7 @@ ENDTWO if (grep(/^$viewer$/,@domcoord)) { $showalldc = 1; } - foreach my $dc (@domcoord) { + foreach my $dc (@domcoord,@futuredomcoord) { if (!grep(/^$dc$/,@ccs)) { if (grep(/^$dc$/,@notified)) { $notifystate{$dc} = 1; @@ -645,6 +656,16 @@ ENDTWO push(@showdom,$dc); } } + foreach my $olddc (@olddomcoord) { + if (grep(/^$olddc$/,@notified)) { + if (!grep(/^\Q$olddc\E$/,@ccs)) { + $notifystate{$olddc} = 1; + my ($dcname,$dcdom) = split(/:/,$olddc); + $pname{$olddc} = &Apache::loncommon::plainname($dcname,$dcdom); + push(@showdom,$olddc); + } + } + } my $showdomnum = scalar(@showdom); if ($showdomnum) { $r->print(" @@ -662,8 +683,8 @@ ENDTWO
"); - $r->print(¬ifier_tables('dc',\%lt,\@showdom,\%status,\%notifystate, - \%pname,\$notifyshow)); + $r->print(¬ifier_tables('dc',\%lt,\@showdom,\%status,\%notifystate,\%pname, + \$notifyshow,\@olddomcoord,\@futuredomcoord)); $r->print("
 
"); if ($notifycount) { - $r->print(&mt("Uncheck the checkbox(es) to terminate notification for people currently informed of roster changes from the nightly enrollment update.
")); + $r->print(&mt('Uncheck the checkbox(es) to terminate notification for people currently informed of roster changes from the nightly enrollment update.').'
'); } if ((@ccs + @showdom) > $notifycount) { - $r->print(&mt("Check the checkbox(es) to initiate notification for people not currently informed of roster changes from the nightly enrollment update.
")); + $r->print(&mt('Check the checkbox(es) to initiate notification for people not currently informed of roster changes from the nightly enrollment update.').'
)); } $r->print(&mt("Click 'Go' to save your changes.")."
@@ -1132,7 +1153,8 @@ onclick="javascript:document.photoupdate my ($indexhash,$keylist) = &Apache::lonuserutils::make_keylist_array(); my $classlist = &Apache::loncoursedata::get_classlist(); my $secidx = &Apache::loncoursedata::CL_SECTION(); - my ($permission,$allowed) = &Apache::lonuserutils::get_permission(); + my $crstype =&Apache::loncommon::course_type(); + my ($permission,$allowed) = &Apache::lonuserutils::get_permission('course',$crstype); foreach my $student (keys(%{$classlist})) { if (exists($permission->{'view_section'})) { if ($classlist->{$student}[$secidx] ne $permission->{'view_section'}) { @@ -1230,12 +1252,15 @@ END } sub notifier_tables { - my ($role,$lt,$users,$status,$notifystate,$pname,$notifyshow) = @_; + my ($role,$lt,$users,$status,$notifystate,$pname,$notifyshow,$olddomcoord, + $futuredomcoord) = @_; my $output = &Apache::loncommon::start_data_table(); $output .= &Apache::loncommon::start_data_table_header_row(); $output .= "
$$lt{name} $$lt{usnm}$$lt{doms}$$lt{coac}$$lt{curn}'.$$pname{$$users[$i]}.''.$$users[$i].''; + if ((ref($olddomcoord) eq 'ARRAY') && (ref($futuredomcoord) eq 'ARRAY')) { + if (grep(/^\Q$users->[$i]\E$/,@{$olddomcoord})) { + $output .= &mt('expired'); + } elsif (grep(/^\Q$users->[$i]\E$/,@{$futuredomcoord})) { + $output .= &mt('future'); + } else { + $output .= &mt('active'); + } + } + $output .= ''.$$status{$$users[$i]}.''; @@ -1290,12 +1327,13 @@ sub print_accessdate_table { 'freg' => 'for registered students added via automated enrollment', 'fnew' => 'for new students added when you update the class roster', 'ifad' => 'If automated adds are enabled, then when students are added their student roles will become active on the date set here for first access, and their roles will become inactive on the date set here for last access. These default access dates will be overridden for specific students if the institutional classlist data supplied to the automatic enrollment process includes entries for the startdate and enddate fields for those students.', - 'ncds' => 'changing default start and end access dates will affect future enrollments and also currently inactive students (i.e., those for whom access will begin in the future).', - 'tcha' => 'To change access dates for currently active students, use User Management -> "Manage Course Users" to display currently active students, then use the dropdown menu for "Action to take for selected users:" to choose "Change starting/ending dates", select the students to change, and click "Proceed".', + ); + $lt{'ncds'} = &mt('changing default start and end access dates will affect [_1]future enrollments[_2] and also [_1]currently inactive[_2] students (i.e., those for whom access will begin in the future).','',''); + $lt{'tcha'} = 'To change access dates for [_1]currently active[_2] students, use User Management -> "Manage Course Users" to display currently active students, then use the dropdown menu for "Action to take for selected users:" to choose "Change starting/ending dates", select the students to change, and click "Proceed".','',''); ); my $dateshow; if ( ($oldendshow eq '') && ($oldstartshow eq '') ) { - $dateshow = "
".&mt('Warning').". ".$lt{'cuno'}." "; + $dateshow = "
".&mt('Warning').". ".$lt{'cuno'}." "; if ($action eq 'setaccess') { $dateshow .= $lt{'ifyo'}."\n"; } elsif ($action eq 'updatenow') { @@ -1475,7 +1513,7 @@ sub print_chgsettings_response { } if ($autoadds || $autodrops) { $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you indicated that nightly "; + $warn_prefix = "
Warning. Although you indicated that nightly "; $warn_suffix = " should be enabled, additional action is required.
"; } if ($autoadds) { @@ -1573,7 +1611,7 @@ sub print_setdates_response { } } $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you set a start and end date for auto-enrollment, additional action is required.
"; + $warn_prefix = "
Warning. Although you set a start and end date for auto-enrollment, additional action is required.
"; unless ($warning eq '') { $response .= $warn_prefix.$warning; } @@ -1672,7 +1710,7 @@ start and end access dates for this cour } } $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you have set default first and last access dates for students who are added via automatic enrollment, additional action is required.
"; + $warn_prefix = "
Warning. Although you have set default first and last access dates for students who are added via automatic enrollment, additional action is required.
"; unless ($warning eq '') { $response .= $warn_prefix.$warning; } @@ -1745,7 +1783,7 @@ sub print_notify_response { } $response .= "\n"; } else { - $response = &mt('Notification of enrollment changes was not enabled as no [_1]s were selected as recipients.
',&Apache::lonnet::plaintext('cc')); + $response = &mt('Notification of enrollment changes was [_1]not enabled[_2]> as no [_3]s were selected as recipients.''','',&Apache::lonnet::plaintext('cc')).'
'; } } else { if ($currcount) { @@ -1857,7 +1895,7 @@ sub print_crosslistings_menu () { sub print_crosslistings_response () { my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; - my %settings = &Apache::lonnet::get('environment',['internal.crosslistings','internal.coursecode','internal.courseowner'],$dom,$crs); + my %settings = &Apache::lonnet::get('environment',['internal.crosslistings','internal.coursecode','internal.courseowner','internal.co-owners'],$dom,$crs); my @currxlists = (); my @xlists = (); my @allxlists = (); @@ -1869,6 +1907,7 @@ sub print_crosslistings_response () { my $xliststr = $settings{'internal.crosslistings'}; my $coursecode = $settings{'internal.coursecode'}; my $owner = $settings{'internal.courseowner'}; + my $coowners = $settings{'internal.co-owners'}; my $response = ''; my $warning = ''; my $warn_prefix = ''; @@ -1902,7 +1941,7 @@ sub print_crosslistings_response () { $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$env{"form.$xl"}); if ($coursecheck eq 'ok') { my $addcheck = ''; - $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$env{"form.$xl"},$owner); + $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$env{"form.$xl"},$owner,$coowners); if ($addcheck eq 'ok') { push @xlists,$env{"form.$xl"}.":".$env{"form.$lc_sec"}; } else { @@ -1980,7 +2019,7 @@ sub print_crosslistings_response () { if (@allxlists > 0) { $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you have selected crosslisted courses to contribute enrollment to this course, additional action is required.
"; + $warn_prefix = "
Warning. Although you have selected crosslisted courses to contribute enrollment to this course, additional action is required.
"; unless ($warning eq '') { $response .= $warn_prefix.$warning; } @@ -1992,7 +2031,7 @@ sub print_crosslistings_response () { sub print_sections_menu () { my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; - my %settings = &Apache::lonnet::get('environment',['internal.sectionnums','internal.coursecode','internal.courseowner'],$dom,$crs); + my %settings = &Apache::lonnet::get('environment',['internal.sectionnums','internal.coursecode','internal.courseowner','internal.co-owners'],$dom,$crs); my @currsections = (); my @sections = (); my @badowner = (); @@ -2006,6 +2045,7 @@ sub print_sections_menu () { my $warn_prefix = ""; my $coursecode = $settings{'internal.coursecode'}; my $owner = $settings{'internal.courseowner'}; + my $coowners = $settings{'internal.co-owners'}; if ($settings{'internal.sectionnums'} ne '') { @currsections = split(/,/,$settings{'internal.sectionnums'}); } @@ -2030,7 +2070,7 @@ sub print_sections_menu () { my $newsec = $coursecode.$env{"form.$secnum"}; my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec); if ($coursecheck eq 'ok') { - my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner); + my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner,$coowners); if ($addcheck eq 'ok') { push @sections,$env{"form.$secnum"}.":".$env{"form.$lc_sec"}; $seccount ++; @@ -2118,7 +2158,7 @@ sections which contribute to enrollment if ($seccount > 0) { $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you have selected sections to contribute enrollment to this course, additional action is required.
"; + $warn_prefix = "
Warning. Although you have selected sections to contribute enrollment to this course, additional action is required.
"; unless ($warning eq '') { $response .= $warn_prefix.$warning; } @@ -2174,7 +2214,7 @@ sections which contribute to enrollment sub print_sections_response () { my ($r,$realm,$dom,$crs,$action,$tasktitleref) = @_; - my %settings = &Apache::lonnet::get('environment',['internal.sectionnums','internal.coursecode','internal.courseowner'],$dom,$crs); + my %settings = &Apache::lonnet::get('environment',['internal.sectionnums','internal.coursecode','internal.courseowner','internal.co-owners'],$dom,$crs); my @currsections = (); my @sections = (); my @allsections = (); @@ -2186,6 +2226,7 @@ sub print_sections_response () { my $secstr = $settings{'internal.sectionnums'}; my $coursecode = $settings{'internal.coursecode'}; my $owner = $settings{'internal.courseowner'}; + my $coowners = $settings{'internal.co-owners'}; my $response = ''; my $putreply = ''; my $warning = ''; @@ -2216,7 +2257,7 @@ sub print_sections_response () { my $newsec = $coursecode.$env{"form.$sec"}; my $coursecheck = &Apache::lonnet::auto_validate_courseID($crs,$dom,$newsec); if ($coursecheck eq 'ok') { - my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner); + my $addcheck = &Apache::lonnet::auto_new_course($crs,$dom,$newsec,$owner,$coowners); if ($addcheck eq 'ok') { push @sections,$env{"form.$sec"}.":".$env{"form.$lc_sec"}; } else { @@ -2289,7 +2330,7 @@ sub print_sections_response () { if (@allsections > 0) { $warning = &warning_message($dom,$crs,$action); - $warn_prefix = "
Warning. Although you have selected sections to contribute enrollment to this course, additional action is required.
"; + $warn_prefix = "
Warning. Although you have selected sections to contribute enrollment to this course, additional action is required.
"; unless ($warning eq '') { $response .= $warn_prefix.$warning; }