'.$/;
+ }
+ $r->print($menu_html);
+ return;
}
###############################################################
@@ -182,23 +234,37 @@ sub hidden_input {
sub print_upload_manager_header {
my ($r,$datatoken,$distotal,$krbdefdom)=@_;
my $javascript;
- if (! exists($ENV{'form.upfile_associate'})) {
- $ENV{'form.upfile_associate'} = 'forward';
+ #
+ if (! exists($env{'form.upfile_associate'})) {
+ $env{'form.upfile_associate'} = 'forward';
}
- if ($ENV{'form.associate'} eq 'Reverse Association') {
- if ( $ENV{'form.upfile_associate'} ne 'reverse' ) {
- $ENV{'form.upfile_associate'} = 'reverse';
+ if ($env{'form.associate'} eq 'Reverse Association') {
+ if ( $env{'form.upfile_associate'} ne 'reverse' ) {
+ $env{'form.upfile_associate'} = 'reverse';
} else {
- $ENV{'form.upfile_associate'} = 'forward';
+ $env{'form.upfile_associate'} = 'forward';
}
}
- if ($ENV{'form.upfile_associate'} eq 'reverse') {
+ if ($env{'form.upfile_associate'} eq 'reverse') {
$javascript=&upload_manager_javascript_reverse_associate();
} else {
$javascript=&upload_manager_javascript_forward_associate();
}
- my $javascript_validations=&javascript_validations('auth',$krbdefdom);
- my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':'');
+ #
+ # Deal with restored settings
+ my $password_choice = '';
+ if (exists($env{'form.ipwd_choice'}) &&
+ $env{'form.ipwd_choice'} ne '') {
+ # If a column was specified for password, assume it is for an
+ # internal password. This is a bug waiting to be filed (could be
+ # local or krb auth instead of internal) but I do not have the
+ # time to mess around with this now.
+ $password_choice = 'int';
+ }
+ #
+ my $javascript_validations=&javascript_validations('auth',$krbdefdom,
+ $password_choice);
+ my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':'');
$r->print('
'.&mt('Uploading Class List')."
\n".
"\n".
'
'.&mt('Identify fields')."
\n");
@@ -211,14 +277,14 @@ sub print_upload_manager_header {
&hidden_input('state','got_file').
&hidden_input('associate','').
&hidden_input('datatoken',$datatoken).
- &hidden_input('fileupload',$ENV{'form.fileupload'}).
- &hidden_input('upfiletype',$ENV{'form.upfiletype'}).
- &hidden_input('upfile_associate',$ENV{'form.upfile_associate'}));
+ &hidden_input('fileupload',$env{'form.fileupload'}).
+ &hidden_input('upfiletype',$env{'form.upfiletype'}).
+ &hidden_input('upfile_associate',$env{'form.upfile_associate'}));
$r->print('');
- $r->print(''.
- &mt('Ignore First Line'));
+ $r->print('');
$r->print("\n".
'');
@@ -227,17 +293,27 @@ sub print_upload_manager_header {
###############################################################
###############################################################
sub javascript_validations {
- my ($mode,$krbdefdom)=@_;
+ my ($mode,$krbdefdom,$curr_authtype,$curr_authfield)=@_;
my $authheader;
if ($mode eq 'auth') {
my %param = ( formname => 'studentform',
- kerb_def_dom => $krbdefdom );
+ kerb_def_dom => $krbdefdom,
+ curr_authtype => $curr_authtype);
$authheader = &Apache::loncommon::authform_header(%param);
} elsif ($mode eq 'createcourse') {
my %param = ( formname => 'ccrs',
- kerb_def_dom => $krbdefdom );
+ kerb_def_dom => $krbdefdom,
+ curr_authtype => $curr_authtype );
+ $authheader = &Apache::loncommon::authform_header(%param);
+ } elsif ($mode eq 'modifycourse') {
+ my %param = ( formname => 'cmod',
+ kerb_def_dom => $krbdefdom,
+ mode => 'modifycourse',
+ curr_authtype => $curr_authtype,
+ curr_autharg => $curr_authfield );
$authheader = &Apache::loncommon::authform_header(%param);
}
+
my %alert = &Apache::lonlocal::texthash
(username => 'You need to specify the username field.',
@@ -246,7 +322,7 @@ sub javascript_validations {
ipass => 'You need to specify the initial password.',
name => 'The optional name field was not specified.',
snum => 'The optional student number field was not specified.',
- section => 'The optional section or group field was not specified.',
+ section => 'The optional section field was not specified.',
email => 'The optional email address field was not specified.',
continue => 'Continue enrollment?',
);
@@ -255,24 +331,59 @@ sub javascript_validations {
my $function_name =(< $krbdefdom,
kerb_def_auth => $krbdef
);
+ if (exists($env{'form.ipwd_choice'}) &&
+ defined($env{'form.ipwd_choice'}) &&
+ $env{'form.ipwd_choice'} ne '') {
+ $param{'curr_authtype'} = 'int';
+ }
my $krbform = &Apache::loncommon::authform_kerberos(%param);
my $intform = &Apache::loncommon::authform_internal(%param);
my $locform = &Apache::loncommon::authform_local(%param);
@@ -520,6 +639,7 @@ sub print_upload_manager_footer {
$Str .= '
'.&mt('Login Type')."
\n";
$Str .= "
\n".
&mt('Note: this will not take effect if the user already exists').
+ &Apache::loncommon::help_open_topic('Auth_Options').
"
\n";
+ $Str .= ''." \n";
$Str .= &mt('Note: for large courses, this operation may be time '.
'consuming');
@@ -549,40 +670,59 @@ sub print_upload_manager_footer {
###############################################################
sub print_upload_manager_form {
my $r=shift;
+
my $firstLine;
my $datatoken;
- if (!$ENV{'form.datatoken'}) {
+ if (!$env{'form.datatoken'}) {
$datatoken=&Apache::loncommon::upfile_store($r);
} else {
- $datatoken=$ENV{'form.datatoken'};
+ $datatoken=$env{'form.datatoken'};
&Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
- if($ENV{'form.noFirstLine'}){
+ if($env{'form.noFirstLine'}){
$firstLine=shift(@records);
}
my $total=$#records;
my $distotal=$total+1;
my $today=time;
my $halfyear=$today+15552000;
- my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ #
+ # Restore memorized settings
+ &Apache::loncommon::restore_course_settings
+ ('enrollment_upload',{ 'username_choice' => 'scalar', # column settings
+ 'names_choice' => 'scalar',
+ 'fname_choice' => 'scalar',
+ 'mname_choice' => 'scalar',
+ 'lname_choice' => 'scalar',
+ 'gen_choice' => 'scalar',
+ 'id_choice' => 'scalar',
+ 'sec_choice' => 'scalar',
+ 'ipwd_choice' => 'scalar',
+ 'email_choice' => 'scalar',
+ });
+ #
+ # Determine kerberos parameters as appropriate
+ my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
my ($krbdef,$krbdefdom) =
&Apache::loncommon::get_kerberos_defaults($defdom);
+ #
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
my $i;
my $keyfields;
if ($total>=0) {
- my @field=(['username',&mt('Username')],
- ['names',&mt('Last Name, First Names')],
- ['fname',&mt('First Name')],
- ['mname',&mt('Middle Names/Initials')],
- ['lname',&mt('Last Name')],
- ['gen',&mt('Generation')],
- ['id',&mt('ID/Student Number')],
- ['sec',&mt('Group/Section')],
- ['ipwd',&mt('Initial Password')],
- ['email',&mt('EMail Address')]);
- if ($ENV{'form.upfile_associate'} eq 'reverse') {
+ my @field=
+ (['username',&mt('Username'), $env{'form.username_choice'}],
+ ['names',&mt('Last Name, First Names'),$env{'form.names_choice'}],
+ ['fname',&mt('First Name'), $env{'form.fname_choice'}],
+ ['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}],
+ ['lname',&mt('Last Name'), $env{'form.lname_choice'}],
+ ['gen', &mt('Generation'), $env{'form.gen_choice'}],
+ ['id', &mt('ID/Student Number'),$env{'form.id_choice'}],
+ ['sec', &mt('Section'), $env{'form.sec_choice'}],
+ ['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}],
+ ['email',&mt('EMail Address'), $env{'form.email_choice'}]);
+ if ($env{'form.upfile_associate'} eq 'reverse') {
&Apache::loncommon::csv_print_samples($r,\@records);
$i=&Apache::loncommon::csv_print_select_table($r,\@records,
\@field);
@@ -604,31 +744,35 @@ sub print_upload_manager_form {
###############################################################
###############################################################
sub enroll_single_student {
- my $r=shift;
+ my ($r,$srcharray) = @_;
# Remove non alphanumeric values from section
- $ENV{'form.csec'}=~s/\W//g;
+ $env{'form.csec'}=~s/\W//g;
#
# We do the dates first because the action of making them the defaul
- # in the course is entirely seperate from the action of enrolling the
+ # in the course is entirely separate from the action of enrolling the
# student. Also, a failure in setting the dates as default is not fatal
# to the process of enrolling / modifying a student.
my ($startdate,$enddate) = &get_dates_from_form();
- if ($ENV{'form.makedatesdefault'}) {
+ if ($env{'form.makedatesdefault'}) {
$r->print(&make_dates_default($startdate,$enddate));
}
$r->print('
");
+ if (ref($srcharray) eq 'ARRAY') {
+ foreach my $item (@{$srcharray},'ccuname','ccdomain') {
+ $r->print(''."\n");
+ }
+ }
+ foreach my $item ('sortby','seluname','seludom') {
+ if (exists($env{'form.'.$item})) {
+ $r->print(''."\n");
+ }
+ }
+ $r->print(''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ '');
}
sub setup_date_selectors {
my ($starttime,$endtime,$mode) = @_;
if (! defined($starttime)) {
$starttime = time;
- unless ($mode eq 'createcourse') {
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ 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'}.
+ $starttime = $env{'course.'.$env{'request.course.id'}.
'.default_enrollment_start_date'};
}
}
@@ -701,9 +861,9 @@ sub setup_date_selectors {
if (! defined($endtime)) {
$endtime = time+(6*30*24*60*60); # 6 months from now, approx
unless ($mode eq 'createcourse') {
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ if (exists($env{'course.'.$env{'request.course.id'}.
'.default_enrollment_end_date'})) {
- $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
+ $endtime = $env{'course.'.$env{'request.course.id'}.
'.default_enrollment_end_date'};
}
}
@@ -714,12 +874,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);
@@ -728,7 +896,7 @@ sub setup_date_selectors {
sub get_dates_from_form {
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate');
- if ($ENV{'form.no_end_date'}) {
+ if ($env{'form.no_end_date'}) {
$enddate = 0;
}
return ($startdate,$enddate);
@@ -738,16 +906,20 @@ sub date_setting_table {
my ($starttime,$endtime,$mode) = @_;
my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode);
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 = '';
+ $perpetual.= ' /> '.&mt('no ending date').'';
+ if ($mode eq 'create_enrolldates') {
+ $perpetual = ' ';
+ }
my $result = '';
$result .= "
\n";
$result .= '
'.&mt('Starting Date').'
'.
@@ -763,8 +935,8 @@ sub date_setting_table {
sub make_dates_default {
my ($startdate,$enddate) = @_;
my $result = '';
- my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
- my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
my $put_result = &Apache::lonnet::put('environment',
{'default_enrollment_start_date'=>$startdate,
'default_enrollment_end_date' =>$enddate},$dom,$crs);
@@ -772,7 +944,8 @@ sub make_dates_default {
$result .= "Set default start and end dates for course ";
#
# Refresh the course environment
- &Apache::lonnet::coursedescription($ENV{'request.course.id'});
+ &Apache::lonnet::coursedescription($env{'request.course.id'},
+ {'freshen_cache' => 1});
} else {
$result .= &mt('Unable to set default dates for course').":".$put_result.
' ';
@@ -784,9 +957,23 @@ sub make_dates_default {
## Single student enrollment routines (some of them)
##
sub get_student_username_domain_form {
- my $r = shift;
- my $domform = &Apache::loncommon::select_dom_form
- ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0);
+ my ($r,$elements,$response,$srch,$forcenewuser) = @_;
+ my $loaditems = {
+ 'onload' => "javascript:setFormElements(document.studentform)",
+ };
+ $r->print(&header(undef,$loaditems));
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:backPage(document.studentform,'','')",
+ text=>"Single user search"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
+ 'Course_Add_Student'));
+ my $defdom=$env{'request.role.domain'};
+
+ my $jscript = &Apache::loncommon::studentbrowser_javascript()."\n".
+ ''."\n";
+
my %lt=&Apache::lonlocal::texthash(
'eos' => "Enroll One Student",
'usr' => "Username",
@@ -794,30 +981,48 @@ sub get_student_username_domain_form {
'been' => "Begin Enrollment",
);
$r->print(<
-
+$jscript
$lt{'eos'}
-
-
$lt{'usr'}:
-
-
$lt{'dom'}:
-
$domform
-
-
-
-
-
END
+ $r->print(&single_user_entry_form($defdom,$srch,$forcenewuser));
return;
}
+sub single_user_entry_form {
+ my ($dom,$srch,$forcenewuser) = @_;
+ my $userpicker =
+ &Apache::loncommon::user_picker($dom,$srch,$forcenewuser,
+ 'document.studentform');
+ my $srchbutton = &mt('Search');
+ my $output = <<"ENDDOCUMENT";
+
+
+
+$userpicker
+
+ENDDOCUMENT
+ return $output;
+}
+
sub print_enroll_single_student_form {
- my $r=shift;
+ my ($r,$jscript,$ccuname,$ccdomain,$srch) = @_;
+ $r->print(&header($jscript));
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:backPage(document.studentform,'','')",
+ text=>"Single user search"});
+ if ($env{'form.phase'} eq 'userpicked') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:backPage(document.studentform,'get_user_info','select')",
+ text=>"Select user",});
+ }
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:backPage(document.studentform,'$env{'form.phase'}','modify')",
+ text=>"Set enrollment",});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enroll Student',
+ 'Course_Add_Student'));
$r->print("
".&mt('Enroll One Student')."
");
#
- my $username = $ENV{'form.cuname'};
- my $domain = $ENV{'form.cudomain'};
- my $home = &Apache::lonnet::homeserver($username,$domain);
+ my $home = &Apache::lonnet::homeserver($ccuname,$ccdomain);
# $new_user flags whether we are creating a new user or using an old one
my $new_user = 1;
if ($home ne 'no_host') {
@@ -827,10 +1032,31 @@ sub print_enroll_single_student_form {
my $user_data_html = '';
my $javascript_validations = '';
if ($new_user) {
- my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $usertoadd;
+ my $instsrch = {
+ srchin => 'instd',
+ srchby => 'uname',
+ srchtype => 'exact',
+ srchterm => $ccuname,
+ srchdomain => $ccdomain,
+ };
+ if (($instsrch->{'srchterm'} ne '') && ($instsrch->{'srchdomain'} ne '')) {
+ $usertoadd = $instsrch->{'srchterm'}.':'.$instsrch->{'srchdomain'};
+ }
+ my (%dirsrch_results,%inst_results);
+ if ($usertoadd) {
+ if (&Apache::loncreateuser::directorysrch_check($instsrch) eq 'ok') {
+ %dirsrch_results = &Apache::lonnet::inst_directory_query($instsrch);
+ if (ref($dirsrch_results{$usertoadd}) eq 'HASH') {
+ %inst_results = %{$dirsrch_results{$usertoadd}};
+ }
+ }
+ }
+
+ my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
# Set up authentication forms
my ($krbdef,$krbdefdom) =
- &Apache::loncommon::get_kerberos_defaults($domain);
+ &Apache::loncommon::get_kerberos_defaults($ccdomain);
$javascript_validations=&javascript_validations('auth',$krbdefdom);
my %param = ( formname => 'document.studentform',
kerb_def_dom => $krbdefdom,
@@ -842,7 +1068,7 @@ sub print_enroll_single_student_form {
#
# Set up domain selection form
my $homeserver_form = '';
- my %servers = &Apache::loncommon::get_library_servers($domain);
+ my %servers = &Apache::lonnet::get_servers($ccdomain,'library');
$homeserver_form = '