Diff for /loncom/interface/loncreateuser.pm between versions 1.314 and 1.322

version 1.314, 2009/09/10 23:04:52 version 1.322, 2009/11/03 21:31:06
Line 468  sub courserequest_display { Line 468  sub courserequest_display {
 # =================================================================== 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 490  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 517  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 540  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 593  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 604  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 676  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 704  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 717  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 729  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 811  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 856  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 880  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 907  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 956  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 974  $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 993  $lt{'hs'}: $home_server_pick Line 1022  $lt{'hs'}: $home_server_pick
             $r->print($home_server_pick);              $r->print($home_server_pick);
         }          }
         if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {          if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
             $r->print('<br /><h3>'.&mt('User Can Request Creation of Courses in this Domain?').'</h3>'.              $r->print('<br /><h3>'.&mt('User Can Request Creation of Courses/Communities in this Domain?').'</h3>'.
                       &Apache::loncommon::start_data_table().                        &Apache::loncommon::start_data_table().
                       &build_tools_display($ccuname,$ccdomain,                        &build_tools_display($ccuname,$ccdomain,
                                            'requestcourses').                                             'requestcourses').
Line 1067  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 1076  $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 1090  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'));
Line 1174  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 1213  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 1430  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 1443  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 1463  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 1478  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 1973  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 1997  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 2229  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 2315  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 2784  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 3255  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 3289  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 3484  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 3529  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 3619  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 3720  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 3741  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 3756  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 3772  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 3797  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 3813  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 3831  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 3883  sub handler { Line 3957  sub handler {
                   text=>"List Users"});                    text=>"List Users"});
             my ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles);              my ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles);
             my $formname = 'studentform';              my $formname = 'studentform';
             if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {              if (($context eq 'domain') && (($env{'form.roletype'} eq 'course') ||
                 ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles) =                   ($env{'form.roletype'} eq 'community'))) {
                     &Apache::lonuserutils::courses_selector($env{'request.role.domain'},                  if ($env{'form.roletype'} eq 'course') {
                                                             $formname);                      ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles) = 
                           &Apache::lonuserutils::courses_selector($env{'request.role.domain'},
                                                                   $formname);
                   } elsif ($env{'form.roletype'} eq 'community') {
                       $cb_jscript = 
                           &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'});
                       my %elements = (
                                         coursepick => 'radio',
                                         coursetotal => 'text',
                                         courselist => 'text',
                                      );
                       $jscript = &Apache::lonhtmlcommon::set_form_elements(\%elements);
                   }
                 $jscript .= &verify_user_display();                  $jscript .= &verify_user_display();
                 my $js = &add_script($jscript).$cb_jscript;                  my $js = &add_script($jscript).$cb_jscript;
                 my $loadcode =                   my $loadcode = 
