--- loncom/interface/loncreateuser.pm 2008/08/26 23:20:22 1.249.2.6
+++ loncom/interface/loncreateuser.pm 2012/02/06 04:50:52 1.358.4.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.249.2.6 2008/08/26 23:20:22 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.358.4.1 2012/02/06 04:50:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,11 +33,13 @@ package Apache::loncreateuser;
=head1 NAME
-Apache::loncreateuser - handler to create users and custom roles
+Apache::loncreateuser.pm
=head1 SYNOPSIS
-Apache::loncreateuser provides an Apache handler for creating users,
+ Handler to create users and custom roles
+
+ Provides an Apache handler for creating users,
editing their login parameters, roles, and removing roles, and
also creating and assigning custom roles.
@@ -49,13 +51,14 @@ In LON-CAPA, roles are actually collecti
Assistant", "Course Coordinator", and other such roles are really just
collection of privileges that are useful in many circumstances.
-Creating custom roles can be done by the Domain Coordinator through
-the Create User functionality. That screen will show all privileges
-that can be assigned to users. For a complete list of privileges,
-please see C.
+Custom roles can be defined by a Domain Coordinator, Course Coordinator
+or Community Coordinator via the Manage User functionality.
+The custom role editor screen will show all privileges which can be
+assigned to users. For a complete list of privileges, please see
+C.
-Custom role definitions are stored in the C file of the role
-author.
+Custom role definitions are stored in the C file of the creator
+of the role.
=cut
@@ -66,6 +69,7 @@ use Apache::loncommon;
use Apache::lonlocal;
use Apache::longroup;
use Apache::lonuserutils;
+use Apache::loncoursequeueadmin;
use LONCAPA qw(:DEFAULT :match);
my $loginscript; # piece of javascript used in two separate instances
@@ -107,6 +111,7 @@ sub initialize_authen_forms {
sub auth_abbrev {
my %abv_auth = (
+ krb5 => 'krb',
krb4 => 'krb',
internal => 'int',
localuth => 'loc',
@@ -120,11 +125,12 @@ sub auth_abbrev {
sub portfolio_quota {
my ($ccuname,$ccdomain) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'disk' => "Disk space allocated to user's portfolio files",
- 'cuqu' => "Current quota",
- 'cust' => "Custom quota",
- 'defa' => "Default",
- 'chqu' => "Change quota",
+ 'usrt' => "User Tools",
+ 'disk' => "Disk space allocated to user's portfolio files",
+ 'cuqu' => "Current quota",
+ 'cust' => "Custom quota",
+ 'defa' => "Default",
+ 'chqu' => "Change quota",
);
my ($currquota,$quotatype,$inststatus,$defquota) =
&Apache::loncommon::get_user_quota($ccuname,$ccdomain);
@@ -139,6 +145,7 @@ sub portfolio_quota {
$custom_off = ' checked="checked" ';
my $quota_javascript = <<"END_SCRIPT";
END_SCRIPT
if ($quotatype eq 'custom') {
@@ -173,34 +181,305 @@ END_SCRIPT
" affiliation ([_2]).",$defquota,$longinsttype);
}
}
- my $output = $quota_javascript.
- '
');
+ } else {
+ $r->print($response.'');
+ }
}
sub print_user_query_page {
- my ($r,$caller) = @_;
+ my ($r,$caller,$brcrum) = @_;
# FIXME - this is for a network-wide name search (similar to catalog search)
# To use frames with similar behavior to catalog/portfolio search.
# To be implemented.
@@ -518,11 +919,11 @@ sub print_user_query_page {
}
sub print_user_modification_page {
- my ($r,$ccuname,$ccdomain,$srch,$response,$context,$permission) = @_;
+ my ($r,$ccuname,$ccdomain,$srch,$response,$context,$permission,$crstype,$brcrum) = @_;
if (($ccuname eq '') || ($ccdomain eq '')) {
my $usermsg = &mt('No username and/or domain provided.');
$env{'form.phase'} = '';
- &print_username_entry_form($r,$context,$usermsg);
+ &print_username_entry_form($r,$context,$usermsg,'','',$crstype,$brcrum);
return;
}
my ($form,$formname);
@@ -537,28 +938,40 @@ sub print_user_modification_page {
my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);
my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain);
if ($uhome eq 'no_host') {
- my $usertype;
+ my $lc_ccuname = lc($ccuname);
+ if ($lc_ccuname ne $ccuname) {
+ $uhome = &Apache::lonnet::homeserver($lc_ccuname,$ccdomain);
+ $ccuname = $lc_ccuname;
+ }
+ }
+ if ($uhome eq 'no_host') {
my ($rules,$ruleorder) =
&Apache::lonnet::inst_userrules($ccdomain,'username');
- $usertype =
- &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules);
+ my $usertype =
+ &Apache::lonuserutils::check_usertype($ccdomain,$ccuname,$rules,
+ \%curr_rules,\%got_rules);
my $cancreate =
&Apache::lonuserutils::can_create_user($ccdomain,$context,
$usertype);
if (!$cancreate) {
- my $helplink = ' href="javascript:helpMenu('."'display'".')"';
+ my $helplink = 'javascript:helpMenu('."'display'".')';
my %usertypetext = (
official => 'institutional',
unofficial => 'non-institutional',
);
my $response;
if ($env{'form.origform'} eq 'crtusername') {
- $response = ''.&mt('No match was found for the username ([_1]) in LON-CAPA domain: [_2]',$ccuname,$ccdomain).
+ $response = ''.&mt('No match found for the username [_1] in LON-CAPA domain: [_2]',''.$ccuname.'',$ccdomain).
' ';
}
- $response .= ''.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.&mt('Contact the helpdesk for assistance.',$helplink).'
';
+ $response .= '
'
+ .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
+ .' '
+ .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
+ ,'','')
+ .'
';
}
$output .= &Apache::lonhtmlcommon::row_closure(1);
}
}
$output .= &Apache::lonhtmlcommon::end_pick_box().
' '
+ .&mt('Save').'" onclick="validate_types(this.form);" />'
.'';
$r->print($output);
return;
@@ -3594,12 +5066,12 @@ sub visible_in_cat {
my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
my ($cathash,%settable,@vismsgs,$cansetvis);
my %visactions = &Apache::lonlocal::texthash(
- vis => 'Your course currently appears in the Course Catalog for this domain.',
+ vis => 'Your course/community currently appears in the Course/Community Catalog for this domain.',
gen => 'Courses can be both self-cataloging, based on an institutional code (e.g., fs08phy231), or can be assigned categories from a hierarchy defined for the domain.',
- miss => 'Your course does not currently appear in the Course Catalog for this domain.',
+ miss => 'Your course/community does not currently appear in the Course/Community Catalog for this domain.',
yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding your course.',
coca => 'Courses can be absent from the Catalog, because they do not have an institutional code, have no assigned category, or have been specifically excluded.',
- make => 'Make any changes to self-enrollment settings below, click "Save changes", then take action to include the course in the Catalog:',
+ make => 'Make any changes to self-enrollment settings below, click "Save", then take action to include the course in the Catalog:',
take => 'Take the following action to ensure the course appears in the Catalog:',
dc_unhide => 'Ask a domain coordinator to change the "Exclude from course catalog" setting.',
dc_addinst => 'Ask a domain coordinator to enable display the catalog of "Official courses (with institutional codes)".',
@@ -3609,9 +5081,9 @@ sub visible_in_cat {
dc_chgcat => 'Ask a domain coordinator to change the category assigned to the course, as the one currently assigned is no longer used in the domain',
dc_addcat => 'Ask a domain coordinator to assign a category to the course.',
);
- $visactions{'unhide'} = &mt('Use [_1]Set course environment[_2] to change the "Exclude from course catalog" setting.','','');
- $visactions{'chgcat'} = &mt('Use [_1]Set course environment[_2] to change the category assigned to the course, as the one currently assigned is no longer used in the domain.','','');
- $visactions{'addcat'} = &mt('Use [_1]Set course environment[_2] to assign a category to the course.','','');
+ $visactions{'unhide'} = &mt('Use [_1]Categorize course[_2] to change the "Exclude from course catalog" setting.','','"');
+ $visactions{'chgcat'} = &mt('Use [_1]Categorize course[_2] to change the category assigned to the course, as the one currently assigned is no longer used in the domain.','"','"');
+ $visactions{'addcat'} = &mt('Use [_1]Categorize course[_2] to assign a category to the course.','"','"');
if (ref($domconf{'coursecategories'}) eq 'HASH') {
if ($domconf{'coursecategories'}{'togglecats'} eq 'crs') {
$settable{'togglecats'} = 1;
@@ -3621,16 +5093,16 @@ sub visible_in_cat {
}
$cathash = $domconf{'coursecategories'}{'cats'};
}
- if ($settable{'togglecats'} && $settable{'categories'}) {
- $cansetvis = &mt('You are able to both assign a course category and choose to exclude this course from the catalog.');
+ if ($settable{'togglecats'} && $settable{'categorize'}) {
+ $cansetvis = &mt('You are able to both assign a course category and choose to exclude this course from the catalog.');
} elsif ($settable{'togglecats'}) {
- $cansetvis = &mt('You are able to choose to exclude this course from the catalog, but only a Domain Coordinator may assign a course category.');
- } elsif ($settable{'categories'}) {
- $cansetvis = &mt('You may assign a course category, but only a Domain Coordinator may choose to exclude this course from the catalog.');
+ $cansetvis = &mt('You are able to choose to exclude this course from the catalog, but only a Domain Coordinator may assign a course category.');
+ } elsif ($settable{'categorize'}) {
+ $cansetvis = &mt('You may assign a course category, but only a Domain Coordinator may choose to exclude this course from the catalog.');
} else {
- $cansetvis = &mt('Only a Domain Coordinator may assign a course category or choose to exclude this course from the catalog.');
+ $cansetvis = &mt('Only a Domain Coordinator may assign a course category or choose to exclude this course from the catalog.');
}
-
+
my %currsettings =
&Apache::lonnet::get('environment',['hidefromcat','categories','internal.coursecode'],
$cdom,$cnum);
@@ -3640,7 +5112,7 @@ sub visible_in_cat {
$cathash = $domconf{'coursecategories'}{'cats'};
if (ref($cathash) eq 'HASH') {
if ($cathash->{'instcode::0'} eq '') {
- push(@vismsgs,'dc_addinst');
+ push(@vismsgs,'dc_addinst');
} else {
$visible = 1;
}
@@ -3679,7 +5151,7 @@ sub visible_in_cat {
}
}
if (!$matched) {
- if ($settable{'categories'}) {
+ if ($settable{'categorize'}) {
push(@vismsgs,'chgcat');
} else {
push(@vismsgs,'dc_chgcat');
@@ -3690,9 +5162,9 @@ sub visible_in_cat {
}
} else {
if (ref($cathash) eq 'HASH') {
- if ((keys(%{$cathash}) > 1) ||
+ if ((keys(%{$cathash}) > 1) ||
(keys(%{$cathash}) == 1) && ($cathash->{'instcode::0'} eq '')) {
- if ($settable{'categories'}) {
+ if ($settable{'categorize'}) {
push(@vismsgs,'addcat');
} else {
push(@vismsgs,'dc_addcat');
@@ -3812,10 +5284,10 @@ sub print_userchangelogs_display {
my $formname = 'roleslog';
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $crstype = &Apache::loncommon::course_type();
my %roleslog=&Apache::lonnet::dump('nohist_rolelog',$cdom,$cnum);
if ((keys(%roleslog))[0]=~/^error\:/) { undef(%roleslog); }
- $r->print('
');
my %saveable_parameters = ('show' => 'scalar',);
&Apache::loncommon::store_course_settings('roles_log',
\%saveable_parameters);
@@ -3850,14 +5322,6 @@ sub print_userchangelogs_display {
}
my (%whodunit,%changed,$version);
($version) = ($r->dir_config('lonVersion') =~ /^([\d\.]+)\-/);
- $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version));
- my $showntablehdr = 0;
- my $tablehdr = &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_header_row().
- '
'.&mt('When').'
'.&mt('Who made the change').
- '
'.&mt('Changed User').'
'.&mt('Role').'
'.&mt('Section').'
'.
- &mt('Context').'
'.&mt('Start').'
'.&mt('End').'
'.
- &Apache::loncommon::end_data_table_header_row();
my ($minshown,$maxshown);
$minshown = 1;
my $count = 0;
@@ -3867,6 +5331,30 @@ sub print_userchangelogs_display {
$minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
}
}
+
+ # Form Header
+ $r->print('
';
@@ -3983,23 +5515,27 @@ sub role_display_filter {
&Apache::lonhtmlcommon::date_setter($formname,'rolelog_end_date',
$curr->{'rolelog_end_date'},undef,
undef,undef,undef,undef,undef,undef,$nolink);
- my %lt = &rolechg_contexts();
- $output .= '
'.&mt('Window during which changes occurred:').'
'.&mt('After:').
- '
'.$startform.'
'.&mt('Before:').'
'.
- $endform.'
'.
+ my %lt = &rolechg_contexts($crstype);
+ $output .= '
'.&mt('Window during which changes occurred:').' '.
+ '
'.&mt('After:').
+ '
'.$startform.'
'.
+ '
'.&mt('Before:').'
'.
+ '
'.$endform.'
'.
+ '
'.
+ '
'.
'
'.&mt('Role:').' '.
'
'.
+ $output .= '
'.
+ '
'.
+ '
'.
&mt('Context:').'
'.
- ''.
- &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.6.99.0 or later are displayed.');
+ $output .= ''
+ .'';
+
+ # Update Display button
+ $output .= '
'
+ .''
+ .'
';
+
+ # Server version info
+ $output .= '
'
+ .&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'
+ ,'2.6.99.0');
if ($version) {
- $output .= ' '.&mt('This server is version [_3].','','',$version); }
- $output .= '
';
+ $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);
+ }
+ $output .= '
';
return $output;
}
sub rolechg_contexts {
+ my ($crstype) = @_;
my %lt = &Apache::lonlocal::texthash (
any => 'Any',
auto => 'Automated enrollment',
@@ -4037,8 +5585,14 @@ sub rolechg_contexts {
createcourse => 'Course Creation',
course => 'User Management in course',
domain => 'User Management in domain',
- selfenroll => 'Self-enrolled',
+ selfenroll => 'Self-enrolled',
+ requestcourses => 'Course Request',
);
+ if ($crstype eq 'Community') {
+ $lt{'createcourse'} = &mt('Community Creation');
+ $lt{'course'} = &mt('User Management in community');
+ $lt{'requestcourses'} = &mt('Community Request');
+ }
return %lt;
}
@@ -4068,7 +5622,9 @@ sub user_search_result {
if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'instd')) {
if (($srch->{'srchdomain'} eq '') ||
! (&Apache::lonnet::domain($srch->{'srchdomain'}))) {
- $response = &mt('You must specify a valid domain when searching in a domain or institutional directory.')
+ $response = '
'.
+ &mt('You must specify a valid domain when searching in a domain or institutional directory.').
+ '
';
}
}
if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'crs') ||
@@ -4081,7 +5637,9 @@ sub user_search_result {
}
}
if ($unamecheck !~ /^$match_username$/) {
- $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @');
+ $response = '
'.
+ &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @').
+ '
';
}
}
}
@@ -4122,6 +5680,15 @@ sub user_search_result {
&build_search_response($context,$srch,%srch_results);
} else {
$currstate = 'modify';
+ my $uname = $srch->{'srchterm'};
+ my $udom = $srch->{'srchdomain'};
+ $srch_results{$uname.':'.$udom} =
+ { &Apache::lonnet::get('environment',
+ ['firstname',
+ 'lastname',
+ 'permanentemail'],
+ $udom,$uname)
+ };
}
} else {
%srch_results = &Apache::lonnet::usersearch($srch);
@@ -4247,7 +5814,8 @@ sub user_search_result {
($currstate,$response,$forcenewuser) =
&build_search_response($context,$srch,%srch_results);
} else {
- my $showdom = &display_domain_info($srch->{'srchdomain'}); $response = ''.
+ my $showdom = &display_domain_info($srch->{'srchdomain'});
+ $response = ''.
&mt('Institutional directory search is not available in domain: [_1]',$showdom).
' '.
&mt('You may want to search in the LON-CAPA domain instead of the institutional directory.').
@@ -4358,12 +5926,12 @@ sub build_search_response {
my ($context,$srch,%srch_results) = @_;
my ($currstate,$response,$forcenewuser);
my %names = (
- 'uname' => 'username',
- 'lastname' => 'last name',
+ 'uname' => 'username',
+ 'lastname' => 'last name',
'lastfirst' => 'last name, first name',
- 'crs' => 'this course',
- 'dom' => 'LON-CAPA domain: ',
- 'instd' => 'the institutional directory for domain: ',
+ 'crs' => 'this course',
+ 'dom' => 'LON-CAPA domain',
+ 'instd' => 'the institutional directory for domain',
);
my %single = (
@@ -4383,14 +5951,20 @@ sub build_search_response {
$currstate = 'modify';
$response = &mt("$single{$srch->{'srchtype'}} was found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'});
if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') {
- $response .= &display_domain_info($srch->{'srchdomain'});
+ $response .= ': '.&display_domain_info($srch->{'srchdomain'});
}
- } else {
- $response = ''.&mt("$nomatch{$srch->{'srchtype'}} found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}",$srch->{'srchterm'});
+ } else { # Search has nothing found. Prepare message to user.
+ $response = '';
if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') {
- $response .= &display_domain_info($srch->{'srchdomain'});
+ $response .= &mt("$nomatch{$srch->{'srchtype'}} found for the $names{$srch->{'srchby'}} [_1] in $names{$srch->{'srchin'}}: [_2]",
+ ''.$srch->{'srchterm'}.'',
+ &display_domain_info($srch->{'srchdomain'}));
+ } else {
+ $response .= &mt("$nomatch{$srch->{'srchtype'}} found for the $names{$srch->{'srchby'}} [_1] in $names{$srch->{'srchin'}}.",
+ ''.$srch->{'srchterm'}.'');
}
$response .= '';
+
if ($srch->{'srchin'} ne 'alc') {
$forcenewuser = 1;
my $cansrchinst = 0;
@@ -4413,15 +5987,48 @@ sub build_search_response {
$response .= ' '.&mt('You may want to broaden your search to the selected LON-CAPA domain.');
}
}
- if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $env{'request.role.domain'})) {
+ my $createdom = $env{'request.role.domain'};
+ if ($context eq 'requestcrs') {
+ if ($env{'form.coursedom'} ne '') {
+ $createdom = $env{'form.coursedom'};
+ }
+ }
+ if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $createdom)) {
my $cancreate =
- &Apache::lonuserutils::can_create_user($env{'request.role.domain'},$context);
+ &Apache::lonuserutils::can_create_user($createdom,$context);
+ my $targetdom = ''.$createdom.'';
if ($cancreate) {
- my $showdom = &display_domain_info($env{'request.role.domain'});
- $response .= '
'.&mt("To add a new user (you can only create new users in your current role's domain - [_1]):",$env{'request.role.domain'}).'
'.&mt("Set 'Domain/institution to search' to: [_1]",$showdom).'
'.&mt("Set 'Search criteria' to: 'username is ...... in selected LON-CAPA domain'").'
'.&mt('Provide the proposed username').'
'.&mt('Search').'
';
+ my $showdom = &display_domain_info($createdom);
+ $response .= '
'
+ .''.&mt('To add a new user:').''
+ .' ';
+ if ($context eq 'requestcrs') {
+ $response .= &mt("(You can only define new users in the new course's domain - [_1])",$targetdom);
+ } else {
+ $response .= &mt("(You can only create new users in your current role's domain - [_1])",$targetdom);
+ }
+ $response .='
'
+ .&mt("Set 'Domain/institution to search' to: [_1]",''.$showdom.'')
+ .'
'
+ .&mt("Set 'Search criteria' to: [_1]username is ..... in selected LON-CAPA domain[_2]",'','')
+ .'
'.&mt("You are not authorized to create new users in your current role's domain - [_1].",$env{'request.role.domain'}).' '.&mt('Contact the helpdesk if you need to create a new user.',$helplink).'
';
+ $response .= '
';
+ if ($context eq 'requestcrs') {
+ $response .= &mt("You are not authorized to define new users in the new course's domain - [_1].",$targetdom);
+ } else {
+ $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);
+ }
+ $response .= ' '
+ .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'
+ ,' '
+ ,'')
+ .'
';
}
}
}
@@ -4507,12 +6114,13 @@ sub course_level_table {
'end' => "End"
);
- foreach my $protectedcourse (sort( keys(%inccourses))) {
+ foreach my $protectedcourse (sort(keys(%inccourses))) {
my $thiscourse=$protectedcourse;
$thiscourse=~s:_:/:g;
my %coursedata=&Apache::lonnet::coursedescription($thiscourse);
+ my $isowner = &is_courseowner($protectedcourse,$coursedata{'internal.courseowner'});
my $area=$coursedata{'description'};
- my $type=$coursedata{'type'};
+ my $crstype=$coursedata{'type'};
if (!defined($area)) { $area=&mt('Unavailable course').': '.$protectedcourse; }
my ($domain,$cnum)=split(/\//,$thiscourse);
my %sections_count;
@@ -4522,12 +6130,13 @@ sub course_level_table {
&Apache::loncommon::get_sections($domain,$cnum);
}
}
- my @roles = &Apache::lonuserutils::roles_by_context('course');
+ my @roles = &Apache::lonuserutils::roles_by_context('course','',$crstype);
foreach my $role (@roles) {
- my $plrole=&Apache::lonnet::plaintext($role);
- if (&Apache::lonnet::allowed('c'.$role,$thiscourse)) {
+ my $plrole=&Apache::lonnet::plaintext($role,$crstype);
+ if ((&Apache::lonnet::allowed('c'.$role,$thiscourse)) ||
+ ((($role eq 'cc') || ($role eq 'co')) && ($isowner))) {
$table .= &course_level_row($protectedcourse,$role,$area,$domain,
- $plrole,\%sections_count,\%lt);
+ $plrole,\%sections_count,\%lt);
} elsif ($env{'request.course.sec'} ne '') {
if (&Apache::lonnet::allowed('c'.$role,$thiscourse.'/'.
$env{'request.course.sec'})) {
@@ -4537,7 +6146,8 @@ sub course_level_table {
}
}
if (&Apache::lonnet::allowed('ccr',$thiscourse)) {
- foreach my $cust (sort keys %customroles) {
+ foreach my $cust (sort(keys(%customroles))) {
+ next if ($crstype eq 'Community' && $customroles{$cust} =~ /bre\&S/);
my $role = 'cr_cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$cust;
$table .= &course_level_row($protectedcourse,$role,$area,$domain,
$cust,\%sections_count,\%lt);
@@ -4568,7 +6178,7 @@ sub course_level_row {
$protectedcourse.'_'.$role.'" />'."\n".
'
'.$plrole.'
'."\n".
'
'.$area.' Domain: '.$domain.'
'."\n";
- if ($role eq 'cc') {
+ if (($role eq 'cc') || ($role eq 'co')) {
$row .= '
';
} elsif ($env{'request.course.sec'} ne '') {
$row .= '
'.
''.
'';
- my $courseform=''.&Apache::loncommon::selectcourse_link
- ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Course').'';
- my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu');
+ my $courseform=&Apache::loncommon::selectcourse_link
+ ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Select','crstype');
+ my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser');
my %lt=&Apache::lonlocal::texthash(
'rol' => "Role",
'grs' => "Section",
@@ -4626,16 +6236,18 @@ sub course_level_dc {
'sta' => "Start",
'end' => "End",
'ssd' => "Set Start Date",
- 'sed' => "Set End Date"
+ 'sed' => "Set End Date",
+ 'scc' => "Course/Community"
);
- my $header = '
'.&mt('"[_1]" set to "[_2]".',$title,$newval));
+ if ($newnotify) {
+ $r->print(' '.&mt('The following will be notified when an enrollment request needs approval, or has been approved: [_1].',$newnotify));
+ } else {
+ $r->print(' '.&mt('No notifications sent when an enrollment request needs approval, or has been approved.'));
+ }
+ $r->print('
'."\n");
+ }
} else {
if (exists($changes{'internal.selfenroll_'.$item})) {
my $newval = $changes{'internal.selfenroll_'.$item};
@@ -4885,22 +6623,40 @@ sub update_selfenroll_config {
}
$r->print($cansetvis);
}
- }
+ }
return;
}
sub get_selfenroll_titles {
- my @row = ('types','registered','enroll_dates','access_dates','section');
+ my @row = ('types','registered','enroll_dates','access_dates','section',
+ 'approval','limit');
my %lt = &Apache::lonlocal::texthash (
types => 'Users allowed to self-enroll in this course',
registered => 'Restrict self-enrollment to students officially registered for the course',
enroll_dates => 'Dates self-enrollment available',
access_dates => 'Course access dates assigned to self-enrolling users',
section => 'Section assigned to self-enrolling users',
+ approval => 'Self-enrollment requests need approval?',
+ limit => 'Enrollment limit',
);
return (\@row,\%lt);
}
+sub is_courseowner {
+ my ($thiscourse,$courseowner) = @_;
+ if ($courseowner eq '') {
+ if ($env{'request.course.id'} eq $thiscourse) {
+ $courseowner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'};
+ }
+ }
+ if ($courseowner ne '') {
+ if ($courseowner eq $env{'user.name'}.':'.$env{'user.domain'}) {
+ return 1;
+ }
+ }
+ return;
+}
+
#---------------------------------------------- end functions for &phase_two
#--------------------------------- functions for &phase_two and &phase_three