--- loncom/interface/Attic/londropadd.pm 2004/05/13 21:03:16 1.110
+++ loncom/interface/Attic/londropadd.pm 2005/01/31 11:27:14 1.124
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.110 2004/05/13 21:03:16 matthew Exp $
+# $Id: londropadd.pm,v 1.124 2005/01/31 11:27:14 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -136,47 +136,61 @@ sub domain_form {
###############################################################
# Menu Phase One
sub print_main_menu {
- my $r=shift;
- my %Text = &Apache::lonlocal::texthash
- ('upload' => 'Upload a class list',
- 'enrollone' => 'Enroll a single student',
- 'modify' => 'Modify student data',
- 'view' => 'View Class List',
- 'drop' => 'Drop Students',
- 'populate' => 'Automated Enrollment Manager');
- my %help=();
- foreach ('Course_Drop_Student','Course_Add_Student',
- 'Course_Modify_Student_Data','Course_View_Class_List',
- 'Course_Create_Class_List') {
- $help{$_}=&Apache::loncommon::help_open_topic($_);
+ my ($r,$enrl_permission,$view_permission)=@_;
+ #
+ my ($cdom,$cnum) = split/_/,$ENV{'request.course.id'};
+ my @menu =
+ (
+ { text => 'Upload a class list',
+ help => 'Course_Create_Class_List',
+ action => 'upload',
+ permission => $enrl_permission,
+ },
+ { text => 'Enroll a single student',
+ help => 'Course_Add_Student',
+ action => 'enrollstudent',
+ permission => $enrl_permission,
+ },
+ { text => 'Modify student data',
+ help => 'Course_Modify_Student_Data',
+ action => 'modifystudent',
+ permission => $enrl_permission,
+ },
+ { text => 'View Class List',
+ help => 'Course_View_Class_List',
+ action => 'classlist',
+ permission => $view_permission,
+ },
+ { text => 'Drop Students',
+ help => 'Course_Drop_Student',
+ action => 'drop',
+ permission => $enrl_permission,
+ },
+ { text => 'Automated Enrollment Manager',
+ permission => &Apache::lonnet::auto_run($cnum,$cdom),
+ url => '/adm/populate',
+ },
+ );
+ my $menu_html = '';
+ foreach my $menu_item (@menu) {
+ next if (! $menu_item->{'permission'});
+ $menu_html.='
';
+ $menu_html.='';
+ if (exists($menu_item->{'url'})) {
+ $menu_html.=qq{};
+ } else {
+ $menu_html.=
+ qq{ };
+ }
+ $menu_html.= &mt($menu_item->{'text'}).' ';
+ if (exists($menu_item->{'help'})) {
+ $menu_html.=
+ &Apache::loncommon::help_open_topic($menu_item->{'help'});
+ }
+ $menu_html.='
'.$/;
}
-
- $r->print(<
-
-$Text{'upload'}
- $help{'Course_Create_Class_List'}
-
-
- $Text{'enrollone'}
- $help{'Course_Add_Student'}
-
-
- $Text{'modify'}
- $help{'Course_Modify_Student_Data'}
-
-
- $Text{'view'}
- $help{'Course_View_Class_List'}
-
-
- $Text{'drop'}
- $help{'Course_Drop_Student'}
-
-
- $Text{'populate'}
-
-END
+ $r->print($menu_html);
+ return;
}
###############################################################
@@ -304,7 +318,7 @@ END
return;
}
// alert('current.radiovalue = '+current.radiovalue);
- if (current.radiovalue == null || current.radiovalue == 'nochange') {
+ if (current.radiovalue == null || current.radiovalue == '' || current.radiovalue == 'nochange') {
// They did not check any of the login radiobuttons.
alert('$alert{'authen'}');
return;
@@ -756,7 +770,7 @@ sub enroll_single_student {
$ENV{'form.clast'},$ENV{'form.cgen'},
$ENV{'form.csec'},$enddate,
$startdate,$ENV{'form.forceid'},
- $desiredhost);
+ $desiredhost,$ENV{'form.emailaddress'});
if ($login_result =~ /^ok/) {
$r->print($login_result);
$r->print("
".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."
");
@@ -781,7 +795,7 @@ sub setup_date_selectors {
my ($starttime,$endtime,$mode) = @_;
if (! defined($starttime)) {
$starttime = time;
- unless ($mode eq 'createcourse') {
+ unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
if (exists($ENV{'course.'.$ENV{'request.course.id'}.
'.default_enrollment_start_date'})) {
$starttime = $ENV{'course.'.$ENV{'request.course.id'}.
@@ -805,12 +819,20 @@ sub setup_date_selectors {
my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
'enddate',
$endtime);
- if ($mode eq 'createcourse') {
+ if ($mode eq 'create_enrolldates') {
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',
- 'startdate',
+ 'startenroll',
$starttime);
$enddateform = &Apache::lonhtmlcommon::date_setter('ccrs',
- 'enddate',
+ 'endenroll',
+ $endtime);
+ }
+ if ($mode eq 'create_defaultdates') {
+ $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',
+ 'startaccess',
+ $starttime);
+ $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs',
+ 'endaccess',
$endtime);
}
return ($startdateform,$enddateform);
@@ -831,7 +853,7 @@ sub date_setting_table {
my $dateDefault = ''.
' '.
&mt('make these dates the default for future enrollment');
- if ($mode eq 'createcourse') {
+ if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
$dateDefault = ' ';
}
my $perpetual = ' '.&mt('no ending date').' ';
+ if ($mode eq 'create_enrolldates') {
+ $perpetual = ' ';
+ }
my $result = '';
$result .= "
+
END
return;
}
@@ -908,6 +937,8 @@ sub print_enroll_single_student_form {
#
my $username = $ENV{'form.cuname'};
my $domain = $ENV{'form.cudomain'};
+ $username=~s/\W//gs;
+ $domain=~s/\W//gs;
my $home = &Apache::lonnet::homeserver($username,$domain);
# $new_user flags whether we are creating a new user or using an old one
my $new_user = 1;
@@ -952,6 +983,7 @@ sub print_enroll_single_student_form {
'hs' => "Home Server",
'pswd' => "Password",
'psam' => "Please select an authentication mechanism",
+ 'mail' => "Email Address"
);
$user_data_html = <$lt{'udf'} $username\@$domain
@@ -966,6 +998,8 @@ sub print_enroll_single_student_form {
$lt{'hs'}:
$homeserver_form
+$lt{'mail'}:
+
$lt{'pswd'}
$lt{'psam'}
@@ -988,6 +1022,7 @@ END
'mn' => "Middle Name",
'ln' => "Last Name",
'gen' => "Generation",
+ 'mail' => "Email Address",
);
$user_data_html = <$lt{'udf'} $username\@$domain
@@ -1009,6 +1044,10 @@ END
+$lt{'mail'}:
+
+
+
END
}
@@ -1172,8 +1211,6 @@ sub print_html_classlist {
&show_class_list($r,'view','modify',
$ENV{'form.Status'},$classlist,$keylist);
} else {
- &Apache::lonnet::logthis('showing class list '.$ENV{'form.output'});
-
&show_class_list($r,$ENV{'form.output'},'aboutme',
$ENV{'form.Status'},$classlist,$keylist);
}
@@ -1192,16 +1229,19 @@ sub show_class_list {
my ($CSVfile,$CSVfilename);
#
my $sortby = $ENV{'form.sortby'};
- if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) {
+ if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) {
$sortby = 'username';
}
# Print out header
- $r->print(<print(<
+END
+ }
+ $r->print(<
END
- if ($mode eq 'html' || $mode eq 'view') {
+ if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {
if ($linkto eq 'aboutme') {
$r->print(&mt('Select a user name to view the users personal page.'));
} elsif ($linkto eq 'modify') {
@@ -1214,14 +1254,30 @@ END
'sec' => "section",
'start' => "start date",
'end' => "end date",
+ 'type' => "enroll type/action"
);
- $r->print(<print(<
+END
+ }
+ $r->print("
-Count
-
+
+ ");
+ if ($mode eq 'autoenroll') {
+ $r->print("
+ $lt{'type'}
+ ");
+ } else {
+ $r->print("
+Count
+ ");
+ }
+ $r->print(<
$lt{'usrn'}
$lt{'dom'}
@@ -1236,7 +1292,7 @@ END
$lt{'end'}
-
+
END
} elsif ($mode eq 'csv') {
#
@@ -1306,6 +1362,10 @@ END
lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
} (keys(%$classlist));
my $studentcount = 0;
+ my $autocount = 0;
+ my $manualcount = 0;
+ my $unlockcount = 0;
+ my $lockcount = 0;
foreach my $student (@Sorted_Students) {
my $sdata = $classlist->{$student};
my $username = $sdata->[$index{'username'}];
@@ -1316,11 +1376,43 @@ END
my $status = $sdata->[$index{'status'}];
my $start = $sdata->[$index{'start'}];
my $end = $sdata->[$index{'end'}];
+ my $type = $sdata->[$index{'type'}];
next if (($statusmode ne 'Any') && ($status ne $statusmode));
- if ($mode eq 'view' || $mode eq 'html') {
- $start = &Apache::lonlocal::locallocaltime($start);
- $end = &Apache::lonlocal::locallocaltime($end);
- $r->print("\n ".(++$studentcount)." \n ");
+ if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
+ if (! defined($start) || $start == 0) {
+ $start = &mt('none');
+ } else {
+ $start = &Apache::lonlocal::locallocaltime($start);
+ }
+ if (! defined($end) || $end == 0) {
+ $end = &mt('none');
+ } else {
+ $end = &Apache::lonlocal::locallocaltime($end);
+ }
+ $r->print(" \n ");
+ if ($mode eq 'autoenroll') {
+ my $lockedtype = $sdata->[$index{'lockedtype'}];
+ $studentcount++;
+ my $cellentry;
+ if ($type eq 'auto') {
+ $cellentry = ''.&mt('auto').' Change';
+ $autocount ++;
+ } else {
+ $cellentry = '';
+ }
+ $r->print("$cellentry \n ");
+ } else {
+ $r->print(" ".(++$studentcount)." \n ");
+ }
if ($linkto eq 'nothing') {
$r->print($username);
} elsif ($linkto eq 'aboutme') {
@@ -1344,13 +1436,21 @@ END
$section
$start
$end
-
+
END
} elsif ($mode eq 'csv') {
next if (! defined($CSVfile));
# no need to bother with $linkto
- $start = &Apache::lonlocal::locallocaltime($start);
- $end = &Apache::lonlocal::locallocaltime($end);
+ if (! defined($start) || $start == 0) {
+ $start = &mt('none');
+ } else {
+ $start = &Apache::lonlocal::locallocaltime($start);
+ }
+ if (! defined($end) || $end == 0) {
+ $end = &mt('none');
+ } else {
+ $end = &Apache::lonlocal::locallocaltime($end);
+ }
my @line = ();
foreach ($username,$domain,$id,$name,$section,$start,$end) {
push @line,&Apache::loncommon::csv_translate($_);
@@ -1372,7 +1472,7 @@ END
$row++;
}
}
- if ($mode eq 'view' || $mode eq 'html') {
+ if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
$r->print('
');
} elsif ($mode eq 'excel') {
$excel_workbook->close();
@@ -1385,6 +1485,10 @@ END
"\n");
$r->rflush();
}
+ if ($mode eq 'autoenroll') {
+ return ($studentcount,$autocount,$manualcount,$lockcount,$unlockcount);
+ }
+ return;
}
@@ -1841,7 +1945,7 @@ END
END
}
$r->print(' ');
- my %lt=&Apache::lonlocal::texthash(
+ %lt=&Apache::lonlocal::texthash(
'dp' => "Drop Students",
'ca' => "check all",
'ua' => "uncheck all",
@@ -2181,14 +2285,23 @@ sub handler {
text=>"Enrollment Manager",
faq=>9,bug=>'Instructor Interface',});
# Needs to be in a course
- if (! (($ENV{'request.course.fn'}) &&
- (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) {
- # Not in a course, or not allowed to modify parms
+ if (! ($ENV{'request.course.fn'})) {
+ # Not in a course
$ENV{'user.error.msg'}=
"/adm/dropadd:cst:0:0:Cannot drop or add students";
return HTTP_NOT_ACCEPTABLE;
}
#
+ my $view_permission =
+ &Apache::lonnet::allowed('vcl',$ENV{'request.course.id'});
+ my $enrl_permission =
+ &Apache::lonnet::allowed('cst',$ENV{'request.course.id'});
+ if (! $view_permission && ! $enrl_permission) {
+ $ENV{'user.error.msg'}=
+ "/adm/dropadd:cst:0:0:Cannot drop or add students";
+ return HTTP_NOT_ACCEPTABLE;
+ }
+ #
# Only output the header information if they did not request csv format
#
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
@@ -2202,13 +2315,13 @@ sub handler {
if (! exists($ENV{'form.action'})) {
$r->print(&Apache::lonhtmlcommon::breadcrumbs
(undef,'Enrollment Manager'));
- &print_main_menu($r);
- } elsif ($ENV{'form.action'} eq 'upload') {
+ &print_main_menu($r,$enrl_permission,$view_permission);
+ } elsif ($ENV{'form.action'} eq 'upload' && $enrl_permission) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/dropadd?action=upload&state=',
text=>"Upload Classlist"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Upload Classlist'));
+ (undef,'Upload Classlist','Course_Create_Class_List'));
if (! exists($ENV{'form.state'})) {
&print_first_courselist_upload_form($r);
} elsif ($ENV{'form.state'} eq 'got_file') {
@@ -2222,12 +2335,12 @@ sub handler {
} else {
&print_first_courselist_upload_form($r);
}
- } elsif ($ENV{'form.action'} eq 'drop') {
+ } elsif ($ENV{'form.action'} eq 'drop' && $enrl_permission) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/dropadd?action=drop',
text=>"Drop Students"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Drop Students'));
+ (undef,'Drop Students','Course_Drop_Student'));
if (! exists($ENV{'form.state'})) {
&print_drop_menu($r);
} elsif ($ENV{'form.state'} eq 'done') {
@@ -2235,12 +2348,12 @@ sub handler {
} else {
&print_drop_menu($r);
}
- } elsif ($ENV{'form.action'} eq 'enrollstudent') {
+ } elsif ($ENV{'form.action'} eq 'enrollstudent' && $enrl_permission) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/dropadd?action=enrollstudent',
text=>"Enroll Student"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Enroll Student'));
+ (undef,'Enroll Student','Course_Add_Student'));
if (! exists($ENV{'form.state'})) {
&get_student_username_domain_form($r);
} elsif ($ENV{'form.state'} eq 'gotusername') {
@@ -2250,12 +2363,12 @@ sub handler {
} else {
&get_student_username_domain_form($r);
}
- } elsif ($ENV{'form.action'} eq 'classlist') {
+ } elsif ($ENV{'form.action'} eq 'classlist' && $view_permission) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/dropadd?action=classlist',
text=>"View Classlist"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'View Classlist'));
+ (undef,'View Classlist','Course_View_Class_List'));
if (! exists($ENV{'form.state'})) {
&print_html_classlist($r,undef);
} elsif ($ENV{'form.state'} eq 'csv') {
@@ -2265,12 +2378,12 @@ sub handler {
} else {
&print_html_classlist($r,undef);
}
- } elsif ($ENV{'form.action'} eq 'modifystudent') {
+ } elsif ($ENV{'form.action'} eq 'modifystudent' && $enrl_permission) {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/dropadd?action=modifystudent',
text=>"Modify Student Data"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Modify Student Data'));
+ (undef,'Modify Student Data','Course_Modify_Student_Data'));
if (! exists($ENV{'form.state'})) {
&print_html_classlist($r);
} elsif ($ENV{'form.state'} eq 'selected') {
@@ -2287,7 +2400,7 @@ sub handler {
"Someone should fix this.");
$r->print(&Apache::lonhtmlcommon::breadcrumbs
(undef,'Enrollment Manager'));
- &print_main_menu($r);
+ &print_main_menu($r,$enrl_permission,$view_permission);
}
#
# Finish up