--- loncom/interface/lonuserutils.pm 2007/12/06 04:03:36 1.12 +++ loncom/interface/lonuserutils.pm 2007/12/14 00:20:53 1.16 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.12 2007/12/06 04:03:36 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.16 2007/12/14 00:20:53 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -96,7 +96,7 @@ sub modifyuserrole { } } elsif ($context eq 'domain') { $scope = '/'.$env{'request.role.domain'}.'/'; - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; } if ($context eq 'domain') { @@ -211,7 +211,7 @@ sub domain_roles_select { # domain context # # Role types - my @roletypes = ('domain','construction_space','course'); + my @roletypes = ('domain','author','course'); my %lt = &role_type_names(); # # build up the menu information to be passed to @@ -233,7 +233,7 @@ sub domain_roles_select { my @roles; if ($roletype eq 'domain') { @roles = &domain_roles(); - } elsif ($roletype eq 'construction_space') { + } elsif ($roletype eq 'author') { @roles = &construction_space_roles(); } else { @roles = &course_roles('domain'); @@ -254,7 +254,7 @@ sub domain_roles_select { } my $result = &Apache::loncommon::linked_select_forms ('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'}, - 'roletype','showrole',\%select_menus,['domain','construction_space','course']); + 'roletype','showrole',\%select_menus,['domain','author','course']); return $result; } @@ -659,7 +659,7 @@ sub print_upload_manager_footer { my $formname; if ($context eq 'course') { $formname = 'document.studentform'; - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $formname = 'document.studentform'; } elsif ($context eq 'domain') { $formname = 'document.studentform'; @@ -710,7 +710,7 @@ sub print_upload_manager_footer { $Str .= '

'.&mt('Settings for assigning roles:').'

'."\n". &mt('Pick the action to take on roles for these users:').'
      '; } - if ($context eq 'construction_space') { + if ($context eq 'author') { $Str .= '

'.&mt('Default role')."

\n". &mt('Choose the role to assign to users without one specified in the uploaded file'); } elsif ($context eq 'course') { @@ -724,7 +724,7 @@ sub print_upload_manager_footer { my ($options,$cb_script,$coursepick) = &default_role_selector($context,'defaultrole',1); if ($context eq 'domain') { $Str .= ''.&mt('Domain Level').'
'.$options.'

'.&mt('Course Level').'
'.$cb_script.$coursepick; - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $Str .= $options; } else { $Str .= '\n"; } my %role_types = &role_type_names(); - if ($context eq 'course') { + if ($context eq 'course' && $mode ne 'autoenroll') { if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { # Clicker display on or off? my %clicker_options = &Apache::lonlocal::texthash( @@ -2010,8 +2021,8 @@ END ' '."\n"; } } - $output .= &Apache::loncommon::end_data_table_header_row(); } + $output .= &Apache::loncommon::end_data_table_header_row(); # Done with the HTML header line } elsif ($mode eq 'csv') { # @@ -2073,7 +2084,7 @@ END delete($userlist->{$user}); next; } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { ($uname,$udom,$role) = split(/:/,$user,-1); } elsif ($env{'form.roletype'} eq 'course') { ($uname,$udom,$role) = split(/:/,$user); @@ -2147,32 +2158,54 @@ END } if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { $r->print(&Apache::loncommon::start_data_table_row()); - $r->print("\n"); my $checkval; - if ($mode ne 'autoenroll' && $actionselect) { - $checkval = $user; - if ($context eq 'course') { - if ($role eq 'st') { - $checkval .= ':st'; - } - $checkval .= ':'.$in{'section'}; - if ($role eq 'st') { - $checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; + if ($mode eq 'autoenroll') { + my $cellentry; + if ($in{'type'} eq 'auto') { + $cellentry = ''.&mt('auto').' '; + $autocount ++; + } else { + $cellentry = '
'.&mt('role').': '. @@ -763,7 +763,7 @@ sub forceid_change { if ($context eq 'domain') { $output .= '

'."\n"; } return $output; @@ -924,7 +924,7 @@ sub date_setting_table { my $dateDefault; if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { $dateDefault = ' '; - } elsif ($mode ne 'construction_space' && $mode ne 'domain') { + } elsif ($mode ne 'author' && $mode ne 'domain') { if (($bulkaction eq 'reenable') || ($bulkaction eq 'activate') || ($bulkaction eq 'chgdates')) { @@ -986,7 +986,7 @@ sub default_role_selector { my ($context,$checkpriv) = @_; my %customroles; my ($options,$coursepick,$cb_jscript); - if ($context ne 'construction_space') { + if ($context ne 'author') { %customroles = &my_custom_roles(); } @@ -1000,7 +1000,7 @@ sub default_role_selector { ' '."\n"; if ($context eq 'course') { $options .= &default_course_roles($context,$checkpriv,%customroles); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { my @roles = &construction_space_roles($checkpriv); foreach my $role (@roles) { my $plrole=&Apache::lonnet::plaintext($role); @@ -1129,7 +1129,7 @@ sub course_roles { sub curr_role_permissions { my ($context,$setting,$checkpriv) = @_; my @roles; - if ($context eq 'construction_space') { + if ($context eq 'author') { @roles = &construction_space_roles($checkpriv); } elsif ($context eq 'domain') { if ($setting eq 'course') { @@ -1170,7 +1170,11 @@ sub print_userlist { ($env{'form.Status'}); if ($env{'form.showrole'} eq '') { - $env{'form.showrole'} = 'Any'; + if ($context eq 'course') { + $env{'form.showrole'} = 'st'; + } else { + $env{'form.showrole'} = 'Any'; + } } if (! defined($env{'form.output'}) || $env{'form.output'} !~ /^(csv|excel|html)$/ ) { @@ -1297,7 +1301,7 @@ sub print_userlist { \%advrolehash,$permission); } else { my (%cstr_roles,%dom_roles); - if ($context eq 'construction_space') { + if ($context eq 'author') { # List co-authors and assistant co-authors my @possroles = ('ca','aa'); %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, @@ -1313,7 +1317,7 @@ sub print_userlist { \%userinfo,$dom_roles{$key},$permission); } } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { my %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']); my %coauthors; foreach my $key (keys(%dom_roles)) { @@ -1392,12 +1396,12 @@ sub print_userlist { } } if (keys(%userlist) == 0) { - if ($context eq 'construction_space') { + if ($context eq 'author') { $r->print(&mt('There are no co-authors to display.')."\n"); } elsif ($context eq 'domain') { if ($env{'form.roletype'} eq 'domain') { $r->print(&mt('There are no users with domain roles to display.')."\n"); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { $r->print(&mt('There are no authors or co-authors to display.')."\n"); } elsif ($env{'form.roletype'} eq 'course') { $r->print(&mt('There are no course users to display')."\n"); @@ -1433,7 +1437,7 @@ sub gather_userinfo { foreach my $item (keys(%{$rolehash})) { @{$userlist->{$item}} = (); my %userdata; - if ($context eq 'construction_space' || $context eq 'course') { + if ($context eq 'author' || $context eq 'course') { ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = split(/:/,$item); ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); @@ -1444,7 +1448,7 @@ sub gather_userinfo { split(/:/,$item); ($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); &build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { if (ref($rolehash->{$item}) eq 'HASH') { $userdata{'extent'} = $item; foreach my $key (keys(%{$rolehash->{$item}})) { @@ -1760,16 +1764,19 @@ sub show_users_list { $cnum = $env{'course.'.$cid.'.num'}; ($classgroups) = &Apache::loncoursedata::get_group_memberships( $userlist,$keylist,$cdom,$cnum); - if (! exists($env{'form.displayphotos'})) { - $env{'form.displayphotos'} = 'off'; - } - $displayphotos = $env{'form.displayphotos'}; - if (! exists($env{'form.displayclickers'})) { - $env{'form.displayclickers'} = 'off'; - } - $displayclickers = $env{'form.displayclickers'}; - if ($env{'course.'.$cid.'.internal.showphoto'}) { - $r->print(' + if ($mode eq 'autoenroll') { + $env{'form.showrole'} = 'st'; + } else { + if (! exists($env{'form.displayphotos'})) { + $env{'form.displayphotos'} = 'off'; + } + $displayphotos = $env{'form.displayphotos'}; + if (! exists($env{'form.displayclickers'})) { + $env{'form.displayclickers'} = 'off'; + } + $displayclickers = $env{'form.displayclickers'}; + if ($env{'course.'.$cid.'.internal.showphoto'}) { + $r->print(' - '); - } - $r->print(<print(< END + } } - unless ($mode eq 'autoenroll') { + if ($mode ne 'autoenroll') { my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); my $singconfirm = &mt(' for a single user'); @@ -1883,7 +1891,7 @@ END ); if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { $lt{'extent'} = &mt('Course(s): description, section(s), status'); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $lt{'extent'} = &mt('Author'); } my @cols = ('username','domain','id','fullname'); @@ -1896,7 +1904,7 @@ END if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { push(@cols,'role'); } - if ($context eq 'domain' && ($env{'form.roletype'} eq 'construction_space' || + if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || $env{'form.roletype'} eq 'course')) { push (@cols,'extent'); } @@ -1915,49 +1923,52 @@ END } elsif ($env{'form.showrole'} ne 'Any') { $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'}); } - my $results_description = &results_header_row($rolefilter,$statusmode, - $context); - $r->print(''.$results_description.'
'); + my $results_description; + if ($mode ne 'autoenroll') { + $results_description = &results_header_row($rolefilter,$statusmode, + $context,$permission); + $r->print(''.$results_description.'
'); + } my ($output,$actionselect); - if ($mode eq 'html' || $mode eq 'view') { - if ($permission->{'cusr'}) { - $actionselect = &select_actions($context,$setting,$statusmode); - } - $r->print(<{'cusr'}) { + $actionselect = &select_actions($context,$setting,$statusmode); + } + $r->print(< END - if ($mode ne 'autoenroll') { - $output = '

'; - my @linkdests = ('aboutme'); - if ($permission->{'cusr'}) { - push (@linkdests,'modify'); - $output .= ''.$lt{'link'}.': '; - my $usernamelink = $env{'form.usernamelink'}; - if ($usernamelink eq '') { - $usernamelink = 'aboutme'; - } - foreach my $item (@linkdests) { - my $checkedstr = ''; - if ($item eq $usernamelink) { - $checkedstr = ' checked="checked" '; - } - $output .= '  '; - } - $output .= '
'; - } else { - $output .= &mt("Click on a username to view the user's personal page.").'
'; - } - if ($actionselect) { - $output .= <<"END"; + $output = '

'; + my @linkdests = ('aboutme'); + if ($permission->{'cusr'}) { + push (@linkdests,'modify'); + $output .= ''.$lt{'link'}.': '; + my $usernamelink = $env{'form.usernamelink'}; + if ($usernamelink eq '') { + $usernamelink = 'aboutme'; + } + foreach my $item (@linkdests) { + my $checkedstr = ''; + if ($item eq $usernamelink) { + $checkedstr = ' checked="checked" '; + } + $output .= '  '; + } + $output .= '
'; + } else { + $output .= &mt("Click on a username to view the user's personal page.").'
'; + } + if ($actionselect) { + $output .= <<"END"; $lt{'ac'}: $actionselect

  END - } + } } $output .= "\n

\n". &Apache::loncommon::start_data_table(). @@ -1976,7 +1987,7 @@ END $output .= "

$lt{$item}$rowcount
'.&mt('manual').'
'; + $manualcount ++; + if ($in{'lockedtype'}) { + $cellentry .= ''; + $unlockcount ++; + } else { + $cellentry .= ''; + $lockcount ++; } + $cellentry .= '
'; + } + $r->print("$cellentry\n"); + } else { + $r->print("$rowcount\n"); + $checkval; + if ($actionselect) { + $checkval = $user; + if ($context eq 'course') { + if ($role eq 'st') { + $checkval .= ':st'; + } + $checkval .= ':'.$in{'section'}; + if ($role eq 'st') { + $checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; + } + } + $r->print(''); } - $r->print(''); } foreach my $item (@cols) { if ($item eq 'username') { - $r->print(''.&print_username_link($permission,\%in).''); - } elsif (($item eq 'start' || $item eq 'end') && ($mode ne 'autoeroll') && ($actionselect)) { + $r->print(''.&print_username_link($mode,$permission, + \%in).''); + } elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) { $r->print(''.$in{$item}.''."\n"); } else { $r->print(''.$in{$item}.''."\n"); } } - if ($context eq 'course') { + if (($context eq 'course') && ($mode ne 'autoenroll')) { if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { if ($displayclickers eq 'on') { my $clickers = @@ -2252,9 +2285,11 @@ END } sub print_username_link { - my ($permission,$in) = @_; + my ($mode,$permission,$in) = @_; my $output; - if (!$permission->{'cusr'}) { + if ($mode eq 'autoenroll') { + $output = $in->{'username'}; + } elsif (!$permission->{'cusr'}) { $output = &Apache::loncommon::aboutmewrapper($in->{'username'}, $in->{'username'}, $in->{'domain'}); @@ -2268,9 +2303,9 @@ sub print_username_link { sub role_type_names { my %lt = &Apache::lonlocal::texthash ( - 'domain' => 'Domain Roles', - 'construction_space' => 'Co-Author Roles', - 'course' => 'Course Roles', + 'domain' => 'Domain Roles', + 'author' => 'Co-Author Roles', + 'course' => 'Course Roles', ); return %lt; } @@ -2291,10 +2326,6 @@ sub select_actions { '; $choices{'dates'} = 1; } else { - if ($statusmode eq 'Active' || $statusmode eq 'Future') { - $options .= ' -'; - } if ($statusmode eq 'Future') { $options .= ' '; @@ -2304,6 +2335,12 @@ sub select_actions { '; $choices{'dates'} = 1; } + if ($statusmode eq 'Active' || $statusmode eq 'Future') { + $options .= ' + +'; + $choices{'dates'} = 1; + } } if ($context eq 'domain') { $options .= ' @@ -2524,7 +2561,7 @@ END } sub results_header_row { - my ($rolefilter,$statusmode,$context) = @_; + my ($rolefilter,$statusmode,$context,$permission) = @_; my ($description,$showfilter); if ($rolefilter ne 'Any') { $showfilter = $rolefilter; @@ -2544,8 +2581,17 @@ sub results_header_row { $description .= &mt('All users in course with [_1] roles',$rolefilter); } } - } elsif ($context eq 'construction_space') { - $description = &mt('Author space for [_1].').' '; + if (exists($permission->{'view_section'})) { + if ($env{'form.showrole'} eq 'st') { + $description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); + } elsif ($env{'form.showrole'} eq 'any') { + $description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); + } + } + } elsif ($context eq 'author') { + $description = + &mt('Author space for [_1]', + &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})).':  '; if ($statusmode eq 'Expired') { $description .= &mt('Co-authors with expired [_1] roles',$showfilter); } elsif ($statusmode eq 'Future') { @@ -2576,7 +2622,7 @@ sub results_header_row { $description .= &mt('All users in domain with [_1] roles',$rolefilter); } } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { if ($statusmode eq 'Expired') { $description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter); } elsif ($statusmode eq 'Future') { @@ -2902,7 +2948,7 @@ sub upfile_drop_add { } elsif ($setting eq 'course') { $defaultrole = $env{'form.courserole'}; } - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $defaultrole = $env{'form.defaultrole'}; } if ($context eq 'domain' && $setting eq 'course') { @@ -2925,7 +2971,7 @@ sub upfile_drop_add { ####################################### if ($context eq 'course') { $r->print('

'.&mt('Enrolling Users')."

\n

\n"); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $r->print('

'.&mt('Updating Co-authors')."

\n

\n"); } else { $r->print('

'.&mt('Adding/Modifying Users')."

\n

\n"); @@ -3065,6 +3111,8 @@ sub upfile_drop_add { next if ($alerts{'username'}{$domain}{$username}); } } + } else { +# FIXME check if user info can be updated. } if ($id ne '') { if (!$newuser) { @@ -3117,7 +3165,7 @@ sub upfile_drop_add { $r->print('
'. &mt('[_1]: Unable to enroll. No password specified.',$username) ); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $r->print('
'. &mt('[_1]: Unable to add co-author. No password specified.',$username) ); @@ -3143,39 +3191,7 @@ sub upfile_drop_add { &mt('Authentication changed for [_1] existing users.', $counts{'auth'})."

\n"); } - if (keys(%alerts) > 0) { - if (ref($alerts{'username'}) eq 'HASH') { - foreach my $dom (sort(keys(%{$alerts{'username'}}))) { - my $count; - if (ref($alerts{'username'}{$dom}) eq 'HASH') { - $count = keys(%{$alerts{'username'}{$dom}}); - } - my $domdesc = &Apache::lonnet::domain($domain,'description'); - if (ref($curr_rules{$dom}) eq 'HASH') { - $r->print(&Apache::loncommon::instrule_disallow_msg( - 'username',$domdesc,$count,'upload')); - } - $r->print(&Apache::loncommon::user_rule_formats($dom, - $domdesc,$curr_rules{$dom}{'username'}, - 'username')); - } - } - if (ref($alerts{'id'}) eq 'HASH') { - foreach my $dom (sort(keys(%{$alerts{'id'}}))) { - my $count; - if (ref($alerts{'id'}{$dom}) eq 'HASH') { - $count = keys(%{$alerts{'id'}{$dom}}); - } - my $domdesc = &Apache::lonnet::domain($domain,'description'); - if (ref($curr_rules{$dom}) eq 'HASH') { - $r->print(&Apache::loncommon::instrule_disallow_msg( - 'id',$domdesc,$count,'upload')); - } - $r->print(&Apache::loncommon::user_rule_formats($dom, - $domdesc,$curr_rules{$dom}{'id'},'id')); - } - } - } + $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); $r->print('
'); $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate'])); $r->print('
'); @@ -3206,6 +3222,46 @@ sub upfile_drop_add { } # end of unless } +sub print_namespacing_alerts { + my ($domain,$alerts,$curr_rules) = @_; + my $output; + if (ref($alerts) eq 'HASH') { + if (keys(%{$alerts}) > 0) { + if (ref($alerts->{'username'}) eq 'HASH') { + foreach my $dom (sort(keys(%{$alerts->{'username'}}))) { + my $count; + if (ref($alerts->{'username'}{$dom}) eq 'HASH') { + $count = keys(%{$alerts->{'username'}{$dom}}); + } + my $domdesc = &Apache::lonnet::domain($domain,'description'); + if (ref($curr_rules->{$dom}) eq 'HASH') { + $output .= &Apache::loncommon::instrule_disallow_msg( + 'username',$domdesc,$count,'upload'); + } + $output .= &Apache::loncommon::user_rule_formats($dom, + $domdesc,$curr_rules->{$dom}{'username'}, + 'username'); + } + } + if (ref($alerts->{'id'}) eq 'HASH') { + foreach my $dom (sort(keys(%{$alerts->{'id'}}))) { + my $count; + if (ref($alerts->{'id'}{$dom}) eq 'HASH') { + $count = keys(%{$alerts->{'id'}{$dom}}); + } + my $domdesc = &Apache::lonnet::domain($domain,'description'); + if (ref($curr_rules->{$dom}) eq 'HASH') { + $output .= &Apache::loncommon::instrule_disallow_msg( + 'id',$domdesc,$count,'upload'); + } + $output .= &Apache::loncommon::user_rule_formats($dom, + $domdesc,$curr_rules->{$dom}{'id'},'id'); + } + } + } + } +} + sub user_change_result { my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username, $userchg) = @_; @@ -3308,14 +3364,14 @@ sub update_user_list { } else { $scope = $scopestem.'/'.$sec; } - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { ($uname,$udom,$role) = split(/\:/,$item,-1); $scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; } elsif ($context eq 'domain') { if ($setting eq 'domain') { ($role,$uname,$udom) = split(/\:/,$item,-1); $scope = '/'.$env{'request.role.domain'}.'/'; - } elsif ($setting eq 'construction_space') { + } elsif ($setting eq 'author') { ($uname,$udom,$role,$scope) = split(/\:/,$item); } elsif ($setting eq 'course') { ($uname,$udom,$role,$cid,$sec,$type,$locktype) = @@ -3675,5 +3731,90 @@ ENDSECCODE return $setsection_js; } +sub can_create_user { + my ($dom,$context,$usertype) = @_; + my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); + my $cancreate = 1; + if (ref($domconf{'usercreation'}) eq 'HASH') { + if (ref($domconf{'usercreation'}{'cancreate'}) eq 'HASH') { + if ($context eq 'course' || $context eq 'author') { + my $creation = $domconf{'usercreation'}{'cancreate'}{$context}; + if ($creation eq 'none') { + $cancreate = 0; + } elsif ($creation ne 'any') { + if (defined($usertype)) { + if ($creation ne $usertype) { + $cancreate = 0; + } + } + } + } + } + } + return $cancreate; +} + +sub get_permission { + my ($context) = @_; + my %permission; + if ($context eq 'course') { + if ((&Apache::lonnet::allowed('cta',$env{'request.course.id'})) || + (&Apache::lonnet::allowed('cin',$env{'request.course.id'})) || + (&Apache::lonnet::allowed('ccr',$env{'request.course.id'})) || + (&Apache::lonnet::allowed('cep',$env{'request.course.id'})) || + (&Apache::lonnet::allowed('cst',$env{'request.course.id'}))) { + $permission{'cusr'} = 1; + $permission{'view'} = + &Apache::lonnet::allowed('vcl',$env{'request.course.id'}); + + } + if (&Apache::lonnet::allowed('ccr',$env{'request.course.id'})) { + $permission{'custom'} = 1; + } + if (&Apache::lonnet::allowed('vcl',$env{'request.course.id'})) { + $permission{'view'} = 1; + } + if (!$permission{'view'}) { + my $scope = $env{'request.course.id'}.'/'.$env{'request.course.sec'}; + $permission{'view'} = &Apache::lonnet::allowed('vcl',$scope); + if ($permission{'view'}) { + $permission{'view_section'} = $env{'request.course.sec'}; + } + } + if (&Apache::lonnet::allowed('mdg',$env{'request.course.id'})) { + $permission{'grp_manage'} = 1; + } + } elsif ($context eq 'author') { + $permission{'cusr'} = &authorpriv($env{'user.name'},$env{'request.role.domain'}); + $permission{'view'} = $permission{'cusr'}; + } else { + if ((&Apache::lonnet::allowed('cad',$env{'request.role.domain'})) || + (&Apache::lonnet::allowed('cli',$env{'request.role.domain'})) || + (&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) || + (&Apache::lonnet::allowed('csc',$env{'request.role.domain'})) || + (&Apache::lonnet::allowed('cdg',$env{'request.role.domain'})) || + (&Apache::lonnet::allowed('mau',$env{'request.role.domain'}))) { + $permission{'cusr'} = 1; + } + if (&Apache::lonnet::allowed('ccr',$env{'request.role.domain'})) { + $permission{'custom'} = 1; + } + $permission{'view'} = $permission{'cusr'}; + } + my $allowed = 0; + foreach my $perm (values(%permission)) { + if ($perm) { $allowed=1; last; } + } + return (\%permission,$allowed); +} + +# ==================================================== Figure out author access + +sub authorpriv { + my ($auname,$audom)=@_; + unless ((&Apache::lonnet::allowed('cca',$audom.'/'.$auname)) + || (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; +} + 1;