Diff for /loncom/interface/loncreateuser.pm between versions 1.302 and 1.319

version 1.302, 2009/08/04 19:59:19 version 1.319, 2009/10/30 04:44:56
Line 68  use Apache::loncommon; Line 68  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::longroup;  use Apache::longroup;
 use Apache::lonuserutils;  use Apache::lonuserutils;
 use Apache::selfenroll();  use Apache::loncoursequeueadmin;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 my $loginscript; # piece of javascript used in two separate instances  my $loginscript; # piece of javascript used in two separate instances
Line 110  sub initialize_authen_forms { Line 110  sub initialize_authen_forms {
   
 sub auth_abbrev {  sub auth_abbrev {
     my %abv_auth = (      my %abv_auth = (
                        krb5     => 'krb',
                      krb4     => 'krb',                       krb4     => 'krb',
                      internal => 'int',                       internal => 'int',
                      localuth => 'loc',                       localuth => 'loc',
Line 216  END_SCRIPT Line 217  END_SCRIPT
   
 sub build_tools_display {  sub build_tools_display {
     my ($ccuname,$ccdomain,$context) = @_;      my ($ccuname,$ccdomain,$context) = @_;
     my (@usertools,%userenv,$output);      my (@usertools,%userenv,$output,@options,%validations,%reqtitles,%reqdisplay,
           $colspan);
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                    'blog'       => "Personal User Blog",                     'blog'       => "Personal User Blog",
                    'aboutme'    => "Personal Information Page",                     'aboutme'    => "Personal Information Page",
Line 235  sub build_tools_display { Line 237  sub build_tools_display {
                       'requestcourses.official','requestcourses.unofficial',                        'requestcourses.official','requestcourses.unofficial',
                       'requestcourses.community');                        'requestcourses.community');
         @usertools = ('official','unofficial','community');          @usertools = ('official','unofficial','community');
           @options =('norequest','approval','autolimit','validate');
           %validations = &Apache::lonnet::auto_courserequest_checks($ccdomain);
           %reqtitles = &courserequest_titles();
           %reqdisplay = &courserequest_display();
           $colspan = ' colspan="2"';
     } else {      } else {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                           'tools.aboutme','tools.portfolio','tools.blog');                            'tools.aboutme','tools.portfolio','tools.blog');
         @usertools = ('aboutme','blog','portfolio');          @usertools = ('aboutme','blog','portfolio');
     }      }
     foreach my $item (@usertools) {      foreach my $item (@usertools) {
         my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off);          my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,
               $currdisp,$custdisp,$custradio);
         $cust_off = 'checked="checked" ';          $cust_off = 'checked="checked" ';
         $tool_on = 'checked="checked" ';          $tool_on = 'checked="checked" ';
         $curr_access =            $curr_access =  
             &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,              &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,
                                               $context);                                                $context);
         if ($userenv{$context.'.'.$item} eq '') {          if ($userenv{$context.'.'.$item} ne '') {
             $custom_access = 'default';  
             if (!$curr_access) {  
                 $tool_off = 'checked="checked" ';  
                 $tool_on = '';  
             }  
         } else {  
             $custom_access = 'custom';  
             $cust_on = ' checked="checked" ';              $cust_on = ' checked="checked" ';
             $cust_off = '';              $cust_off = '';
             if ($userenv{$context.'.'.$item} == 0) {          }
                 $tool_off = 'checked="checked" ';          if ($context eq 'requestcourses') {
                 $tool_on = '';              if ($userenv{$context.'.'.$item} eq '') {
                   $custom_access = &mt('Currently from default setting.');
               } else {
                   $custom_access = &mt('Currently from custom setting.');
               }
           } else {
               if ($userenv{$context.'.'.$item} eq '') {
                   $custom_access =
                       &mt('Availability determined currently from default setting.');
                   if (!$curr_access) {
                       $tool_off = 'checked="checked" ';
                       $tool_on = '';
                   }
               } else {
                   $custom_access =
                       &mt('Availability determined currently from custom setting.');
                   if ($userenv{$context.'.'.$item} == 0) {
                       $tool_off = 'checked="checked" ';
                       $tool_on = '';
                   }
             }              }
         }          }
         $output .= '  <tr class="LC_info_row">'."\n".          $output .= '  <tr class="LC_info_row">'."\n".
                    '   <td>'.$lt{$item}.'</td>'."\n".                     '   <td'.$colspan.'>'.$lt{$item}.'</td>'."\n".
                    '  </tr>'."\n".                     '  </tr>'."\n".
                    &Apache::loncommon::start_data_table_row()."\n".                     &Apache::loncommon::start_data_table_row()."\n";
                    '  <td>'.&mt('Availability determined currently from [_1] setting.',$custom_access).          if ($context eq 'requestcourses') {
                    '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$lt{'avai'}.': '.              my ($curroption,$currlimit);
                    ($curr_access?&mt('Yes'):&mt('No')).'</td>'."\n".              $curroption = $userenv{$context.'.'.$item};
               if (!$curroption) {
                   $curroption = 'norequest';
               }
               if ($curroption =~ /^autolimit=(\d*)$/) {
                   $currlimit = $1;
                   if ($currlimit eq '') {
                       $currdisp = &mt('Yes, automatic creation');
                   } else {
                       $currdisp = &mt('Yes, up to [quant,_1,request]/user',$currlimit);
                   }
               } else {
                   $currdisp = $reqdisplay{$curroption};
               }
               $custdisp = '<table>';
               foreach my $option (@options) {
                   my $val = $option;
                   if ($option eq 'norequest') {
                       $val = 0;
                   }
                   if ($option eq 'validate') {
                       my $canvalidate = 0;
                       if (ref($validations{$item}) eq 'HASH') {
                           if ($validations{$item}{'_custom_'}) {
                               $canvalidate = 1;
                           }
                       }
                       next if (!$canvalidate);
                   }
                   my $checked = '';
                   if ($option eq $curroption) {
                       $checked = ' checked="checked"';
                   } elsif ($option eq 'autolimit') {
                       if ($curroption =~ /^autolimit/) {
                           $checked = ' checked="checked"';
                       }
                   }
                   $custdisp .= '<tr><td><span class="LC_nobreak"><label>'.
                                '<input type="radio" name="crsreq_'.$item.
                                '" value="'.$val.'"'.$checked.' />'.
                                $reqtitles{$option}.'</label>&nbsp;';
                   if ($option eq 'autolimit') {
                       $custdisp .= '<input type="text" name="crsreq_'.
                                    $item.'_limit" size="1" '.
                                    'value="'.$currlimit.'" /></span><br />'.
                                    $reqtitles{'unlimited'};
                    } else {
                        $custdisp .= '</span>';
                    }
                    $custdisp .= '</td></tr>';
               }
               $custdisp .= '</table>';
               $custradio = '</span></td><td>'.&mt('Custom setting').'<br />'.$custdisp;
           } else {
               $currdisp = ($curr_access?&mt('Yes'):&mt('No'));
               $custdisp = '<span class="LC_nobreak"><label>'.
                           '<input type="radio" name="'.$context.'_'.$item.'"'.
                           ' value="1"'. $tool_on.'/>'.&mt('On').'</label>&nbsp;<label>'.
                           '<input type="radio" name="'.$context.'_'.$item.'" value="0" '.
                           $tool_off.'/>'.&mt('Off').'</label></span>';
               $custradio = ('&nbsp;'x2).'--'.$lt{'cusa'}.':&nbsp;'.$custdisp.
                             '</span>';
           }
           $output .= '  <td'.$colspan.'>'.$custom_access.('&nbsp;'x4).
                      $lt{'avai'}.': '.$currdisp.'</td>'."\n".
                    &Apache::loncommon::end_data_table_row()."\n".                     &Apache::loncommon::end_data_table_row()."\n".
                    &Apache::loncommon::start_data_table_row()."\n".                     &Apache::loncommon::start_data_table_row()."\n".
                    '  <td><span class="LC_nobreak">'.$lt{'chse'}.': <label>'.                     '  <td style="vertical-align:top;"><span class="LC_nobreak">'.
                      $lt{'chse'}.': <label>'.
                    '<input type="radio" name="custom'.$item.'" value="0" '.                     '<input type="radio" name="custom'.$item.'" value="0" '.
                    $cust_off.'/>'.$lt{'usde'}.'</label>&nbsp;&nbsp;&nbsp;'.                     $cust_off.'/>'.$lt{'usde'}.'</label>'.('&nbsp;' x3).
                     '<label><input type="radio" name="custom'.$item.'" value="1" '.                     '<label><input type="radio" name="custom'.$item.'" value="1" '.
                    $cust_on.'/>'.$lt{'uscu'}.'</label>&nbsp;&nbsp;--&nbsp;&nbsp;'.                     $cust_on.'/>'.$lt{'uscu'}.'</label>'.$custradio.'</td>'.
                    $lt{'cusa'}.':&nbsp;<label>'.  
                    '<input type="radio" name="'.$context.'_'.$item.'" value="1" '.  
                    $tool_on.'/>'.&mt('On').'</label>&nbsp;<label>'.  
                    '<input type="radio" name="'.$context.'_'.$item.'" value="0" '.  
                    $tool_off.'/>'.&mt('Off').'</label></span></td>'."\n".  
                    &Apache::loncommon::end_data_table_row()."\n";                     &Apache::loncommon::end_data_table_row()."\n";
     }      }
     return $output;      return $output;
