Diff for /loncom/interface/lonuserutils.pm between versions 1.12 and 1.16

version 1.12, 2007/12/06 04:03:36 version 1.16, 2007/12/14 00:20:53
Line 96  sub modifyuserrole { Line 96  sub modifyuserrole {
         }          }
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         $scope = '/'.$env{'request.role.domain'}.'/';          $scope = '/'.$env{'request.role.domain'}.'/';
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         $scope =  '/'.$env{'user.domain'}.'/'.$env{'user.name'};          $scope =  '/'.$env{'user.domain'}.'/'.$env{'user.name'};
     }      }
     if ($context eq 'domain') {      if ($context eq 'domain') {
Line 211  sub domain_roles_select { Line 211  sub domain_roles_select {
     # domain context         # domain context   
     #      #
     # Role types      # Role types
     my @roletypes = ('domain','construction_space','course');      my @roletypes = ('domain','author','course');
     my %lt = &role_type_names();      my %lt = &role_type_names();
     #      #
     # build up the menu information to be passed to      # build up the menu information to be passed to
Line 233  sub domain_roles_select { Line 233  sub domain_roles_select {
         my @roles;          my @roles;
         if ($roletype eq 'domain') {          if ($roletype eq 'domain') {
             @roles = &domain_roles();              @roles = &domain_roles();
         } elsif ($roletype eq 'construction_space') {          } elsif ($roletype eq 'author') {
             @roles = &construction_space_roles();              @roles = &construction_space_roles();
         } else {          } else {
             @roles = &course_roles('domain');              @roles = &course_roles('domain');
Line 254  sub domain_roles_select { Line 254  sub domain_roles_select {
     }      }
     my $result = &Apache::loncommon::linked_select_forms      my $result = &Apache::loncommon::linked_select_forms
         ('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},          ('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},
          'roletype','showrole',\%select_menus,['domain','construction_space','course']);           'roletype','showrole',\%select_menus,['domain','author','course']);
     return $result;      return $result;
 }  }
   
Line 659  sub print_upload_manager_footer { Line 659  sub print_upload_manager_footer {
     my $formname;      my $formname;
     if ($context eq 'course') {      if ($context eq 'course') {
         $formname = 'document.studentform';          $formname = 'document.studentform';
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         $formname = 'document.studentform';          $formname = 'document.studentform';
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         $formname = 'document.studentform';          $formname = 'document.studentform';
Line 710  sub print_upload_manager_footer { Line 710  sub print_upload_manager_footer {
         $Str .= '<h3>'.&mt('Settings for assigning roles:').'</h3>'."\n".          $Str .= '<h3>'.&mt('Settings for assigning roles:').'</h3>'."\n".
                 &mt('Pick the action to take on roles for these users:').'<br /><span class="LC_nobreak"><label><input type="radio" name="roleaction" value="norole" checked="checked" />&nbsp;'.&mt('No role changes').'</label>&nbsp;&nbsp;&nbsp;<label><input type="radio" name="roleaction" value="domain" />&nbsp;'.&mt('Add a domain role').'</label>&nbsp;&nbsp;&nbsp;<label><input type="radio" name="roleaction" value="course" />&nbsp;'.&mt('Add a course role').'</label></span>';                  &mt('Pick the action to take on roles for these users:').'<br /><span class="LC_nobreak"><label><input type="radio" name="roleaction" value="norole" checked="checked" />&nbsp;'.&mt('No role changes').'</label>&nbsp;&nbsp;&nbsp;<label><input type="radio" name="roleaction" value="domain" />&nbsp;'.&mt('Add a domain role').'</label>&nbsp;&nbsp;&nbsp;<label><input type="radio" name="roleaction" value="course" />&nbsp;'.&mt('Add a course role').'</label></span>';
     }      }
     if ($context eq 'construction_space') {      if ($context eq 'author') {
         $Str .= '<h3>'.&mt('Default role')."</h3>\n".          $Str .= '<h3>'.&mt('Default role')."</h3>\n".
                 &mt('Choose the role to assign to users without one specified in the uploaded file');                  &mt('Choose the role to assign to users without one specified in the uploaded file');
     } elsif ($context eq 'course') {      } elsif ($context eq 'course') {
Line 724  sub print_upload_manager_footer { Line 724  sub print_upload_manager_footer {
     my ($options,$cb_script,$coursepick) = &default_role_selector($context,'defaultrole',1);      my ($options,$cb_script,$coursepick) = &default_role_selector($context,'defaultrole',1);
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $Str .= '<span class="LC_role_level">'.&mt('Domain Level').'</span><br />'.$options.'<br /><br /><span class="LC_role_level">'.&mt('Course Level').'</span><br />'.$cb_script.$coursepick;          $Str .= '<span class="LC_role_level">'.&mt('Domain Level').'</span><br />'.$options.'<br /><br /><span class="LC_role_level">'.&mt('Course Level').'</span><br />'.$cb_script.$coursepick;
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         $Str .= $options;          $Str .= $options;
     } else {      } else {
         $Str .= '<table><tr><td><span class="LC_nobreak"<b>'.&mt('role').':&nbsp;</b>'.          $Str .= '<table><tr><td><span class="LC_nobreak"<b>'.&mt('role').':&nbsp;</b>'.
Line 763  sub forceid_change { Line 763  sub forceid_change {
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $output .= '<label><input type="checkbox" name="recurseid"'.          $output .= '<label><input type="checkbox" name="recurseid"'.
                    ' value="yes">'.                      ' value="yes">'. 
   &mt('Update ID/Student Number in courses in which user is an Active or Future student, (if forcing change).').    &mt('Update ID/Student Number in courses in which user is Active/Future student,<br />(if forcing change).').
                    '</label></p>'."\n";                     '</label></p>'."\n";
     }      }
     return $output;      return $output;
Line 924  sub date_setting_table { Line 924  sub date_setting_table {
     my $dateDefault;      my $dateDefault;
     if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {      if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
         $dateDefault = '&nbsp;';          $dateDefault = '&nbsp;';
     } elsif ($mode ne 'construction_space' && $mode ne 'domain') {      } elsif ($mode ne 'author' && $mode ne 'domain') {
         if (($bulkaction eq 'reenable') ||           if (($bulkaction eq 'reenable') || 
             ($bulkaction eq 'activate') ||               ($bulkaction eq 'activate') || 
             ($bulkaction eq 'chgdates')) {               ($bulkaction eq 'chgdates')) { 
Line 986  sub default_role_selector { Line 986  sub default_role_selector {
     my ($context,$checkpriv) = @_;      my ($context,$checkpriv) = @_;
     my %customroles;      my %customroles;
     my ($options,$coursepick,$cb_jscript);      my ($options,$coursepick,$cb_jscript);
     if ($context ne 'construction_space') {      if ($context ne 'author') {
         %customroles = &my_custom_roles();          %customroles = &my_custom_roles();
     }      }
   
Line 1000  sub default_role_selector { Line 1000  sub default_role_selector {
                ' <option value="">'.&mt('Please select').'</option>'."\n";                  ' <option value="">'.&mt('Please select').'</option>'."\n"; 
     if ($context eq 'course') {      if ($context eq 'course') {
         $options .= &default_course_roles($context,$checkpriv,%customroles);          $options .= &default_course_roles($context,$checkpriv,%customroles);
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         my @roles = &construction_space_roles($checkpriv);          my @roles = &construction_space_roles($checkpriv);
         foreach my $role (@roles) {          foreach my $role (@roles) {
            my $plrole=&Apache::lonnet::plaintext($role);             my $plrole=&Apache::lonnet::plaintext($role);
Line 1129  sub course_roles { Line 1129  sub course_roles {
 sub curr_role_permissions {  sub curr_role_permissions {
     my ($context,$setting,$checkpriv) = @_;       my ($context,$setting,$checkpriv) = @_; 
     my @roles;      my @roles;
     if ($context eq 'construction_space') {      if ($context eq 'author') {
         @roles = &construction_space_roles($checkpriv);          @roles = &construction_space_roles($checkpriv);
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         if ($setting eq 'course') {          if ($setting eq 'course') {
Line 1170  sub print_userlist { Line 1170  sub print_userlist {
         ($env{'form.Status'});          ($env{'form.Status'});
   
     if ($env{'form.showrole'} eq '') {      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'}) ||      if (! defined($env{'form.output'}) ||
         $env{'form.output'} !~ /^(csv|excel|html)$/ ) {          $env{'form.output'} !~ /^(csv|excel|html)$/ ) {
Line 1297  sub print_userlist { Line 1301  sub print_userlist {
                          \%advrolehash,$permission);                           \%advrolehash,$permission);
     } else {      } else {
         my (%cstr_roles,%dom_roles);          my (%cstr_roles,%dom_roles);
         if ($context eq 'construction_space') {          if ($context eq 'author') {
             # List co-authors and assistant co-authors              # List co-authors and assistant co-authors
             my @possroles = ('ca','aa');              my @possroles = ('ca','aa');
             %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef,              %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef,
Line 1313  sub print_userlist { Line 1317  sub print_userlist {
                                          \%userinfo,$dom_roles{$key},$permission);                                           \%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 %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']);
                 my %coauthors;                  my %coauthors;
                 foreach my $key (keys(%dom_roles)) {                  foreach my $key (keys(%dom_roles)) {
Line 1392  sub print_userlist { Line 1396  sub print_userlist {
         }          }
     }      }
     if (keys(%userlist) == 0) {      if (keys(%userlist) == 0) {
         if ($context eq 'construction_space') {          if ($context eq 'author') {
             $r->print(&mt('There are no co-authors to display.')."\n");              $r->print(&mt('There are no co-authors to display.')."\n");
         } elsif ($context eq 'domain') {          } elsif ($context eq 'domain') {
             if ($env{'form.roletype'} eq 'domain') {              if ($env{'form.roletype'} eq 'domain') {
                 $r->print(&mt('There are no users with domain roles to display.')."\n");                  $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");                  $r->print(&mt('There are no authors or co-authors to display.')."\n");
             } elsif ($env{'form.roletype'} eq 'course') {              } elsif ($env{'form.roletype'} eq 'course') {
                 $r->print(&mt('There are no course users to display')."\n");                   $r->print(&mt('There are no course users to display')."\n"); 
Line 1433  sub gather_userinfo { Line 1437  sub gather_userinfo {
     foreach my $item (keys(%{$rolehash})) {      foreach my $item (keys(%{$rolehash})) {
         @{$userlist->{$item}} = ();          @{$userlist->{$item}} = ();
         my %userdata;          my %userdata;
         if ($context eq 'construction_space' || $context eq 'course') {           if ($context eq 'author' || $context eq 'course') { 
             ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) =              ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) =
                 split(/:/,$item);                  split(/:/,$item);
             ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item});              ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item});
Line 1444  sub gather_userinfo { Line 1448  sub gather_userinfo {
                     split(/:/,$item);                      split(/:/,$item);
                 ($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item});                  ($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item});
                 &build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist);                  &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') {                  if (ref($rolehash->{$item}) eq 'HASH') {
                     $userdata{'extent'} = $item;                      $userdata{'extent'} = $item;
                     foreach my $key (keys(%{$rolehash->{$item}})) {                      foreach my $key (keys(%{$rolehash->{$item}})) {
Line 1760  sub show_users_list { Line 1764  sub show_users_list {
         $cnum = $env{'course.'.$cid.'.num'};          $cnum = $env{'course.'.$cid.'.num'};
         ($classgroups) = &Apache::loncoursedata::get_group_memberships(          ($classgroups) = &Apache::loncoursedata::get_group_memberships(
                                      $userlist,$keylist,$cdom,$cnum);                                       $userlist,$keylist,$cdom,$cnum);
         if (! exists($env{'form.displayphotos'})) {          if ($mode eq 'autoenroll') {
             $env{'form.displayphotos'} = 'off';              $env{'form.showrole'} = 'st';
         }          } else {
         $displayphotos = $env{'form.displayphotos'};              if (! exists($env{'form.displayphotos'})) {
         if (! exists($env{'form.displayclickers'})) {                  $env{'form.displayphotos'} = 'off';
             $env{'form.displayclickers'} = 'off';              }
         }              $displayphotos = $env{'form.displayphotos'};
         $displayclickers = $env{'form.displayclickers'};              if (! exists($env{'form.displayclickers'})) {
         if ($env{'course.'.$cid.'.internal.showphoto'}) {                  $env{'form.displayclickers'} = 'off';
             $r->print('              }
               $displayclickers = $env{'form.displayclickers'};
               if ($env{'course.'.$cid.'.internal.showphoto'}) {
                   $r->print('
 <script type="text/javascript">  <script type="text/javascript">
 function photowindow(photolink) {  function photowindow(photolink) {
     var title = "Photo_Viewer";      var title = "Photo_Viewer";
Line 1779  function photowindow(photolink) { Line 1786  function photowindow(photolink) {
     stdeditbrowser.focus();      stdeditbrowser.focus();
 }  }
 </script>  </script>
            ');                 ');
         }              }
         $r->print(<<END);              $r->print(<<END);
 <input type="hidden" name="displayphotos" value="$displayphotos" />  <input type="hidden" name="displayphotos" value="$displayphotos" />
 <input type="hidden" name="displayclickers" value="$displayclickers" />  <input type="hidden" name="displayclickers" value="$displayclickers" />
 END  END
           }
     }      }
     unless ($mode eq 'autoenroll') {      if ($mode ne 'autoenroll') {
         my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript();          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 $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox");
         my $singconfirm = &mt(' for a single user');          my $singconfirm = &mt(' for a single user');
Line 1883  END Line 1891  END
                       );                        );
     if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {      if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
         $lt{'extent'} = &mt('Course(s): description, section(s), status');          $lt{'extent'} = &mt('Course(s): description, section(s), status');
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         $lt{'extent'} = &mt('Author');           $lt{'extent'} = &mt('Author'); 
     }      }
     my @cols = ('username','domain','id','fullname');      my @cols = ('username','domain','id','fullname');
Line 1896  END Line 1904  END
     if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') {      if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') {
         push(@cols,'role');          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')) {                                  $env{'form.roletype'} eq 'course')) {
         push (@cols,'extent');          push (@cols,'extent');
     }      }
Line 1915  END Line 1923  END
     } elsif ($env{'form.showrole'} ne 'Any') {      } elsif ($env{'form.showrole'} ne 'Any') {
         $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'});          $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'});
     }      }
     my $results_description = &results_header_row($rolefilter,$statusmode,      my $results_description;
                                                   $context);      if ($mode ne 'autoenroll') {
     $r->print('<b>'.$results_description.'</b><br />');          $results_description = &results_header_row($rolefilter,$statusmode,
                                                      $context,$permission);
           $r->print('<b>'.$results_description.'</b><br />');
       }
     my ($output,$actionselect);      my ($output,$actionselect);
     if ($mode eq 'html' || $mode eq 'view') {      if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {
         if ($permission->{'cusr'}) {          if ($mode ne 'autoenroll') {
             $actionselect = &select_actions($context,$setting,$statusmode);              if ($permission->{'cusr'}) {
         }                  $actionselect = &select_actions($context,$setting,$statusmode);
         $r->print(<<END);              }
               $r->print(<<END);
 <input type="hidden" name="srchby"  value="uname" />  <input type="hidden" name="srchby"  value="uname" />
 <input type="hidden" name="srchin"   value="dom" />  <input type="hidden" name="srchin"   value="dom" />
 <input type="hidden" name="srchtype" value="exact" />  <input type="hidden" name="srchtype" value="exact" />
 <input type="hidden" name="srchterm" value="" />  <input type="hidden" name="srchterm" value="" />
 <input type="hidden" name="srchdomain" value="" />   <input type="hidden" name="srchdomain" value="" /> 
 END  END
          if ($mode ne 'autoenroll') {              $output = '<p>';
              $output = '<p>';              my @linkdests = ('aboutme');
              my @linkdests = ('aboutme');              if ($permission->{'cusr'}) {
              if ($permission->{'cusr'}) {                  push (@linkdests,'modify');
                  push (@linkdests,'modify');                  $output .= '<span class="LC_nobreak">'.$lt{'link'}.':&nbsp;';
                  $output .= '<span class="LC_nobreak">'.$lt{'link'}.':&nbsp;';                  my $usernamelink = $env{'form.usernamelink'};
                  my $usernamelink = $env{'form.usernamelink'};                  if ($usernamelink eq '') {
                  if ($usernamelink eq '') {                      $usernamelink = 'aboutme';
                      $usernamelink = 'aboutme';                  }
                  }                  foreach my $item (@linkdests) {
                  foreach my $item (@linkdests) {                      my $checkedstr = '';
                      my $checkedstr = '';                      if ($item eq $usernamelink) {
                      if ($item eq $usernamelink) {                          $checkedstr = ' checked="checked" ';
                          $checkedstr = ' checked="checked" ';                      }
                      }                      $output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'>&nbsp;'.$lt{$item}.'</label>&nbsp;&nbsp;';
                      $output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'>&nbsp;'.$lt{$item}.'</label>&nbsp;&nbsp;';                  }
                  }                  $output .= '</span><br />';
                  $output .= '</span><br />';              } else {
              } else {                  $output .= &mt("Click on a username to view the user's personal page.").'<br />';
                  $output .= &mt("Click on a username to view the user's personal page.").'<br />';              }
              }              if ($actionselect) {
              if ($actionselect) {                  $output .= <<"END"; 
                  $output .= <<"END";   
 $lt{'ac'}:&nbsp;$actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p>  $lt{'ac'}:&nbsp;$actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p>
 <p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> &nbsp;  <p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> &nbsp;
 <input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" />  <input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" />
 END  END
              }              }
         }          }
         $output .= "\n<p>\n".          $output .= "\n<p>\n".
                   &Apache::loncommon::start_data_table().                    &Apache::loncommon::start_data_table().
Line 1976  END Line 1987  END
             $output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n";              $output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n";
         }          }
         my %role_types = &role_type_names();          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') {              if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
                 # Clicker display on or off?                  # Clicker display on or off?
                 my %clicker_options = &Apache::lonlocal::texthash(                  my %clicker_options = &Apache::lonlocal::texthash(
Line 2010  END Line 2021  END
                       '    </th>'."\n";                        '    </th>'."\n";
                 }                  }
             }              }
             $output .= &Apache::loncommon::end_data_table_header_row();  
         }          }
           $output .= &Apache::loncommon::end_data_table_header_row();
 # Done with the HTML header line  # Done with the HTML header line
     } elsif ($mode eq 'csv') {      } elsif ($mode eq 'csv') {
         #          #
Line 2073  END Line 2084  END
                     delete($userlist->{$user});                      delete($userlist->{$user});
                     next;                      next;
                 }                  }
             } elsif ($env{'form.roletype'} eq 'construction_space') {              } elsif ($env{'form.roletype'} eq 'author') {
                 ($uname,$udom,$role) = split(/:/,$user,-1);                  ($uname,$udom,$role) = split(/:/,$user,-1);
             } elsif ($env{'form.roletype'} eq 'course') {              } elsif ($env{'form.roletype'} eq 'course') {
                 ($uname,$udom,$role) = split(/:/,$user);                  ($uname,$udom,$role) = split(/:/,$user);
Line 2147  END Line 2158  END
         }          }
         if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {          if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
             $r->print(&Apache::loncommon::start_data_table_row());              $r->print(&Apache::loncommon::start_data_table_row());
             $r->print("<td>$rowcount</td>\n");  
             my $checkval;              my $checkval;
             if ($mode ne 'autoenroll' && $actionselect) {              if ($mode eq 'autoenroll') {
                 $checkval = $user;                   my $cellentry;
                 if ($context eq 'course') {                  if ($in{'type'} eq 'auto') {
                     if ($role eq 'st') {                      $cellentry = '<b>'.&mt('auto').'</b>&nbsp;<label><input type="checkbox" name="chgauto" value="'.$in{'username'}.':'.$in{'domain'}.'" />&nbsp;Change</label>';
                         $checkval .= ':st';                      $autocount ++;
                     }                  } else {
                     $checkval .= ':'.$in{'section'};                      $cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><label><input type="checkbox" name="chgmanual" value="'.$in{'username'}.':'.$in{'domain'}.'" />&nbsp;Change</label></nobr></td></tr><tr><td><nobr>';
                     if ($role eq 'st') {                      $manualcount ++;
                         $checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'};                      if ($in{'lockedtype'}) {
                           $cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" />&nbsp;'.&mt('Unlock').'</label>';
                           $unlockcount ++;
                       } else {
                           $cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" />&nbsp;'.&mt('Lock').'</label>';
                           $lockcount ++;
                     }                      }
                       $cellentry .= '</nobr></td></tr></table>';
                   }
                   $r->print("<td>$cellentry</td>\n");
               } else {
                   $r->print("<td>$rowcount</td>\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('<td><input type="checkbox" name="actionlist" value="'.
                                 $checkval.'"></td>');
                 }                  }
                 $r->print('<td><input type="checkbox" name="actionlist" value="'.  
                           $checkval.'"></td>');  
             }              }
             foreach my $item (@cols) {              foreach my $item (@cols) {
                 if ($item eq 'username') {                  if ($item eq 'username') {
                     $r->print('<td>'.&print_username_link($permission,\%in).'</td>');                      $r->print('<td>'.&print_username_link($mode,$permission,
                 } elsif (($item eq 'start' || $item eq 'end') && ($mode ne 'autoeroll') && ($actionselect)) {                                                            \%in).'</td>');
                   } elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) {
                     $r->print('<td>'.$in{$item}.'<input type="hidden" name="'.$checkval.'_'.$item.'" value="'.$sdata->[$index{$item}].'" /></td>'."\n");                      $r->print('<td>'.$in{$item}.'<input type="hidden" name="'.$checkval.'_'.$item.'" value="'.$sdata->[$index{$item}].'" /></td>'."\n");
                 } else {                  } else {
                     $r->print('<td>'.$in{$item}.'</td>'."\n");                      $r->print('<td>'.$in{$item}.'</td>'."\n");
                 }                  }
             }              }
             if ($context eq 'course') {              if (($context eq 'course') && ($mode ne 'autoenroll')) {
                 if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {                  if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
                     if ($displayclickers eq 'on') {                      if ($displayclickers eq 'on') {
                         my $clickers =                          my $clickers =
Line 2252  END Line 2285  END
 }  }
   
 sub print_username_link {  sub print_username_link {
     my ($permission,$in) = @_;      my ($mode,$permission,$in) = @_;
     my $output;      my $output;
     if (!$permission->{'cusr'}) {      if ($mode eq 'autoenroll') {
           $output = $in->{'username'};
       } elsif (!$permission->{'cusr'}) {
         $output = &Apache::loncommon::aboutmewrapper($in->{'username'},          $output = &Apache::loncommon::aboutmewrapper($in->{'username'},
                                                      $in->{'username'},                                                       $in->{'username'},
                                                      $in->{'domain'});                                                       $in->{'domain'});
Line 2268  sub print_username_link { Line 2303  sub print_username_link {
   
 sub role_type_names {  sub role_type_names {
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                          'domain'             => 'Domain Roles',                           'domain' => 'Domain Roles',
                          'construction_space' => 'Co-Author Roles',                           'author' => 'Co-Author Roles',
                          'course'             => 'Course Roles',                           'course' => 'Course Roles',
              );               );
     return %lt;      return %lt;
 }  }
Line 2291  sub select_actions { Line 2326  sub select_actions {
 <option value="chgdates">'.$lt{'chgdates'}.'</option>';  <option value="chgdates">'.$lt{'chgdates'}.'</option>';
         $choices{'dates'} = 1;          $choices{'dates'} = 1;
     } else {      } else {
         if ($statusmode eq 'Active' || $statusmode eq 'Future') {  
             $options .= '  
 <option value="revoke">'.$lt{'revoke'}.'</option>';  
         }  
         if ($statusmode eq 'Future') {          if ($statusmode eq 'Future') {
             $options .= '              $options .= '
 <option value="activate">'.$lt{'activate'}.'</option>';  <option value="activate">'.$lt{'activate'}.'</option>';
Line 2304  sub select_actions { Line 2335  sub select_actions {
 <option value="reenable">'.$lt{'reenable'}.'</option>';  <option value="reenable">'.$lt{'reenable'}.'</option>';
             $choices{'dates'} = 1;              $choices{'dates'} = 1;
         }          }
           if ($statusmode eq 'Active' || $statusmode eq 'Future') {
               $options .= '
   <option value="chgdates">'.$lt{'chgdates'}.'</option>
   <option value="revoke">'.$lt{'revoke'}.'</option>';
               $choices{'dates'} = 1;
           }
     }      }
     if ($context eq 'domain') {      if ($context eq 'domain') {
         $options .= '          $options .= '
Line 2524  END Line 2561  END
 }  }
   
 sub results_header_row {  sub results_header_row {
     my ($rolefilter,$statusmode,$context) = @_;      my ($rolefilter,$statusmode,$context,$permission) = @_;
     my ($description,$showfilter);      my ($description,$showfilter);
     if ($rolefilter ne 'Any') {      if ($rolefilter ne 'Any') {
         $showfilter = $rolefilter;          $showfilter = $rolefilter;
Line 2544  sub results_header_row { Line 2581  sub results_header_row {
                 $description .= &mt('All users in course with [_1] roles',$rolefilter);                  $description .= &mt('All users in course with [_1] roles',$rolefilter);
             }              }
         }          }
     } elsif ($context eq 'construction_space') {          if (exists($permission->{'view_section'})) {
         $description = &mt('Author space for [_1].').' ';              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 <span class="LC_cusr_emph">[_1]</span>',
           &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})).':&nbsp;&nbsp;';
         if ($statusmode eq 'Expired') {          if ($statusmode eq 'Expired') {
             $description .= &mt('Co-authors with expired [_1] roles',$showfilter);              $description .= &mt('Co-authors with expired [_1] roles',$showfilter);
         } elsif ($statusmode eq 'Future') {          } elsif ($statusmode eq 'Future') {
Line 2576  sub results_header_row { Line 2622  sub results_header_row {
                     $description .= &mt('All users in domain with [_1] roles',$rolefilter);                      $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') {              if ($statusmode eq 'Expired') {
                 $description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter);                  $description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter);
             } elsif ($statusmode eq 'Future') {              } elsif ($statusmode eq 'Future') {
Line 2902  sub upfile_drop_add { Line 2948  sub upfile_drop_add {
         } elsif ($setting eq 'course') {          } elsif ($setting eq 'course') {
             $defaultrole = $env{'form.courserole'};              $defaultrole = $env{'form.courserole'};
         }            }  
     } elsif ($context eq 'construction_space') {      } elsif ($context eq 'author') {
         $defaultrole = $env{'form.defaultrole'};          $defaultrole = $env{'form.defaultrole'};
     }      }
     if ($context eq 'domain' && $setting eq 'course') {       if ($context eq 'domain' && $setting eq 'course') { 
Line 2925  sub upfile_drop_add { Line 2971  sub upfile_drop_add {
         #######################################          #######################################
         if ($context eq 'course') {          if ($context eq 'course') {
             $r->print('<h3>'.&mt('Enrolling Users')."</h3>\n<p>\n");              $r->print('<h3>'.&mt('Enrolling Users')."</h3>\n<p>\n");
         } elsif ($context eq 'construction_space') {          } elsif ($context eq 'author') {
             $r->print('<h3>'.&mt('Updating Co-authors')."</h3>\n<p>\n");              $r->print('<h3>'.&mt('Updating Co-authors')."</h3>\n<p>\n");
         } else {          } else {
             $r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n");              $r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n");
Line 3065  sub upfile_drop_add { Line 3111  sub upfile_drop_add {
                                 next if ($alerts{'username'}{$domain}{$username});                                  next if ($alerts{'username'}{$domain}{$username});
                             }                              }
                         }                          }
                       } else {
   # FIXME check if user info can be updated.   
                     }                      }
                     if ($id ne '') {                      if ($id ne '') {
                         if (!$newuser) {                          if (!$newuser) {
Line 3117  sub upfile_drop_add { Line 3165  sub upfile_drop_add {
                             $r->print('<br />'.                               $r->print('<br />'. 
       &mt('<b>[_1]</b>: Unable to enroll.  No password specified.',$username)        &mt('<b>[_1]</b>: Unable to enroll.  No password specified.',$username)
                                      );                                       );
                         } elsif ($context eq 'construction_space') {                          } elsif ($context eq 'author') {
                             $r->print('<br />'.                              $r->print('<br />'.
       &mt('<b>[_1]</b>: Unable to add co-author.  No password specified.',$username)        &mt('<b>[_1]</b>: Unable to add co-author.  No password specified.',$username)
                                      );                                       );
Line 3143  sub upfile_drop_add { Line 3191  sub upfile_drop_add {
                       &mt('Authentication changed for [_1] existing users.',                        &mt('Authentication changed for [_1] existing users.',
                           $counts{'auth'})."</p>\n");                            $counts{'auth'})."</p>\n");
         }          }
         if (keys(%alerts) > 0) {          $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));
             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('<form name="uploadresult" action="/adm/createuser">');          $r->print('<form name="uploadresult" action="/adm/createuser">');
         $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate']));          $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate']));
         $r->print('</form>');          $r->print('</form>');
Line 3206  sub upfile_drop_add { Line 3222  sub upfile_drop_add {
     } # end of unless      } # 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 {  sub user_change_result {
     my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username,      my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username,
         $userchg) = @_;          $userchg) = @_;
Line 3308  sub update_user_list { Line 3364  sub update_user_list {
             } else {              } else {
                 $scope = $scopestem.'/'.$sec;                  $scope = $scopestem.'/'.$sec;
             }              }
         } elsif ($context eq 'construction_space') {          } elsif ($context eq 'author') {
             ($uname,$udom,$role) = split(/\:/,$item,-1);              ($uname,$udom,$role) = split(/\:/,$item,-1);
             $scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'};              $scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'};
         } elsif ($context eq 'domain') {          } elsif ($context eq 'domain') {
             if ($setting eq 'domain') {              if ($setting eq 'domain') {
                 ($role,$uname,$udom) = split(/\:/,$item,-1);                  ($role,$uname,$udom) = split(/\:/,$item,-1);
                 $scope = '/'.$env{'request.role.domain'}.'/';                  $scope = '/'.$env{'request.role.domain'}.'/';
             } elsif ($setting eq 'construction_space') {               } elsif ($setting eq 'author') { 
                 ($uname,$udom,$role,$scope) = split(/\:/,$item);                  ($uname,$udom,$role,$scope) = split(/\:/,$item);
             } elsif ($setting eq 'course') {              } elsif ($setting eq 'course') {
                 ($uname,$udom,$role,$cid,$sec,$type,$locktype) =                   ($uname,$udom,$role,$cid,$sec,$type,$locktype) = 
Line 3675  ENDSECCODE Line 3731  ENDSECCODE
     return $setsection_js;       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;  1;
   

Removed from v.1.12  
changed lines
  Added in v.1.16


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>