--- loncom/interface/loncreateuser.pm 2009/08/13 20:20:12 1.295.2.3 +++ loncom/interface/loncreateuser.pm 2009/07/25 14:44:50 1.299 @@ -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.299 2009/07/25 14:44:50 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'); @@ -282,94 +284,6 @@ sub build_tools_display { return $output; } -sub coursereq_externaluser { - my ($ccuname,$ccdomain,$cdom) = @_; - my (@usertools,@options,%validations,%userenv,$output); - my %lt = &Apache::lonlocal::texthash ( - 'official' => 'Can request creation of official courses', - 'unofficial' => 'Can request creation of unofficial courses', - 'community' => 'Can request creation of communities', - ); - - %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, - '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); - 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 .= ''; - } - $output .= ' ' - } - $output .= ''."\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 { @@ -962,14 +876,9 @@ ENDCHANGEUSER } 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(&build_tools_display($ccuname,$ccdomain,'requestcourses')); - } else { - $r->print(&coursereq_externaluser($ccuname,$ccdomain, - $env{'request.role.domain'})); - } - $r->print(&Apache::loncommon::end_data_table()); + &Apache::loncommon::start_data_table(). + &build_tools_display($ccuname,$ccdomain,'requestcourses'). + &Apache::loncommon::end_data_table()); } $r->print(''); my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname); @@ -1954,7 +1863,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'}) { @@ -2091,9 +2000,7 @@ sub update_user_data { ('environment',['firstname','middlename','lastname','generation', 'id','permanentemail','portfolioquota','inststatus','tools.aboutme', 'tools.blog','tools.portfolio','requestcourses.official', - 'requestcourses.unofficial','requestcourses.community', - 'reqcrsotherdom.official','reqcrsotherdom.unofficial', - 'reqcrsotherdom.community'], + 'requestcourses.unofficial','requestcourses.community'], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -2222,7 +2129,7 @@ sub update_user_data { $oldinststatuses,$newinststatuses); my ($defquota,$settingstatus) = &Apache::loncommon::default_quota($env{'form.ccdomain'},$inststatus); - my ($showquota,$showtools,$showrequestcourses,$showinststatus,$showreqotherdom); + my ($showquota,$showtools,$showrequestcourses,$showinststatus); if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) { $showquota = 1; } @@ -2231,8 +2138,6 @@ sub update_user_data { } if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) { $showrequestcourses = 1; - } elsif (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { - $showreqotherdom = 1; } if (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'})) { $showinststatus = 1; @@ -2316,14 +2221,8 @@ 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); - } + &tool_changes('requestcourses',\@requestcourses,\%oldaccess,\%oldaccesstext, + \%userenv, \%changeHash,\%changed,\%newaccess,\%newaccesstext); if ($env{'form.cfirstname'} ne $userenv{'firstname'} || $env{'form.cmiddlename'} ne $userenv{'middlename'} || $env{'form.clastname'} ne $userenv{'lastname'} || @@ -2349,7 +2248,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 +2311,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:' @@ -2436,11 +2337,6 @@ END $r->print(" $lt{$item}\n"); } - } elsif ($showreqotherdom) { - foreach my $item (@requestcourses) { - $r->print(" - $lt{$item}\n"); - } } if ($showquota) { $r->print(" @@ -2472,11 +2368,6 @@ END $r->print(" $oldaccess{$item} $oldaccesstext{$item}\n"); } - } elsif ($showreqotherdom) { - foreach my $item (@requestcourses) { - $r->print(" - $oldaccess{$item} $oldaccesstext{$item}\n"); - } } if ($showquota) { $r->print(" @@ -2508,11 +2399,6 @@ END $r->print(" $newaccess{$item} $newaccesstext{$item} \n"); } - } elsif ($showreqotherdom) { - foreach my $item (@requestcourses) { - $r->print(" - $newaccess{$item} $newaccesstext{$item} \n"); - } } if ($showquota) { $r->print(" @@ -2563,7 +2449,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"); @@ -2581,11 +2468,6 @@ END $r->print('
['.$lt{$item}.': '.$newaccess{$item}.' '. $newaccesstext{$item}.']'."\n"); } - } elsif ($showreqotherdom) { - foreach my $item (@requestcourses) { - $r->print('
['.$lt{$item}.': '.$newaccess{$item}.' '. - $newaccesstext{$item}.']'."\n"); - } } if ($showtools) { foreach my $item (@usertools) { @@ -2677,84 +2559,6 @@ sub tool_changes { (ref($newaccess) eq 'HASH') && (ref($newaccesstext) eq 'HASH'))) { 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 -}; - if ($userenv->{$context.'.'.$tool} eq '') { - if ($env{'form.'.$context.'_'.$tool}) { - $changed->{$tool}=&tool_admin($tool,$cdom, - $changeHash,$context); - if ($changed->{$tool}) { - $newaccesstext->{$tool} = &mt('yes'); - } else { - $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)) { - $oldaccesstext->{$tool} = &mt('yes'); - my $oldop = $1; - if ($oldop ne $newop) { - $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); - } - $newaccesstext->{$tool} = $oldaccesstext->{$tool}; - if ($changedoms) { - my $newdomstr; - if (@new) { - $newdomstr = join(',',@new); - } - $changed->{$tool}=&tool_admin($tool,$newdomstr,$changeHash, - $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}}; - } - } else { - $newaccesstext->{$tool} = &mt('No'); - } - } - } - } - } - return; - } foreach my $tool (@{$usertools}) { if ($userenv->{$context.'.'.$tool} ne '') { $oldaccess->{$tool} = &mt('custom'); @@ -3193,10 +2997,6 @@ sub tool_admin { if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) { $canchange = 1; } - } elsif ($context eq 'reqcrsotherdom') { - if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { - $canchange = 1; - } } elsif (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) { # Current user has quota modification privileges $canchange = 1; @@ -3860,121 +3660,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 +4046,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;