Diff for /loncom/interface/loncreateuser.pm between versions 1.295.2.32 and 1.329.2.1

version 1.295.2.32, 2010/04/14 19:46:56 version 1.329.2.1, 2009/12/15 05:14:13
Line 219  END_SCRIPT Line 219  END_SCRIPT
 sub build_tools_display {  sub build_tools_display {
     my ($ccuname,$ccdomain,$context) = @_;      my ($ccuname,$ccdomain,$context) = @_;
     my (@usertools,%userenv,$output,@options,%validations,%reqtitles,%reqdisplay,      my (@usertools,%userenv,$output,@options,%validations,%reqtitles,%reqdisplay,
         $colspan,$isadv,%domconfig);          $colspan);
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                    'blog'       => "Personal User Blog",                     'blog'       => "Personal User Blog",
                    'aboutme'    => "Personal Information Page",                     'aboutme'    => "Personal Information Page",
Line 243  sub build_tools_display { Line 243  sub build_tools_display {
         %reqtitles = &courserequest_titles();          %reqtitles = &courserequest_titles();
         %reqdisplay = &courserequest_display();          %reqdisplay = &courserequest_display();
         $colspan = ' colspan="2"';          $colspan = ' colspan="2"';
         %domconfig =  
             &Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain);  
         $isadv = &Apache::lonnet::is_advanced_user($ccuname,$ccdomain);  
     } else {      } else {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                           'tools.aboutme','tools.portfolio','tools.blog');                            'tools.aboutme','tools.portfolio','tools.blog');
Line 292  sub build_tools_display { Line 289  sub build_tools_display {
                    &Apache::loncommon::start_data_table_row()."\n";                     &Apache::loncommon::start_data_table_row()."\n";
         if ($context eq 'requestcourses') {          if ($context eq 'requestcourses') {
             my ($curroption,$currlimit);              my ($curroption,$currlimit);
             if ($userenv{$context.'.'.$item} ne '') {              $curroption = $userenv{$context.'.'.$item};
                 $curroption = $userenv{$context.'.'.$item};  
             } else {  
                 my (@inststatuses);  
                 $curroption =  
                     &Apache::loncoursequeueadmin::get_processtype($ccuname,$ccdomain,$isadv,$ccdomain,  
                                                                $item,\@inststatuses,\%domconfig);  
             }  
             if (!$curroption) {              if (!$curroption) {
                 $curroption = 'norequest';                  $curroption = 'norequest';
             }              }
Line 685  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 945  sub print_user_modification_page { Line 935  sub print_user_modification_page {
             );              );
             my $response;              my $response;
             if ($env{'form.origform'} eq 'crtusername') {              if ($env{'form.origform'} eq 'crtusername') {
                 $response =  '<span class="LC_warning">'.&mt('No match found for the username [_1] in LON-CAPA domain: [_2]','<b>'.$ccuname.'</b>',$ccdomain).                  $response =  '<span class="LC_warning">'.&mt('No match was found for the username ([_1]) in LON-CAPA domain: [_2]',$ccuname,$ccdomain).
                             '</span><br />';                              '</span><br />';
             }              }
             $response .= '<p class="LC_warning">'              $response .= '<p class="LC_warning">'
Line 1053  ENDFORMINFO Line 1043  ENDFORMINFO
         }          }
     } else {      } else {
         foreach my $key (keys(%env)) {          foreach my $key (keys(%env)) {
             if ($key=~/^user\.priv\.cm\.\/($match_domain)\/($match_username)/) {      if ($key=~/^user\.priv\.cm\.\/($match_domain)\/($match_username)/) {
                 $inccourses{$1.'_'.$2}=1;          $inccourses{$1.'_'.$2}=1;
             }              }
         }          }
     }      }
Line 1428  sub display_existing_roles { Line 1418  sub display_existing_roles {
     my (%rolesdump,%roletext,%sortrole,%roleclass,%rolepriv);      my (%rolesdump,%roletext,%sortrole,%roleclass,%rolepriv);
     if ($context eq 'course' || $context eq 'author') {      if ($context eq 'course' || $context eq 'author') {
         my @roles = &Apache::lonuserutils::roles_by_context($context,1,$crstype);          my @roles = &Apache::lonuserutils::roles_by_context($context,1,$crstype);
         my %roleshash =          my %roleshash = 
             &Apache::lonnet::get_my_roles($ccuname,$ccdomain,'userroles',              &Apache::lonnet::get_my_roles($ccuname,$ccdomain,'userroles',
                               ['active','previous','future'],\@roles,$roledom,1);                                ['active','previous','future'],\@roles,$roledom,1);
         foreach my $key (keys(%roleshash)) {          foreach my $key (keys(%roleshash)) {
Line 1455  sub display_existing_roles { Line 1445  sub display_existing_roles {
             $newkey .= '_'.$newrole;              $newkey .= '_'.$newrole;
             if ($start ne '' && $end ne '') {              if ($start ne '' && $end ne '') {
                 $newvalue .= '_'.$end.'_'.$start;                  $newvalue .= '_'.$end.'_'.$start;
             } elsif ($end ne '') {  
                 $newvalue .= '_'.$end;  
             }              }
             $rolesdump{$newkey} = $newvalue;              $rolesdump{$newkey} = $newvalue;
         }          }
Line 1499  sub display_existing_roles { Line 1487  sub display_existing_roles {
             if (defined($coursedata{'description'})) {              if (defined($coursedata{'description'})) {
                 $carea=$coursedata{'description'}.                  $carea=$coursedata{'description'}.
                     '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).                      '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).
      &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$coursedir,$coursedom);      &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$coursedir,$coursedom);
                 $sortkey.="\0".$coursedata{'description'};                  $sortkey.="\0".$coursedata{'description'};
             } else {              } else {
                 if ($class eq 'Community') {                  if ($class eq 'Community') {
Line 1525  sub display_existing_roles { Line 1513  sub display_existing_roles {
                         $allowed = 1;                          $allowed = 1;
                     }                      }
                 }                  }
             }              } 
             if ((&Apache::lonnet::allowed('dro',$coursedom)) ||              if ((&Apache::lonnet::allowed('dro',$coursedom)) ||
                 (&Apache::lonnet::allowed('dro',$ccdomain))) {                  (&Apache::lonnet::allowed('dro',$ccdomain))) {
                $delallowed=1;                  $delallowed=1;
             }              }
 # - custom role. Needs more info, too  # - custom role. Needs more info, too
             if ($croletitle) {              if ($croletitle) {
Line 1541  sub display_existing_roles { Line 1529  sub display_existing_roles {
                 $carea.='<br />Section: '.$3;                  $carea.='<br />Section: '.$3;
                 $sortkey.="\0$3";                  $sortkey.="\0$3";
                 if (!$allowed) {                  if (!$allowed) {
                    if ($env{'request.course.sec'} eq $3) {                      if ($env{'request.course.sec'} eq $3) {
                        if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {                          if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {
                            $allowed = 1;                              $allowed = 1;
                        }                          }
                    }                      }
                 }                  }
             }              }
             $area=$carea;              $area=$carea;
Line 1554  sub display_existing_roles { Line 1542  sub display_existing_roles {
             # Determine if current user is able to revoke privileges              # Determine if current user is able to revoke privileges
             if ($area=~m{^/($match_domain)/}) {              if ($area=~m{^/($match_domain)/}) {
                 if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||                  if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||
                     (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {                     (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
                     $allowed=1;                     $allowed=1;
                 }                  }
                 if (((&Apache::lonnet::allowed('dro',$1))  ||                  if (((&Apache::lonnet::allowed('dro',$1))  ||
                     (&Apache::lonnet::allowed('dro',$ccdomain))) &&                      (&Apache::lonnet::allowed('dro',$ccdomain))) &&
Line 1619  sub display_existing_roles { Line 1607  sub display_existing_roles {
                '</td><td>'.$area.                 '</td><td>'.$area.
                '</td><td>'.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)                 '</td><td>'.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
                                             : '&nbsp;' ).                                              : '&nbsp;' ).
               '</td><td>'.($role_end_time  ?&Apache::lonlocal::locallocaltime($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 1634  sub display_existing_roles { Line 1622  sub display_existing_roles {
         $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}}) ) {
                 $output{$type}.=                   $output{$type}.=
                       &Apache::loncommon::start_data_table_row().                        &Apache::loncommon::start_data_table_row().
                       $roletext{$sortrole{$which}}.                        $roletext{$sortrole{$which}}.
                       &Apache::loncommon::end_data_table_row();                        &Apache::loncommon::end_data_table_row();
Line 2065  sub personal_data_display { Line 2053  sub personal_data_display {
                 if ($canmodify_status{'inststatus'}) {                  if ($canmodify_status{'inststatus'}) {
                     $shown = &pick_inst_statuses($userenv{'inststatus'},$usertypes,$types);                      $shown = &pick_inst_statuses($userenv{'inststatus'},$usertypes,$types);
                 } else {                  } else {
                       $shown .= $userenv{'inststatus'};
                     if ($userenv{'inststatus'} eq '') {                      if ($userenv{'inststatus'} eq '') {
                         $hiderow = 1;                          $hiderow = 1;
                     } else {  
                         my @showitems;  
                         foreach my $item ( map { &unescape($_); } split(':',$userenv{'inststatus'})) {  
                             if (exists($usertypes->{$item})) {  
                                 push(@showitems,$usertypes->{$item});  
                             } else {  
                                 push(@showitems,$item);  
                             }  
                         }  
                         if (@showitems) {  
                             $shown = join(', ',@showitems);  
                         } else {  
                             $hiderow = 1;  
                         }  
                     }                      }
                 }                  }
                 if (!$hiderow) {                  if (!$hiderow) {
Line 2298  sub update_user_data { Line 2273  sub update_user_data {
     $r->print('<h3>'.&mt('User [_1] in domain [_2]',      $r->print('<h3>'.&mt('User [_1] in domain [_2]',
  $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 @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');  
     my @usertools = ('aboutme','blog','portfolio');      my @usertools = ('aboutme','blog','portfolio');
     my @requestcourses = ('official','unofficial','community');      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'});
     my %canmodify_status =  
         &Apache::lonuserutils::can_modify_userinfo($context,$env{'form.ccdomain'},  
                                                    ['inststatus']);  
     if ($env{'form.makeuser'}) {      if ($env{'form.makeuser'}) {
  $r->print('<h3>'.&mt('Creating new account.').'</h3>');   $r->print('<h3>'.&mt('Creating new account.').'</h3>');
         # Check for the authentication mode and password          # Check for the authentication mode and password
Line 2365  sub update_user_data { Line 2336  sub update_user_data {
  $r->print(&mt('Generating user').': '.$result);   $r->print(&mt('Generating user').': '.$result);
         $uhome = &Apache::lonnet::homeserver($env{'form.ccuname'},          $uhome = &Apache::lonnet::homeserver($env{'form.ccuname'},
                                                $env{'form.ccdomain'});                                                 $env{'form.ccdomain'});
         my (%changeHash,%newcustom,%changed,%changedinfo);          my (%changeHash,%newcustom,%changed);
         if ($uhome ne 'no_host') {          if ($uhome ne 'no_host') {
             if ($context eq 'domain') {              if ($env{'form.customquota'} == 1) {
                 if ($env{'form.customquota'} == 1) {                  if ($env{'form.portfolioquota'} eq '') {
                     if ($env{'form.portfolioquota'} eq '') {                      $newcustom{'quota'} = 0;
                         $newcustom{'quota'} = 0;                  } else {
                     } else {                      $newcustom{'quota'} = $env{'form.portfolioquota'};
                         $newcustom{'quota'} = $env{'form.portfolioquota'};                      $newcustom{'quota'} =~ s/[^\d\.]//g;
                         $newcustom{'quota'} =~ s/[^\d\.]//g;  
                     }  
                     $changed{'quota'} = &quota_admin($newcustom{'quota'},\%changeHash);  
                 }  
                 foreach my $item (@usertools) {  
                     if ($env{'form.custom'.$item} == 1) {  
                         $newcustom{$item} = $env{'form.tools_'.$item};  
                         $changed{$item} = &tool_admin($item,$newcustom{$item},  
                                                       \%changeHash,'tools');  
                     }  
                 }                  }
                 foreach my $item (@requestcourses) {                  $changed{'quota'} = &quota_admin($newcustom{'quota'},\%changeHash);
                     $newcustom{$item} = $env{'form.crsreq_'.$item};              }
                     if ($env{'form.crsreq_'.$item} eq 'autolimit') {              foreach my $item (@usertools) {
                         $newcustom{$item} .= '=';                  if ($env{'form.custom'.$item} == 1) {
                         unless ($env{'form.crsreq_'.$item.'_limit'} =~ /\D/) {                      $newcustom{$item} = $env{'form.tools_'.$item};
                             $newcustom{$item} .= $env{'form.crsreq_'.$item.'_limit'};  
                         }  
                     }  
                     $changed{$item} = &tool_admin($item,$newcustom{$item},                      $changed{$item} = &tool_admin($item,$newcustom{$item},
                                               \%changeHash,'requestcourses');                                                   \%changeHash,'tools');
                 }                  }
             }              }
             if ($canmodify_status{'inststatus'}) {              foreach my $item (@requestcourses) {
                 if (exists($env{'form.inststatus'})) {                  $newcustom{$item} = $env{'form.crsreq_'.$item};
                     my @inststatuses = &Apache::loncommon::get_env_multiple('form.inststatus');                  if ($env{'form.crsreq_'.$item} eq 'autolimit') {
                     if (@inststatuses > 0) {                      $newcustom{$item} .= '=';
                         $changeHash{'inststatus'} = join(',',@inststatuses);                      unless ($env{'form.crsreq_'.$item.'_limit'} =~ /\D/) {
                         $changed{'inststatus'} = $changeHash{'inststatus'};                          $newcustom{$item} .= $env{'form.crsreq_'.$item.'_limit'};
                     }                      }
                 }                  }
                   $changed{$item} = &tool_admin($item,$newcustom{$item},
                                                 \%changeHash,'requestcourses');
             }              }
             if (keys(%changed)) {              if (exists($env{'form.inststatus'})) {
                 foreach my $item (@userinfo) {                  my @inststatuses = &Apache::loncommon::get_env_multiple('form.inststatus');
                     $changeHash{$item}  = $env{'form.c'.$item};                  if (@inststatuses > 0) {
                       $changeHash{'inststatus'} = join(',',@inststatuses);
                       $changed{'inststatus'} = $changeHash{'inststatus'};
                 }                  }
               }
               if (keys(%changed)) {
                   $changeHash{'firstname'}  = $env{'form.cfirstname'};
                   $changeHash{'middlename'} = $env{'form.cmiddlename'};
                   $changeHash{'lastname'}   = $env{'form.clastname'};
                   $changeHash{'generation'} = $env{'form.cgeneration'};
                   $changeHash{'id'}         = $env{'form.cid'};
                   $changeHash{'permanentemail'} = $env{'form.cpermanentemail'};
                 my $chgresult =                  my $chgresult =
                      &Apache::lonnet::put('environment',\%changeHash,                       &Apache::lonnet::put('environment',\%changeHash,
                                           $env{'form.ccdomain'},$env{'form.ccuname'});                                            $env{'form.ccdomain'},$env{'form.ccuname'});
Line 2437  sub update_user_data { Line 2407  sub update_user_data {
  }   }
     }      }
     ##      ##
     my (@userroles,%userupdate,$cnum,$cdom,$crstype,%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);          $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum);
Line 2527  sub update_user_data { Line 2497  sub update_user_data {
                 push(@longroles,&Apache::lonnet::plaintext($role,$crstype));                   push(@longroles,&Apache::lonnet::plaintext($role,$crstype)); 
             }              }
         }          }
           my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');
         my %canmodify = &Apache::lonuserutils::can_modify_userinfo($context,$env{'form.ccdomain'},\@userinfo,\@userroles);          my %canmodify = &Apache::lonuserutils::can_modify_userinfo($context,$env{'form.ccdomain'},\@userinfo,\@userroles);
         foreach my $item (@userinfo) {          foreach my $item (@userinfo) {
             # Strip leading and trailing whitespace              # Strip leading and trailing whitespace
Line 2573  sub update_user_data { Line 2544  sub update_user_data {
             }              }
         }          }
         my ($quotachanged,$oldportfolioquota,$newportfolioquota,$oldinststatus,          my ($quotachanged,$oldportfolioquota,$newportfolioquota,$oldinststatus,
             $newinststatus,$oldisdefault,$newisdefault,%oldsettings,              $inststatus,$newinststatus,$oldisdefault,$newisdefault,$olddefquotatext,
             %oldsettingstext,%newsettings,%newsettingstext,@disporder,              $newdefquotatext,%oldaccess,%oldaccesstext,%newaccess,%newaccesstext,
             $olddefquota,$oldsettingstatus,$newdefquota,$newsettingstatus);              $oldinststatuses,$newinststatuses);
         @disporder = ('inststatus');          my ($defquota,$settingstatus) = 
         if ($env{'request.role.domain'} eq $env{'form.ccdomain'}) {              &Apache::loncommon::default_quota($env{'form.ccdomain'},$inststatus);
             push(@disporder,'requestcourses');          my ($showquota,$showtools,$showrequestcourses,$showinststatus,$showreqotherdom);
         } else {  
             push(@disporder,'reqcrsotherdom');  
         }  
         push(@disporder,('quota','tools'));  
         $oldinststatus = $userenv{'inststatus'};  
         ($olddefquota,$oldsettingstatus) =  
             &Apache::loncommon::default_quota($env{'form.ccdomain'},$oldinststatus);  
         ($newdefquota,$newsettingstatus) = ($olddefquota,$oldsettingstatus);  
         my %canshow;  
         if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) {
             $canshow{'quota'} = 1;              $showquota = 1;
         }          }
         if (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('mut',$env{'form.ccdomain'})) {
             $canshow{'tools'} = 1;              $showtools = 1;
         }          }
         if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('ccc',$env{'form.ccdomain'})) {
             $canshow{'requestcourses'} = 1;              $showrequestcourses = 1;
         } elsif (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {          } elsif (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
             $canshow{'reqcrsotherdom'} = 1;              $showreqotherdom = 1;
         }          }
         if (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'})) {
             $canshow{'inststatus'} = 1;              $showinststatus = 1;
         }          }
         my (%changeHash,%changed);          my (%changeHash,%changed);
           $oldinststatus = $userenv{'inststatus'};
         if ($oldinststatus eq '') {          if ($oldinststatus eq '') {
             $oldsettings{'inststatus'} = $othertitle;              $oldinststatuses = $othertitle; 
         } else {          } else {
             if (ref($usertypes) eq 'HASH') {              if (ref($usertypes) eq 'HASH') {
                 $oldsettings{'inststatus'} = join(', ',map{ $usertypes->{ &unescape($_) }; } (split(/:/,$userenv{'inststatus'})));                  $oldinststatuses = join(', ',map{ $usertypes->{ &unescape($_) }; } (split(/:/,$userenv{'inststatus'})));
             } else {              } else {
                 $oldsettings{'inststatus'} = join(', ',map{ &unescape($_); } (split(/:/,$userenv{'inststatus'})));                  $oldinststatuses = join(', ',map{ &unescape($_); } (split(/:/,$userenv{'inststatus'})));
             }              }
         }          }
         $changeHash{'inststatus'} = $userenv{'inststatus'};          $changeHash{'inststatus'} = $userenv{'inststatus'};
         if ($canmodify_status{'inststatus'}) {          my %canmodify_inststatus = &Apache::lonuserutils::can_modify_userinfo($context,$env{'form.ccdomain'},['inststatus'],\@userroles);
             $canshow{'inststatus'} = 1;          if ($canmodify_inststatus{'inststatus'}) {
             if (exists($env{'form.inststatus'})) {              if (exists($env{'form.inststatus'})) {
                 my @inststatuses = &Apache::loncommon::get_env_multiple('form.inststatus');                  my @inststatuses = &Apache::loncommon::get_env_multiple('form.inststatus');
                 if (@inststatuses > 0) {                  if (@inststatuses > 0) {
Line 2622  sub update_user_data { Line 2585  sub update_user_data {
                     $changeHash{'inststatus'} = $newinststatus;                      $changeHash{'inststatus'} = $newinststatus;
                     if ($newinststatus ne $oldinststatus) {                      if ($newinststatus ne $oldinststatus) {
                         $changed{'inststatus'} = $newinststatus;                          $changed{'inststatus'} = $newinststatus;
                         ($newdefquota,$newsettingstatus) =  
                             &Apache::loncommon::default_quota($env{'form.ccdomain'},$newinststatus);  
                     }                      }
                     if (ref($usertypes) eq 'HASH') {                      if (ref($usertypes) eq 'HASH') {
                         $newsettings{'inststatus'} = join(', ',map{ $usertypes->{$_}; } (@inststatuses));                          $newinststatuses = join(', ',map{ $usertypes->{$_}; } (@inststatuses)); 
                     } else {                      } else {
                         $newsettings{'inststatus'} = join(', ',@inststatuses);                          $newinststatuses = join(', ',map{ $usertypes->{$_}; } (@inststatuses));
                       }
                   } else {
                       $newinststatus = '';
                       $changeHash{'inststatus'} = $newinststatus;
                       $newinststatuses = $othertitle;
                       if ($newinststatus ne $oldinststatus) {
                           $changed{'inststatus'} = $changeHash{'inststatus'};
                     }                      }
                 }  
             } else {  
                 $newinststatus = '';  
                 $changeHash{'inststatus'} = $newinststatus;  
                 $newsettings{'inststatus'} = $othertitle;  
                 if ($newinststatus ne $oldinststatus) {  
                     $changed{'inststatus'} = $changeHash{'inststatus'};  
                     ($newdefquota,$newsettingstatus) =  
                         &Apache::loncommon::default_quota($env{'form.ccdomain'},$newinststatus);  
                 }                  }
             }              }
         } elsif ($context ne 'selfcreate') {  
             $canshow{'inststatus'} = 1;  
             $newsettings{'inststatus'} = $oldsettings{'inststatus'};  
         }          }
         $changeHash{'portfolioquota'} = $userenv{'portfolioquota'};          $changeHash{'portfolioquota'} = $userenv{'portfolioquota'};
         if ($context eq 'domain') {          if ($userenv{'portfolioquota'} ne '') {
             if ($userenv{'portfolioquota'} ne '') {              $oldportfolioquota = $userenv{'portfolioquota'};
                 $oldportfolioquota = $userenv{'portfolioquota'};              if ($env{'form.customquota'} == 1) {
                 if ($env{'form.customquota'} == 1) {                  if ($env{'form.portfolioquota'} eq '') {
                     if ($env{'form.portfolioquota'} eq '') {                      $newportfolioquota = 0;
                         $newportfolioquota = 0;  
                     } else {  
                         $newportfolioquota = $env{'form.portfolioquota'};  
                         $newportfolioquota =~ s/[^\d\.]//g;  
                     }  
                     if ($newportfolioquota != $oldportfolioquota) {  
                         $changed{'quota'} = &quota_admin($newportfolioquota,\%changeHash);  
                     }  
                 } else {                  } else {
                     $changed{'quota'} = &quota_admin('',\%changeHash);                      $newportfolioquota = $env{'form.portfolioquota'};
                     $newportfolioquota = $newdefquota;                      $newportfolioquota =~ s/[^\d\.]//g;
                     $newisdefault = 1;  
                 }                  }
             } else {                  if ($newportfolioquota != $oldportfolioquota) {
                 $oldisdefault = 1;  
                 $oldportfolioquota = $olddefquota;  
                 if ($env{'form.customquota'} == 1) {  
                     if ($env{'form.portfolioquota'} eq '') {  
                         $newportfolioquota = 0;  
                     } else {  
                         $newportfolioquota = $env{'form.portfolioquota'};  
                         $newportfolioquota =~ s/[^\d\.]//g;  
                     }  
                     $changed{'quota'} = &quota_admin($newportfolioquota,\%changeHash);                      $changed{'quota'} = &quota_admin($newportfolioquota,\%changeHash);
                 } else {  
                     $newportfolioquota = $newdefquota;  
                     $newisdefault = 1;  
                 }                  }
             }  
             if ($oldisdefault) {  
                 $oldsettingstext{'quota'} = &get_defaultquota_text($oldsettingstatus);  
             }  
             if ($newisdefault) {  
                 $newsettingstext{'quota'} = &get_defaultquota_text($newsettingstatus);  
             }  
             &tool_changes('tools',\@usertools,\%oldsettings,\%oldsettingstext,\%userenv,  
                           \%changeHash,\%changed,\%newsettings,\%newsettingstext);  
             if ($env{'form.ccdomain'} eq $env{'request.role.domain'}) {  
                 &tool_changes('requestcourses',\@requestcourses,\%oldsettings,\%oldsettingstext,  
                               \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext);  
             } else {              } else {
                 &tool_changes('reqcrsotherdom',\@requestcourses,\%oldsettings,\%oldsettingstext,                  $changed{'quota'} = &quota_admin('',\%changeHash);
                               \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext);                  $newportfolioquota = $defquota;
                   $newisdefault = 1;
             }              }
         }          } else {
         foreach my $item (@userinfo) {              $oldisdefault = 1;
             if ($env{'form.c'.$item} ne $userenv{$item}) {              $oldportfolioquota = $defquota;
                 $namechanged{$item} = 1;              if ($env{'form.customquota'} == 1) {
                   if ($env{'form.portfolioquota'} eq '') {
                       $newportfolioquota = 0;
                   } else {
                       $newportfolioquota = $env{'form.portfolioquota'};
                       $newportfolioquota =~ s/[^\d\.]//g;
                   }
                   $changed{'quota'} = &quota_admin($newportfolioquota,\%changeHash);
               } else {
                   $newportfolioquota = $defquota;
                   $newisdefault = 1;
             }              }
         }          }
         $oldsettings{'quota'} = $oldportfolioquota.' Mb';          if ($oldisdefault) {
         $newsettings{'quota'} = $newportfolioquota.' Mb';              $olddefquotatext = &get_defaultquota_text($settingstatus);
         if ((keys(%namechanged) > 0) || (keys(%changed) > 0)) {          }
           if ($newisdefault) {
               $newdefquotatext = &get_defaultquota_text($settingstatus);
           }
           &tool_changes('tools',\@usertools,\%oldaccess,\%oldaccesstext,\%userenv,
                         \%changeHash,\%changed,\%newaccess,\%newaccesstext);
           if ($env{'form.ccdomain'} eq $env{'request.role.domain'}) {
               &tool_changes('requestcourses',\@requestcourses,\%oldaccess,\%oldaccesstext,
                             \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
           } else {
               &tool_changes('reqcrsotherdom',\@requestcourses,\%oldaccess,\%oldaccesstext,
                             \%userenv,\%changeHash,\%changed,\%newaccess,\%newaccesstext);
           }
           if ($env{'form.cfirstname'}  ne $userenv{'firstname'}  ||
               $env{'form.cmiddlename'} ne $userenv{'middlename'} ||
               $env{'form.clastname'}   ne $userenv{'lastname'}   ||
               $env{'form.cgeneration'} ne $userenv{'generation'} ||
               $env{'form.cid'} ne $userenv{'id'}                 ||
               $env{'form.cpermanentemail'} ne $userenv{'permanentemail'} ) {
               $namechanged = 1;
           }
           if (($namechanged) || (keys(%changed) > 0)) {
               $changeHash{'firstname'}  = $env{'form.cfirstname'};
               $changeHash{'middlename'} = $env{'form.cmiddlename'};
               $changeHash{'lastname'}   = $env{'form.clastname'};
               $changeHash{'generation'} = $env{'form.cgeneration'};
               $changeHash{'id'}         = $env{'form.cid'};
               $changeHash{'permanentemail'} = $env{'form.cpermanentemail'};
             my ($chgresult,$namechgresult);              my ($chgresult,$namechgresult);
             if (keys(%changed) > 0) {              if (keys(%changed) > 0) {
                 $chgresult =                   $chgresult = 
Line 2719  sub update_user_data { Line 2680  sub update_user_data {
                                 $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 2743  sub update_user_data { Line 2705  sub update_user_data {
                     }                      }
                 }                  }
             }              }
             if (keys(%namechanged) > 0) {              if ($namechanged) {
                 foreach my $field (@userinfo) {              # Make the change
                     $changeHash{$field}  = $env{'form.c'.$field};  
                 }  
 # Make the change  
                 $namechgresult =                  $namechgresult =
                     &Apache::lonnet::modifyuser($env{'form.ccdomain'},                      &Apache::lonnet::modifyuser($env{'form.ccdomain'},
                         $env{'form.ccuname'},$changeHash{'id'},undef,undef,                          $env{'form.ccuname'},$changeHash{'id'},undef,undef,
                         $changeHash{'firstname'},$changeHash{'middlename'},                          $changeHash{'firstname'},$changeHash{'middlename'},
                         $changeHash{'lastname'},$changeHash{'generation'},                          $changeHash{'lastname'},$changeHash{'generation'},
                         $changeHash{'id'},undef,$changeHash{'permanentemail'},undef,\@userinfo);                          $changeHash{'id'},undef,$changeHash{'permanentemail'});
                 %userupdate = (                  %userupdate = (
                                lastname   => $env{'form.clastname'},                                 lastname   => $env{'form.clastname'},
                                middlename => $env{'form.cmiddlename'},                                 middlename => $env{'form.cmiddlename'},
Line 2762  sub update_user_data { Line 2721  sub update_user_data {
                                id         => $env{'form.cid'},                                 id         => $env{'form.cid'},
                              );                               );
             }              }
             if (((keys(%namechanged) > 0) && $namechgresult eq 'ok') ||              if (($namechanged && $namechgresult eq 'ok') || 
                 ((keys(%changed) > 0) && $chgresult eq 'ok')) {                  ((keys(%changed) > 0) && $chgresult eq 'ok')) {
             # Tell the user we changed the name              # Tell the user we changed the name
                 &display_userinfo($r,1,\@disporder,\%canshow,\@requestcourses,   my %lt=&Apache::lonlocal::texthash(
                                   \@usertools,\%userenv,\%changed,\%namechanged,                               'uic'        => 'User Information Changed',
                                   \%oldsettings, \%oldsettingstext,\%newsettings,                               'frst'       => 'First Name',
                                   \%newsettingstext);                               'mddl'       => 'Middle Name',
                                'lst'        => 'Last Name',
                                'gen'        => 'Generation',
                                'id'         => 'Student/Employee ID',
                                'mail'       => 'Permanent e-mail address',
                                'disk'       => 'Disk space allocated to portfolio files',
                                'blog'       => 'Blog Availability',
                                'aboutme'    => 'Personal Information Page Availability',
                                'portfolio'  => 'Portfolio Availability',
                                'official'   => 'Can Request Official Courses',
                                'unofficial' => 'Can Request Unofficial Courses',
                                'community'  => 'Can Request Communities',
                                'inststatus' => "Affiliation",
                                'prvs'       => 'Previous Value:',
                                'chto'       => 'Changed To:'
      );
                   $r->print('<h4>'.$lt{'uic'}.'</h4>'.
                             &Apache::loncommon::start_data_table().
                             &Apache::loncommon::start_data_table_header_row());
                   $r->print(<<"END");
       <th>&nbsp;</th>
       <th>$lt{'frst'}</th>
       <th>$lt{'mddl'}</th>
       <th>$lt{'lst'}</th>
       <th>$lt{'gen'}</th>
       <th>$lt{'id'}</th>
       <th>$lt{'mail'}</th>
   END
                   if ($showinststatus) {
                       $r->print("
       <th>$lt{'inststatus'}</th>\n");
                   }
                   if ($showrequestcourses) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <th>$lt{$item}</th>\n");
                       }
                   } elsif ($showreqotherdom) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <th>$lt{$item}</th>\n");
                       }
                   }
                   if ($showquota) {
                       $r->print("
       <th>$lt{'disk'}</th>\n");
                   }
                   if ($showtools) {
                       foreach my $item (@usertools) {
                           $r->print("
       <th>$lt{$item}</th>\n");
                       }
                   }
                   $r->print(&Apache::loncommon::end_data_table_header_row().
                             &Apache::loncommon::start_data_table_row());
                   $r->print(<<"END");
       <td><b>$lt{'prvs'}</b></td>
       <td>$userenv{'firstname'}  </td>
       <td>$userenv{'middlename'} </td>
       <td>$userenv{'lastname'}   </td>
       <td>$userenv{'generation'} </td>
       <td>$userenv{'id'}</td>
       <td>$userenv{'permanentemail'} </td>
   END
                   if ($showinststatus) {
                       $r->print("
       <td>$oldinststatuses</td>\n");
                   }  
                   if ($showrequestcourses) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <td>$oldaccess{$item} $oldaccesstext{$item}</td>\n");
                       }
                   } elsif ($showreqotherdom) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <td>$oldaccess{$item} $oldaccesstext{$item}</td>\n");
                       }
                   }
                   if ($showquota) {
                       $r->print("
       <td>$oldportfolioquota Mb $olddefquotatext </td>\n");
                   }
                   if ($showtools) {
                       foreach my $item (@usertools) {
                           $r->print("
       <td>$oldaccess{$item} $oldaccesstext{$item} </td>\n");
                       }
                   }
                   $r->print(&Apache::loncommon::end_data_table_row().
                             &Apache::loncommon::start_data_table_row());
                   $r->print(<<"END");
       <td><span class="LC_nobreak"><b>$lt{'chto'}</b></span></td>
       <td>$env{'form.cfirstname'}  </td>
       <td>$env{'form.cmiddlename'} </td>
       <td>$env{'form.clastname'}   </td>
       <td>$env{'form.cgeneration'} </td>
       <td>$env{'form.cid'} </td>
       <td>$env{'form.cpermanentemail'} </td>
   END
                   if ($showinststatus) {
                       $r->print("
       <td>$newinststatuses</td>\n");
                   }
                   if ($showrequestcourses) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <td>$newaccess{$item} $newaccesstext{$item} </td>\n");
                       }
                   } elsif ($showreqotherdom) {
                       foreach my $item (@requestcourses) {
                           $r->print("
       <td>$newaccess{$item} $newaccesstext{$item} </td>\n");
                       }
                   }
                   if ($showquota) {
                       $r->print("
       <td>$newportfolioquota Mb $newdefquotatext </td>\n");
                   }
                   if ($showtools) {
                       foreach my $item (@usertools) {
                           $r->print("
       <td>$newaccess{$item} $newaccesstext{$item} </td>\n");
                       }
                   }
                   $r->print(&Apache::loncommon::end_data_table_row().
                             &Apache::loncommon::end_data_table().'<br />');
                 if ($env{'form.cid'} ne $userenv{'id'}) {                  if ($env{'form.cid'} ne $userenv{'id'}) {
                     &Apache::lonnet::idput($env{'form.ccdomain'},                      &Apache::lonnet::idput($env{'form.ccdomain'},
                          ($env{'form.ccuname'} => $env{'form.cid'}));                           ($env{'form.ccuname'} => $env{'form.cid'}));
Line 2795  sub update_user_data { Line 2879  sub update_user_data {
                       $env{'form.ccuname'}.' '.&mt('in domain').' '.                        $env{'form.ccuname'}.' '.&mt('in domain').' '.
                       $env{'form.ccdomain'}.'</span><br />');                        $env{'form.ccdomain'}.'</span><br />');
             }              }
         } else { # End of if ($env ... ) logic          }  else { # End of if ($env ... ) logic
             # They did not want to change the users name, quota, tool availability,              # They did not want to change the users name, quota, tool availability,
             # or ability to request creation of courses,               # or ability to request creation of courses, 
             # but we can still tell them what the name and quota and availabilities are                # but we can still tell them what the name and quota and availabilities are  
             &display_userinfo($r,undef,\@disporder,\%canshow,\@requestcourses,      my %lt=&Apache::lonlocal::texthash(
                               \@usertools,\%userenv,\%changed,\%namechanged,\%oldsettings,                             'id'         => "Student/Employee ID",
                               \%oldsettingstext,\%newsettings,\%newsettingstext);                             'mail'       => "Permanent e-mail address",
                              'disk'       => "Disk space allocated to user's portfolio files",
                              'blog'       => "Blog Availability",
                              'aboutme'    => "Personal Information Page Availability",
                              'portfolio'  => "Portfolio Availability",
                              'official'   => "Can Request Official Courses",
                              'unofficial' => "Can Request Unofficial Courses",
                              'community'  => "Can Request Communities",
                              'inststatus' => "Affiliation",
          );
               $r->print(<<"END");
   <h4>$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} $userenv{'generation'}
   END
               if ($userenv{'permanentemail'} ne '') {
                   $r->print('<br />['.$lt{'mail'}.': '.
                             $userenv{'permanentemail'}.']');
               }
               if ($showinststatus) {
                   $r->print('<br />['.$lt{'inststatus'}.': '.$oldinststatuses.']');
               }
               if ($showrequestcourses) {
                   foreach my $item (@requestcourses) {
                       $r->print('<br />['.$lt{$item}.': '.$newaccess{$item}.' '.
                                 $newaccesstext{$item}.']'."\n");
                   }
               } elsif ($showreqotherdom) {
                   foreach my $item (@requestcourses) {
                       $r->print('<br />['.$lt{$item}.': '.$newaccess{$item}.' '.
                                 $newaccesstext{$item}.']'."\n");
                   }
               }
               if ($showtools) {
                   foreach my $item (@usertools) {
                       $r->print('<br />['.$lt{$item}.': '.$newaccess{$item}.' '.
                                 $newaccesstext{$item}.']'."\n");
                   }
               }
               if ($showquota) {
                   $r->print('<br />['.$lt{'disk'}.': '.$oldportfolioquota.' Mb '.
                             $olddefquotatext.']');
               }
               $r->print('</h4>');
         }          }
         if (@mod_disallowed) {          if (@mod_disallowed) {
             my ($rolestr,$contextname);              my ($rolestr,$contextname);
Line 2848  sub update_user_data { Line 2973  sub update_user_data {
         $r->print('</a></p>');          $r->print('</a></p>');
     } else {      } else {
         my @rolechanges = &update_roles($r,$context);          my @rolechanges = &update_roles($r,$context);
         if (keys(%namechanged) > 0) {          if ($namechanged) {
             if ($context eq 'course') {              if ($context eq 'course') {
                 if (@userroles > 0) {                  if (@userroles > 0) {
                     if ((@rolechanges == 0) ||                       if ((@rolechanges == 0) || 
Line 2877  sub update_user_data { Line 3002  sub update_user_data {
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub display_userinfo {  
     my ($r,$changed,$order,$canshow,$requestcourses,$usertools,$userenv,  
         $changedhash,$namechangedhash,$oldsetting,$oldsettingtext,  
         $newsetting,$newsettingtext) = @_;  
     return unless (ref($order) eq 'ARRAY' &&  
                    ref($canshow) eq 'HASH' &&  
                    ref($requestcourses) eq 'ARRAY' &&  
                    ref($usertools) eq 'ARRAY' &&  
                    ref($userenv) eq 'HASH' &&  
                    ref($changedhash) eq 'HASH' &&  
                    ref($oldsetting) eq 'HASH' &&  
                    ref($oldsettingtext) eq 'HASH' &&  
                    ref($newsetting) eq 'HASH' &&  
                    ref($newsettingtext) eq 'HASH');  
     my %lt=&Apache::lonlocal::texthash(  
          'ui'             => 'User Information (unchanged)',  
          'uic'            => 'User Information Changed',  
          'firstname'      => 'First Name',  
          'middlename'     => 'Middle Name',  
          'lastname'       => 'Last Name',  
          'generation'     => 'Generation',  
          'id'             => 'Student/Employee ID',  
          'permanentemail' => 'Permanent e-mail address',  
          'quota'          => 'Disk space allocated to portfolio files',  
          'blog'           => 'Blog Availability',  
          'aboutme'        => 'Personal Information Page Availability',  
          'portfolio'      => 'Portfolio Availability',  
          'official'       => 'Can Request Official Courses',  
          'unofficial'     => 'Can Request Unofficial Courses',  
          'community'      => 'Can Request Communities',  
          'inststatus'     => "Affiliation",  
          'prvs'           => 'Previous Value:',  
          'chto'           => 'Changed To:'  
     );  
     my $title = $lt{'ui'};  
     if ($changed) {  
         $title = $lt{'uic'};  
     }  
     $r->print('<h4>'.$title.'</h4>'.  
               &Apache::loncommon::start_data_table().  
               &Apache::loncommon::start_data_table_header_row());  
     if ($changed) {  
         $r->print("<th>&nbsp;</th>\n");  
     }  
     my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');  
     foreach my $item (@userinfo) {  
         $r->print("<th>$lt{$item}</th>\n");  
     }  
     foreach my $entry (@{$order}) {  
         if ($canshow->{$entry}) {  
             if (($entry eq 'requestcourses') || ($entry eq 'reqcrsotherdom')) {  
                 foreach my $item (@{$requestcourses}) {  
                     $r->print("<th>$lt{$item}</th>\n");  
                 }  
             } elsif ($entry eq 'tools') {  
                 foreach my $item (@{$usertools}) {  
                     $r->print("<th>$lt{$item}</th>\n");  
                 }  
             } else {  
                 $r->print("<th>$lt{$entry}</th>\n");  
             }  
         }  
     }  
     $r->print(&Apache::loncommon::end_data_table_header_row().  
              &Apache::loncommon::start_data_table_row());  
     if ($changed) {  
         $r->print('<td><b>'.$lt{'prvs'}.'</b></td>'."\n");  
     }  
     foreach my $item (@userinfo) {  
         $r->print('<td>'.$userenv->{$item}.' </td>'."\n");  
     }  
     foreach my $entry (@{$order}) {  
         if ($canshow->{$entry}) {  
             if (($entry eq 'requestcourses') || ($entry eq 'reqcrsotherdom')) {  
                 foreach my $item (@{$requestcourses}) {  
                     $r->print("<td>$oldsetting->{$item} $oldsettingtext->{$item}</td>\n");  
                 }  
             } elsif ($entry eq 'tools') {  
                 foreach my $item (@{$usertools}) {  
                     $r->print("<td>$oldsetting->{$item} $oldsettingtext->{$item}</td>\n");  
                 }  
             } else {  
                 $r->print("<td>$oldsetting->{$entry} $oldsettingtext->{$entry} </td>\n");  
             }  
         }  
     }  
     $r->print(&Apache::loncommon::end_data_table_row());  
     if ($changed) {  
         $r->print(&Apache::loncommon::start_data_table_row().  
                   '<td><span class="LC_nobreak"><b>'.$lt{'chto'}.'</b></span></td>'."\n");  
         foreach my $item (@userinfo) {  
             my $value = $env{'form.c'.$item};  
             if ($namechangedhash->{$item}) {  
                 $value = '<span class="LC_cusr_emph">'.$value.'</span>';  
             }  
             $r->print("<td>$value </td>\n");  
         }  
         foreach my $entry (@{$order}) {  
             if ($canshow->{$entry}) {  
                 if (($entry eq 'requestcourses') || ($entry eq 'reqcrsotherdom')) {  
                     foreach my $item (@{$requestcourses}) {  
                         my $value = $newsetting->{$item}.' '.$newsettingtext->{$item};  
                         if ($changedhash->{$item}) {  
                             $value = '<span class="LC_cusr_emph">'.$value.'</span>';  
                         }  
                         $r->print("<td>$value </td>\n");  
                     }  
                 } elsif ($entry eq 'tools') {  
                     foreach my $item (@{$usertools}) {  
                         my $value = $newsetting->{$item}.' '.$newsettingtext->{$item};  
                         if ($changedhash->{$item}) {  
                             $value = '<span class="LC_cusr_emph">'.$value.'</span>';  
                         }  
                         $r->print("<td>$value </td>\n");  
                     }  
                 } else {  
                     my $value = $newsetting->{$entry}.' '.$newsettingtext->{$entry};  
                     if ($changedhash->{$entry}) {  
                         $value = '<span class="LC_cusr_emph">'.$value.'</span>';  
                     }  
                     $r->print("<td>$value </td>\n");  
                 }  
             }  
         }  
         $r->print(&Apache::loncommon::end_data_table_row());  
     }  
     $r->print(&Apache::loncommon::end_data_table().'<br />');  
     return;  
 }  
   
 sub tool_changes {  sub tool_changes {
     my ($context,$usertools,$oldaccess,$oldaccesstext,$userenv,$changeHash,      my ($context,$usertools,$oldaccess,$oldaccesstext,$userenv,$changeHash,
         $changed,$newaccess,$newaccesstext) = @_;          $changed,$newaccess,$newaccesstext) = @_;
Line 3489  sub enroll_single_student { Line 3484  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 3616  sub build_roles { Line 3611  sub build_roles {
 sub custom_role_editor {  sub custom_role_editor {
     my ($r) = @_;      my ($r) = @_;
     my $action = $env{'form.customroleaction'};      my $action = $env{'form.customroleaction'};
     my $rolename;      my $rolename; 
     if ($action eq 'new') {      if ($action eq 'new') {
         $rolename=$env{'form.newrolename'};          $rolename=$env{'form.newrolename'};
     } else {      } else {
Line 3653  sub custom_role_editor { Line 3648  sub custom_role_editor {
 # ------------------------------------------------- Get current role privileges  # ------------------------------------------------- Get current role privileges
  ($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef);   ($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef);
         if ($crstype eq 'Community') {          if ($crstype eq 'Community') {
             $syspriv =~ s/bre\&S//;              $syspriv =~ s/bre\&S//;   
         }          }
     } else {      } else {
  $body_top .= &mt('New Role').' "';   $body_top .= &mt('New Role').' "';
Line 3694  sub custom_role_editor { Line 3689  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 @template_roles = ("in","ta","ep");      my @template_roles = ("in","ta","ep");
     if ($context eq 'domain') {      if ($context eq 'domain') {
         push(@template_roles,"ad");          push(@template_roles,"ad");
Line 3739  sub custom_role_editor { Line 3734  sub custom_role_editor {
         $context_code .= '<input type="hidden" name="action" value="custom" />'.          $context_code .= '<input type="hidden" name="action" value="custom" />'.
                          '<input type="hidden" name="phase" value="selected_custom_edit" />';                           '<input type="hidden" name="phase" value="selected_custom_edit" />';
     }      }
     $head_script .= "\n".$jsback."\n".  
                     '// ]]>'."\n".      $head_script .= "\n".$jsback."\n"
                     '</script>'."\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','')",
        text=>"Pick custom role",         text=>"Pick custom role",
        faq=>282,bug=>'Instructor Interface',},         faq=>282,bug=>'Instructor Interface',},
Line 3760  sub custom_role_editor { Line 3756  sub custom_role_editor {
                     'dml'  => "Domain Level",                      'dml'  => "Domain Level",
                     'ssl'  => "System Level");                      'ssl'  => "System Level");
   
   
     $r->print('<div class="LC_left_float">'      $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>'
Line 3797  ENDCCF Line 3794  ENDCCF
     ($domainlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;').      ($domainlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;').
     '</td><td>');      '</td><td>');
         if ($priv eq 'bre' && $crstype eq 'Community') {          if ($priv eq 'bre' && $crstype eq 'Community') {
             $r->print('&nbsp;');              $r->print('&nbsp;');  
         } else {          } else {
             $r->print($systemlevel{$priv}?'<input type="checkbox" name="'.$priv.'_s"'.              $r->print($systemlevel{$priv}?'<input type="checkbox" name="'.$priv.'_s"'.
                       ($systemlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;');                        ($systemlevelcurrent{$priv}?' checked="checked"':'').' />':'&nbsp;');
Line 3897  sub set_custom_role { Line 3894  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 4134  sub handler { Line 4131  sub handler {
             $r->print(&Apache::lonhtmlcommon::breadcrumbs("Update Users",              $r->print(&Apache::lonhtmlcommon::breadcrumbs("Update Users",
                                                           'Course_View_Class_List'));                                                            'Course_View_Class_List'));
             if ($permission->{'cusr'}) {              if ($permission->{'cusr'}) {
                 &Apache::lonuserutils::update_user_list($r,$context,$setting,$choice,$crstype);                  &Apache::lonuserutils::update_user_list($r,$context,$setting,$choice);
                 $r->print(&Apache::loncommon::end_page());                  $r->print(&Apache::loncommon::end_page());
             } else {              } else {
                 $r->print(&mt('You are not authorized to make bulk changes to user roles'));                  $r->print(&mt('You are not authorized to make bulk changes to user roles'));
Line 4150  sub handler { Line 4147  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 4253  sub handler { Line 4250  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 4296  sub header { Line 4292  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 4322  END Line 4318  END
 #  Menu Phase One  #  Menu Phase One
 sub print_main_menu {  sub print_main_menu {
     my ($permission,$context,$crstype) = @_;      my ($permission,$context,$crstype) = @_;
       if (($context eq 'course') && (&Apache::loncommon::needs_gci_custom())) {
           return &print_gci_main_menu($permission,$context,$crstype)
       }
     my $linkcontext = $context;      my $linkcontext = $context;
     my $stuterm = lc(&Apache::lonnet::plaintext('st',$crstype));      my $stuterm = lc(&Apache::lonnet::plaintext('st',$crstype));
     if (($context eq 'course') && ($crstype eq 'Community')) {      if (($context eq 'course') && ($crstype eq 'Community')) {
         $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 User',                              singleuser => 'Add/Modify a User',
                                    listusers => 'Manage Users',                              listusers  => 'Manage Users',
                                  },                              },
                        author => {                  author => {
                                    upload => 'Upload a File of Co-authors',                              upload     => 'Upload a File of Co-authors',
                                    singleuser => 'Add/Modify a Co-author',                              singleuser => 'Add/Modify a Co-author',
                                    listusers => 'Manage Co-authors',                              listusers  => 'Manage Co-authors',
                                  },                              },
                        course => {                  course => {
                                    upload => 'Upload a File of Course Users',                              upload     => 'Upload a File of Course Users',
                                    singleuser => 'Add/Modify a 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'},
               },
            ]},
   
            {categorytitle => 'Multiple Users',
            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.',
             },              },
           { text => $links{$context}{'singleuser'},              {
             help => 'Course_Change_Privileges',               linktext => $links{$linkcontext}{'listusers'},
             action => 'singleuser',               icon => 'edit-find.png',
             permission => $permission->{'cusr'},               #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 Log',
                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 = '';  sub print_gci_main_menu {
     foreach my $menu_item (@menu) {      my ($permission,$context,$crstype) = @_;
         next if (! $menu_item->{'permission'});      my $stuterm = lc(&Apache::lonnet::plaintext('st',$crstype));
         $menu_html.='<p>';      my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity();
         if (exists($menu_item->{'help'})) {      my %links = (
             $menu_html.=          course => {
                 &Apache::loncommon::help_open_topic($menu_item->{'help'});                      single     => 'Add/Modify a Student',
         }                      drop       => 'Drop Students',
         $menu_html.='<font size="+1">';                      upload     => 'Upload a File of Course Users',
         if (exists($menu_item->{'url'})) {                      singleuser => 'Add/Modify a Course User',
             $menu_html.=qq{<a href="$menu_item->{'url'}">};                      listusers  => 'Manage Course Users',
         } else {                    },
             $menu_html.=       );
                 qq{<a href="/adm/createuser?action=$menu_item->{'action'}">};      }       my %linktitles = (
         $menu_html.= &mt($menu_item->{'text'}).'</a></font>';          course => {
         $menu_html.='</p>';                      singleuser => 'Add a user with a certain role to this course.',
     }                      listusers  => 'Show and manage users in this course.',
     return $menu_html;                      single     => 'Add a user with the role of student to this course',
                       drop       => 'Remove a student from this course.',
                       upload     => 'Upload a CSV or a text file containing users.', 
                     },
       );
       my @menu = ( {categorytitle => 'Manage Users',
            items =>
            [
               {
                linktext => $links{$context}{'single'},
                #help => 'Course_Add_Student',
                icon => 'list-add.png',
                url => '/adm/createuser?action=singlestudent',
                permission => $permission->{'cusr'},
                linktitle => $linktitles{$context}{'single'},
   
               },
               {
                linktext => $links{$context}{'drop'},
                icon => 'edit-undo.png',
                #help => 'Course_Drop_Student',
                url => '/adm/createuser?action=drop',
                permission => $permission->{'cusr'},
                linktitle => $linktitles{$context}{'drop'},
               },
               {
                linktext => $links{$context}{'upload'},
                icon => 'sctr.png',
                #help => 'Course_Create_Class_List',
                url => '/adm/createuser?action=upload',
                permission => $permission->{'cusr'},
                linktitle => $linktitles{$context}{'upload'},
               },
               {
                linktext => $links{$context}{'listusers'},
                icon => 'edit-find.png',
                #help => 'Course_View_Class_List',
                url => '/adm/createuser?action=listusers',
                permission => ($permission->{'view'} || $permission->{'cusr'}),
                linktitle => $linktitles{$context}{'listusers'},
               },
            ]},
            {categorytitle => 'Administration',
            items => [ ]},
       );
   
       push(@{ $menu[1]->{items} }, #Category: Administration
           {
              linktext => 'Change Log',
              icon => 'document-properties.png',
              #help => 'Course_User_Logs',
              url => '/adm/createuser?action=changelogs',
              permission => $permission->{'cusr'},
              linktitle => 'View change log.',
            },
       );
       return Apache::lonhtmlcommon::generate_menu(@menu);
 }  }
   
 sub restore_prev_selections {  sub restore_prev_selections {
Line 4680  ENDSCRIPT Line 4844  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 5145  sub print_userchangelogs_display { Line 5307  sub print_userchangelogs_display {
     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); }
   
     $r->print('<form action="/adm/createuser" method="post" name="'.$formname.'">');  
     my %saveable_parameters = ('show' => 'scalar',);      my %saveable_parameters = ('show' => 'scalar',);
     &Apache::loncommon::store_course_settings('roles_log',      &Apache::loncommon::store_course_settings('roles_log',
                                               \%saveable_parameters);                                                \%saveable_parameters);
Line 5180  sub print_userchangelogs_display { Line 5341  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));  
     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 5197  sub print_userchangelogs_display { Line 5350  sub print_userchangelogs_display {
             $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};              $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
         }          }
     }      }
   
       # Form Header
       $r->print('<form action="/adm/createuser" method="post" name="'.$formname.'">'.
                 &role_display_filter($formname,$cdom,$cnum,\%curr,$version,$crstype));
   
       # Create navigation
       my ($nav_script,$nav_links) = &userlogdisplay_nav($formname,\%curr,$more_records);
       my $showntableheader = 0;
   
       # 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();
   
       # Display user change log data
     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 5218  sub print_userchangelogs_display { Line 5395  sub print_userchangelogs_display {
         }          }
         $count ++;          $count ++;
         next if ($count < $minshown);          next if ($count < $minshown);
         if (!$showntablehdr) {          unless ($showntableheader) {
             $r->print($tablehdr);              $r->print($nav_script
             $showntablehdr = 1;                       .$nav_links
                        .&Apache::loncommon::start_data_table()
                        .$tableheader);
               $r->rflush();
               $showntableheader = 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'}} =
Line 5260  sub print_userchangelogs_display { Line 5441  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");          $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");
       }
   
       if ($showntableheader) { # Table footer, if content displayed above
           $r->print(&Apache::loncommon::end_data_table()
                    .$nav_links);
       } else { # No content displayed above
           $r->print('<p class="LC_info">'
                    .&mt('There are no records to display.')
                    .'</p>'
           );
     }      }
     if ($showntablehdr) {  
         $r->print(&Apache::loncommon::end_data_table().'<br />');      # Form Footer
         if (($curr{'page'} > 1) || ($more_records)) {      $r->print( 
             $r->print('<table><tr>');          '<input type="hidden" name="page" value="'.$curr{'page'}.'" />'
             if ($curr{'page'} > 1) {         .'<input type="hidden" name="action" value="changelogs" />'
                 $r->print('<td><a href="javascript:chgPage('."'previous'".');">'.&mt('Previous [_1] changes',$curr{'show'}).'</a></td>');         .'</form>');
             }      return;
             if ($more_records) {  }
                 $r->print('<td><a href="javascript:chgPage('."'next'".');">'.&mt('Next [_1] changes',$curr{'show'}).'</a></td>');  
             }  sub userlogdisplay_nav {
             $r->print('</tr></table>');      my ($formname,$curr,$more_records) = @_;
             $r->print(<<"ENDSCRIPT");      my ($nav_script,$nav_links);
       if (ref($curr) eq 'HASH') {
           # Create Navigation:
           # Navigation Script
           $nav_script = <<"ENDSCRIPT";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 function chgPage(caller) {  function chgPage(caller) {
Line 5283  function chgPage(caller) { Line 5489  function chgPage(caller) {
     if (caller == 'next') {      if (caller == 'next') {
         document.$formname.page.value ++;          document.$formname.page.value ++;
     }      }
     document.$formname.submit();       document.$formname.submit();
     return;      return;
 }  }
 // ]]>  // ]]>
 </script>  </script>
 ENDSCRIPT  ENDSCRIPT
           # Navigation Buttons
           $nav_links = '<p>';
           if (($curr->{'page'} > 1) || ($more_records)) {
               if ($curr->{'page'} > 1) {
                   $nav_links .= '<input type="button"'
                                .' onclick="javascript:chgPage('."'previous'".');"'
                                .' 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'})
                                .'" />';
               }
         }          }
     } else {          $nav_links .= '</p>';
         $r->print('<p class="LC_info">'.  
                   &mt('There are no records to display').  
                   '</p>');  
     }      }
     $r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'.      return ($nav_script,$nav_links);
               '<input type="hidden" name="action" value="changelogs" /></form>');  
     return;  
 }  }
   
 sub role_display_filter {  sub role_display_filter {
Line 5319  sub role_display_filter { Line 5535  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 5342  sub role_display_filter { Line 5562  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 5363  sub role_display_filter { Line 5585  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 5784  sub build_search_response { Line 6006  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 5793  sub build_search_response { Line 6015  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 5811  sub build_search_response { Line 6033  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 5919  sub course_level_table { Line 6141  sub course_level_table {
         my @roles = &Apache::lonuserutils::roles_by_context('course','',$crstype);          my @roles = &Apache::lonuserutils::roles_by_context('course','',$crstype);
  foreach my $role (@roles) {   foreach my $role (@roles) {
             my $plrole=&Apache::lonnet::plaintext($role,$crstype);              my $plrole=&Apache::lonnet::plaintext($role,$crstype);
             if ((&Apache::lonnet::allowed('c'.$role,$thiscourse)) ||      if ((&Apache::lonnet::allowed('c'.$role,$thiscourse)) ||
                 ((($role eq 'cc') || ($role eq 'co')) && ($isowner))) {                  ((($role eq 'cc') || ($role eq 'co')) && ($isowner))) {
                 $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 6122  sub update_selfenroll_config { Line 6344  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);
Line 6435  sub is_courseowner { Line 6656  sub is_courseowner {
     }      }
     if ($courseowner ne '') {      if ($courseowner ne '') {
         if ($courseowner eq $env{'user.name'}.':'.$env{'user.domain'}) {          if ($courseowner eq $env{'user.name'}.':'.$env{'user.domain'}) {
             return 1;                  return 1;
         }          }
     }      }
     return;      return;

Removed from v.1.295.2.32  
changed lines
  Added in v.1.329.2.1


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