Diff for /loncom/interface/loncreateuser.pm between versions 1.295.2.23 and 1.324

version 1.295.2.23, 2010/01/19 21:29:50 version 1.324, 2009/11/12 15:58:22
Line 51  In LON-CAPA, roles are actually collecti Line 51  In LON-CAPA, roles are actually collecti
 Assistant", "Course Coordinator", and other such roles are really just  Assistant", "Course Coordinator", and other such roles are really just
 collection of privileges that are useful in many circumstances.  collection of privileges that are useful in many circumstances.
   
 Creating custom roles can be done by the Domain Coordinator through  Custom roles can be defined by a Domain Coordinator, Course Coordinator
 the Create User functionality. That screen will show all privileges  or Community Coordinator via the Manage User functionality.
 that can be assigned to users. For a complete list of privileges,  The custom role editor screen will show all privileges which can be
 please see C</home/httpd/lonTabs/rolesplain.tab>.  assigned to users. For a complete list of privileges, please see 
   C</home/httpd/lonTabs/rolesplain.tab>.
   
 Custom role definitions are stored in the C<roles.db> file of the role  Custom role definitions are stored in the C<roles.db> file of the creator
 author.  of the role.
   
 =cut  =cut
   
Line 230  sub build_tools_display { Line 231  sub build_tools_display {
                    'uscu'       => "Use custom",                     'uscu'       => "Use custom",
                    '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',
                      'community'  => 'Can request creation of communities',
     );      );
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                       'requestcourses.official','requestcourses.unofficial');                        'requestcourses.official','requestcourses.unofficial',
         @usertools = ('official','unofficial');                        'requestcourses.community');
           @usertools = ('official','unofficial','community');
         @options =('norequest','approval','autolimit','validate');          @options =('norequest','approval','autolimit','validate');
         %validations = &Apache::lonnet::auto_courserequest_checks($ccdomain);          %validations = &Apache::lonnet::auto_courserequest_checks($ccdomain);
         %reqtitles = &courserequest_titles();          %reqtitles = &courserequest_titles();
