Diff for /loncom/interface/loncreateuser.pm between versions 1.426 and 1.427

version 1.426, 2016/12/26 18:43:52 version 1.427, 2017/01/01 14:08:34
Line 536  sub domainrole_req { Line 536  sub domainrole_req {
            &Apache::loncommon::end_data_table();             &Apache::loncommon::end_data_table();
 }  }
   
 sub domadhocroles {  
     my ($ccuname,$ccdomain) = @_;  
     my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});  
     my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'},  
                                        $confname,'rolesdef_');  
     my ($output,$canmodify);  
     if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {  
         $canmodify = 1;  
     }  
     if (keys(%existing) > 0) {  
         my @current;  
         my $curradhoc = 'adhocroles.'.$env{'request.role.domain'};  
         my %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,$curradhoc);  
         if ($userenv{$curradhoc}) {  
             @current = split(/,/,$userenv{$curradhoc});  
         }  
         if (!$canmodify && !@current) {  
             return;  
         }  
         my %customroles;  
         foreach my $key (keys(%existing)) {  
             if ($key=~/^rolesdef\_(\w+)$/) {  
                 my $rolename = $1;  
                 my %privs;  
                 ($privs{'system'},$privs{'domain'},$privs{'course'}) = split(/\_/,$existing{$key});  
                 $customroles{$rolename} = \%privs;  
             }  
         }  
         $output = '<br /><h3>'.  
                   &mt('Ad Hoc Course Roles Selectable via Helpdesk Role').  
                   '</h3>'."\n".  
                   &Apache::loncommon::start_data_table().  
                   &Apache::loncommon::start_data_table_header_row();  
         if ($canmodify) {  
             $output .= '<th>'.&mt('Action').'</th>';  
         }  
         $output .= '<th>'.&mt('Role').'</th>'.  
                    '<th>'.&mt('Privileges in Course').'<th>'.  
                    &Apache::loncommon::end_data_table_header_row();  
         foreach my $key (sort(keys(%customroles))) {  
             next if ((!$canmodify) && (!grep(/^\Q$key\E$/,@current)));  
             $output .= &Apache::loncommon::start_data_table_row();  
             if ($canmodify) {  
                 if (grep(/^\Q$key\E$/,@current)) {  
                     $output .= '<td><label>'.  
                                '<input type="checkbox" name="adhocroledel" value="'.$key.'" />'.  
                                &mt('Delete').'</label>'.  
                                '</td>';  
                 } else {  
                     $output .= '<td><label>'.  
                                '<input type="checkbox" name="adhocroleadd" value="'.$key.'" />'.  
                                &mt('Add').'</label>'.  
                                '</td>';  
                 }  
             }  
             $output .= '<td>'.$key.'</td><td>';  
             foreach my $level ('course','domain','system') {  
                 if ($customroles{$key}{$level}) {  
                     my $suffix;  
                     if (($level eq 'domain') || ($level eq 'system')) {  
                         $suffix = '&nbsp;('.&mt($level).')';  
                     }  
                     my @privs = split(/:/,$customroles{$key}{$level});  
                     foreach my $item (@privs) {  
                         next if ($item eq '');  
                         my ($priv,$cond) = split(/\&/,$item);  
                         $output .= &Apache::lonnet::plaintext($priv,'Course').$suffix.'<br />';  
                     }  
                 }  
             }  
             $output .= '</td>'.  
                        &Apache::loncommon::end_data_table_row();  
         }  
         $output .= &Apache::loncommon::end_data_table();  
     }  
     return $output;  
 }  
   
 sub courserequest_titles {  sub courserequest_titles {
     my %titles = &Apache::lonlocal::texthash (      my %titles = &Apache::lonlocal::texthash (
                                    official   => 'Official',                                     official   => 'Official',
Line 1363  ENDFORMINFO Line 1285  ENDFORMINFO
     }      }
     my $title = '';      my $title = '';
     if ($newuser) {      if ($newuser) {
         my ($portfolioform,$domroleform,$adhocroleform);          my ($portfolioform,$domroleform);
         if ((&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) ||          if ((&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) ||
             (&Apache::lonnet::allowed('mut',$env{'request.role.domain'}))) {              (&Apache::lonnet::allowed('mut',$env{'request.role.domain'}))) {
             # Current user has quota or user tools modification privileges              # Current user has quota or user tools modification privileges
Line 1373  ENDFORMINFO Line 1295  ENDFORMINFO
             ($ccdomain eq $env{'request.role.domain'})) {              ($ccdomain eq $env{'request.role.domain'})) {
             $domroleform = '<br />'.&domainrole_req($ccuname,$ccdomain);              $domroleform = '<br />'.&domainrole_req($ccuname,$ccdomain);
         }          }
         if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {  
             $adhocroleform = &domadhocroles($ccuname,$ccdomain);  
             if ($adhocroleform) {  
                 $adhocroleform = '<br />'.$adhocroleform;  
             }  
         }  
         &initialize_authen_forms($ccdomain,$formname);          &initialize_authen_forms($ccdomain,$formname);
         my %lt=&Apache::lonlocal::texthash(          my %lt=&Apache::lonlocal::texthash(
                 'lg'             => 'Login Data',                  'lg'             => 'Login Data',
Line 1489  ENDAUTH Line 1405  ENDAUTH
         } else {          } else {
             $r->print(&Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc));               $r->print(&Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc)); 
         }          }
         $r->print($portfolioform.$domroleform.$adhocroleform);          $r->print($portfolioform.$domroleform);
         if ($env{'form.action'} eq 'singlestudent') {          if ($env{'form.action'} eq 'singlestudent') {
             $r->print(&date_sections_select($context,$newuser,$formname,              $r->print(&date_sections_select($context,$newuser,$formname,
                                             $permission,$crstype,$ccuname,                                              $permission,$crstype,$ccuname,
Line 1532  ENDAUTH Line 1448  ENDAUTH
             $r->print(&Apache::loncommon::end_data_table());              $r->print(&Apache::loncommon::end_data_table());
         }          }
         $r->print('</div>');          $r->print('</div>');
         my @order = ('auth','quota','tools','requestauthor','adhocroles');          my @order = ('auth','quota','tools','requestauthor');
         my %user_text;          my %user_text;
         my ($isadv,$isauthor) =           my ($isadv,$isauthor) = 
             &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);              &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);
Line 1542  ENDAUTH Line 1458  ENDAUTH
             ($env{'request.role.domain'} eq $ccdomain)) {              ($env{'request.role.domain'} eq $ccdomain)) {
             $user_text{'requestauthor'} = &domainrole_req($ccuname,$ccdomain);              $user_text{'requestauthor'} = &domainrole_req($ccuname,$ccdomain);
         }          }
         if ((&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) ||   
             (&Apache::lonnet::allowed('udp',$env{'request.role.domain'}))) {  
             $user_text{'adhocroles'} = &domadhocroles($ccuname,$ccdomain);  
         }  
         $user_text{'auth'} =  &user_authentication($ccuname,$ccdomain,$formname);          $user_text{'auth'} =  &user_authentication($ccuname,$ccdomain,$formname);
         if ((&Apache::lonnet::allowed('mpq',$ccdomain)) ||          if ((&Apache::lonnet::allowed('mpq',$ccdomain)) ||
             (&Apache::lonnet::allowed('mut',$ccdomain)) ||              (&Apache::lonnet::allowed('mut',$ccdomain)) ||
Line 2931  sub update_user_data { Line 2843  sub update_user_data {
                                                     $newcustom{'requestauthor'},                                                      $newcustom{'requestauthor'},
                                                     \%changeHash,'requestauthor');                                                      \%changeHash,'requestauthor');
                 }                  }
                 if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {  
                     my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd');  
                     if (&adhocrole_changes(\%changeHash)) {  
                         $changed{'adhocroles.'.$env{'request.role.domain'}} = $changeHash{'adhocroles.'.$env{'request.role.domain'}};  
                     }  
                 }  
             }              }
             if ($canmodify_status{'inststatus'}) {              if ($canmodify_status{'inststatus'}) {
                 if (exists($env{'form.inststatus'})) {                  if (exists($env{'form.inststatus'})) {
Line 3000  sub update_user_data { Line 2906  sub update_user_data {
              'requestcourses.community','requestcourses.textbook',               'requestcourses.community','requestcourses.textbook',
              'reqcrsotherdom.official','reqcrsotherdom.unofficial',               'reqcrsotherdom.official','reqcrsotherdom.unofficial',
              'reqcrsotherdom.community','reqcrsotherdom.textbook',               'reqcrsotherdom.community','reqcrsotherdom.textbook',
              'reqcrsotherdom.placement','requestauthor',               'reqcrsotherdom.placement','requestauthor'],
              'adhocroles.'.$env{'request.role.domain'}],  
               $env{'form.ccdomain'},$env{'form.ccuname'});                $env{'form.ccdomain'},$env{'form.ccuname'});
         my ($tmp) = keys(%userenv);          my ($tmp) = keys(%userenv);
         if ($tmp =~ /^(con_lost|error)/i) {           if ($tmp =~ /^(con_lost|error)/i) { 
Line 3140  sub update_user_data { Line 3045  sub update_user_data {
                 &Apache::loncommon::default_quota($env{'form.ccdomain'},$oldinststatus,$name);                  &Apache::loncommon::default_quota($env{'form.ccdomain'},$oldinststatus,$name);
             ($newdefquota{$name},$newsettingstatus{$name}) = ($olddefquota{$name},$oldsettingstatus{$name});              ($newdefquota{$name},$newsettingstatus{$name}) = ($olddefquota{$name},$oldsettingstatus{$name});
         }          }
         push(@disporder,'adhocroles');  
         my %canshow;          my %canshow;
         if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('mpq',$env{'form.ccdomain'})) {
             $canshow{'quota'} = 1;              $canshow{'quota'} = 1;
Line 3159  sub update_user_data { Line 3063  sub update_user_data {
         if (&Apache::lonnet::allowed('cau',$env{'form.ccdomain'})) {          if (&Apache::lonnet::allowed('cau',$env{'form.ccdomain'})) {
             $canshow{'requestauthor'} = 1;              $canshow{'requestauthor'} = 1;
         }          }
         if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {  
             $canshow{'adhocroles'} = 1;  
         }  
         my (%changeHash,%changed);          my (%changeHash,%changed);
         if ($oldinststatus eq '') {          if ($oldinststatus eq '') {
             $oldsettings{'inststatus'} = $othertitle;               $oldsettings{'inststatus'} = $othertitle; 
Line 3275  sub update_user_data { Line 3176  sub update_user_data {
                 &tool_changes('reqcrsotherdom',\@requestcourses,\%oldsettings,\%oldsettingstext,                  &tool_changes('reqcrsotherdom',\@requestcourses,\%oldsettings,\%oldsettingstext,
                               \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext);                                \%userenv,\%changeHash,\%changed,\%newsettings,\%newsettingstext);
             }              }
             if ($userenv{'adhocroles.'.$env{'request.role.domain'}}) {  
                 $changeHash{'adhocroles.'.$env{'request.role.domain'}} = $userenv{'adhocroles.'.$env{'request.role.domain'}};  
             }  
             if (&adhocrole_changes(\%changeHash,\%userenv)) {  
                 $changed{'adhocroles'} = 1;  
                 $oldsettings{'adhocroles'} = $userenv{'adhocroles.'.$env{'request.role.domain'}};  
                 $newsettings{'adhocroles'} = $changeHash{'adhocroles.'.$env{'request.role.domain'}};  
             }  
         }          }
         foreach my $item (@userinfo) {          foreach my $item (@userinfo) {
             if ($env{'form.c'.$item} ne $userenv{$item}) {              if ($env{'form.c'.$item} ne $userenv{$item}) {
Line 3325  sub update_user_data { Line 3218  sub update_user_data {
           &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},            &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
                                             $key,'reload','requestauthor');                                              $key,'reload','requestauthor');
                                 }                                  }
                             } elsif ($key eq 'adhocroles') {  
                                 $newenvhash{'adhocroles.'.$env{'request.role.domain'}} =  
                                     $changeHash{'adhocroles.'.$env{'request.role.domain'}};  
                             } elsif ($key ne 'quota') {                              } elsif ($key ne 'quota') {
                                 $newenvhash{'environment.tools.'.$key} =                                   $newenvhash{'environment.tools.'.$key} = 
                                     $changeHash{'tools.'.$key};                                      $changeHash{'tools.'.$key};
Line 3520  sub display_userinfo { Line 3410  sub display_userinfo {
          'textbook'       => 'Can Request Textbook Courses',           'textbook'       => 'Can Request Textbook Courses',
          'placement'      => 'Can Request Placement Tests',           'placement'      => 'Can Request Placement Tests',
          'requestauthor'  => 'Can Request Author Role',           'requestauthor'  => 'Can Request Author Role',
          'adhocroles'     => 'Ad Hoc Roles Selectable via Helpdesk Role',  
          'inststatus'     => "Affiliation",           'inststatus'     => "Affiliation",
          'prvs'           => 'Previous Value:',           'prvs'           => 'Previous Value:',
          'chto'           => 'Changed To:'           'chto'           => 'Changed To:'
Line 3886  sub tool_changes { Line 3775  sub tool_changes {
     return;      return;
 }  }
   
 sub adhocrole_changes {  
     my ($changehashref,$userenv) = @_;  
     my @adds = &Apache::loncommon::get_env_multiple('form.adhocroleadd');  
     my @dels = &Apache::loncommon::get_env_multiple('form.adhocroledel');  
     my (@saved,@added,@alladhoc,$changed);  
     my $adhoc_key = 'adhocroles.'.$env{'request.role.domain'};  
     if (!$env{'form.makeuser'}) {  
         if (ref($userenv) eq 'HASH') {  
             my @current;  
             if ($userenv->{$adhoc_key}) {  
                 @current = split(/,/,$userenv->{$adhoc_key});  
                 if (@dels) {  
                     foreach my $curr (@current) {  
                         next if ($curr eq '');  
                         unless (grep(/\Q$curr\E$/,@dels)) {  
                             push(@saved,$curr);  
                         }  
                     }  
                     $changed = 1;  
                 } else {  
                     @saved = @current;  
                 }  
             }  
         }  
     }  
     if (@adds) {  
         my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});  
         my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'},  
                                            $confname,'rolesdef_');  
         foreach my $poss (@adds) {  
             if (exists($existing{'rolesdef_'.$poss})) {  
                 push(@added,$poss);  
                 $changed = 1;  
             }  
         }  
     }  
     if (@added) {  
         if (@saved) {  
             foreach my $add (@added) {  
                 unless (grep(/^\Q$add\E$/,@saved)) {  
                     push(@alladhoc,$add);  
                 }  
             }  
         } else {  
             push(@alladhoc,@added);  
         }  
     }  
     if (@saved) {  
         push(@alladhoc,@saved);  
     }  
     if (@alladhoc) {  
         my $adhocstr = join(',',sort(@alladhoc));  
         $changehashref->{$adhoc_key} = $adhocstr;  
     } elsif (@dels) {  
         &Apache::lonnet::del('environment',[$adhoc_key],$env{'form.ccdomain'},$env{'form.ccuname'});  
         delete($changehashref->{$adhoc_key});  
         if (($env{'form.ccdomain'} eq $env{'user.domain'}) &&  
             ($env{'form.ccuname'} eq $env{'user.name'})) {  
             &Apache::lonnet::delenv($adhoc_key);  
         }  
     }  
     return $changed;  
 }  
   
 sub update_roles {  sub update_roles {
     my ($r,$context,$showcredits) = @_;      my ($r,$context,$showcredits) = @_;
     my $now=time;      my $now=time;

Removed from v.1.426  
changed lines
  Added in v.1.427


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