Line 288  sub build_tools_display { Line 368  sub build_tools_display {
   
 sub coursereq_externaluser {  sub coursereq_externaluser {
     my ($ccuname,$ccdomain,$cdom) = @_;      my ($ccuname,$ccdomain,$cdom) = @_;
     my (@usertools,%userenv,$output);      my (@usertools,@options,%validations,%userenv,$output);
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                    'official'   => 'Can request creation of official courses',                     'official'   => 'Can request creation of official courses',
                    'unofficial' => 'Can request creation of unofficial courses',                     'unofficial' => 'Can request creation of unofficial courses',
Line 299  sub coursereq_externaluser { Line 379  sub coursereq_externaluser {
                       'reqcrsotherdom.official','reqcrsotherdom.unofficial',                        'reqcrsotherdom.official','reqcrsotherdom.unofficial',
                       'reqcrsotherdom.community');                        'reqcrsotherdom.community');
     @usertools = ('official','unofficial','community');      @usertools = ('official','unofficial','community');
       @options = ('approval','validate','autolimit');
       %validations = &Apache::lonnet::auto_courserequest_checks($cdom);
       my $optregex = join('|',@options);
       my %reqtitles = &courserequest_titles();
     foreach my $item (@usertools) {      foreach my $item (@usertools) {
         my ($tool_on,$tool_off);          my ($curroption,$currlimit,$tooloff);
         $tool_off = 'checked="checked" ';  
         if ($userenv{'reqcrsotherdom.'.$item} ne '') {          if ($userenv{'reqcrsotherdom.'.$item} ne '') {
             my @curr = split(',',$userenv{'reqcrsotherdom.'.$item});              my @curr = split(',',$userenv{'reqcrsotherdom.'.$item});
             if (grep(/^\Q$cdom\E$/,@curr)) {              foreach my $req (@curr) {
                 $tool_on = 'checked="checked" ';                  if ($req =~ /^\Q$cdom\E\:($optregex)=?(\d*)$/) {
                 $tool_off = '';                      $curroption = $1;
                       $currlimit = $2;
                       last;
                   }
               }
               if (!$curroption) {
                   $curroption = 'norequest';
                   $tooloff = ' checked="checked"';
               }
           } else {
               $curroption = 'norequest';
               $tooloff = ' checked="checked"';
           }
           $output.= &Apache::loncommon::start_data_table_row()."\n".
                     '  <td><span class="LC_nobreak">'.$lt{$item}.': </span></td><td>'.
                     '<table><tr><td valign="top">'."\n".
                     '<label><input type="radio" name="reqcrsotherdom_'.$item.
                     '" value=""'.$tooloff.' />'.$reqtitles{'norequest'}.
                     '</label></td>';
           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 .= '<td valign="top"><span class="LC_nobreak"><label>'.
                          '<input type="radio" name="reqcrsotherdom_'.$item.
                          '" value="'.$option.'"'.$checked.' />'.
                          $reqtitles{$option}.'</label>';
               if ($option eq 'autolimit') {
                   $output .= '&nbsp;<input type="text" name="reqcrsotherdom_'.
                              $item.'_limit" size="1" '.
                              'value="'.$currlimit.'" /></span>'.
                              '<br />'.$reqtitles{'unlimited'};
               } else {
                   $output .= '</span>';
             }              }
               $output .= '</td>';
         }          }
         $output .= &Apache::loncommon::start_data_table_row()."\n".          $output .= '</td></tr></table></td>'."\n".
                    '  <td><span class="LC_nobreak">'.$lt{$item}.': <label>'.  
                    '<input type="radio" name="reqcrsotherdom_'.$item.'" value="1" '.  
                    $tool_on.'/>'.&mt('Yes').'</label>&nbsp;<label>'.  
                    '<input type="radio" name="reqcrsotherdom_'.$item.'" value="0" '.  
                    $tool_off.'/>'.&mt('No').'</label></span></td>'."\n".  
                    &Apache::loncommon::end_data_table_row()."\n";                     &Apache::loncommon::end_data_table_row()."\n";
     }      }
     return $output;      return $output;
 }  }
   
   sub courserequest_titles {
       my %titles = &Apache::lonlocal::texthash (
                                      official   => 'Official',
                                      unofficial => 'Unofficial',
                                      community  => 'Communities',
                                      norequest  => 'Not allowed',
                                      approval   => 'Approval by Dom. Coord.',
                                      validate   => 'With validation',
                                      autolimit  => 'Numerical limit',
                                      unlimited  => '(blank for unlimited)',
                    );
       return %titles;
   }
   
   sub courserequest_display {
       my %titles = &Apache::lonlocal::texthash (
                                      approval   => 'Yes, need approval',
                                      validate   => 'Yes, with validation',
                                      norequest  => 'No',
      );
      return %titles;
   }
   
 # =================================================================== Phase one  # =================================================================== Phase one
   
 sub print_username_entry_form {  sub print_username_entry_form {
     my ($r,$context,$response,$srch,$forcenewuser) = @_;      my ($r,$context,$response,$srch,$forcenewuser,$crstype) = @_;
     my $defdom=$env{'request.role.domain'};      my $defdom=$env{'request.role.domain'};
     my $formtoset = 'crtuser';      my $formtoset = 'crtuser';
     if (exists($env{'form.startrolename'})) {      if (exists($env{'form.startrolename'})) {
Line 345  sub print_username_entry_form { Line 490  sub print_username_entry_form {
     my %loaditems = (      my %loaditems = (
                 'onload' => "javascript:setFormElements(document.$formtoset)",                  'onload' => "javascript:setFormElements(document.$formtoset)",
                     );                      );
     my %breadcrumb_text = &singleuser_breadcrumb();      my %breadcrumb_text = &singleuser_breadcrumb($crstype);
     my $start_page =      my $start_page =
  &Apache::loncommon::start_page('User Management',   &Apache::loncommon::start_page('User Management',
        $jscript,{'add_entries' => \%loaditems,});         $jscript,{'add_entries' => \%loaditems,});
Line 372  sub print_username_entry_form { Line 517  sub print_username_entry_form {
  ('make new role' => 'Generate new role ...',%existingroles));   ('make new role' => 'Generate new role ...',%existingroles));
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                     'srst' => 'Search for a user and enroll as a student',                      'srst' => 'Search for a user and enroll as a student',
                       'srme' => 'Search for a user and enroll as a member',
                     'srad' => 'Search for a user and modify/add user information or roles',                      'srad' => 'Search for a user and modify/add user information or roles',
     'usr'  => "Username",      'usr'  => "Username",
                     'dom'  => "Domain",                      'dom'  => "Domain",
Line 395  ENDCUSTOM Line 541  ENDCUSTOM
     } else {      } else {
         my $actiontext = $lt{'srad'};          my $actiontext = $lt{'srad'};
         if ($env{'form.action'} eq 'singlestudent') {          if ($env{'form.action'} eq 'singlestudent') {
             $actiontext = $lt{'srst'};              if ($crstype eq 'Community') {
                   $actiontext = $lt{'srme'};
               } else {
                   $actiontext = $lt{'srst'};
               }
         }          }
         $r->print("          $r->print("
 <h3>$actiontext</h3>");  <h3>$actiontext</h3>");
         if ($env{'form.origform'} ne 'crtusername') {          if ($env{'form.origform'} ne 'crtusername') {
             $r->print("\n".$response);              $r->print("\n".$response);
         }          }
         $r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response));          $r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response,$crstype));
     }      }
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub entry_form {  sub entry_form {
     my ($dom,$srch,$forcenewuser,$context,$responsemsg) = @_;      my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_;
     my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);      my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom);
     my ($usertype,$inexact);      my ($usertype,$inexact);
     if (ref($srch) eq 'HASH') {      if (ref($srch) eq 'HASH') {
Line 448  ENDBLOCK Line 598  ENDBLOCK
         my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain');          my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain');
         my %lt=&Apache::lonlocal::texthash(          my %lt=&Apache::lonlocal::texthash(
                   'enro' => 'Enroll one student',                    'enro' => 'Enroll one student',
                     'enrm' => 'Enroll one member',
                   'admo' => 'Add/modify a single user',                    'admo' => 'Add/modify a single user',
                   'crea' => 'create new user if required',                    'crea' => 'create new user if required',
                   'uskn' => "username is known",                    'uskn' => "username is known",
Line 459  ENDBLOCK Line 610  ENDBLOCK
         );          );
         my $sellink=&Apache::loncommon::selectstudent_link('crtusername','srchterm','srchdomain');          my $sellink=&Apache::loncommon::selectstudent_link('crtusername','srchterm','srchdomain');
         my ($title,$buttontext,$showresponse);          my ($title,$buttontext,$showresponse);
         if ($env{'form.action'} eq 'singlestudent') {             if ($env{'form.action'} eq 'singlestudent') {
             $title = $lt{'enro'};              if ($crstype eq 'Community') {
                   $title = $lt{'enrm'};
               } else {
                   $title = $lt{'enro'};
               }
             $buttontext = $lt{'enrl'};              $buttontext = $lt{'enrl'};
         } else {          } else {
             $title = $lt{'admo'};              $title = $lt{'admo'};
Line 507  sub user_modification_js { Line 662  sub user_modification_js {
     return <<END;      return <<END;
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 // <![CDATA[  // <![CDATA[
   
     function pclose() {      function pclose() {
         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",          parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
                  "height=350,width=350,scrollbars=no,menubar=no");                   "height=350,width=350,scrollbars=no,menubar=no");
Line 530  END Line 686  END
   
 # =================================================================== Phase two  # =================================================================== Phase two
 sub print_user_selection_page {  sub print_user_selection_page {
     my ($r,$response,$srch,$srch_results,$srcharray,$context,$opener_elements) = @_;      my ($r,$response,$srch,$srch_results,$srcharray,$context,$opener_elements,$crstype) = @_;
     my @fields = ('username','domain','lastname','firstname','permanentemail');      my @fields = ('username','domain','lastname','firstname','permanentemail');
     my $sortby = $env{'form.sortby'};      my $sortby = $env{'form.sortby'};
   
Line 558  ENDSCRIPT Line 714  ENDSCRIPT
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                                        'usrch'          => "User Search to add/modify roles",                                         'usrch'          => "User Search to add/modify roles",
                                        'stusrch'        => "User Search to enroll student",                                         'stusrch'        => "User Search to enroll student",
                                          'memsrch'        => "User Search to enroll member",
                                        'usel'           => "Select a user to add/modify roles",                                         'usel'           => "Select a user to add/modify roles",
                                        'stusel'         => "Select a user to enroll as a student",                                          'stusel'         => "Select a user to enroll as a student",
                                          'memsel'         => "Select a user to enroll as a member",
                                        'username'       => "username",                                         'username'       => "username",
                                        'domain'         => "domain",                                         'domain'         => "domain",
                                        'lastname'       => "last name",                                         'lastname'       => "last name",
Line 571  ENDSCRIPT Line 729  ENDSCRIPT
     } else {      } else {
         $r->print(&Apache::loncommon::start_page('User Management',$jscript));          $r->print(&Apache::loncommon::start_page('User Management',$jscript));
   
         my %breadcrumb_text = &singleuser_breadcrumb();          my %breadcrumb_text = &singleuser_breadcrumb($crstype);
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>"javascript:backPage(document.usersrchform,'','')",              ({href=>"javascript:backPage(document.usersrchform,'','')",
               text=>$breadcrumb_text{'search'},                text=>$breadcrumb_text{'search'},
Line 583  ENDSCRIPT Line 741  ENDSCRIPT
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',              $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',
                                                           'Course_Change_Privileges'));                                                            'Course_Change_Privileges'));
             $r->print("<b>$lt{'usrch'}</b><br />");              $r->print("<b>$lt{'usrch'}</b><br />");
             $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context));              $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,$crstype));
             $r->print('<h3>'.$lt{'usel'}.'</h3>');              $r->print('<h3>'.$lt{'usel'}.'</h3>');
         } elsif ($env{'form.action'} eq 'singlestudent') {          } elsif ($env{'form.action'} eq 'singlestudent') {
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',              $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management',
                                                           'Course_Add_Student'));                                                            'Course_Add_Student'));
             $r->print($jscript."<b>$lt{'stusrch'}</b><br />");              $r->print($jscript."<b>");
             $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context));              if ($crstype eq 'Community') {
             $r->print('</form><h3>'.$lt{'stusel'}.'</h3>');                  $r->print($lt{'memsrch'});
               } else {
                   $r->print($lt{'stusrch'});
               }
               $r->print("</b><br />");
               $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,$crstype));
               $r->print('</form><h3>');
               if ($crstype eq 'Community') {
                   $r->print($lt{'memsel'});
               } else {
                   $r->print($lt{'stusel'});
               }
               $r->print('</h3>');
         }          }
     }      }
     $r->print('<form name="usersrchform" method="post">'.      $r->print('<form name="usersrchform" method="post">'.
Line 618  ENDSCRIPT Line 788  ENDSCRIPT
         my ($uname,$udom) = split(/:/,$user);          my ($uname,$udom) = split(/:/,$user);
         my $onclick;          my $onclick;
         if ($context eq 'requestcrs') {          if ($context eq 'requestcrs') {
             $onclick =               $onclick =
                 'onclick="javascript:gochoose('."'$uname','$udom',".                  'onclick="javascript:gochoose('."'$uname','$udom',".
                                                "'$srch_results->{$user}->{firstname}',".                                                 "'$srch_results->{$user}->{firstname}',".
                                                "'$srch_results->{$user}->{lastname}',".                                                 "'$srch_results->{$user}->{lastname}',".
                                                "'$srch_results->{$user}->{permanentemail}'".');"';                                                 "'$srch_results->{$user}->{permanentemail}'".');"';
         } else {          } else {
             $onclick =               $onclick =
                 ' onclick="javascript:pickuser('."'".$uname."'".','."'".$udom."'".');"';                  ' onclick="javascript:pickuser('."'".$uname."'".','."'".$udom."'".');"';
         }          }
         $r->print(&Apache::loncommon::start_data_table_row().          $r->print(&Apache::loncommon::start_data_table_row().
Line 665  sub print_user_query_page { Line 835  sub print_user_query_page {
 }  }
   
 sub print_user_modification_page {  sub print_user_modification_page {
     my ($r,$ccuname,$ccdomain,$srch,$response,$context,$permission) = @_;      my ($r,$ccuname,$ccdomain,$srch,$response,$context,$permission,$crstype) = @_;
     if (($ccuname eq '') || ($ccdomain eq '')) {      if (($ccuname eq '') || ($ccdomain eq '')) {
         my $usermsg = &mt('No username and/or domain provided.');          my $usermsg = &mt('No username and/or domain provided.');
         $env{'form.phase'} = '';          $env{'form.phase'} = '';
  &print_username_entry_form($r,$context,$usermsg);   &print_username_entry_form($r,$context,$usermsg,'','',$crstype);
         return;          return;
     }      }
     my ($form,$formname);      my ($form,$formname);
Line 710  sub print_user_modification_page { Line 880  sub print_user_modification_page {
                             ,'<a href="'.$helplink.'">','</a>')                              ,'<a href="'.$helplink.'">','</a>')
                         .'</p><br />';                          .'</p><br />';
             $env{'form.phase'} = '';              $env{'form.phase'} = '';
             &print_username_entry_form($r,$context,$response);              &print_username_entry_form($r,$context,$response,undef,undef,$crstype);
             return;              return;
         }          }
         $newuser = 1;          $newuser = 1;
Line 734  sub print_user_modification_page { Line 904  sub print_user_modification_page {
                             'username');                              'username');
                     }                      }
                     $env{'form.phase'} = '';                      $env{'form.phase'} = '';
                     &print_username_entry_form($r,$context,$userchkmsg);                      &print_username_entry_form($r,$context,$userchkmsg,undef,undef,$crstype);
                     return;                      return;
                 }                  }
             }              }