Line 485  sub print_username_entry_form { Line 488  sub print_username_entry_form {
         '// ]]>'."\n".          '// ]]>'."\n".
         '</script>'."\n";          '</script>'."\n";
   
       my %existingroles=&Apache::lonuserutils::my_custom_roles($crstype);
       if (($env{'form.action'} eq 'custom') && (keys(%existingroles) > 0)
           && (&Apache::lonnet::allowed('mcr','/'))) {
           $jscript .= &customrole_javascript();
       }
     my %loaditems = (      my %loaditems = (
                 'onload' => "javascript:setFormElements(document.$formtoset)",                  'onload' => "javascript:setFormElements(document.$formtoset)",
                     );                      );
Line 510  sub print_username_entry_form { Line 518  sub print_username_entry_form {
     }      }
     my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management',      my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management',
                                                      $helpitem);                                                       $helpitem);
     my %existingroles=&Apache::lonuserutils::my_custom_roles();  
     my $choice=&Apache::loncommon::select_form('make new role','rolename',  
  ('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',                      '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",
                     'ecrp' => "Edit Custom Role Privileges",                      'ecrp' => "Define or Edit Custom Role",
                     'nr'   => "Name of Role",                      'nr'   => "role name",
                     'cre'  => "Next",                      'cre'  => "Next",
        );         );
     $r->print($start_page."\n".$crumbs);      $r->print($start_page."\n".$crumbs);
     if ($env{'form.action'} eq 'custom') {      if ($env{'form.action'} eq 'custom') {
         if (&Apache::lonnet::allowed('mcr','/')) {          if (&Apache::lonnet::allowed('mcr','/')) {
             $r->print(<<ENDCUSTOM);              my $newroletext = &mt('Define new custom role:');
 <form action="/adm/createuser" method="post" name="docustom">              $r->print('<form action="/adm/createuser" method="post" name="docustom">'.
 <input type="hidden" name="action" value="$env{'form.action'}" />                        '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.
 <input type="hidden" name="phase" value="selected_custom_edit" />                        '<input type="hidden" name="phase" value="selected_custom_edit" />'.
 <h3>$lt{'ecrp'}</h3>                        '<h3>'.$lt{'ecrp'}.'</h3>'.
 $choice $lt{'nr'}: <input type="text" size="15" name="newrolename" /><br />                        &Apache::loncommon::start_data_table().
 <input name="customeditor" type="submit" value="$lt{'cre'}" />                        &Apache::loncommon::start_data_table_row().
 </form>                        '<td>');
 ENDCUSTOM              if (keys(%existingroles) > 0) {
                   $r->print('<br /><label><input type="radio" name="customroleaction" value="new" checked="checked" onclick="setCustomFields();" /><b>'.$newroletext.'</b></label>');
               } else {
                   $r->print('<br /><input type="hidden" name="customroleaction" value="new" /><b>'.$newroletext.'</b>');
               }
               $r->print('</td><td align="center">'.$lt{'nr'}.'<br /><input type="text" size="15" name="newrolename" onfocus="setCustomAction('."'new'".');" /></td>'.
                         &Apache::loncommon::end_data_table_row());
               if (keys(%existingroles) > 0) {
                   $r->print(&Apache::loncommon::start_data_table_row().'<td><br />'.
                             '<label><input type="radio" name="customroleaction" value="edit" onclick="setCustomFields();"/><b>'.
                             &mt('View/Modify existing role:').'</b></label></td>'.
                             '<td align="center"><br />'.
                             '<select name="rolename" onchange="setCustomAction('."'edit'".');">'.
                             '<option value="" selected="selected" onchange="">'.
                             &mt('Select'));
                   foreach my $role (sort(keys(%existingroles))) {
                       $r->print('<option value="$role">'.$role.'</option>');
                   }
                   $r->print('</select>'.
                             '</td>'.
                             &Apache::loncommon::end_data_table_row());
               }
               $r->print(&Apache::loncommon::end_data_table().'<p>'.
                         '<input name="customeditor" type="submit" value="'.
                         $lt{'cre'}.'" /></p>'.
                         '</form>');
         }          }
     } else {      } else {
         my $actiontext = $lt{'srad'};          my $actiontext = $lt{'srad'};
Line 555  ENDCUSTOM Line 584  ENDCUSTOM
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
   sub customrole_javascript {
       my $js = <<"END";
   <script type="text/javascript">
   // <![CDATA[
   
   function setCustomFields() {
       if (document.docustom.customroleaction.length > 0) {
           for (var i=0; i<document.docustom.customroleaction.length; i++) {
               if (document.docustom.customroleaction[i].checked) {
                   if (document.docustom.customroleaction[i].value == 'new') {
                       document.docustom.rolename.selectedIndex = 0;
                   } else {
                       document.docustom.newrolename.value = '';
                   }
               }
           }
       }
       return;
   }
   
   function setCustomAction(caller) {
       if (document.docustom.customroleaction.length > 0) {
           for (var i=0; i<document.docustom.customroleaction.length; i++) {
               if (document.docustom.customroleaction[i].value == caller) {
                   document.docustom.customroleaction[i].checked = true;
               }
           }
       }
       setCustomFields();
       return;
   }
   
   // ]]>
   </script>
   END
       return $js;
   }
   
 sub entry_form {  sub entry_form {
     my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_;      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);
Line 608  ENDBLOCK Line 675  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') {
             if ($crstype eq 'Community') {              if ($crstype eq 'Community') {
                 $title = $lt{'enrm'};                  $title = $lt{'enrm'};
             } else {              } else {
Line 2140  sub update_user_data { Line 2207  sub update_user_data {
  $env{'form.ccuname'}, $env{'form.ccdomain'}).'</h3>');   $env{'form.ccuname'}, $env{'form.ccdomain'}).'</h3>');
     my (%alerts,%rulematch,%inst_results,%curr_rules);      my (%alerts,%rulematch,%inst_results,%curr_rules);
     my @usertools = ('aboutme','blog','portfolio');      my @usertools = ('aboutme','blog','portfolio');
     my @requestcourses = ('official','unofficial');      my @requestcourses = ('official','unofficial','community');
     my ($othertitle,$usertypes,$types) =       my ($othertitle,$usertypes,$types) = 
         &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});          &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
     if ($env{'form.makeuser'}) {      if ($env{'form.makeuser'}) {
Line 2541  sub update_user_data { Line 2608  sub update_user_data {
                         ($env{'user.domain'} eq $env{'form.ccdomain'})) {                          ($env{'user.domain'} eq $env{'form.ccdomain'})) {
                         my %newenvhash;                          my %newenvhash;
                         foreach my $key (keys(%changed)) {                          foreach my $key (keys(%changed)) {
                             if (($key eq 'official') || ($key eq 'unofficial')) {                              if (($key eq 'official') || ($key eq 'unofficial')
                                   || ($key eq 'community')) {
                                 $newenvhash{'environment.requestcourses.'.$key} =                                  $newenvhash{'environment.requestcourses.'.$key} =
                                     $changeHash{'requestcourses.'.$key};                                      $changeHash{'requestcourses.'.$key};
                                 if ($changeHash{'requestcourses.'.$key} ne '') {                                  if ($changeHash{'requestcourses.'.$key} ne '') {
                                     $newenvhash{'environment.canrequest.'.$key} = 1;                                      $newenvhash{'environment.canrequest.'.$key} =
                                           $changeHash{'requestcourses.'.$key};
                                 } else {                                  } else {
                                     $newenvhash{'environment.canrequest.'.$key} =                                      $newenvhash{'environment.canrequest.'.$key} =
           &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},            &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
Line 2602  sub update_user_data { Line 2671  sub update_user_data {
                              'portfolio'  => 'Portfolio Availability',                               'portfolio'  => 'Portfolio Availability',
                              'official'   => 'Can Request Official Courses',                               'official'   => 'Can Request Official Courses',
                              'unofficial' => 'Can Request Unofficial Courses',                               'unofficial' => 'Can Request Unofficial Courses',
                                'community'  => 'Can Request Communities',
                              'inststatus' => "Affiliation",                               'inststatus' => "Affiliation",
                              'prvs'       => 'Previous Value:',                               'prvs'       => 'Previous Value:',
                              'chto'       => 'Changed To:'                               'chto'       => 'Changed To:'
Line 2755  END Line 2825  END
                            'portfolio'  => "Portfolio Availability",                             'portfolio'  => "Portfolio Availability",
                            'official'   => "Can Request Official Courses",                             'official'   => "Can Request Official Courses",
                            'unofficial' => "Can Request Unofficial Courses",                             'unofficial' => "Can Request Unofficial Courses",
                              'community'  => "Can Request Communities",
                            'inststatus' => "Affiliation",                             'inststatus' => "Affiliation",
        );         );
             $r->print(<<"END");              $r->print(<<"END");
Line 3346  sub enroll_single_student { Line 3417  sub enroll_single_student {
                 $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.'));                  $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 {              } 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(&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>');             $r->print('</p>');
         }          }
     } else {      } else {
         $r->print(&mt('unable to enroll').": ".$enroll_result);          $r->print(&mt('unable to enroll').": ".$enroll_result);
Line 3472  sub build_roles { Line 3543  sub build_roles {
   
 sub custom_role_editor {  sub custom_role_editor {
     my ($r) = @_;      my ($r) = @_;
     my $rolename=$env{'form.rolename'};      my $action = $env{'form.customroleaction'};
       my $rolename; 
     if ($rolename eq 'make new role') {      if ($action eq 'new') {
  $rolename=$env{'form.newrolename'};          $rolename=$env{'form.newrolename'};
       } else {
           $rolename=$env{'form.rolename'};
     }      }
   
     $rolename=~s/[^A-Za-z0-9]//gs;      $rolename=~s/[^A-Za-z0-9]//gs;
   
     if (!$rolename || $env{'form.phase'} eq 'pickrole') {      if (!$rolename || $env{'form.phase'} eq 'pickrole') {
  &print_username_entry_form($r);   &print_username_entry_form($r);
         return;          return;
     }      }
       my ($crstype,$context);
       if ($env{'request.course.id'}) {
           $crstype = &Apache::loncommon::course_type();
           $context = 'course';
       } else {
           $context = 'domain';
           $crstype = $env{'form.templatecrstype'};
       }
 # ------------------------------------------------------- What can be assigned?  # ------------------------------------------------------- What can be assigned?
     my %full=();      my %full=();
     my %courselevel=();      my %courselevel=();
Line 3501  sub custom_role_editor { Line 3581  sub custom_role_editor {
  $body_top .= &mt('Existing Role').' "';   $body_top .= &mt('Existing Role').' "';
 # ------------------------------------------------- Get current role privileges  # ------------------------------------------------- Get current role privileges
  ($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef);   ($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef);
           if ($crstype eq 'Community') {
               $syspriv =~ s/bre\&S//;   
           }
     } else {      } else {
  $body_top .= &mt('New Role').' "';   $body_top .= &mt('New Role').' "';
  $roledef='';   $roledef='';
Line 3540  sub custom_role_editor { Line 3623  sub custom_role_editor {
     my ($jsback,$elements) = &crumb_utilities();      my ($jsback,$elements) = &crumb_utilities();
     my $button_code = "\n";      my $button_code = "\n";
     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 $crstype;      my @template_roles = ("in","ta","ep");
     if ($env{'request.course.id'}) {      if ($context eq 'domain') {
         $crstype = &Apache::loncommon::course_type();          push(@template_roles,"ad");
     }      }
     my @template_roles = ("in","ta","ep","st");      push(@template_roles,"st");
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         unshift(@template_roles,'co');          unshift(@template_roles,'co');
     } else {      } else {
         unshift(@template_roles,'cc');          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,$crstype);
         $button_code .= &make_button_code($role,$crstype).' ';          $button_code .= &make_button_code($role,$crstype).' ';
     }      }
     $head_script .= "\n".$jsback."\n".      my $context_code;
                     '// ]]>'."\n".      if ($context eq 'domain') {
                     '</script>'."\n";          my $checkedCommunity = '';
           my $checkedCourse = ' checked="checked"';
           if ($env{'form.templatecrstype'} eq 'Community') {
               $checkedCommunity = $checkedCourse;
               $checkedCourse = '';
           }
           $context_code = '<label>'.
                           '<input type="radio" name="templatecrstype" value="Course"'.$checkedCourse.' onclick="this.form.submit();">'.
                           &mt('Course').
                           '</label>'.('&nbsp;' x2).
                           '<label>'.
                           '<input type="radio" name="templatecrstype" value="Community"'.$checkedCommunity.' onclick="this.form.submit();">'.
                           &mt('Community').
                           '</label>'.
                           '</fieldset>'.
                           '<input type="hidden" name="customroleaction" value="'.
                           $action.'" />';
           if ($env{'form.customroleaction'} eq 'new') {
               $context_code .= '<input type="hidden" name="newrolename" value="'.
                                $rolename.'" />';
           } else {
               $context_code .= '<input type="hidden" name="rolename" value="'.
                                $rolename.'" />';
           }
           $context_code .= '<input type="hidden" name="action" value="custom" />'.
                            '<input type="hidden" name="phase" value="selected_custom_edit" />';
       }
   
       $head_script .= "\n".$jsback."\n"
                      .'// ]]>'."\n"
                      .'</script>'."\n";
     $r->print(&Apache::loncommon::start_page('Custom Role Editor',$head_script));      $r->print(&Apache::loncommon::start_page('Custom Role Editor',$head_script));
    &Apache::lonhtmlcommon::add_breadcrumb     &Apache::lonhtmlcommon::add_breadcrumb
      ({href=>"javascript:backPage(document.form1,'pickrole','')",       ({href=>"javascript:backPage(document.form1,'pickrole','')",
Line 3577  sub custom_role_editor { Line 3690  sub custom_role_editor {
                     'dml'  => "Domain Level",                      'dml'  => "Domain Level",
                     'ssl'  => "System Level");                      'ssl'  => "System Level");
   
     $r->print('<div>'  
       $r->print('<div class="LC_left_float">'
              .'<form action=""><fieldset>'               .'<form action=""><fieldset>'
              .'<legend>'.&mt('Select a Template').'</legend>'               .'<legend>'.&mt('Select a Template').'</legend>'
              .$button_code               .$button_code
              .'</fieldset></form>'               .'</fieldset></form></div>');
              .'</div>'      if ($context_code) {
     );          $r->print('<div class="LC_left_float">'
                    .'<form action="/adm/createuser" method="post"><fieldset>'
                    .'<legend>'.&mt('Context').'</legend>'
                    .$context_code
                    .'</form>'
                    .'</div>'
           );
       }
       $r->print('<br clear="all" />');
   
     $r->print(<<ENDCCF);      $r->print(<<ENDCCF);
 <form name="form1" method="post">  <form name="form1" method="post">
Line 3595  ENDCCF Line 3717  ENDCCF
 '<th>'.$lt{'prv'}.'</th><th>'.$lt{'crl'}.'</th><th>'.$lt{'dml'}.  '<th>'.$lt{'prv'}.'</th><th>'.$lt{'crl'}.'</th><th>'.$lt{'dml'}.
 '</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,$crstype);          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>'.
Line 3604  ENDCCF Line 3726  ENDCCF
     '</td><td>'.      '</td><td>'.
     ($domainlevel{$priv}?'<input type="checkbox" name="'.$priv.'_d"'.      ($domainlevel{$priv}?'<input type="checkbox" name="'.$priv.'_d"'.
     ($domainlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;').      ($domainlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;').
     '</td><td>'.      '</td><td>');
     ($systemlevel{$priv}?'<input type="checkbox" name="'.$priv.'_s"'.          if ($priv eq 'bre' && $crstype eq 'Community') {
     ($systemlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;').              $r->print('&nbsp;');  
     '</td>'.          } else {
              &Apache::loncommon::end_data_table_row());              $r->print($systemlevel{$priv}?'<input type="checkbox" name="'.$priv.'_s"'.
                         ($systemlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;');
           }
           $r->print('</td>'.
                     &Apache::loncommon::end_data_table_row());
     }      }
     $r->print(&Apache::loncommon::end_data_table().      $r->print(&Apache::loncommon::end_data_table().
    '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.     '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.
Line 3620  ENDCCF Line 3746  ENDCCF
 }  }
 # --------------------------------------------------------  # --------------------------------------------------------
 sub make_script_template {  sub make_script_template {
     my ($role) = @_;      my ($role,$crstype) = @_;
     my %full_c=();      my %full_c=();
     my %full_d=();      my %full_d=();
     my %full_s=();      my %full_s=();
Line 3634  sub make_script_template { Line 3760  sub make_script_template {
         $full_d{$priv}=1;          $full_d{$priv}=1;
     }      }
     foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:s'})) {      foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:s'})) {
           next if (($crstype eq 'Community') && ($item eq 'bre&S'));
         my ($priv,$restrict)=split(/\&/,$item);          my ($priv,$restrict)=split(/\&/,$item);
         $full_s{$priv}=1;          $full_s{$priv}=1;
     }      }
Line 3701  sub set_custom_role { Line 3828  sub set_custom_role {
         return;          return;
     }      }
     my ($jsback,$elements) = &crumb_utilities();      my ($jsback,$elements) = &crumb_utilities();
     my $jscript = '<script type="text/javascript">'.      my $jscript = '<script type="text/javascript">'
                   '// <![CDATA['."\n".                   .'// <![CDATA['."\n"
                   $jsback."\n".                   .$jsback."\n"
                   '// ]]>'."\n".                   .'// ]]>'."\n"
                   '</script>';                   .'</script>'."\n";
   
     $r->print(&Apache::loncommon::start_page('Save Custom Role'),$jscript);      $r->print(&Apache::loncommon::start_page('Save Custom Role'),$jscript);
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
Line 3954  sub handler { Line 4081  sub handler {
             if (($context eq 'domain') && (($env{'form.roletype'} eq 'course') ||              if (($context eq 'domain') && (($env{'form.roletype'} eq 'course') ||
                 ($env{'form.roletype'} eq 'community'))) {                  ($env{'form.roletype'} eq 'community'))) {
                 if ($env{'form.roletype'} eq 'course') {                  if ($env{'form.roletype'} eq 'course') {
                     ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles) =                      ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles) = 
                         &Apache::lonuserutils::courses_selector($env{'request.role.domain'},                          &Apache::lonuserutils::courses_selector($env{'request.role.domain'},
                                                                 $formname);                                                                  $formname);
                 } elsif ($env{'form.roletype'} eq 'community') {                  } elsif ($env{'form.roletype'} eq 'community') {
                     $cb_jscript =                      $cb_jscript = 
                         &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'});                          &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'});
                     my %elements = (                      my %elements = (
                                       coursepick => 'radio',                                        coursepick => 'radio',
Line 3997  sub handler { Line 4124  sub handler {
             ({href=>'/adm/createuser?action=drop',              ({href=>'/adm/createuser?action=drop',
               text=>$brtext});                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,$crstype);              &Apache::lonuserutils::print_drop_menu($r,$context,$permission,$crstype);
Line 4057  sub handler { Line 4184  sub handler {
             $r->print('<h3>'.&mt('Pending enrollment requests').'</h3>'."\n");              $r->print('<h3>'.&mt('Pending enrollment requests').'</h3>'."\n");
             $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,              $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
                                                                        $cdom,$cnum));                                                                         $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 4100  sub header { Line 4226  sub header {
   
 sub add_script {  sub add_script {
     my ($js) = @_;      my ($js) = @_;
     return '<script type="text/javascript">'."\n".      return '<script type="text/javascript">'."\n"
            '// <![CDATA['."\n".            .'// <![CDATA['."\n"
            "\n".$js."\n".            .$js."\n"
            '// ]]>'."\n".            .'// ]]>'."\n"
            '</script>'."\n";            .'</script>'."\n";
 }  }
   
 sub verify_user_display {  sub verify_user_display {
Line 4132  sub print_main_menu { Line 4258  sub print_main_menu {
         $linkcontext = lc($crstype);          $linkcontext = lc($crstype);
         $stuterm = 'Members';          $stuterm = 'Members';
     }      }
   
     my %links = (      my %links = (
                        domain => {                  domain => {
                                    upload => 'Upload a File of Users',                              upload     => 'Upload a File of Users',
                                    singleuser => 'Add/Modify a Single User',                              singleuser => 'Add/Modify a User',
                                    listusers => 'Manage Multiple Users',                              listusers  => 'Manage Users',
                                  },                              },
                        author => {                  author => {
                                    upload => 'Upload a File of Co-authors',                              upload     => 'Upload a File of Co-authors',
                                    singleuser => 'Add/Modify a Single Co-author',                              singleuser => 'Add/Modify a Co-author',
                                    listusers => 'Display Co-authors and Manage Multiple Users',                              listusers  => 'Manage Co-authors',
                                  },                              },
                        course => {                  course => {
                                    upload => 'Upload a File of Course Users',                              upload     => 'Upload a File of Course Users',
                                    singleuser => 'Add/Modify a Single Course User',                              singleuser => 'Add/Modify a Course User',
                                    listusers => 'Display Class Lists and Manage Multiple Users',                              listusers  => 'Manage Course Users',
                                  },                              },
                        community => {                  community => {
                                    upload     => 'Upload a File of Community Users',                              upload     => 'Upload a File of Community Users',
                                    singleuser => 'Add/Modify a Community User',                              singleuser => 'Add/Modify a Community User',
                                    listusers  => 'Manage Community Users',                              listusers  => 'Manage Community Users',
                                  },                             },
                 );                  );
     my @menu =       my %linktitles = (
         (                  domain => {
           { text => $links{$context}{'upload'},                              singleuser => 'Add a user to the domain, and/or a course or community in the domain.',
             help => 'Course_Create_Class_List',                              listusers  => 'Show and manage users in this domain.',
             action => 'upload',                              },
             permission => $permission->{'cusr'},                  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', 
            items =>
            [
               {
                linktext => $links{$linkcontext}{'singleuser'},
                icon => 'edit-redo.png',
                #help => 'Course_Change_Privileges',
                url => '/adm/createuser?action=singleuser',
                permission => $permission->{'cusr'},
                linktitle => $linktitles{$linkcontext}{'singleuser'},
             },              },
           { text => $links{$context}{'singleuser'},           ]},
             help => 'Course_Change_Privileges',  
             action => 'singleuser',           {categorytitle => 'Multiple Users',
             permission => $permission->{'cusr'},           items => 
            [
               {
                linktext => $links{$linkcontext}{'upload'},
                icon => 'sctr.png',
                #help => 'Course_Create_Class_List',
                url => '/adm/createuser?action=upload',
                permission => $permission->{'cusr'},
                linktitle => 'Upload a CSV or a text file containing users.',
               },
               {
                linktext => $links{$linkcontext}{'listusers'},
                icon => 'edit-find.png',
                #help => 'Course_View_Class_List',
                url => '/adm/createuser?action=listusers',
                permission => ($permission->{'view'} || $permission->{'cusr'}),
                linktitle => $linktitles{$linkcontext}{'listusers'}, 
               },
   
            ]},
   
            {categorytitle => 'Administration',
            items => [ ]},
          );
               
       if ($context eq 'domain'){
           
           push(@{ $menu[2]->{items} }, #Category: Administration
               {
                linktext => 'Custom Roles',
                icon => 'emblem-photos.png',
                #help => 'Course_Editing_Custom_Roles',
                url => '/adm/createuser?action=custom',
                permission => $permission->{'custom'},
                linktitle => 'Configure a custom role.',
             },              },
           { text => $links{$context}{'listusers'},  
             help => 'Course_View_Class_List',  
             action => 'listusers',  
             permission => ($permission->{'view'} || $permission->{'cusr'}),  
           },  
         );          );
     if ($context eq 'domain' || $context eq 'course') {          
         my $customlink =  { text => 'Edit Custom Roles',      }elsif ($context eq 'course'){
                             help => 'Course_Editing_Custom_Roles',  
                             action => 'custom',  
                             permission => $permission->{'custom'},  
                           };  
         push(@menu,$customlink);  
     }  
     if ($context eq 'course') {  
         my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();          my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();
         my @courselinks =  
             (          my %linktext = (
               { text => 'Enroll a Single Student',                           'Course'    => {
                  help => 'Course_Add_Student',                                            single => 'Add/Modify a Student', 
                  action => 'singlestudent',                                            drop   => 'Drop Students',
                  permission => $permission->{'cusr'},                                            groups => 'Course Groups',
                  },                                          },
               { text => 'Drop Students',                           'Community' => {
                 help => 'Course_Drop_Student',                                            single => 'Add/Modify a Member', 
                 action => 'drop',                                            drop   => 'Drop Members',
                 permission => $permission->{'cusr'},                                            groups => 'Community Groups',
               });                                          },
         if (!exists($permission->{'cusr_section'})) {                         );
   
           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
               {   
                linktext => $linktext{$crstype}{'single'},
                #help => 'Course_Add_Student',
                icon => 'list-add.png',
                url => '/adm/createuser?action=singlestudent',
                permission => $permission->{'cusr'},
                linktitle => $linktitle{$crstype}{'single'},
               },
           );
           
           push(@{ $menu[1]->{items} }, #Category: Multiple Users 
               {
                linktext => $linktext{$crstype}{'drop'},
                icon => 'edit-undo.png',
                #help => 'Course_Drop_Student',
                url => '/adm/createuser?action=drop',
                permission => $permission->{'cusr'},
                linktitle => $linktitle{$crstype}{'drop'},
               },
           );
           push(@{ $menu[2]->{items} }, #Category: Administration
               {    
                linktext => 'Custom Roles',
                icon => 'emblem-photos.png',
                #help => 'Course_Editing_Custom_Roles',
                url => '/adm/createuser?action=custom',
                permission => $permission->{'custom'},
                linktitle => 'Configure a custom role.',
               },
               {
                linktext => $linktext{$crstype}{'groups'},
                icon => 'conf.png',
                #help => 'Course_Manage_Group',
                url => '/adm/coursegroups?refpage=cusr',
                permission => $permission->{'grp_manage'},
                linktitle => $linktitle{$crstype}{'groups'},
               },
               {
                linktext => 'Change Logs',
                icon => 'document-properties.png',
                #help => 'Course_User_Logs',
                url => '/adm/createuser?action=changelogs',
                permission => $permission->{'cusr'},
                linktitle => 'View change log.',
               },
           );
           if ($env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'}) {
               push(@{ $menu[2]->{items} },
                       {   
                        linktext => 'Enrollment Requests',
                        icon => 'selfenrl-queue.png',
                        #help => 'Course_Approve_Selfenroll',
                        url => '/adm/createuser?action=selfenrollqueue',
                        permission => $permission->{'cusr'},
                        linktitle =>'Approve or reject enrollment requests.',
                       },
               );
           }
           
           if (!exists($permission->{'cusr_section'})){
             if ($crstype ne 'Community') {              if ($crstype ne 'Community') {
                 push(@courselinks,                  push(@{ $menu[2]->{items} },
                    { text => 'Automated Enrollment Manager',                      {
                      help => 'Course_Automated_Enrollment',                       linktext => 'Automated Enrollment',
                        icon => 'roles.png',
                        #help => 'Course_Automated_Enrollment',
                      permission => (&Apache::lonnet::auto_run($cnum,$cdom)                       permission => (&Apache::lonnet::auto_run($cnum,$cdom)
                                    && $permission->{'cusr'}),                                           && $permission->{'cusr'}),
                      url  => '/adm/populate',                       url  => '/adm/populate',
                    });                       linktitle => 'Automated enrollment manager.',
              }                      }
              push(@courselinks,                  );
                  { text  => 'Configure User Self-enrollment',              }
                    help  => 'Course_Self_Enrollment',              push(@{ $menu[2]->{items} }, 
                    action => 'selfenroll',                  {
                    permission => $permission->{'cusr'},                   linktext => 'User Self-Enrollment',
                  });                   icon => 'cstr.png',
         }                   #help => 'Course_Self_Enrollment',
         if ($env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'}) {                   url => '/adm/createuser?action=selfenroll',
             push(@courselinks,  
                     {   text => 'Enrollment Requests',  
                         help => 'Course_Approve_Selfenroll',  
                         action => 'selfenrollqueue',  
                         permission => $permission->{'cusr'},  
                     });  
         }  
         push(@courselinks,  
                { text => 'Manage Course Groups',  
                  help => 'Course_Manage_Group',  
                  permission => $permission->{'grp_manage'},  
                  url => '/adm/coursegroups?refpage=cusr',  
                },  
                { text => 'View Change Logs',  
                  help => 'Course_User_Logs',  
                  action => 'changelogs',  
                  permission => $permission->{'cusr'},                   permission => $permission->{'cusr'},
                },);                   linktitle => 'Configure user self-enrollment.',
                   },
               );
           }
       };
   return Apache::lonhtmlcommon::generate_menu(@menu);
 #               { text => 'View Log-in History',  #               { text => 'View Log-in History',
 #                 help => 'Course_User_Logins',  #                 help => 'Course_User_Logins',
 #                 action => 'logins',  #                 action => 'logins',
 #                 permission => $permission->{'cusr'},  #                 permission => $permission->{'cusr'},
 #               });  #               });
         push(@menu,@courselinks);  
     }  
     my $menu_html = '';  
     foreach my $menu_item (@menu) {  
         next if (! $menu_item->{'permission'});  
         $menu_html.='<p>';  
         if (exists($menu_item->{'help'})) {  
             $menu_html.=  
                 &Apache::loncommon::help_open_topic($menu_item->{'help'});  
         }  
         $menu_html.='<font size="+1">';  
         if (exists($menu_item->{'url'})) {  
             $menu_html.=qq{<a href="$menu_item->{'url'}">};  
         } else {  
             $menu_html.=  
                 qq{<a href="/adm/createuser?action=$menu_item->{'action'}">};      }  
         $menu_html.= &mt($menu_item->{'text'}).'</a></font>';  
         $menu_html.='</p>';  
     }  
     return $menu_html;  
 }  }
   
 sub restore_prev_selections {  sub restore_prev_selections {
Line 4484  ENDSCRIPT Line 4699  ENDSCRIPT
             if (ref($lt) eq 'HASH') {              if (ref($lt) eq 'HASH') {
                 $title = $lt->{$item};                  $title = $lt->{$item};
             }              }
             $output .=               $output .= &Apache::lonhtmlcommon::row_title($title);
                 &Apache::lonhtmlcommon::row_title($title,  
                              'LC_selfenroll_pick_box_title','LC_oddrow_value')."\n";  
             if ($item eq 'types') {              if ($item eq 'types') {
                 my $curr_types = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_types'};                  my $curr_types = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_types'};
                 my $showdomdesc = 1;                  my $showdomdesc = 1;
Line 4985  sub print_userchangelogs_display { Line 5198  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,$crstype));      $r->print(&role_display_filter($formname,$cdom,$cnum,\%curr,$version,$crstype));
     my $showntablehdr = 0;  
     my $tablehdr = &Apache::loncommon::start_data_table().  
                    &Apache::loncommon::start_data_table_header_row().  
                    '<th>&nbsp;</th><th>'.&mt('When').'</th><th>'.&mt('Who made the change').  
                    '</th><th>'.&mt('Changed User').'</th><th>'.&mt('Role').'</th><th>'.&mt('Section').'</th><th>'.  
                    &mt('Context').'</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th>'.  
                    &Apache::loncommon::end_data_table_header_row();  
     my ($minshown,$maxshown);      my ($minshown,$maxshown);
     $minshown = 1;      $minshown = 1;
     my $count = 0;      my $count = 0;
Line 5001  sub print_userchangelogs_display { Line 5207  sub print_userchangelogs_display {
             $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};              $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
         }          }
     }      }
   
       # Collect user change log data
       my $content = '';
     foreach my $id (sort { $roleslog{$b}{'exe_time'}<=>$roleslog{$a}{'exe_time'} } (keys(%roleslog))) {      foreach my $id (sort { $roleslog{$b}{'exe_time'}<=>$roleslog{$a}{'exe_time'} } (keys(%roleslog))) {
         next if (($roleslog{$id}{'exe_time'} < $curr{'rolelog_start_date'}) ||          next if (($roleslog{$id}{'exe_time'} < $curr{'rolelog_start_date'}) ||
                  ($roleslog{$id}{'exe_time'} > $curr{'rolelog_end_date'}));                   ($roleslog{$id}{'exe_time'} > $curr{'rolelog_end_date'}));
Line 5022  sub print_userchangelogs_display { Line 5231  sub print_userchangelogs_display {
         }          }
         $count ++;          $count ++;
         next if ($count < $minshown);          next if ($count < $minshown);
         if (!$showntablehdr) {  
             $r->print($tablehdr);  
             $showntablehdr = 1;  
         }  
         if ($whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} eq '') {          if ($whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} eq '') {
             $whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} =              $whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}} =
                 &Apache::loncommon::plainname($roleslog{$id}{'exe_uname'},$roleslog{$id}{'exe_udom'});                  &Apache::loncommon::plainname($roleslog{$id}{'exe_uname'},$roleslog{$id}{'exe_udom'});
Line 5064  sub print_userchangelogs_display { Line 5270  sub print_userchangelogs_display {
         if ($chgcontext ne '' && $lt{$chgcontext} ne '') {          if ($chgcontext ne '' && $lt{$chgcontext} ne '') {
             $chgcontext = $lt{$chgcontext};              $chgcontext = $lt{$chgcontext};
         }          }
         $r->print(&Apache::loncommon::start_data_table_row().'<td>'.$count.'</td><td>'.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'</td><td>'.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'</td><td>'.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'</td><td>'.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'},$crstype).'</td><td>'.$sec.'</td><td>'.$chgcontext.'</td><td>'.$rolestart.'</td><td>'.$roleend.'</td>'.&Apache::loncommon::end_data_table_row()."\n");          $content .=
               &Apache::loncommon::start_data_table_row()
              .'<td>'.$count.'</td>'
              .'<td>'.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).'</td>'
              .'<td>'.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.'</td>'
              .'<td>'.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.'</td>'
              .'<td>'.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'},$crstype).'</td>'
              .'<td>'.$sec.'</td>'
              .'<td>'.$chgcontext.'</td>'
              .'<td>'.$rolestart.'</td>'
              .'<td>'.$roleend.'</td>'
              .&Apache::loncommon::end_data_table_row();
       }
   
       # Form Footer
       my $form_footer =
           '<input type="hidden" name="page" value="'.$curr{'page'}.'" />'
          .'<input type="hidden" name="action" value="changelogs" />'
          .'</form>';
   
       # Only display table, if content is available (has been collected above)
       if (!$content) {
           $r->print('<p class="LC_info">'
                    .&mt('There are no records to display.')
                    .'</p>'
           );
           $r->print($form_footer);
           return;
     }      }
     if ($showntablehdr) {  
         $r->print(&Apache::loncommon::end_data_table().'<br />');      # Content to display, so create navigation and display table
         if (($curr{'page'} > 1) || ($more_records)) {  
             $r->print('<table><tr>');      # Create Navigation:
             if ($curr{'page'} > 1) {      # Navigation Script
                 $r->print('<td><a href="javascript:chgPage('."'previous'".');">'.&mt('Previous [_1] changes',$curr{'show'}).'</a></td>');      my $nav_script = <<"ENDSCRIPT";
             }  
             if ($more_records) {  
                 $r->print('<td><a href="javascript:chgPage('."'next'".');">'.&mt('Next [_1] changes',$curr{'show'}).'</a></td>');  
             }  
             $r->print('</tr></table>');  
             $r->print(<<"ENDSCRIPT");  
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 function chgPage(caller) {  function chgPage(caller) {
Line 5093  function chgPage(caller) { Line 5320  function chgPage(caller) {
 // ]]>  // ]]>
 </script>  </script>
 ENDSCRIPT  ENDSCRIPT
         }      # Navigation Buttons
     } else {      my $nav_links;
         $r->print('<p class="LC_info">'.      $nav_links = '<p>';
                   &mt('There are no records to display').      if (($curr{'page'} > 1) || ($more_records)) {
                   '</p>');          if ($curr{'page'} > 1) {
     }              $nav_links .= '<input type="button"'
     $r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'.                           .' onclick="javascript:chgPage('."'previous'".');"'
               '<input type="hidden" name="action" value="changelogs" /></form>');                           .' value="'.&mt('Previous [_1] changes',$curr{'show'})
                            .'" /> ';
           }
           if ($more_records) {
               $nav_links .= '<input type="button"'
                            .' onclick="javascript:chgPage('."'next'".');"'
                            .' value="'.&mt('Next [_1] changes',$curr{'show'})
                            .'" />';
           }
       }
       $nav_links .= '</p>';
   
       # Table Header
       my $tableheader =
           &Apache::loncommon::start_data_table_header_row()
          .'<th>&nbsp;</th>'
          .'<th>'.&mt('When').'</th>'
          .'<th>'.&mt('Who made the change').'</th>'
          .'<th>'.&mt('Changed User').'</th>'
          .'<th>'.&mt('Role').'</th>'
          .'<th>'.&mt('Section').'</th>'
          .'<th>'.&mt('Context').'</th>'
          .'<th>'.&mt('Start').'</th>'
          .'<th>'.&mt('End').'</th>'
          .&Apache::loncommon::end_data_table_header_row();
   
       # Print Content
       $r->print(
           $nav_script
          .$nav_links
          .&Apache::loncommon::start_data_table()
          .$tableheader
          .$content
          .&Apache::loncommon::end_data_table()
          .$nav_links
          .$form_footer
       );
     return;      return;
 }  }
   
Line 5123  sub role_display_filter { Line 5386  sub role_display_filter {
                                             $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($crstype);      my %lt = &rolechg_contexts($crstype);
     $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').'</b><br /><table><tr><td>'.&mt('After:').      $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').'</b><br />'.
                '</td><td>'.$startform.'</td></tr><tr><td>'.&mt('Before:').'</td><td>'.                 '<table><tr><td>'.&mt('After:').
                $endform.'</td></tr></table></td><td>&nbsp;&nbsp;</td>'.                 '</td><td>'.$startform.'</td></tr>'.
                  '<tr><td>'.&mt('Before:').'</td>'.
                  '<td>'.$endform.'</td></tr></table>'.
                  '</td>'.
                  '<td>&nbsp;&nbsp;</td>'.
                '<td valign="top"><b>'.&mt('Role:').'</b><br />'.                 '<td valign="top"><b>'.&mt('Role:').'</b><br />'.
                '<select name="role"><option value="any"';                 '<select name="role"><option value="any"';
     if ($curr->{'role'} eq 'any') {      if ($curr->{'role'} eq 'any') {
Line 5146  sub role_display_filter { Line 5413  sub role_display_filter {
         }          }
         $output .= '  <option value="'.$role.'"'.$selstr.'>'.$plrole.'</option>';          $output .= '  <option value="'.$role.'"'.$selstr.'>'.$plrole.'</option>';
     }      }
     $output .= '</select></td><td>&nbsp;&nbsp;</td><td valign="top"><b>'.      $output .= '</select></td>'.
                  '<td>&nbsp;&nbsp;</td>'.
                  '<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','requestcourses') {      foreach my $chgtype ('any','auto','updatenow','createcourse','course','domain','selfenroll','requestcourses') {
         my $selstr = '';          my $selstr = '';
Line 5167  sub role_display_filter { Line 5436  sub role_display_filter {
               .'</p>';                .'</p>';
   
     # Server version info      # Server version info
     $output .= '<p style="font-size: smaller;" class="LC_info">'      $output .= '<p class="LC_info">'
               .&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'                .&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'
                   ,'2.6.99.0');                    ,'2.6.99.0');
     if ($version) {      if ($version) {
         $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);          $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);
     }      }
     $output .= '</p><hr /><br />';      $output .= '</p><hr />';
     return $output;      return $output;
 }  }
   
Line 5588  sub build_search_response { Line 5857  sub build_search_response {
                     &Apache::lonuserutils::can_create_user($createdom,$context);                      &Apache::lonuserutils::can_create_user($createdom,$context);
                 my $targetdom = '<span class="LC_cusr_emph">'.$createdom.'</span>';                  my $targetdom = '<span class="LC_cusr_emph">'.$createdom.'</span>';
                 if ($cancreate) {                  if ($cancreate) {
                     my $showdom = &display_domain_info($createdom);                      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 />';
Line 5597  sub build_search_response { Line 5866  sub build_search_response {
                     } else {                      } else {
                         $response .= &mt("(You can only create new users in your current role's domain - [_1])",$targetdom);                          $response .= &mt("(You can only create new users in your current role's domain - [_1])",$targetdom);
                     }                      }
                     $response .= '<ul><li>'                      $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 5615  sub build_search_response { Line 5884  sub build_search_response {
                         $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);                          $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);
                     }                      }
                     $response .= '<br />'                      $response .= '<br />'
                                 .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'                                   .&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 5734  sub course_level_table { Line 6003  sub course_level_table {
             }              }
         }          }
         if (&Apache::lonnet::allowed('ccr',$thiscourse)) {          if (&Apache::lonnet::allowed('ccr',$thiscourse)) {
             foreach my $cust (sort keys %customroles) {              foreach my $cust (sort(keys(%customroles))) {
                   next if ($crstype eq 'Community' && $customroles{$cust} =~ /bre\&S/);
                 my $role = 'cr_cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$cust;                  my $role = 'cr_cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$cust;
                 $table .= &course_level_row($protectedcourse,$role,$area,$domain,                  $table .= &course_level_row($protectedcourse,$role,$area,$domain,
                                             $cust,\%sections_count,\%lt);                                              $cust,\%sections_count,\%lt);
Line 5813  sub course_level_dc { Line 6083  sub course_level_dc {
                       '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.                        '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.
                       '<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/Community','crstype').'</b>';
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser');      my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser');
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                     'rol'  => "Role",                      'rol'  => "Role",
Line 5923  sub update_selfenroll_config { Line 6193  sub update_selfenroll_config {
                             $newnum ++;                              $newnum ++;
                         }                          }
                     }                      }
                     for (my $j=0; $j<$env{'form.selfenroll_types_total'}; $j++) {                      for (my $j=0; $j<$env{'form.selfenroll_types_total'}; $j++) {                        if ((!grep(/^$j$/,@deletedoms)) && (!grep(/^$j$/,@activations))) {
                         if ((!grep(/^$j$/,@deletedoms)) && (!grep(/^$j$/,@activations))) {  
                             my @types = &Apache::loncommon::get_env_multiple('form.selfenroll_types_'.$j);                              my @types = &Apache::loncommon::get_env_multiple('form.selfenroll_types_'.$j);
                             if (@types > 0) {                              if (@types > 0) {
                                 @types = sort(@types);                                  @types = sort(@types);

Removed from v.1.295.2.23  
changed lines
  Added in v.1.324


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