--- loncom/interface/loncreateuser.pm 2009/08/13 20:20:12 1.295.2.3
+++ loncom/interface/loncreateuser.pm 2009/07/27 14:09:14 1.300
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.295.2.3 2009/08/13 20:20:12 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.300 2009/07/27 14:09:14 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -225,12 +225,14 @@ sub build_tools_display {
'usde' => "Use default",
'uscu' => "Use custom",
'official' => 'Can request creation of official courses',
- 'unofficial' => 'Can request creation of unofficial courses',
+ 'unofficial' => 'Can request creation of unofficial courses',
+ 'community' => 'Can request creation of communities',
);
if ($context eq 'requestcourses') {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
- 'requestcourses.official','requestcourses.unofficial');
- @usertools = ('official','unofficial');
+ 'requestcourses.official','requestcourses.unofficial',
+ 'requestcourses.community');
+ @usertools = ('official','unofficial','community');
} else {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
'tools.aboutme','tools.portfolio','tools.blog');
@@ -284,7 +286,7 @@ sub build_tools_display {
sub coursereq_externaluser {
my ($ccuname,$ccdomain,$cdom) = @_;
- my (@usertools,@options,%validations,%userenv,$output);
+ my (@usertools,%userenv,$output);
my %lt = &Apache::lonlocal::texthash (
'official' => 'Can request creation of official courses',
'unofficial' => 'Can request creation of unofficial courses',
@@ -295,81 +297,27 @@ sub coursereq_externaluser {
'reqcrsotherdom.official','reqcrsotherdom.unofficial',
'reqcrsotherdom.community');
@usertools = ('official','unofficial','community');
- @options = ('approve','validate','autolimit');
- %validations = &Apache::lonnet::auto_courserequest_checks($cdom);
- my $optregex = join('|',@options);
- my %reqtitles = &courserequest_titles();
foreach my $item (@usertools) {
- my ($curroption,$currlimit,$tooloff);
+ my ($tool_on,$tool_off);
+ $tool_off = 'checked="checked" ';
if ($userenv{'reqcrsotherdom.'.$item} ne '') {
my @curr = split(',',$userenv{'reqcrsotherdom.'.$item});
- if (grep(/^\Q$cdom\E:($optregex)=?(\d*)$/,@curr)) {
- $curroption = $1;
- $currlimit = $2;
- if (!$curroption) {
- $curroption = 'norequest';
- }
- }
- } else {
- $curroption = 'norequest';
- $tooloff = ' checked="checked"';
- }
- $output.= &Apache::loncommon::start_data_table_row()."\n".
- '
'.$lt{$item}.': '.
- ' ';
- foreach my $option (@options) {
- if ($option eq 'validate') {
- my $canvalidate = 0;
- if (ref($validations{$item}) eq 'HASH') {
- if ($validations{$item}{'_external_'}) {
- $canvalidate = 1;
- }
- }
- next if (!$canvalidate);
- }
- my $checked = '';
- if ($option eq $curroption) {
- $checked = ' checked="checked"';
- }
- $output .= ' ';
- if ($option eq 'autolimit') {
- $output .= '';
+ if (grep(/^\Q$cdom\E$/,@curr)) {
+ $tool_on = 'checked="checked" ';
+ $tool_off = '';
}
- $output .= ' '
}
- $output .= ' | '."\n".
+ $output .= &Apache::loncommon::start_data_table_row()."\n".
+ ' '.$lt{$item}.': | '."\n".
&Apache::loncommon::end_data_table_row()."\n";
}
return $output;
}
-sub courserequest_titles {
- my %titles = &Apache::lonlocal::texthash (
- official => 'Official', unofficial => 'Unofficial',
- community => 'Communities', norequest => 'Not allowed',
- approve => 'Approval by Dom. Coord.',
- validate => 'With validation',
- autolimit => 'Numerical limit',
- );
- return %titles;
-}
-
-sub courserequest_display {
- my %titles = &Apache::lonlocal::texthash (
- approve => 'Yes, need approval',
- validate => 'Yes, with validation',
- norequest => 'No',
- );
- return %titles;
-}
-
# =================================================================== Phase one
sub print_username_entry_form {
@@ -961,9 +909,9 @@ ENDCHANGEUSER
$r->print(&Apache::lonuserutils::forceid_change($context));
}
if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
- $r->print(''.&mt('User Can Request Creation of Courses?').'
'.
- &Apache::loncommon::start_data_table()).
- if ($env{'request.role.domain'} eq $ccdomain) {
+ $r->print(''.&mt('User Can Request Creation of Courses in this Domain?').'
'.
+ &Apache::loncommon::start_data_table());
+ if ($env{'request.role.domain'} eq $ccdomain) {
$r->print(&build_tools_display($ccuname,$ccdomain,'requestcourses'));
} else {
$r->print(&coursereq_externaluser($ccuname,$ccdomain,
@@ -1954,7 +1902,7 @@ sub update_user_data {
$env{'form.ccuname'}, $env{'form.ccdomain'}).'');
my (%alerts,%rulematch,%inst_results,%curr_rules);
my @usertools = ('aboutme','blog','portfolio');
- my @requestcourses = ('official','unofficial');
+ my @requestcourses = ('official','unofficial','community');
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
if ($env{'form.makeuser'}) {
@@ -2316,13 +2264,13 @@ sub update_user_data {
}
&tool_changes('tools',\@usertools,\%oldaccess,\%oldaccesstext,\%userenv,
\%changeHash,\%changed,\%newaccess,\%newaccesstext);
-
if ($env{'form.ccdomain'} eq $env{'request.role.domain'}) {
&tool_changes('requestcourses',\@requestcourses,\%oldaccess,\%oldaccesstext,
\%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
} else {
&tool_changes('reqcrsotherdom',\@requestcourses,\%oldaccess,\%oldaccesstext,
- \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
+ \%userenv,
+ \%changeHash,\%changed,\%newaccess,\%newaccesstext);
}
if ($env{'form.cfirstname'} ne $userenv{'firstname'} ||
$env{'form.cmiddlename'} ne $userenv{'middlename'} ||
@@ -2349,7 +2297,8 @@ sub update_user_data {
($env{'user.domain'} eq $env{'form.ccdomain'})) {
my %newenvhash;
foreach my $key (keys(%changed)) {
- if (($key eq 'official') || ($key eq 'unofficial')) {
+ if (($key eq 'official') || ($key eq 'unofficial')
+ || ($key eq 'community')) {
$newenvhash{'environment.requestcourses.'.$key} =
$changeHash{'requestcourses.'.$key};
if ($changeHash{'requestcourses.'.$key} ne '') {
@@ -2411,6 +2360,7 @@ sub update_user_data {
'portfolio' => 'Portfolio Availability',
'official' => 'Can Request Official Courses',
'unofficial' => 'Can Request Unofficial Courses',
+ 'community' => 'Can Request Communities',
'inststatus' => "Affiliation",
'prvs' => 'Previous Value:',
'chto' => 'Changed To:'
@@ -2563,7 +2513,8 @@ END
'aboutme' => "Personal Information Page Availability",
'portfolio' => "Portfolio Availability",
'official' => "Can Request Official Courses",
- 'unofficial' => "Can Request Unofficial Course",
+ 'unofficial' => "Can Request Unofficial Courses",
+ 'community' => "Can Request Communities",
'inststatus' => "Affiliation",
);
$r->print(<<"END");
@@ -2678,14 +2629,10 @@ sub tool_changes {
return;
}
if ($context eq 'reqcrsotherdom') {
- my @options = ('approve','validate','autolimit');
- my $optregex = join('|',@options);
- my %reqdisplay = &courserequest_display();
my $cdom = $env{'request.role.domain'};
foreach my $tool (@{$usertools}) {
$oldaccesstext->{$tool} = &mt('no');
- $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool
-};
+ $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool};
if ($userenv->{$context.'.'.$tool} eq '') {
if ($env{'form.'.$context.'_'.$tool}) {
$changed->{$tool}=&tool_admin($tool,$cdom,
@@ -2693,43 +2640,30 @@ sub tool_changes {
if ($changed->{$tool}) {
$newaccesstext->{$tool} = &mt('yes');
} else {
- $newaccesstext->{$tool} = $oldaccesstext->{$tool}; }
+ $newaccesstext->{$tool} = $oldaccesstext->{$tool};
+ }
}
} else {
my @curr = split(',',$userenv->{$context.'.'.$tool});
my @new;
my $changedoms;
- my $newop = $env{'form.'.$context.'_'.$tool};
- if ($newop eq 'autolimit') {
- $newop .= '=';
- unless ($env{'form.'.$context.'_'.$tool.'_limit'} =~ /\D/
-) {
- $newop .= $env{'form.'.$context.'_'.$tool.'_limit'};
- }
- }
- if (grep(/^\Q$cdom:($optregex\=?\d*)\E$/,@curr)) {
+ if (grep(/^\Q$cdom\E$/,@curr)) {
$oldaccesstext->{$tool} = &mt('yes');
- my $oldop = $1;
- if ($oldop ne $newop) {
+ unless ($env{'form.'.$context.'_'.$tool}) {
$changedoms = 1;
foreach my $dom (@curr) {
unless ($dom eq $cdom) {
push(@new,$dom);
}
}
- if ($newop) {
- push(@new,$cdom.':'.$newop);
- }
- @new = sort(@new);
}
} elsif ($env{'form.'.$context.'_'.$tool}) {
$changedoms = 1;
- $changedoms = 1;
- @new = sort(@curr,$cdom.':'.$newop);
+ @new = sort(@curr,$cdom);
}
$newaccesstext->{$tool} = $oldaccesstext->{$tool};
if ($changedoms) {
- my $newdomstr;
+ my $newdomstr;
if (@new) {
$newdomstr = join(',',@new);
}
@@ -2737,17 +2671,9 @@ sub tool_changes {
$context);
if ($changed->{$tool}) {
if ($env{'form.'.$context.'_'.$tool}) {
- if ($env{'form.'.$context.'_'.$tool} eq 'autolimit') {
- if ($env{'form.'.$context.'_'.$tool.'_limit'} =~ /\D/) {
- $newaccesstext->{$tool} = &mt('Yes, processed automatically');
- } else {
- $newaccesstext->{$tool} = &mt('Yes, up to limit of [quant,_1,request] per user).',$env{'form.'.$context.'_'.$tool.'_limit'});
- }
- } else {
- $newaccesstext->{$tool} = $reqdisplay{$env{'form.'.$context.'_'.$tool}};
- }
+ $newaccesstext->{$tool} = &mt('yes');
} else {
- $newaccesstext->{$tool} = &mt('No');
+ $newaccesstext->{$tool} = &mt('no');
}
}
}
@@ -2794,9 +2720,9 @@ sub tool_changes {
} else {
$newaccess->{$tool} = $oldaccess->{$tool};
if ($userenv->{$context.'.'.$tool}) {
- $newaccesstext->{$tool} = &mt("availability set to 'on'");
+ $newaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
- $newaccesstext->{$tool} = &mt("availability set to 'off'");
+ $newaccesstext->{$tool} = &mt("availability set to 'off'");
}
}
}
@@ -3860,121 +3786,167 @@ END
sub print_main_menu {
my ($permission,$context) = @_;
my %links = (
- domain => {
- upload => 'Upload a File of Users',
- singleuser => 'Add/Modify a Single User',
- listusers => 'Manage Multiple Users',
- },
- author => {
- upload => 'Upload a File of Co-authors',
- singleuser => 'Add/Modify a Single Co-author',
- listusers => 'Display Co-authors and Manage Multiple Users',
- },
- course => {
- upload => 'Upload a File of Course Users',
- singleuser => 'Add/Modify a Single Course User',
- listusers => 'Display Class Lists and Manage Multiple Users',
- },
+ domain => {
+ upload => 'Upload a File of Users',
+ singleuser => 'Add/Modify a User',
+ listusers => 'Manage Users',
+ },
+ author => {
+ upload => 'Upload a File of Co-authors',
+ singleuser => 'Add/Modify a Co-author',
+ listusers => 'Manage Co-authors',
+ },
+ course => {
+ upload => 'Upload a File of Course Users',
+ singleuser => 'Add/Modify a Course User',
+ listusers => 'Manage Course Users',
+ },
);
+ my @menu = ( {categorytitle => 'Single Users',
+ items =>
+ [
+ {
+ linktext => $links{$context}{'singleuser'},
+ icon => 'edit-redo.png',
+ #help => 'Course_Change_Privileges',
+ url => '/adm/createuser?action=singleuser',
+ permission => $permission->{'cusr'},
+ linktitle => 'Add a user with a certain role to this course.',
+ },
+ ]},
- my @menu =
- (
- { text => $links{$context}{'upload'},
- help => 'Course_Create_Class_List',
- action => 'upload',
- permission => $permission->{'cusr'},
+ {categorytitle => 'Multiple Users',
+ items =>
+ [
+ {
+ linktext => $links{$context}{'upload'},
+ icon => 'sctr.png',
+ #help => 'Course_Create_Class_List',
+ url => '/adm/createuser?action=upload',
+ permission => $permission->{'cusr'},
+ linktitle => 'Upload a CSV or a text file containing users.',
},
- { text => $links{$context}{'singleuser'},
- help => 'Course_Change_Privileges',
- action => 'singleuser',
- permission => $permission->{'cusr'},
+ {
+ linktext => $links{$context}{'listusers'},
+ icon => 'edit-find.png',
+ #help => 'Course_View_Class_List',
+ url => '/adm/createuser?action=listusers',
+ permission => ($permission->{'view'} || $permission->{'cusr'}),
+ linktitle => 'Show and manage users of this course.',
+ },
+
+ ]},
+
+ {categorytitle => 'Administration',
+ items => [ ]},
+ );
+
+ if ($context eq 'domain'){
+
+ push(@{ $menu[2]->{items} }, #Category: Administration
+ {
+ linktext => 'Custom Roles',
+ icon => 'emblem-photos.png',
+ #help => 'Course_Editing_Custom_Roles',
+ url => '/adm/createuser?action=custom',
+ permission => $permission->{'custom'},
+ linktitle => 'Configure a custom role.',
},
- { text => $links{$context}{'listusers'},
- help => 'Course_View_Class_List',
- action => 'listusers',
- permission => ($permission->{'view'} || $permission->{'cusr'}),
- },
);
- if ($context eq 'domain' || $context eq 'course') {
- my $customlink = { text => 'Edit Custom Roles',
- help => 'Course_Editing_Custom_Roles',
- action => 'custom',
- permission => $permission->{'custom'},
- };
- push(@menu,$customlink);
- }
- if ($context eq 'course') {
+
+ }elsif ($context eq 'course'){
my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();
- my @courselinks =
- (
- { text => 'Enroll a Single Student',
- help => 'Course_Add_Student',
- action => 'singlestudent',
- permission => $permission->{'cusr'},
- },
- { text => 'Drop Students',
- help => 'Course_Drop_Student',
- action => 'drop',
- permission => $permission->{'cusr'},
- });
- if (!exists($permission->{'cusr_section'})) {
- push(@courselinks,
- { text => 'Automated Enrollment Manager',
- help => 'Course_Automated_Enrollment',
+
+ push(@{ $menu[0]->{items} }, #Category: Single Users
+ {
+ linktext => 'Add/Modify a Student',
+ #help => 'Course_Add_Student',
+ icon => 'list-add.png',
+ url => '/adm/createuser?action=singlestudent',
+ permission => $permission->{'cusr'},
+ linktitle => 'Add a user with the role student to this course.',
+ },
+ );
+
+ push(@{ $menu[1]->{items} }, #Category: Multiple Users
+ {
+ linktext => 'Drop Students',
+ icon => 'edit-undo.png',
+ #help => 'Course_Drop_Student',
+ url => '/adm/createuser?action=drop',
+ permission => $permission->{'cusr'},
+ linktitle =>'Remove a student from this course.',
+ },
+ );
+ push(@{ $menu[2]->{items} }, #Category: Administration
+ {
+ linktext => 'Custom Roles',
+ icon => 'emblem-photos.png',
+ #help => 'Course_Editing_Custom_Roles',
+ url => '/adm/createuser?action=custom',
+ permission => $permission->{'custom'},
+ linktitle => 'Configure a custom role.',
+ },
+ {
+ linktext => 'Course Groups',
+ icon => 'conf.png',
+ #help => 'Course_Manage_Group',
+ url => '/adm/coursegroups?refpage=cusr',
+ permission => $permission->{'grp_manage'},
+ linktitle => 'Manage course groups.',
+ },
+ {
+ linktext => 'Change Logs',
+ icon => 'document-properties.png',
+ #help => 'Course_User_Logs',
+ url => '/adm/createuser?action=changelogs',
+ permission => $permission->{'cusr'},
+ linktitle => 'View change log.',
+ },
+ );
+ if ($env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'}) {
+ push(@{ $menu[2]->{items} },
+ {
+ linktext => 'Enrollment Requests',
+ icon => 'selfenrl-queue.png',
+ #help => 'Course_Approve_Selfenroll',
+ url => '/adm/createuser?action=selfenrollqueue',
+ permission => $permission->{'cusr'},
+ linktitle =>'Approve or reject enrollment requests.',
+ },
+ );
+ }
+
+ if (!exists($permission->{'cusr_section'})){
+
+ push(@{ $menu[2]->{items} },
+ {
+ linktext => 'Automated Enrollment',
+ icon => 'roles.png',
+ #help => 'Course_Automated_Enrollment',
permission => (&Apache::lonnet::auto_run($cnum,$cdom)
- && $permission->{'cusr'}),
+ && $permission->{'cusr'}),
url => '/adm/populate',
- },
- { text => 'Configure User Self-enrollment',
- help => 'Course_Self_Enrollment',
- action => 'selfenroll',
+ linktitle => 'Automated enrollment manager.',
+ },
+ {
+ linktext => 'User Self-Enrollment',
+ icon => 'cstr.png',
+ #help => 'Course_Self_Enrollment',
+ url => '/adm/createuser?action=selfenroll',
permission => $permission->{'cusr'},
- });
+ linktitle => 'Configure user self enrollment.',
+ },
+ );
+
}
- if ($env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'}) {
- push(@courselinks,
- { text => 'Enrollment Requests',
- help => 'Course_Approve_Selfenroll',
- action => 'selfenrollqueue',
- permission => $permission->{'cusr'},
- });
- }
- push(@courselinks,
- { text => 'Manage Course Groups',
- help => 'Course_Manage_Group',
- permission => $permission->{'grp_manage'},
- url => '/adm/coursegroups?refpage=cusr',
- },
- { text => 'View Change Logs',
- help => 'Course_User_Logs',
- action => 'changelogs',
- permission => $permission->{'cusr'},
- },);
+ };
+return Apache::lonhtmlcommon::generate_menu(@menu);
# { text => 'View Log-in History',
# help => 'Course_User_Logins',
# action => 'logins',
# permission => $permission->{'cusr'},
# });
- push(@menu,@courselinks);
- }
- my $menu_html = '';
- foreach my $menu_item (@menu) {
- next if (! $menu_item->{'permission'});
- $menu_html.='';
- if (exists($menu_item->{'help'})) {
- $menu_html.=
- &Apache::loncommon::help_open_topic($menu_item->{'help'});
- }
- $menu_html.='';
- if (exists($menu_item->{'url'})) {
- $menu_html.=qq{};
- } else {
- $menu_html.=
- qq{}; }
- $menu_html.= &mt($menu_item->{'text'}).'';
- $menu_html.='
';
- }
- return $menu_html;
}
sub restore_prev_selections {
@@ -4200,9 +4172,7 @@ ENDSCRIPT
if (ref($lt) eq 'HASH') {
$title = $lt->{$item};
}
- $output .=
- &Apache::lonhtmlcommon::row_title($title,
- 'LC_selfenroll_pick_box_title','LC_oddrow_value')."\n";
+ $output .= &Apache::lonhtmlcommon::row_title($title);
if ($item eq 'types') {
my $curr_types = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_types'};
my $showdomdesc = 1;