Line 761  sub print_user_modification_page { Line 931  sub print_user_modification_page {
     }      }
     my $start_page =       my $start_page = 
  &Apache::loncommon::start_page('User Management',$js,$args);   &Apache::loncommon::start_page('User Management',$js,$args);
     my %breadcrumb_text = &singleuser_breadcrumb();      my %breadcrumb_text = &singleuser_breadcrumb($crstype);
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
      ({href=>"javascript:backPage($form)",       ({href=>"javascript:backPage($form)",
        text=>$breadcrumb_text{'search'},         text=>$breadcrumb_text{'search'},
Line 810  ENDFORMINFO Line 980  ENDFORMINFO
         my %lt=&Apache::lonlocal::texthash(          my %lt=&Apache::lonlocal::texthash(
                 'cnu'            => 'Create New User',                  'cnu'            => 'Create New User',
                 'ast'            => 'as a student',                  'ast'            => 'as a student',
                   'ame'            => 'as a member',
                 'ind'            => 'in domain',                  'ind'            => 'in domain',
                 'lg'             => 'Login Data',                  'lg'             => 'Login Data',
                 'hs'             => "Home Server",                  'hs'             => "Home Server",
Line 828  $loginscript Line 999  $loginscript
 <h2>$lt{'cnu'} "$ccuname" $lt{'ind'} $ccdomain  <h2>$lt{'cnu'} "$ccuname" $lt{'ind'} $ccdomain
 ENDTITLE  ENDTITLE
         if ($env{'form.action'} eq 'singlestudent') {          if ($env{'form.action'} eq 'singlestudent') {
             $r->print(' ('.$lt{'ast'}.')');              if ($crstype eq 'Community') {
                   $r->print(' ('.$lt{'ame'}.')');
               } else {
                   $r->print(' ('.$lt{'ast'}.')');
               }
         }          }
         $r->print('</h2>'."\n".'<div class="LC_left_float">');          $r->print('</h2>'."\n".'<div class="LC_left_float">');
         my $personal_table =           my $personal_table = 
Line 846  $lt{'hs'}: $home_server_pick Line 1021  $lt{'hs'}: $home_server_pick
         } else {          } else {
             $r->print($home_server_pick);              $r->print($home_server_pick);
         }          }
           if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
               $r->print('<br /><h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'.
                         &Apache::loncommon::start_data_table().
                         &build_tools_display($ccuname,$ccdomain,
                                              'requestcourses').
                         &Apache::loncommon::end_data_table());
           }
         $r->print('</div>'."\n".'<div class="LC_left_float"><h3>'.          $r->print('</div>'."\n".'<div class="LC_left_float"><h3>'.
                   $lt{'lg'}.'</h3>');                    $lt{'lg'}.'</h3>');
         my ($fixedauth,$varauth,$authmsg);           my ($fixedauth,$varauth,$authmsg); 
Line 914  ENDAUTH Line 1096  ENDAUTH
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
                     'cup'  => "Modify existing user: ",                      'cup'  => "Modify existing user: ",
                     'ens'  => "Enroll one student: ",                      'ens'  => "Enroll one student: ",
                       'enm'  => "Enroll one member: ",
                     'id'   => "in domain",                      'id'   => "in domain",
        );         );
  $r->print(<<ENDCHANGEUSER);   $r->print(<<ENDCHANGEUSER);
Line 923  $forminfo Line 1106  $forminfo
 <h2>  <h2>
 ENDCHANGEUSER  ENDCHANGEUSER
         if ($env{'form.action'} eq 'singlestudent') {          if ($env{'form.action'} eq 'singlestudent') {
             $r->print($lt{'ens'});              if ($crstype eq 'Community') {
                   $r->print($lt{'enm'});
               } else {
                   $r->print($lt{'ens'});
               }
         } else {          } else {
             $r->print($lt{'cup'});              $r->print($lt{'cup'});
         }          }
Line 937  ENDCHANGEUSER Line 1124  ENDCHANGEUSER
             $r->print(&Apache::lonuserutils::forceid_change($context));              $r->print(&Apache::lonuserutils::forceid_change($context));
         }          }
         if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {          if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
             $r->print('<h3>'.&mt('User Can Request Creation of Courses in this Domain?').'</h3>'.              $r->print('<h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'.
                       &Apache::loncommon::start_data_table());                        &Apache::loncommon::start_data_table());
             if ($env{'request.role.domain'} eq $ccdomain) {               if ($env{'request.role.domain'} eq $ccdomain) {
                 $r->print(&build_tools_display($ccuname,$ccdomain,'requestcourses'));                  $r->print(&build_tools_display($ccuname,$ccdomain,'requestcourses'));
             } else {              } else {
                 $r->print(&coursereq_externaluser($ccuname,$ccdomain,                  $r->print(&coursereq_externaluser($ccuname,$ccdomain,
Line 1021  ENDNOTOOLSPRIV Line 1208  ENDNOTOOLSPRIV
     } ## End of new user/old user logic      } ## End of new user/old user logic
   
     if ($env{'form.action'} eq 'singlestudent') {      if ($env{'form.action'} eq 'singlestudent') {
         $r->print('<br /><input type="button" value="'.&mt('Enroll Student').'" onclick="setSections(this.form)" />'."\n");          my $btntxt;
           if ($crstype eq 'Community') {
               $btntxt = &mt('Enroll Member');
           } else {
               $btntxt = &mt('Enroll Student');
           }
           $r->print('<br /><input type="button" value="'.$btntxt.'" onclick="setSections(this.form)" />'."\n");
     } else {      } else {
         $r->print('<h3>'.&mt('Add Roles').'</h3>');          $r->print('<h3>'.&mt('Add Roles').'</h3>');
         my $addrolesdisplay = 0;          my $addrolesdisplay = 0;
Line 1060  ENDNOTOOLSPRIV Line 1253  ENDNOTOOLSPRIV
 }  }
   
 sub singleuser_breadcrumb {  sub singleuser_breadcrumb {
       my ($crstype) = @_;
     my %breadcrumb_text;      my %breadcrumb_text;
     if ($env{'form.action'} eq 'singlestudent') {      if ($env{'form.action'} eq 'singlestudent') {
         $breadcrumb_text{'search'} = 'Enroll a student';          if ($crstype eq 'Community') {
               $breadcrumb_text{'search'} = 'Enroll a member';
           } else {
               $breadcrumb_text{'search'} = 'Enroll a student';
           }
         $breadcrumb_text{'userpicked'} = 'Select a user',          $breadcrumb_text{'userpicked'} = 'Select a user',
         $breadcrumb_text{'modify'} = 'Set section/dates',          $breadcrumb_text{'modify'} = 'Set section/dates',
     } else {      } else {
Line 1277  sub display_existing_roles { Line 1475  sub display_existing_roles {
             }              }
             $row.= '</td><td>'.$plaintext.              $row.= '</td><td>'.$plaintext.
                    '</td><td>'.$area.                     '</td><td>'.$area.
                    '</td><td>'.($role_start_time?localtime($role_start_time)                     '</td><td>'.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
                                                 : '&nbsp;' ).                                                  : '&nbsp;' ).
                    '</td><td>'.($role_end_time  ?localtime($role_end_time)                     '</td><td>'.($role_end_time  ?&Apache::lonlocal::locallocaltime($role_end_time)
                                                 : '&nbsp;' )                                                  : '&nbsp;' )
                    ."</td>";                     ."</td>";
             $sortrole{$sortkey}=$envkey;              $sortrole{$sortkey}=$envkey;
Line 1290  sub display_existing_roles { Line 1488  sub display_existing_roles {
         } # end of foreach        (table building loop)          } # end of foreach        (table building loop)
         my $rolesdisplay = 0;          my $rolesdisplay = 0;
         my %output = ();          my %output = ();
         foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {          foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
             $output{$type} = '';              $output{$type} = '';
             foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {              foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
                 if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {                  if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {
Line 1310  sub display_existing_roles { Line 1508  sub display_existing_roles {
         if ($rolesdisplay == 1) {          if ($rolesdisplay == 1) {
             my $contextrole='';              my $contextrole='';
             if ($env{'request.course.id'}) {              if ($env{'request.course.id'}) {
                 $contextrole = 'Existing Roles in this Course';                  my $crstype = &Apache::loncommon::course_type();
                   $contextrole = "Existing Roles in this $crstype";
             } elsif ($env{'request.role'} =~ /^au\./) {              } elsif ($env{'request.role'} =~ /^au\./) {
                 $contextrole = 'Existing Co-Author Roles in your Construction Space';                  $contextrole = 'Existing Co-Author Roles in your Construction Space';
             } else {              } else {
Line 1325  sub display_existing_roles { Line 1524  sub display_existing_roles {
 '</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}.  '</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}.
 '</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.  '</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.
 &Apache::loncommon::end_data_table_header_row());  &Apache::loncommon::end_data_table_header_row());
            foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {             foreach my $type ('Construction Space','Course','Community','Domain','System','Unknown') {
                 if ($output{$type}) {                  if ($output{$type}) {
                     $r->print($output{$type}."\n");                      $r->print($output{$type}."\n");
                 }                  }
Line 1422  sub new_domain_roles { Line 1621  sub new_domain_roles {
     &mt('Extent').'</th>'.      &mt('Extent').'</th>'.
     '<th>'.&mt('Start').'</th><th>'.&mt('End').'</th>'.      '<th>'.&mt('Start').'</th><th>'.&mt('End').'</th>'.
     &Apache::loncommon::end_data_table_header_row();      &Apache::loncommon::end_data_table_header_row();
       my @allroles = &Apache::lonuserutils::roles_by_context('domain');
     foreach my $thisdomain (sort(&Apache::lonnet::all_domains())) {      foreach my $thisdomain (sort(&Apache::lonnet::all_domains())) {
         foreach my $role ('dc','li','dg','au','sc') {          foreach my $role (@allroles) {
               next if ($role eq 'ad');
             if (&Apache::lonnet::allowed('c'.$role,$thisdomain)) {              if (&Apache::lonnet::allowed('c'.$role,$thisdomain)) {
                my $plrole=&Apache::lonnet::plaintext($role);                 my $plrole=&Apache::lonnet::plaintext($role);
                my %lt=&Apache::lonlocal::texthash(                 my %lt=&Apache::lonlocal::texthash(
Line 1818  sub get_inststatuses { Line 2019  sub get_inststatuses {
   
 # ================================================================= Phase Three  # ================================================================= Phase Three
 sub update_user_data {  sub update_user_data {
     my ($r,$context) = @_;       my ($r,$context,$crstype) = @_; 
     my $uhome=&Apache::lonnet::homeserver($env{'form.ccuname'},      my $uhome=&Apache::lonnet::homeserver($env{'form.ccuname'},
                                           $env{'form.ccdomain'});                                            $env{'form.ccdomain'});
     # Error messages      # Error messages
Line 1842  sub update_user_data { Line 2043  sub update_user_data {
                   $jsback."\n".                    $jsback."\n".
                   '// ]]>'."\n".                    '// ]]>'."\n".
                   '</script>'."\n";                    '</script>'."\n";
     my %breadcrumb_text = &singleuser_breadcrumb();      my %breadcrumb_text = &singleuser_breadcrumb($crstype);
     my $args;      my $args;
     if ($env{'form.popup'}) {      if ($env{'form.popup'}) {
         $args->{'no_nav_bar'} = 1;          $args->{'no_nav_bar'} = 1;
Line 2022  sub update_user_data { Line 2223  sub update_user_data {
                 }                  }
             }              }
             foreach my $item (@requestcourses) {              foreach my $item (@requestcourses) {
                 $newcustom{$item} = $env{'form.requestcourses_'.$item};                  $newcustom{$item} = $env{'form.crsreq_'.$item};
                   if ($env{'form.crsreq_'.$item} eq 'autolimit') {
                       $newcustom{$item} .= '=';
                       unless ($env{'form.crsreq_'.$item.'_limit'} =~ /\D/) {
                           $newcustom{$item} .= $env{'form.crsreq_'.$item.'_limit'};
                       }
                   }
                 $changed{$item} = &tool_admin($item,$newcustom{$item},                  $changed{$item} = &tool_admin($item,$newcustom{$item},
                                               \%changeHash,'requestcourses');                                                \%changeHash,'requestcourses');
             }              }
Line 2068  sub update_user_data { Line 2275  sub update_user_data {
  }   }
     }      }
     ##      ##
     my (@userroles,%userupdate,$cnum,$cdom,$namechanged);      my (@userroles,%userupdate,$cnum,$cdom,$crstype,$namechanged);
     if ($context eq 'course') {      if ($context eq 'course') {
         ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();          ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();
           $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum);
     }      }
     if (! $env{'form.makeuser'} ) {      if (! $env{'form.makeuser'} ) {
         # Check for need to change          # Check for need to change
Line 2154  sub update_user_data { Line 2362  sub update_user_data {
             if ($role eq 'cr') {              if ($role eq 'cr') {
                 push(@longroles,'Custom');                  push(@longroles,'Custom');
             } else {              } else {
                 push(@longroles,&Apache::lonnet::plaintext($role));                   push(@longroles,&Apache::lonnet::plaintext($role,$crstype)); 
             }              }
         }          }
         my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');          my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');
Line 2308  sub update_user_data { Line 2516  sub update_user_data {
                           \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);                            \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
         } else {          } else {
             &tool_changes('reqcrsotherdom',\@requestcourses,\%oldaccess,\%oldaccesstext,              &tool_changes('reqcrsotherdom',\@requestcourses,\%oldaccess,\%oldaccesstext,
                           \%userenv,                            \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
                                   \%changeHash,\%changed,\%newaccess,\%newaccesstext);  
         }          }
         if ($env{'form.cfirstname'}  ne $userenv{'firstname'}  ||          if ($env{'form.cfirstname'}  ne $userenv{'firstname'}  ||
             $env{'form.cmiddlename'} ne $userenv{'middlename'} ||              $env{'form.cmiddlename'} ne $userenv{'middlename'} ||
Line 2624  END Line 2831  END
                   .'</span>');                    .'</span>');
     }      }
     if ($env{'form.action'} eq 'singlestudent') {      if ($env{'form.action'} eq 'singlestudent') {
         &enroll_single_student($r,$uhome,$amode,$genpwd,$now,$newuser,$context);          &enroll_single_student($r,$uhome,$amode,$genpwd,$now,$newuser,$context,$crstype);
         $r->print('<p><a href="javascript:backPage(document.userupdate)">'.          $r->print('<p><a href="javascript:backPage(document.userupdate)">');
                   &mt('Enroll Another Student').'</a></p>');          if ($crstype eq 'Community') {
               $r->print(&mt('Enroll Another Member'));
           } else {
               $r->print(&mt('Enroll Another Student'));
           }
           $r->print('</a></p>');
     } else {      } else {
         my @rolechanges = &update_roles($r,$context);          my @rolechanges = &update_roles($r,$context);
         if ($namechanged) {          if ($namechanged) {
Line 2668  sub tool_changes { Line 2880  sub tool_changes {
         return;          return;
     }      }
     if ($context eq 'reqcrsotherdom') {      if ($context eq 'reqcrsotherdom') {
           my @options = ('approval','validate','autolimit');
           my $optregex = join('|',@options);
           my %reqdisplay = &courserequest_display();
         my $cdom = $env{'request.role.domain'};          my $cdom = $env{'request.role.domain'};
         foreach my $tool (@{$usertools}) {          foreach my $tool (@{$usertools}) {
             $oldaccesstext->{$tool} = &mt('no');              $oldaccesstext->{$tool} = &mt('No');
               $newaccesstext->{$tool} = $oldaccesstext->{$tool};
             $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool};              $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool};
               my $newop;
               if ($env{'form.'.$context.'_'.$tool}) {
                   $newop = $env{'form.'.$context.'_'.$tool};
                   if ($newop eq 'autolimit') {
                       my $limit = $env{'form.'.$context.'_'.$tool.'_limit'};
                       $limit =~ s/\D+//g;
                       $newop .= '='.$limit;
                   }
               }
             if ($userenv->{$context.'.'.$tool} eq '') {              if ($userenv->{$context.'.'.$tool} eq '') {
                 if ($env{'form.'.$context.'_'.$tool}) {                  if ($newop) {
                     $changed->{$tool}=&tool_admin($tool,$cdom,                      $changed->{$tool}=&tool_admin($tool,$cdom.':'.$newop,
                                                   $changeHash,$context);                                                    $changeHash,$context);
                     if ($changed->{$tool}) {                      if ($changed->{$tool}) {
                         $newaccesstext->{$tool} = &mt('yes');                          $newaccesstext->{$tool} = &mt('Yes');
                     } else {                      } else {
                         $newaccesstext->{$tool} = $oldaccesstext->{$tool};                          $newaccesstext->{$tool} = $oldaccesstext->{$tool};
                     }                      }
Line 2686  sub tool_changes { Line 2911  sub tool_changes {
                 my @curr = split(',',$userenv->{$context.'.'.$tool});                  my @curr = split(',',$userenv->{$context.'.'.$tool});
                 my @new;                  my @new;
                 my $changedoms;                  my $changedoms;
                 if (grep(/^\Q$cdom\E$/,@curr)) {                  foreach my $req (@curr) {
                     $oldaccesstext->{$tool} = &mt('yes');                      if ($req =~ /^\Q$cdom\E\:($optregex\=?\d*)$/) {
                     unless ($env{'form.'.$context.'_'.$tool}) {                          $oldaccesstext->{$tool} = &mt('Yes');
                         $changedoms = 1;                          my $oldop = $1;
                         foreach my $dom (@curr) {                          if ($oldop ne $newop) {
                             unless ($dom eq $cdom) {                              $changedoms = 1;
                                 push(@new,$dom);                              foreach my $item (@curr) {
                                   my ($reqdom,$option) = split(':',$item);
                                   unless ($reqdom eq $cdom) {
                                       push(@new,$item);
                                   }
                               }
                               if ($newop) {
                                   push(@new,$cdom.':'.$newop);
                             }                              }
                               @new = sort(@new);
                         }                          }
                           last;
                     }                      }
                 } elsif ($env{'form.'.$context.'_'.$tool}) {                  }
                   if ((!$changedoms) && ($newop)) {
                     $changedoms = 1;                      $changedoms = 1;
                     @new = sort(@curr,$cdom);                      @new = sort(@curr,$cdom.':'.$newop);
                 }                  }
                 $newaccesstext->{$tool} = $oldaccesstext->{$tool};  
                 if ($changedoms) {                  if ($changedoms) {
                     my $newdomstr;                       my $newdomstr;
                     if (@new) {                      if (@new) {
                         $newdomstr = join(',',@new);                          $newdomstr = join(',',@new);
                     }                      }
Line 2710  sub tool_changes { Line 2944  sub tool_changes {
                                                   $context);                                                    $context);
                     if ($changed->{$tool}) {                      if ($changed->{$tool}) {
                         if ($env{'form.'.$context.'_'.$tool}) {                          if ($env{'form.'.$context.'_'.$tool}) {
                             $newaccesstext->{$tool} = &mt('yes');                               if ($env{'form.'.$context.'_'.$tool} eq 'autolimit') {
                                   my $limit = $env{'form.'.$context.'_'.$tool.'_limit'};
                                   $limit =~ s/\D+//g;
                                   if ($limit) {
                                       $newaccesstext->{$tool} = &mt('Yes, up to limit of [quant,_1,request] per user.',$limit);
                                   } else {
                                       $newaccesstext->{$tool} = &mt('Yes, processed automatically');
                                   }
                               } else {
                                   $newaccesstext->{$tool} = $reqdisplay{$env{'form.'.$context.'_'.$tool}};
                               }
                         } else {                          } else {
                             $newaccesstext->{$tool} = &mt('no');                              $newaccesstext->{$tool} = &mt('No');
                         }                          }
                     }                      }
                 }                  }
Line 2721  sub tool_changes { Line 2965  sub tool_changes {
         return;          return;
     }      }
     foreach my $tool (@{$usertools}) {      foreach my $tool (@{$usertools}) {
           my $newval;
           if ($context eq 'requestcourses') {
               $newval = $env{'form.crsreq_'.$tool};
               if ($newval eq 'autolimit') {
                   $newval .= '='.$env{'form.crsreq_'.$tool.'_limit'};
               }
           } else {
               $newval = $env{'form.'.$context.'_'.$tool};
           }
         if ($userenv->{$context.'.'.$tool} ne '') {          if ($userenv->{$context.'.'.$tool} ne '') {
             $oldaccess->{$tool} = &mt('custom');              $oldaccess->{$tool} = &mt('custom');
             if ($userenv->{$context.'.'.$tool}) {              if ($userenv->{$context.'.'.$tool}) {
Line 2730  sub tool_changes { Line 2983  sub tool_changes {
             }              }
             $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool};              $changeHash->{$context.'.'.$tool} = $userenv->{$context.'.'.$tool};
             if ($env{'form.custom'.$tool} == 1) {              if ($env{'form.custom'.$tool} == 1) {
                 if ($env{'form.'.$context.'_'.$tool} ne $userenv->{$context.'.'.$tool}) {                  if ($newval ne $userenv->{$context.'.'.$tool}) {
                     $changed->{$tool} = &tool_admin($tool,$env{'form.'.$context.'_'.$tool},                      $changed->{$tool} = &tool_admin($tool,$newval,$changeHash,
                                                   $changeHash,$context);                                                      $context);
                     if ($changed->{$tool}) {                      if ($changed->{$tool}) {
                         $newaccess->{$tool} = &mt('custom');                          $newaccess->{$tool} = &mt('custom');
                         if ($env{'form.'.$context.'_'.$tool}) {                          if ($newval) {
                             $newaccesstext->{$tool} = &mt("availability set to 'on'");                              $newaccesstext->{$tool} = &mt("availability set to 'on'");
                         } else {                          } else {
                             $newaccesstext->{$tool} = &mt("availability set to 'off'");                              $newaccesstext->{$tool} = &mt("availability set to 'off'");
Line 2768  sub tool_changes { Line 3021  sub tool_changes {
         } else {          } else {
             $oldaccess->{$tool} = &mt('default');              $oldaccess->{$tool} = &mt('default');
             if ($env{'form.custom'.$tool} == 1) {              if ($env{'form.custom'.$tool} == 1) {
                 $changed->{$tool} = &tool_admin($tool,$env{'form.'.$context.'_'.$tool},                  $changed->{$tool} = &tool_admin($tool,$newval,$changeHash,
                                                 $changeHash,$context);                                                  $context);
                 if ($changed->{$tool}) {                  if ($changed->{$tool}) {
                     $newaccess->{$tool} = &mt('custom');                      $newaccess->{$tool} = &mt('custom');
                     if ($env{'form.'.$context.'_'.$tool}) {                      if ($newval) {
                         $newaccesstext->{$tool} = &mt("availability set to 'on'");                          $newaccesstext->{$tool} = &mt("availability set to 'on'");
                     } else {                      } else {
                         $newaccesstext->{$tool} = &mt("availability set to 'off'");                          $newaccesstext->{$tool} = &mt("availability set to 'off'");
Line 3054  sub update_roles { Line 3307  sub update_roles {
 }  }
   
 sub enroll_single_student {  sub enroll_single_student {
     my ($r,$uhome,$amode,$genpwd,$now,$newuser,$context) = @_;      my ($r,$uhome,$amode,$genpwd,$now,$newuser,$context,$crstype) = @_;
     $r->print('<h3>'.&mt('Enrolling Student').'</h3>');      $r->print('<h3>');
       if ($crstype eq 'Community') {
           $r->print(&mt('Enrolling Member'));
       } else {
           $r->print(&mt('Enrolling Student'));
       }
       $r->print('</h3>');
   
     # Remove non alphanumeric values from section      # Remove non alphanumeric values from section
     $env{'form.sections'}=~s/\W//g;      $env{'form.sections'}=~s/\W//g;
Line 3088  sub enroll_single_student { Line 3347  sub enroll_single_student {
         }          }
         $r->print('.<br />'.$showstart.'; '.$showend);          $r->print('.<br />'.$showstart.'; '.$showend);
         if ($startdate <= $now && !$newuser) {          if ($startdate <= $now && !$newuser) {
             $r->print("<p> ".&mt('If the student is currently logged-in to LON-CAPA, the new role will be available when the student next logs in.')."</p>");              $r->print('<p> ');
               if ($crstype eq 'Community') {
                   $r->print(&mt('If the member is currently logged-in to LON-CAPA, the new role will be available when the member next logs in.'));
               } else {
                   $r->print(&mt('If the student is currently logged-in to LON-CAPA, the new role will be available when the student next logs in.'));
              }
              $r->print('</p>');
         }          }
     } else {      } else {
         $r->print(&mt('unable to enroll').": ".$enroll_result);          $r->print(&mt('unable to enroll').": ".$enroll_result);
Line 3283  sub custom_role_editor { Line 3548  sub custom_role_editor {
     my $head_script = "\n";      my $head_script = "\n";
     $head_script .= '<script type="text/javascript">'."\n"      $head_script .= '<script type="text/javascript">'."\n"
                    .'// <![CDATA['."\n";                     .'// <![CDATA['."\n";
     my @template_roles = ("cc","in","ta","ep","st");      my $crstype;
       if ($env{'request.course.id'}) {
           $crstype = &Apache::loncommon::course_type();
       }
       my @template_roles = ("in","ta","ep","st");
       if ($crstype eq 'Community') {
           unshift(@template_roles,'co');
       } else {
           unshift(@template_roles,'cc');
       }
     foreach my $role (@template_roles) {      foreach my $role (@template_roles) {
         $head_script .= &make_script_template($role);          $head_script .= &make_script_template($role);
         $button_code .= &make_button_code($role).' ';          $button_code .= &make_button_code($role,$crstype).' ';
     }      }
     $head_script .= "\n".$jsback."\n"      $head_script .= "\n".$jsback."\n"
                    .'// ]]>'."\n"                     .'// ]]>'."\n"
Line 3328  ENDCCF Line 3602  ENDCCF
 '</th><th>'.$lt{'ssl'}.'</th>'.  '</th><th>'.$lt{'ssl'}.'</th>'.
               &Apache::loncommon::end_data_table_header_row());                &Apache::loncommon::end_data_table_header_row());
     foreach my $priv (sort keys %full) {      foreach my $priv (sort keys %full) {
         my $privtext = &Apache::lonnet::plaintext($priv);          my $privtext = &Apache::lonnet::plaintext($priv,$crstype);
         $r->print(&Apache::loncommon::start_data_table_row().          $r->print(&Apache::loncommon::start_data_table_row().
           '<td>'.$privtext.'</td><td>'.            '<td>'.$privtext.'</td><td>'.
     ($courselevel{$priv}?'<input type="checkbox" name="'.$priv.'_c"'.      ($courselevel{$priv}?'<input type="checkbox" name="'.$priv.'_c"'.
Line 3418  sub make_script_template { Line 3692  sub make_script_template {
 }  }
 # ----------------------------------------------------------  # ----------------------------------------------------------
 sub make_button_code {  sub make_button_code {
     my ($role) = @_;      my ($role,$crstype) = @_;
     my $label = &Apache::lonnet::plaintext($role);      my $label = &Apache::lonnet::plaintext($role,$crstype);
     my $button_code = '<input type="button" onclick="set_'.$role.'()" value="'.$label.'" />';      my $button_code = '<input type="button" onclick="set_'.$role.'()" value="'.$label.'" />';
     return ($button_code);      return ($button_code);
 }  }
Line 3519  sub handler { Line 3793  sub handler {
        $r->send_http_header;         $r->send_http_header;
        return OK;         return OK;
     }      }
     my $context;      my ($context,$crstype);
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $context = 'course';          $context = 'course';
           $crstype = &Apache::loncommon::course_type();
     } elsif ($env{'request.role'} =~ /^au\./) {      } elsif ($env{'request.role'} =~ /^au\./) {
         $context = 'author';          $context = 'author';
     } else {      } else {
Line 3540  sub handler { Line 3815  sub handler {
     #SD Following files not added to help, because the corresponding .tex-files seem to      #SD Following files not added to help, because the corresponding .tex-files seem to
     #be missing: Course_Approve_Selfenroll,Course_User_Logs,      #be missing: Course_Approve_Selfenroll,Course_User_Logs,
     my ($permission,$allowed) =       my ($permission,$allowed) = 
         &Apache::lonuserutils::get_permission($context);          &Apache::lonuserutils::get_permission($context,$crstype);
     if (!$allowed) {      if (!$allowed) {
         $env{'user.error.msg'}=          $env{'user.error.msg'}=
             "/adm/createuser:cst:0:0:Cannot create/modify user data ".              "/adm/createuser:cst:0:0:Cannot create/modify user data ".
Line 3555  sub handler { Line 3830  sub handler {
     if (! exists($env{'form.action'})) {      if (! exists($env{'form.action'})) {
         $r->print(&header());          $r->print(&header());
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management'));          $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management'));
         $r->print(&print_main_menu($permission,$context));          $r->print(&print_main_menu($permission,$context,$crstype));
         $r->print(&Apache::loncommon::end_page());          $r->print(&Apache::loncommon::end_page());
     } elsif ($env{'form.action'} eq 'upload' && $permission->{'cusr'}) {      } elsif ($env{'form.action'} eq 'upload' && $permission->{'cusr'}) {
         $r->print(&header());          $r->print(&header());
Line 3571  sub handler { Line 3846  sub handler {
             &Apache::lonuserutils::print_first_users_upload_form($r,$context);              &Apache::lonuserutils::print_first_users_upload_form($r,$context);
         } elsif ($env{'form.state'} eq 'got_file') {          } elsif ($env{'form.state'} eq 'got_file') {
             &Apache::lonuserutils::print_upload_manager_form($r,$context,              &Apache::lonuserutils::print_upload_manager_form($r,$context,
                                                              $permission);                                                               $permission,$crstype);
         } elsif ($env{'form.state'} eq 'enrolling') {          } elsif ($env{'form.state'} eq 'enrolling') {
             if ($env{'form.datatoken'}) {              if ($env{'form.datatoken'}) {
                 &Apache::lonuserutils::upfile_drop_add($r,$context,$permission);                  &Apache::lonuserutils::upfile_drop_add($r,$context,$permission);
Line 3596  sub handler { Line 3871  sub handler {
                 if ($env{'form.srchterm'} !~ /^$match_username$/) {                  if ($env{'form.srchterm'} !~ /^$match_username$/) {
                     my $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @');                      my $response = &mt('You must specify a valid username. Only the following are allowed: letters numbers - . @');
                     $env{'form.phase'} = '';                      $env{'form.phase'} = '';
                     &print_username_entry_form($r,$context,$response,$srch);                      &print_username_entry_form($r,$context,$response,$srch,undef,$crstype);
                 } else {                  } else {
                     my $ccuname =&LONCAPA::clean_username($srch->{'srchterm'});                      my $ccuname =&LONCAPA::clean_username($srch->{'srchterm'});
                     my $ccdomain=&LONCAPA::clean_domain($srch->{'srchdomain'});                      my $ccdomain=&LONCAPA::clean_domain($srch->{'srchdomain'});
                     &print_user_modification_page($r,$ccuname,$ccdomain,                      &print_user_modification_page($r,$ccuname,$ccdomain,
                                                   $srch,$response,$context,                                                    $srch,$response,$context,
                                                   $permission);                                                    $permission,$crstype);
                 }                  }
             } elsif ($env{'form.phase'} eq 'get_user_info') {              } elsif ($env{'form.phase'} eq 'get_user_info') {
                 my ($currstate,$response,$forcenewuser,$results) =                   my ($currstate,$response,$forcenewuser,$results) = 
Line 3612  sub handler { Line 3887  sub handler {
                 }                  }
                 if ($currstate eq 'select') {                  if ($currstate eq 'select') {
                     &print_user_selection_page($r,$response,$srch,$results,                      &print_user_selection_page($r,$response,$srch,$results,
                                                \@search,$context);                                                 \@search,$context,undef,$crstype);
                 } elsif ($currstate eq 'modify') {                  } elsif ($currstate eq 'modify') {
                     my ($ccuname,$ccdomain);                      my ($ccuname,$ccdomain);
                     if (($srch->{'srchby'} eq 'uname') &&                       if (($srch->{'srchby'} eq 'uname') && 
Line 3630  sub handler { Line 3905  sub handler {
                     }                      }
                     &print_user_modification_page($r,$ccuname,$ccdomain,                      &print_user_modification_page($r,$ccuname,$ccdomain,
                                                   $srch,$response,$context,                                                    $srch,$response,$context,
                                                   $permission);                                                    $permission,$crstype);
                 } elsif ($currstate eq 'query') {                  } elsif ($currstate eq 'query') {
                     &print_user_query_page($r,'createuser');                      &print_user_query_page($r,'createuser');
                 } else {                  } else {
                     $env{'form.phase'} = '';                      $env{'form.phase'} = '';
                     &print_username_entry_form($r,$context,$response,$srch,                      &print_username_entry_form($r,$context,$response,$srch,
                                                $forcenewuser);                                                 $forcenewuser,$crstype);
                 }                  }
             } elsif ($env{'form.phase'} eq 'userpicked') {              } elsif ($env{'form.phase'} eq 'userpicked') {
                 my $ccuname = &LONCAPA::clean_username($env{'form.seluname'});                  my $ccuname = &LONCAPA::clean_username($env{'form.seluname'});
                 my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'});                  my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'});
                 &print_user_modification_page($r,$ccuname,$ccdomain,$srch,'',                  &print_user_modification_page($r,$ccuname,$ccdomain,$srch,'',
                                               $context,$permission);                                                $context,$permission,$crstype);
             }              }
         } elsif ($env{'form.phase'} eq 'update_user_data') {          } elsif ($env{'form.phase'} eq 'update_user_data') {
             &update_user_data($r,$context);              &update_user_data($r,$context,$crstype);
         } else {          } else {
             &print_username_entry_form($r,$context,undef,$srch);              &print_username_entry_form($r,$context,undef,$srch,undef,$crstype);
         }          }
     } elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) {      } elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) {
         if ($env{'form.phase'} eq 'set_custom_roles') {          if ($env{'form.phase'} eq 'set_custom_roles') {
Line 3706  sub handler { Line 3981  sub handler {
         }          }
     } elsif ($env{'form.action'} eq 'drop' && $permission->{'cusr'}) {      } elsif ($env{'form.action'} eq 'drop' && $permission->{'cusr'}) {
         $r->print(&header());          $r->print(&header());
           my $brtext;
           if ($crstype eq 'Community') {
               $brtext = 'Drop Members';
           } else {
               $brtext = 'Drop Students';
           }
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/createuser?action=drop',              ({href=>'/adm/createuser?action=drop',
               text=>"Drop Students"});                text=>$brtext});
         if (!exists($env{'form.state'})) {          if (!exists($env{'form.state'})) {
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('Drop Students',              $r->print(&Apache::lonhtmlcommon::breadcrumbs($brtext,
                                                           'Course_Drop_Student'));                                                            'Course_Drop_Student'));
   
             &Apache::lonuserutils::print_drop_menu($r,$context,$permission);              &Apache::lonuserutils::print_drop_menu($r,$context,$permission,$crstype);
         } elsif ($env{'form.state'} eq 'done') {          } elsif ($env{'form.state'} eq 'done') {
             &Apache::lonhtmlcommon::add_breadcrumb              &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/createuser?action=drop',              ({href=>'/adm/createuser?action=drop',
               text=>"Result"});                text=>"Result"});
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('Drop Students',              $r->print(&Apache::lonhtmlcommon::breadcrumbs($brtext,
                                                           'Course_Drop_Student'));                                                            'Course_Drop_Student'));
             &Apache::lonuserutils::update_user_list($r,$context,undef,              &Apache::lonuserutils::update_user_list($r,$context,undef,
                                                     $env{'form.action'});                                                      $env{'form.action'});
Line 3728  sub handler { Line 4009  sub handler {
         if ($permission->{'cusr'}) {          if ($permission->{'cusr'}) {
             $r->print(&header(undef,undef,{'no_nav_bar' => 1}).              $r->print(&header(undef,undef,{'no_nav_bar' => 1}).
                       &Apache::lonuserutils::date_section_selector($context,                        &Apache::lonuserutils::date_section_selector($context,
                                                                    $permission).                                                                     $permission,$crstype).
                       &Apache::loncommon::end_page());                        &Apache::loncommon::end_page());
         } else {          } else {
             $r->print(&header().              $r->print(&header().
Line 3763  sub handler { Line 4044  sub handler {
         my $cid = $env{'request.course.id'};          my $cid = $env{'request.course.id'};
         my $cdom = $env{'course.'.$cid.'.domain'};          my $cdom = $env{'course.'.$cid.'.domain'};
         my $cnum = $env{'course.'.$cid.'.num'};          my $cnum = $env{'course.'.$cid.'.num'};
           my $coursedesc = $env{'course.'.$cid.'.description'};
         if (!exists($env{'form.state'})) {          if (!exists($env{'form.state'})) {
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment requests',              $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment requests',
                                                           'Course_SelfEnrollment_Approval'));                                                            'Course_SelfEnrollment_Approval'));
             $r->print('<h3>'.&mt('Pending enrollment requests').'</h3>'."\n");              $r->print('<h3>'.&mt('Pending enrollment requests').'</h3>'."\n");
             &display_selfenroll_queue($r,$context,$permission,$cnum,$cdom);              $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
                                                                          $cdom,$cnum));
         } elsif ($env{'form.state'} eq 'done') {          } elsif ($env{'form.state'} eq 'done') {
             &Apache::lonhtmlcommon::add_breadcrumb              &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/createuser?action=selfenrollqueue',              ({href=>'/adm/createuser?action=selfenrollqueue',
Line 3775  sub handler { Line 4058  sub handler {
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment result',              $r->print(&Apache::lonhtmlcommon::breadcrumbs('Enrollment result',
                                                           'Course_Self_Enrollment'));                                                            'Course_Self_Enrollment'));
             $r->print('<h3>'.&mt('Enrollment request processing').'</h3>'."\n");              $r->print('<h3>'.&mt('Enrollment request processing').'</h3>'."\n");
             &update_selfenroll_queue($r,$context,$permission,$cid,$cnum,$cdom);              $r->print(&Apache::loncoursequeueadmin::update_request_queue($context,
                             $cdom,$cnum,$coursedesc));
         }          }
         $r->print(&Apache::loncommon::end_page());          $r->print(&Apache::loncommon::end_page());
     } elsif ($env{'form.action'} eq 'changelogs') {      } elsif ($env{'form.action'} eq 'changelogs') {
Line 3790  sub handler { Line 4074  sub handler {
     } else {      } else {
         $r->print(&header());          $r->print(&header());
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management'));          $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management'));
         $r->print(&print_main_menu($permission,$context));          $r->print(&print_main_menu($permission,$context,$crstype));
         $r->print(&Apache::loncommon::end_page());          $r->print(&Apache::loncommon::end_page());
     }      }
     return OK;      return OK;
Line 3834  END Line 4118  END
 ###############################################################  ###############################################################
 #  Menu Phase One  #  Menu Phase One
 sub print_main_menu {  sub print_main_menu {
     my ($permission,$context) = @_;      my ($permission,$context,$crstype) = @_;
       my $linkcontext = $context;
       my $stuterm = lc(&Apache::lonnet::plaintext('st',$crstype));
       if (($context eq 'course') && ($crstype eq 'Community')) {
           $linkcontext = lc($crstype);
           $stuterm = 'Members';
       }
     my %links = (      my %links = (
                 domain => {                  domain => {
                             upload     => 'Upload a File of Users',                              upload     => 'Upload a File of Users',
Line 3851  sub print_main_menu { Line 4141  sub print_main_menu {
                             singleuser => 'Add/Modify a Course User',                              singleuser => 'Add/Modify a Course User',
                             listusers  => 'Manage Course Users',                              listusers  => 'Manage Course Users',
                             },                              },
                   community => {
                               upload     => 'Upload a File of Community Users',
                               singleuser => 'Add/Modify a Community User',
                               listusers  => 'Manage Community Users',
                              },
                   );
        my %linktitles = (
                   domain => {
                               singleuser => 'Add a user to the domain, and/or a course or community in the domain.',
                               listusers  => 'Show and manage users in this domain.',
                               },
                   author => {
                               singleuser => 'Add a user with a co- or assistant author role.',
                               listusers  => 'Show and manage co- or assistant authors.',
                               },
                   course => {
                               singleuser => 'Add a user with a certain role to this course.',
                               listusers  => 'Show and manage users in this course.',
                               },
                   community => {
                               singleuser => 'Add a user with a certain role to this community.',
                               listusers  => 'Show and manage users in this community.',
                              },
                 );                  );
   my @menu = ( {categorytitle => 'Single Users',     my @menu = ( {categorytitle => 'Single Users', 
          items =>           items =>
          [           [
             {              {
              linktext => $links{$context}{'singleuser'},               linktext => $links{$linkcontext}{'singleuser'},
              icon => 'edit-redo.png',               icon => 'edit-redo.png',
              #help => 'Course_Change_Privileges',               #help => 'Course_Change_Privileges',
              url => '/adm/createuser?action=singleuser',               url => '/adm/createuser?action=singleuser',
              permission => $permission->{'cusr'},               permission => $permission->{'cusr'},
              linktitle => 'Add a user with a certain role to this course.',               linktitle => $linktitles{$linkcontext}{'singleuser'},
             },              },
          ]},           ]},
   
Line 3869  sub print_main_menu { Line 4182  sub print_main_menu {
          items =>            items => 
          [           [
             {              {
              linktext => $links{$context}{'upload'},               linktext => $links{$linkcontext}{'upload'},
              icon => 'sctr.png',               icon => 'sctr.png',
              #help => 'Course_Create_Class_List',               #help => 'Course_Create_Class_List',
              url => '/adm/createuser?action=upload',               url => '/adm/createuser?action=upload',
Line 3877  sub print_main_menu { Line 4190  sub print_main_menu {
              linktitle => 'Upload a CSV or a text file containing users.',               linktitle => 'Upload a CSV or a text file containing users.',
             },              },
             {              {
              linktext => $links{$context}{'listusers'},               linktext => $links{$linkcontext}{'listusers'},
              icon => 'edit-find.png',               icon => 'edit-find.png',
              #help => 'Course_View_Class_List',               #help => 'Course_View_Class_List',
              url => '/adm/createuser?action=listusers',               url => '/adm/createuser?action=listusers',
              permission => ($permission->{'view'} || $permission->{'cusr'}),               permission => ($permission->{'view'} || $permission->{'cusr'}),
              linktitle => 'Show and manage users of this course.',               linktitle => $linktitles{$linkcontext}{'listusers'}, 
             },              },
   
          ]},           ]},
Line 3906  sub print_main_menu { Line 4219  sub print_main_menu {
                   
     }elsif ($context eq 'course'){      }elsif ($context eq 'course'){
         my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();          my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();
       
           my %linktext = (
                            'Course'    => {
                                             single => 'Add/Modify a Student', 
                                             drop   => 'Drop Students',
                                             groups => 'Course Groups',
                                           },
                            'Community' => {
                                             single => 'Add/Modify a Member', 
                                             drop   => 'Drop Members',
                                             groups => 'Community Groups',
                                           },
                          );
   
           my %linktitle = (
               'Course' => {
                     single => 'Add a user with the role of student to this course',
                     drop   => 'Remove a student from this course.',
                     groups => 'Manage course groups',
                           },
               'Community' => {
                     single => 'Add a user with the role of member to this community',
                     drop   => 'Remove a member from this community.',
                     groups => 'Manage community groups',
                              },
           );
   
         push(@{ $menu[0]->{items} }, #Category: Single Users          push(@{ $menu[0]->{items} }, #Category: Single Users
             {                 {   
              linktext => 'Add/Modify a Student',               linktext => $linktext{$crstype}{'single'},
              #help => 'Course_Add_Student',               #help => 'Course_Add_Student',
              icon => 'list-add.png',               icon => 'list-add.png',
              url => '/adm/createuser?action=singlestudent',               url => '/adm/createuser?action=singlestudent',
              permission => $permission->{'cusr'},               permission => $permission->{'cusr'},
              linktitle => 'Add a user with the role student to this course.',               linktitle => $linktitle{$crstype}{'single'},
             },              },
         );          );
                   
         push(@{ $menu[1]->{items} }, #Category: Multiple Users           push(@{ $menu[1]->{items} }, #Category: Multiple Users 
             {              {
              linktext => 'Drop Students',               linktext => $linktext{$crstype}{'drop'},
              icon => 'edit-undo.png',               icon => 'edit-undo.png',
              #help => 'Course_Drop_Student',               #help => 'Course_Drop_Student',
              url => '/adm/createuser?action=drop',               url => '/adm/createuser?action=drop',
              permission => $permission->{'cusr'},               permission => $permission->{'cusr'},
              linktitle =>'Remove a student from this course.',               linktitle => $linktitle{$crstype}{'drop'},
             },              },
         );          );
         push(@{ $menu[2]->{items} }, #Category: Administration          push(@{ $menu[2]->{items} }, #Category: Administration
Line 3938  sub print_main_menu { Line 4277  sub print_main_menu {
              linktitle => 'Configure a custom role.',               linktitle => 'Configure a custom role.',
             },              },
             {              {
              linktext => 'Course Groups',               linktext => $linktext{$crstype}{'groups'},
              icon => 'conf.png',               icon => 'conf.png',
              #help => 'Course_Manage_Group',               #help => 'Course_Manage_Group',
              url => '/adm/coursegroups?refpage=cusr',               url => '/adm/coursegroups?refpage=cusr',
              permission => $permission->{'grp_manage'},               permission => $permission->{'grp_manage'},
              linktitle => 'Manage course groups.',               linktitle => $linktitle{$crstype}{'groups'},
             },              },
             {              {
              linktext => 'Change Logs',               linktext => 'Change Logs',
Line 3985  sub print_main_menu { Line 4324  sub print_main_menu {
                  #help => 'Course_Self_Enrollment',                   #help => 'Course_Self_Enrollment',
                  url => '/adm/createuser?action=selfenroll',                   url => '/adm/createuser?action=selfenroll',
                  permission => $permission->{'cusr'},                   permission => $permission->{'cusr'},
                  linktitle => 'Configure user self enrollment.',                   linktitle => 'Configure user self-enrollment.',
                 },                  },
             );              );
                   
Line 4456  ENDSCRIPT Line 4795  ENDSCRIPT
     return;      return;
 }  }
   
 sub display_selfenroll_queue {  
     my ($r,$context,$permission,$cnum,$cdom) = @_;  
     my $namespace = 'selfenrollrequests';  
     my ($output,%queue_by_date);  
     my %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);  
     if (keys(%requesthash) > 0) {  
         $r->print('<form method="post" name="changequeue" action="/adm/createuser" />'.  
                   '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.  
                   '<input type="hidden" name="state" value="done" />'.  
                   &Apache::loncommon::start_data_table().  
                   &Apache::loncommon::start_data_table_header_row().  
                   '<th>'.&mt('Action').'</th>'.  
                   '<th>'.&mt('Requestor').'</th>'.  
                   '<th>'.&mt('Section').'</th>'.  
                   '<th>'.&mt('Date requested').'</th>'.  
                   &Apache::loncommon::end_data_table_header_row());  
         foreach my $item (keys(%requesthash)) {  
             my ($timestamp,$usec) = split(/:/,$requesthash{$item});  
             if (exists($queue_by_date{$timestamp})) {  
                 if (ref($queue_by_date{$timestamp}) eq 'ARRAY') {  
                     push(@{$queue_by_date{$timestamp}},$item.':'.$usec);  
                 }  
             } else {  
                 @{$queue_by_date{$timestamp}} = ($item.':'.$usec);  
             }  
         }  
         my @sortedtimes = sort {$a <=> $b} (keys(%queue_by_date));  
         my $count = 0;  
         foreach my $item (@sortedtimes) {  
             if (ref($queue_by_date{$item}) eq 'ARRAY') {  
                 foreach my $request (sort(@{$queue_by_date{$item}})) {  
                     my ($puname,$pudom,$pusec) = split(/:/,$request);  
                     my $showsec = $pusec;  
                     if ($showsec eq '') {  
                         $showsec = &mt('none');  
                     }  
                     my $namelink = &Apache::loncommon::aboutmewrapper(  
                                      &Apache::loncommon::plainname($puname,$pudom),  
                                      $puname,$pudom);  
                     $r->print(&Apache::loncommon::start_data_table_row().  
                               '<td><span class="LC_nobreak"><label>'.  
                               '<input type="checkbox" value="'.$count.':'.$puname.':'.$pudom.':'.$pusec.'" name="approvereq" />'.&mt('Approve').'</label></span><br />'.  
                               '<span class="LC_nobreak"><label>'.  
                               '<input type="checkbox" value="'.$puname.':'.$pudom.'" name="rejectreq" />'.&mt('Reject').'</label></span><br /></td>'.  
                               '<td>'.$namelink.'</td>'.  
                               '<td>'.$showsec.'</td>'.  
                               '<td>'.&Apache::lonlocal::locallocaltime($item).'</td>'.  
                               &Apache::loncommon::end_data_table_row());  
                     $count ++;  
                 }  
             }  
         }  
         $r->print(&Apache::loncommon::end_data_table().  
                   '<input type="submit" name="processqueue" value="'.&mt('Save').'" /></form>');  
     } else {  
         $r->print(&mt('There are currently no enrollment requests.'));    
     }  
     return;  
 }  
   
 sub update_selfenroll_queue {  
     my ($r,$context,$permission,$cid,$cnum,$cdom) = @_;  
     my @approvals = &Apache::loncommon::get_env_multiple('form.approvereq');  
     my @rejections = &Apache::loncommon::get_env_multiple('form.rejectreq');  
     my $access_start =  $env{'course.'.$cid.'.internal.selfenroll_start_access'};  
     my $access_end =  $env{'course.'.$cid.'.internal.selfenroll_end_access'};  
     my $limit = $env{'course.'.$cid.'.internal.selfenroll_limit'};   
     my $cap = $env{'course.'.$cid.'.internal.selfenroll_cap'};  
     my $notifylist = $env{'course.'.$cid.'.internal.selfenroll_notifylist'};  
     my $namespace = 'selfenrollrequests';  
     my ($stucounts,$idx,$classlist) = &get_student_counts($cdom,$cnum);  
     my %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);  
     my $coursedesc = $env{'course.'.$cid.'.description'};  
     my $chome = &Apache::lonnet::homeserver($cnum,$cdom);  
     my $hostname = &Apache::lonnet::hostname($chome);  
     my $protocol = $Apache::lonnet::protocol{$chome};  
     $protocol = 'http' if ($protocol ne 'https');  
     my (@existing,@missingreq,@invalidusers,@limitexceeded,@enrolled,  
         @enrollerrors,@warn_approves,@warn_rejects);  
     my $now = time;  
     my $sender = $env{'user.name'}.':'.$env{'user.domain'};  
     my $approvedmsg = [{  
                         mt => 'Your request for enrollment has been approved.',  
                       },  
                       {  
                         mt => 'Visit [_1], to log-in and access the course',  
                         args => [$protocol.'://'.$hostname],  
                       }];  
                         
     my $rejectedmsg =  [{  
                          mt => 'Your request for enrollment has not been approved.',  
                        }];  
     foreach my $item (sort {$a <=> $b} @approvals) {  
         my ($num,$uname,$udom,$usec) = split(/:/,$item);  
         my $uhome = &Apache::lonnet::homeserver($uname,$udom);  
         if ($uhome ne 'no_host') {  
             if (exists($requesthash{$uname.':'.$udom})) {  
                  
                 if (exists($classlist->{$uname.':'.$udom})) {  
                     if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') {  
                         if (($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Active') ||  
                             ($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Future')) {  
                             push(@existing,$uname.':'.$udom);  
                             next;  
                         }  
                     }  
                 }  
             } else {  
                 push(@missingreq,$uname.':'.$udom);  
                 next;  
             }  
             if (!grep(/^\Q$item\E$/,@rejections)) {  
                 if ($limit eq 'allstudents') {  
                     if ($stucounts->{$limit} >= $cap) {  
                         push(@limitexceeded,$uname.':'.$udom);  
                         last;  
                     }  
                 } elsif ($limit eq 'selfenrolled') {  
                     if ($stucounts->{$limit} >= $cap) {  
                         push(@limitexceeded,$uname.':'.$udom);  
                         last;  
                     }  
                 }  
                 my $result =   
                     &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$usec,$access_end,$access_start,'selfenroll',undef,$cdom.'_'.$cnum,1);  
                 if ($result eq 'ok') {  
                     push(@enrolled,$uname.':'.$udom);  
                     $stucounts->{'allstudents'} ++;  
                     $stucounts->{'selfenrolled'} ++;  
                     &Apache::selfenroll::send_notification($uname.':'.$udom,$approvedmsg,$cid,  
                                                $coursedesc,$now,'enroller',$sender);  
                     my %userrequest = (  
                         $cdom.'_'.$cnum => {  
                            timestamp   => $now,  
                            section     => $usec,  
                            adjudicator => $env{'user.name'}.':'.$env{'user.domain'},  
                            status      => 'approved',  
                        }  
                     );  
                     my $userresult =   
                         &Apache::lonnet::put($namespace,\%userrequest,$udom,$uname);  
                     if ($userresult ne 'ok') {  
                         push(@warn_approves,$uname.':'.$udom);  
                     }  
                 } else {  
                     push(@enrollerrors,$uname.':'.$udom);  
                 }  
             }  
         } else {  
             push(@invalidusers,$uname.':'.$udom);  
         }  
     }  
     my @changes = (@enrolled,@rejections);  
     if (@rejections) {  
         foreach my $user (@rejections) {  
             &Apache::selfenroll::send_notification($user,$rejectedmsg,$cid,  
                                                    $coursedesc,$now,'enroller',$sender);  
             my ($uname,$udom) = split(/:/,$user);  
             my %userrequest = (  
                 $cdom.'_'.$cnum => {  
                     timestamp   => $now,  
                     adjudicator => $env{'user.name'}.':'.$env{'user.domain'},   
                     status      => 'rejected',  
                 }  
             );  
             my $userresult =   
                 &Apache::lonnet::put($namespace,\%userrequest,$udom,$uname);  
             if ($userresult ne 'ok') {  
                 push(@warn_rejects,$user);  
             }  
         }  
     }  
     if (@changes) {  
         my $delresult = &Apache::lonnet::del($namespace,\@changes,$cdom,$cnum);  
         if ($delresult eq 'ok') {  
             my $namelink =   
                 &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}).' ('.$env{'user.name'}.':'.$env{'user.domain'}.')';  
             my $chgmsg = "'Action was taken on the following enrollment requests by [_1].',$namelink";  
             my ($approvedlist,$rejectedlist);  
             if (@enrolled) {  
                 $approvedlist = join("\n",@enrolled);  
                 $r->print('<p>'.&mt('The following were enrolled in the course:').'<ul>');  
                 foreach my $user (@enrolled) {  
                     my ($uname,$udom) = split(/:/,$user);   
                     my $userlink =   
                         &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),$uname,$udom);  
                     $r->print('<li>'.$userlink.'</li>');  
                 }  
                 $r->print('</ul></p>');  
             }  
             if (@rejections) {  
                 $rejectedlist = join("\n",@rejections);  
                 $r->print('<p>'.&mt('The following enrollment requests were rejected:').'<ul>');  
                 foreach my $user (@rejections) {  
                     $r->print('<li>'.$user.'</li>');  
                 }  
                 $r->print('</ul></p>');  
             }  
             &Apache::selfenroll::send_notification($notifylist,$chgmsg,$cid,  
                                                    $coursedesc,$now,'managers',  
                                                    $sender,$approvedlist,$rejectedlist);  
         }  
     }  
     if (@existing) {  
         $r->print('<p>'.&mt('The following enrollment requests were deleted because the user is already enrolled in the course:').'<ul>');  
         foreach my $user (@existing) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@missingreq) {  
         $r->print('<p>'.&mt('The following enrollment requests were ignored because the request is no longer in the enrollment queue:').'<ul>');  
         foreach my $user (@missingreq) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@invalidusers) {  
         $r->print('<p>'.&mt('The following enrollment requests were deleted because the requestor does not have a LON-CAPA account:').'<ul>');  
         foreach my $user (@invalidusers) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@limitexceeded) {  
         $r->print('<p>'.&mt('The following enrollment requests were skipped because the enrollment limit has been reached for the course:').'<ul>');  
         foreach my $user (@limitexceeded) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@enrollerrors) {  
         $r->print('<p>'.&mt('The following enrollment requests could not be processed because an error occurred:').'<ul>');  
         foreach my $user (@enrollerrors) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@warn_approves) {  
         $r->print('<p>'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'<ul>');  
         foreach my $user (@warn_approves) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     if (@warn_rejects) {  
         $r->print('<p>'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'<ul>');  
         foreach my $user (@warn_rejects) {  
             $r->print('<li>'.$user.'</li>');  
         }  
         $r->print('</ul></p>');  
     }  
     return;  
 }  
   
 sub get_student_counts {  
     my ($cdom,$cnum) = @_;  
     my (%idx,%stucounts);  
     my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cnum);  
     $idx{'type'} = &Apache::loncoursedata::CL_TYPE();  
     $idx{'status'} = &Apache::loncoursedata::CL_STATUS();  
     while (my ($student,$data) = each(%$classlist)) {  
         if (($data->[$idx{'status'}] eq 'Active') ||  
             ($data->[$idx{'status'}] eq 'Future')) {  
             if ($data->[$idx{'type'}] eq 'selfenroll') {  
                 $stucounts{'selfenroll'} ++;  
             }  
             $stucounts{'allstudents'} ++;  
         }  
     }  
     return (\%stucounts,\%idx,$classlist);  
 }  
   
 sub visible_in_cat {  sub visible_in_cat {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);      my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
     my ($cathash,%settable,@vismsgs,$cansetvis);      my ($cathash,%settable,@vismsgs,$cansetvis);
     my %visactions = &Apache::lonlocal::texthash(      my %visactions = &Apache::lonlocal::texthash(
                    vis => 'Your course currently appears in the Course Catalog for this domain.',                     vis => 'Your course/community currently appears in the Course/Community Catalog for this domain.',
                    gen => 'Courses can be both self-cataloging, based on an institutional code (e.g., fs08phy231), or can be assigned categories from a hierarchy defined for the domain.',                     gen => 'Courses can be both self-cataloging, based on an institutional code (e.g., fs08phy231), or can be assigned categories from a hierarchy defined for the domain.',
                    miss => 'Your course does not currently appear in the Course Catalog for this domain.',                     miss => 'Your course/community does not currently appear in the Course/Community Catalog for this domain.',
                    yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding your course.',                     yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding your course.',
                    coca => 'Courses can be absent from the Catalog, because they do not have an institutional code, have no assigned category, or have been specifically excluded.',                     coca => 'Courses can be absent from the Catalog, because they do not have an institutional code, have no assigned category, or have been specifically excluded.',
                    make => 'Make any changes to self-enrollment settings below, click "Save", then take action to include the course in the Catalog:',                     make => 'Make any changes to self-enrollment settings below, click "Save", then take action to include the course in the Catalog:',
Line 4952  sub print_userchangelogs_display { Line 5018  sub print_userchangelogs_display {
     my $formname = 'roleslog';      my $formname = 'roleslog';
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};      my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       my $crstype = &Apache::loncommon::course_type();
     my %roleslog=&Apache::lonnet::dump('nohist_rolelog',$cdom,$cnum);      my %roleslog=&Apache::lonnet::dump('nohist_rolelog',$cdom,$cnum);
     if ((keys(%roleslog))[0]=~/^error\:/) { undef(%roleslog); }      if ((keys(%roleslog))[0]=~/^error\:/) { undef(%roleslog); }
   
Line 4990  sub print_userchangelogs_display { Line 5057  sub print_userchangelogs_display {
     }      }
     my (%whodunit,%changed,$version);      my (%whodunit,%changed,$version);
     ($version) = ($r->dir_config('lonVersion') =~ /^([\d\.]+)\-/);      ($version) = ($r->dir_config('lonVersion') =~ /^([\d\.]+)\-/);
     $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version));      $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version,$crstype));
     my ($minshown,$maxshown);      my ($minshown,$maxshown);
     $minshown = 1;      $minshown = 1;
     my $count = 0;      my $count = 0;
Line 5059  sub print_userchangelogs_display { Line 5126  sub print_userchangelogs_display {
         if ($roleslog{$id}{'logentry'}{'selfenroll'}) {          if ($roleslog{$id}{'logentry'}{'selfenroll'}) {
             $chgcontext = 'selfenroll';              $chgcontext = 'selfenroll';
         }          }
         my %lt = &rolechg_contexts();          my %lt = &rolechg_contexts($crstype);
         if ($chgcontext ne '' && $lt{$chgcontext} ne '') {          if ($chgcontext ne '' && $lt{$chgcontext} ne '') {
             $chgcontext = $lt{$chgcontext};              $chgcontext = $lt{$chgcontext};
         }          }
Line 5069  sub print_userchangelogs_display { Line 5136  sub print_userchangelogs_display {
            .'<td>'.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'</td>'             .'<td>'.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'</td>'
            .'<td>'.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'</td>'             .'<td>'.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'</td>'
            .'<td>'.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'</td>'             .'<td>'.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'</td>'
            .'<td>'.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'}).'</td>'             .'<td>'.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'},$crstype).'</td>'
            .'<td>'.$sec.'</td>'             .'<td>'.$sec.'</td>'
            .'<td>'.$chgcontext.'</td>'             .'<td>'.$chgcontext.'</td>'
            .'<td>'.$rolestart.'</td>'             .'<td>'.$rolestart.'</td>'
Line 5134  ENDSCRIPT Line 5201  ENDSCRIPT
   
     # Table Header      # Table Header
     my $tableheader =      my $tableheader =
         &Apache::loncommon::start_data_table()          &Apache::loncommon::start_data_table_header_row()
        .&Apache::loncommon::start_data_table_header_row()  
        .'<th>&nbsp;</th>'         .'<th>&nbsp;</th>'
        .'<th>'.&mt('When').'</th>'         .'<th>'.&mt('When').'</th>'
        .'<th>'.&mt('Who made the change').'</th>'         .'<th>'.&mt('Who made the change').'</th>'
Line 5162  ENDSCRIPT Line 5228  ENDSCRIPT
 }  }
   
 sub role_display_filter {  sub role_display_filter {
     my ($formname,$cdom,$cnum,$curr,$version) = @_;      my ($formname,$cdom,$cnum,$curr,$version,$crstype) = @_;
     my $context = 'course';      my $context = 'course';
       my $lctype = lc($crstype);
     my $nolink = 1;      my $nolink = 1;
     my $output = '<table><tr><td valign="top">'.      my $output = '<table><tr><td valign="top">'.
                  '<span class="LC_nobreak"><b>'.&mt('Changes/page:').'</b></span><br />'.                   '<span class="LC_nobreak"><b>'.&mt('Changes/page:').'</b></span><br />'.
Line 5178  sub role_display_filter { Line 5245  sub role_display_filter {
         &Apache::lonhtmlcommon::date_setter($formname,'rolelog_end_date',          &Apache::lonhtmlcommon::date_setter($formname,'rolelog_end_date',
                                             $curr->{'rolelog_end_date'},undef,                                              $curr->{'rolelog_end_date'},undef,
                                             undef,undef,undef,undef,undef,undef,$nolink);                                              undef,undef,undef,undef,undef,undef,$nolink);
     my %lt = &rolechg_contexts();      my %lt = &rolechg_contexts($crstype);
     $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').'</b><br />'.      $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').'</b><br />'.
                '<table><tr><td>'.&mt('After:').                 '<table><tr><td>'.&mt('After:').
                '</td><td>'.$startform.'</td></tr>'.                 '</td><td>'.$startform.'</td></tr>'.
Line 5192  sub role_display_filter { Line 5259  sub role_display_filter {
         $output .= ' selected="selected"';          $output .= ' selected="selected"';
     }      }
     $output .=  '>'.&mt('Any').'</option>'."\n";      $output .=  '>'.&mt('Any').'</option>'."\n";
     my @roles = &Apache::lonuserutils::course_roles($context,undef,1);      my @roles = &Apache::lonuserutils::course_roles($context,undef,1,$lctype);
     foreach my $role (@roles) {      foreach my $role (@roles) {
         my $plrole;          my $plrole;
         if ($role eq 'cr') {          if ($role eq 'cr') {
             $plrole = &mt('Custom Role');              $plrole = &mt('Custom Role');
         } else {          } else {
             $plrole=&Apache::lonnet::plaintext($role);              $plrole=&Apache::lonnet::plaintext($role,$crstype);
         }          }
         my $selstr = '';          my $selstr = '';
         if ($role eq $curr->{'role'}) {          if ($role eq $curr->{'role'}) {
Line 5210  sub role_display_filter { Line 5277  sub role_display_filter {
                '<td>&nbsp;&nbsp;</td>'.                 '<td>&nbsp;&nbsp;</td>'.
                '<td valign="top"><b>'.                 '<td valign="top"><b>'.
                &mt('Context:').'</b><br /><select name="chgcontext">';                 &mt('Context:').'</b><br /><select name="chgcontext">';
     foreach my $chgtype ('any','auto','updatenow','createcourse','course','domain','selfenroll') {      foreach my $chgtype ('any','auto','updatenow','createcourse','course','domain','selfenroll','requestcourses') {
         my $selstr = '';          my $selstr = '';
         if ($curr->{'chgcontext'} eq $chgtype) {          if ($curr->{'chgcontext'} eq $chgtype) {
             $selstr = ' selected="selected"';              $selstr = ' selected="selected"';
Line 5220  sub role_display_filter { Line 5287  sub role_display_filter {
         }          }
         $output .= '<option value="'.$chgtype.'"'.$selstr.'>'.$lt{$chgtype}.'</option>'."\n";          $output .= '<option value="'.$chgtype.'"'.$selstr.'>'.$lt{$chgtype}.'</option>'."\n";
     }      }
     $output .= '</select></td>'.      $output .= '</select></td>'
                '<td>&nbsp;&nbsp;</td>'.                .'</tr></table>';
                '<td valign="middle"><input type="submit" value="'.  
                &mt('Update Display').'" /></td></tr></table>'.      # Update Display button
                '<span class="LC_roleslog_note">'.      $output .= '<p>'
                &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.6.99.0 or later are displayed.');                .'<input type="submit" value="'.&mt('Update Display').'" />'
                 .'</p>';
   
       # Server version info
       $output .= '<p class="LC_info">'
                 .&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'
                     ,'2.6.99.0');
     if ($version) {      if ($version) {
         $output .= ' '.&mt('This server is version [_3].','<b>','</b>',$version);    }          $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);
     $output .= '</span><hr /><br />';      }
       $output .= '</p><hr />';
     return $output;      return $output;
 }  }
   
 sub rolechg_contexts {  sub rolechg_contexts {
       my ($crstype) = @_;
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                                              any          => 'Any',                                               any          => 'Any',
                                              auto         => 'Automated enrollment',                                               auto         => 'Automated enrollment',
Line 5240  sub rolechg_contexts { Line 5315  sub rolechg_contexts {
                                              createcourse => 'Course Creation',                                               createcourse => 'Course Creation',
                                              course       => 'User Management in course',                                               course       => 'User Management in course',
                                              domain       => 'User Management in domain',                                               domain       => 'User Management in domain',
                                              selfenroll   => 'Self-enrolled',                                                selfenroll   => 'Self-enrolled',
                                                requestcourses => 'Course Request',
                                          );                                           );
       if ($crstype eq 'Community') {
           $lt{'createcourse'} = &mt('Community Creation');
           $lt{'course'} = &mt('User Management in community');
           $lt{'requestcourses'} = &mt('Community Request');
       }
     return %lt;      return %lt;
 }  }
   
Line 5325  sub user_search_result { Line 5406  sub user_search_result {
                                 &build_search_response($context,$srch,%srch_results);                                  &build_search_response($context,$srch,%srch_results);
                         } else {                          } else {
                             $currstate = 'modify';                              $currstate = 'modify';
                               my $uname = $srch->{'srchterm'};
                               my $udom = $srch->{'srchdomain'};
                               $srch_results{$uname.':'.$udom} =
                                   { &Apache::lonnet::get('environment',
                                                          ['firstname',
                                                           'lastname',
                                                           'permanentemail'],
                                                            $udom,$uname)
                                   };
                         }                          }
                     } else {                      } else {
                         %srch_results = &Apache::lonnet::usersearch($srch);                          %srch_results = &Apache::lonnet::usersearch($srch);
Line 5616  sub build_search_response { Line 5706  sub build_search_response {
                     $response .= '<br />'.&mt('You may want to broaden your search to the selected LON-CAPA domain.');                      $response .= '<br />'.&mt('You may want to broaden your search to the selected LON-CAPA domain.');
                 }                  }
             }              }
             if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $env{'request.role.domain'})) {              my $createdom = $env{'request.role.domain'};
               if ($context eq 'requestcrs') {
                   if ($env{'form.coursedom'} ne '') {
                       $createdom = $env{'form.coursedom'};
                   }
               }
               if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $createdom)) {
                 my $cancreate =                  my $cancreate =
                     &Apache::lonuserutils::can_create_user($env{'request.role.domain'},$context);                      &Apache::lonuserutils::can_create_user($createdom,$context);
                   my $targetdom = '<span class="LC_cusr_emph">'.$createdom.'</span>';
                 if ($cancreate) {                  if ($cancreate) {
                     my $showdom = &display_domain_info($env{'request.role.domain'});                       my $showdom = &display_domain_info($createdom); 
                     $response .= '<br /><br />'                      $response .= '<br /><br />'
                                 .'<b>'.&mt('To add a new user:').'</b>'                                  .'<b>'.&mt('To add a new user:').'</b>'
                                 .'<br />'                                  .'<br />';
                                 .&mt("(You can only create new users in your current role's domain - [_1])"                      if ($context eq 'requestcrs') {
                                     ,'<span class="LC_cusr_emph">'.$env{'request.role.domain'}.'</span>')                          $response .= &mt("(You can only define new users in the new course's domain - [_1])",$targetdom);
                                 .'<ul><li>'                      } else {
                           $response .= &mt("(You can only create new users in your current role's domain - [_1])",$targetdom);
                       }
                       $response .='<ul><li>'
                                 .&mt("Set 'Domain/institution to search' to: [_1]",'<span class="LC_cusr_emph">'.$showdom.'</span>')                                  .&mt("Set 'Domain/institution to search' to: [_1]",'<span class="LC_cusr_emph">'.$showdom.'</span>')
                                 .'</li><li>'                                  .'</li><li>'
                                 .&mt("Set 'Search criteria' to: [_1]username is ..... in selected LON-CAPA domain[_2]",'<span class="LC_cusr_emph">','</span>')                                  .&mt("Set 'Search criteria' to: [_1]username is ..... in selected LON-CAPA domain[_2]",'<span class="LC_cusr_emph">','</span>')
Line 5637  sub build_search_response { Line 5737  sub build_search_response {
                                 .'</li></ul><br />';                                  .'</li></ul><br />';
                 } else {                  } else {
                     my $helplink = ' href="javascript:helpMenu('."'display'".')"';                      my $helplink = ' href="javascript:helpMenu('."'display'".')"';
                     $response .= '<br /><br />'                      $response .= '<br /><br />';
                                 .&mt("You are not authorized to create new users in your current role's domain - [_1]."                      if ($context eq 'requestcrs') {
                                     ,'<span class="LC_cusr_emph">'.$env{'request.role.domain'}.'</span>')                          $response .= &mt("You are not authorized to define new users in the new course's domain - [_1].",$targetdom);
                                 .'<br />'                      } else {
                                 .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'                          $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);
                       }
                       $response .= '<br />'
                                    .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'
                                     ,' <a'.$helplink.'>'                                      ,' <a'.$helplink.'>'
                                     ,'</a>')                                      ,'</a>')
                                 .'<br /><br />';                                   .'<br /><br />';
                 }                  }
             }              }
         }          }
Line 5747  sub course_level_table { Line 5850  sub course_level_table {
         }          }
         my @roles = &Apache::lonuserutils::roles_by_context('course');          my @roles = &Apache::lonuserutils::roles_by_context('course');
  foreach my $role (@roles) {   foreach my $role (@roles) {
             my $plrole=&Apache::lonnet::plaintext($role);              my $plrole=&Apache::lonnet::plaintext($role,$type);
     if (&Apache::lonnet::allowed('c'.$role,$thiscourse)) {      if (&Apache::lonnet::allowed('c'.$role,$thiscourse)) {
                 $table .= &course_level_row($protectedcourse,$role,$area,$domain,                  $table .= &course_level_row($protectedcourse,$role,$area,$domain,
                                             $plrole,\%sections_count,\%lt);                                                  $plrole,\%sections_count,\%lt);    
Line 5840  sub course_level_dc { Line 5943  sub course_level_dc {
                       '<input type="hidden" name="dccourse" value="" />';                        '<input type="hidden" name="dccourse" value="" />';
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
             ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Course').'</b>';              ('cu','dccourse','dcdomain','coursedesc',undef,undef,'Course').'</b>';
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu');      my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role');
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                     'rol'  => "Role",                      'rol'  => "Role",
                     'grs'  => "Section",                      'grs'  => "Section",
Line 6148  sub update_selfenroll_config { Line 6251  sub update_selfenroll_config {
                                 if ($currlimit eq 'allstudents') {                                  if ($currlimit eq 'allstudents') {
                                     $newval = &mt('New self-enrollment no longer allowed when total (all students) reaches [_1].',$newcap);                                      $newval = &mt('New self-enrollment no longer allowed when total (all students) reaches [_1].',$newcap);
                                 } elsif ($changes{'internal.selfenroll_limit'} eq 'selfenrolled') {                                  } elsif ($changes{'internal.selfenroll_limit'} eq 'selfenrolled') {
                                     $newval =  &mt('New self-enrollment no longer allowed when total umber of self-enrolled students reaches [_1].',$newcap);                                      $newval =  &mt('New self-enrollment no longer allowed when total number of self-enrolled students reaches [_1].',$newcap);
                                 }                                  }
                             }                              }
                             $r->print('<li>'.&mt('"[_1]" set to "[_2]".',$title,$newval).'</li>'."\n");                              $r->print('<li>'.&mt('"[_1]" set to "[_2]".',$title,$newval).'</li>'."\n");

Removed from v.1.302  
changed lines
  Added in v.1.319


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