Line 3907  sub handler { Line 3993  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 3929  sub handler { Line 4021  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 3994  sub handler { Line 4086  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 4038  END Line 4130  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 4055  sub print_main_menu { Line 4153  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 4073  sub print_main_menu { Line 4194  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 4081  sub print_main_menu { Line 4202  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 4110  sub print_main_menu { Line 4231  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 4142  sub print_main_menu { Line 4289  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 4172  sub print_main_menu { Line 4319  sub print_main_menu {
         }          }
                   
         if (!exists($permission->{'cusr_section'})){          if (!exists($permission->{'cusr_section'})){
                           if ($crstype ne 'Community') {
             push(@{ $menu[2]->{items} },                  push(@{ $menu[2]->{items} },
                 {                      {
                  linktext => 'Automated Enrollment',                       linktext => 'Automated Enrollment',
                  icon => 'roles.png',                       icon => 'roles.png',
                  #help => 'Course_Automated_Enrollment',                       #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.',                       linktitle => 'Automated enrollment manager.',
                 },                      }
                   );
               }
               push(@{ $menu[2]->{items} }, 
                 {                  {
                  linktext => 'User Self-Enrollment',                   linktext => 'User Self-Enrollment',
                  icon => 'cstr.png',                   icon => 'cstr.png',
                  #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.',
                 },                  },
             );              );
           
         }          }
     };      };
 return Apache::lonhtmlcommon::generate_menu(@menu);  return Apache::lonhtmlcommon::generate_menu(@menu);
Line 4216  sub restore_prev_selections { Line 4365  sub restore_prev_selections {
   
 sub print_selfenroll_menu {  sub print_selfenroll_menu {
     my ($r,$context,$permission) = @_;      my ($r,$context,$permission) = @_;
       my $crstype = &Apache::loncommon::course_type();
     my $formname = 'enrollstudent';      my $formname = 'enrollstudent';
     my $nolink = 1;      my $nolink = 1;
     my ($row,$lt) = &get_selfenroll_titles();      my ($row,$lt) = &get_selfenroll_titles();
Line 4577  ENDSCRIPT Line 4727  ENDSCRIPT
                            &mt('No').'</label>';                             &mt('No').'</label>';
                 my %advhash = &Apache::lonnet::get_course_adv_roles($cid,1);                  my %advhash = &Apache::lonnet::get_course_adv_roles($cid,1);
                 my (@ccs,%notified);                  my (@ccs,%notified);
                 if ($advhash{'cc'}) {                  my $ccrole = 'cc';
                     @ccs = split(/,/,$advhash{'cc'});                  if ($crstype eq 'Community') {
                       $ccrole = 'co';
                   }
                   if ($advhash{$ccrole}) {
                       @ccs = split(/,/,$advhash{$ccrole});
                 }                  }
                 if ($currnotified) {                  if ($currnotified) {
                     foreach my $current (split(/,/,$currnotified)) {                      foreach my $current (split(/,/,$currnotified)) {
Line 4665  sub visible_in_cat { Line 4819  sub visible_in_cat {
     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 4883  sub print_userchangelogs_display { Line 5037  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 4921  sub print_userchangelogs_display { Line 5076  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 4990  sub print_userchangelogs_display { Line 5145  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 5000  sub print_userchangelogs_display { Line 5155  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 5092  ENDSCRIPT Line 5247  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 5108  sub role_display_filter { Line 5264  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 5122  sub role_display_filter { Line 5278  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 5140  sub role_display_filter { Line 5296  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 5170  sub role_display_filter { Line 5326  sub role_display_filter {
 }  }
   
 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 5178  sub rolechg_contexts { Line 5335  sub rolechg_contexts {
                                              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',                                                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 5695  sub course_level_table { Line 5857  sub course_level_table {
  $thiscourse=~s:_:/:g;   $thiscourse=~s:_:/:g;
  my %coursedata=&Apache::lonnet::coursedescription($thiscourse);   my %coursedata=&Apache::lonnet::coursedescription($thiscourse);
  my $area=$coursedata{'description'};   my $area=$coursedata{'description'};
         my $type=$coursedata{'type'};          my $crstype=$coursedata{'type'};
  if (!defined($area)) { $area=&mt('Unavailable course').': '.$protectedcourse; }   if (!defined($area)) { $area=&mt('Unavailable course').': '.$protectedcourse; }
  my ($domain,$cnum)=split(/\//,$thiscourse);   my ($domain,$cnum)=split(/\//,$thiscourse);
         my %sections_count;          my %sections_count;
Line 5705  sub course_level_table { Line 5867  sub course_level_table {
     &Apache::loncommon::get_sections($domain,$cnum);      &Apache::loncommon::get_sections($domain,$cnum);
             }              }
         }          }
         my @roles = &Apache::lonuserutils::roles_by_context('course');          my @roles = &Apache::lonuserutils::roles_by_context('course','',$crstype);
  foreach my $role (@roles) {   foreach my $role (@roles) {
             my $plrole=&Apache::lonnet::plaintext($role);              my $plrole=&Apache::lonnet::plaintext($role,$crstype);
     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 5751  sub course_level_row { Line 5913  sub course_level_row {
               $protectedcourse.'_'.$role.'" /></td>'."\n".                $protectedcourse.'_'.$role.'" /></td>'."\n".
               ' <td>'.$plrole.'</td>'."\n".                ' <td>'.$plrole.'</td>'."\n".
               ' <td>'.$area.'<br />Domain: '.$domain.'</td>'."\n";                ' <td>'.$area.'<br />Domain: '.$domain.'</td>'."\n";
     if ($role eq 'cc') {      if (($role eq 'cc') || ($role eq 'co')) {
         $row .= '<td>&nbsp;</td>';          $row .= '<td>&nbsp;</td>';
     } elsif ($env{'request.course.sec'} ne '') {      } elsif ($env{'request.course.sec'} ne '') {
         $row .= ' <td><input type="hidden" value="'.          $row .= ' <td><input type="hidden" value="'.
Line 5800  sub course_level_dc { Line 5962  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",

Removed from v.1.314  
changed lines
  Added in v.1.322


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