Diff for /loncom/auth/lonroles.pm between versions 1.269.2.26 and 1.269.2.27

version 1.269.2.26, 2016/08/13 21:17:38 version 1.269.2.27, 2016/10/23 18:30:32
Line 260  sub handler { Line 260  sub handler {
   
     my $envkey;      my $envkey;
     my %dcroles = ();      my %dcroles = ();
     my $numdc = &check_fordc(\%dcroles,$update,$then);      my %dhroles = ();
       my ($numdc,$numdh,$numadhoc) = &check_for_adhoc(\%dcroles,\%dhroles,$update,$then);
     my $loncaparev = $r->dir_config('lonVersion');      my $loncaparev = $r->dir_config('lonVersion');
   
 # ================================================================== Roles Init  # ================================================================== Roles Init
Line 269  sub handler { Line 270  sub handler {
         my $locknum=&Apache::lonnet::get_locks();          my $locknum=&Apache::lonnet::get_locks();
         if ($locknum) { return 409; }          if ($locknum) { return 409; }
   
           my $custom_adhoc;
         if ($env{'form.newrole'}) {          if ($env{'form.newrole'}) {
             $env{'form.'.$env{'form.newrole'}}=1;              $env{'form.'.$env{'form.newrole'}}=1;
   # Check if this is a Domain Helpdesk role trying to enter a course
               if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/\w+\./\1/$match_courseid$}) {
                   if ($dhroles{$1}) {
                       $custom_adhoc = 1;
                   }
               }
  }   }
  if ($env{'request.course.id'}) {   if ($env{'request.course.id'}) {
             # Check if user is CC trying to select a course role              # Check if user is CC trying to select a course role
Line 301  sub handler { Line 309  sub handler {
  "request.role"                => 'cm',   "request.role"                => 'cm',
                                  "request.role.adv"            => $env{'user.adv'},                                   "request.role.adv"            => $env{'user.adv'},
  "request.role.domain"         => $env{'user.domain'}});   "request.role.domain"         => $env{'user.domain'}});
   # Check if Domain Helpdesk role trying to enter a course needs privs to be created
           if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)$}) {
               my $cdom = $1;
               my $rolename = $2;
               my $cnum = $3;
               if ($custom_adhoc) {
                   my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'},
                                                                     'adhocroles.'.$cdom);
                   if (keys(%adhocroles)) {
                       my @adhoc = split(',',$adhocroles{'adhocroles.'.$cdom});
                       if (grep(/^\Q$rolename\E$/,@adhoc)) {
                           if (&Apache::lonnet::check_adhoc_privs($cdom,$cnum,$update,$refresh,$now,
                                                                  "cr/$cdom/$cdom".'-domainconfig/'.$rolename)) {
                               &Apache::lonnet::appenv({"environment.internal.$cdom.$cnum.cr/$cdom/$cdom".'-domainconfig/'."$rolename.adhoc" => time});
                           }
                       }
                   }
               }
           } elsif ($numdc > 0) {
 # Check if user is a DC trying to enter a course or author space and needs privs to be created  # Check if user is a DC trying to enter a course or author space and needs privs to be created
         if ($numdc > 0) {  
             foreach my $envkey (keys(%env)) {              foreach my $envkey (keys(%env)) {
 # Is this an ad-hoc Coordinator role?  # Is this an ad-hoc Coordinator role?
                 if (my ($ccrole,$domain,$coursenum) =                  if (my ($ccrole,$domain,$coursenum) =
Line 710  ENDENTERKEY Line 736  ENDENTERKEY
                                        $redirect_url);                                         $redirect_url);
                         return OK;                          return OK;
                     }                      }
                       if ($role eq 'dh') {
                           my $redirect_url = '/adm/menu/';
                           &redirect_user($r,&mt('Loading Domain Helpdesk Menu'),
                                          $redirect_url);
                           return OK;
                       }
                     if ($role eq 'sc') {                      if ($role eq 'sc') {
                         my $redirect_url = '/adm/grades?command=scantronupload';                          my $redirect_url = '/adm/grades?command=scantronupload';
                         &redirect_user($r,&mt('Loading Data Upload Page'),                          &redirect_user($r,&mt('Loading Data Upload Page'),
Line 957  ENDHEADER Line 989  ENDHEADER
     }      }
 # ----------------------------------------------------------------------- Table  # ----------------------------------------------------------------------- Table
   
     if ($numdc > 0) {      if (($numdc > 0) || (($numdh > 0) && ($numadhoc > 0))) {
         $r->print(&coursepick_jscript());          $r->print(&coursepick_jscript());
         $r->print(&Apache::loncommon::coursebrowser_javascript().          $r->print(&Apache::loncommon::coursebrowser_javascript().
                   &Apache::loncommon::authorbrowser_javascript());                    &Apache::loncommon::authorbrowser_javascript());
Line 990  ENDHEADER Line 1022  ENDHEADER
                                $roletext{'user.role.'.$role}->[1].                                 $roletext{'user.role.'.$role}->[1].
                                &Apache::loncommon::end_data_table_row();                                 &Apache::loncommon::end_data_table_row();
                 }                  }
                 if ($role =~ m{dc\./($match_domain)/}                   if ($role =~ m{^dc\./($match_domain)/$} 
     && $dcroles{$1}) {      && $dcroles{$1}) {
     $output .= &adhoc_roles_row($1,'recent');      $output .= &adhoc_roles_row($1,'recent');
                   } elsif ($role =~ m{^dh\./($match_domain)/$}
                            && ($env{'environment.adhocroles.'.$1} ne '')) {
                       $output .= &adhoc_customroles_row($1,'recent');
                 }                  }
     } elsif ($numdc > 0) {      } elsif ($numdc > 0) {
                 unless ($role =~/^error\:/) {                  unless ($role =~/^error\:/) {
Line 1383  sub print_rolerows { Line 1418  sub print_rolerows {
                                            &Apache::loncommon::end_data_table_row();                                             &Apache::loncommon::end_data_table_row();
                             }                              }
                         }                          }
                         if ($sortrole->{$which} =~ m-dc\./($match_domain)/-) {                          if ($sortrole->{$which} =~ m{^user\.role\.dc\./($match_domain)/}) {
                             if (ref($dcroles) eq 'HASH') {                              if (ref($dcroles) eq 'HASH') {
                                 if ($dcroles->{$1}) {                                  if ($dcroles->{$1}) {
                                     $output .= &adhoc_roles_row($1,'');                                      $output .= &adhoc_roles_row($1,'');
                                 }                                  }
                             }                              }
                           } elsif (($sortrole->{$which} =~ m{^user\.role\.dh\./($match_domain)/}) &&
                                    ($env{'environment.adhocroles.'.$1} ne '')) {
                               $output .= &adhoc_customroles_row($1,'');
                         }                          }
                     }                      }
                 }                  }
Line 1645  sub check_author_homeserver { Line 1683  sub check_author_homeserver {
     }      }
 }  }
   
 sub check_fordc {  sub check_for_adhoc {
     my ($dcroles,$update,$then) = @_;      my ($dcroles,$dhroles,$update,$then) = @_;
     my $numdc = 0;      my $numdc = 0;
       my $numdh = 0;
       my $numadhoc = 0;
       my $num_custom_adhoc = 0;
     if ($env{'user.adv'}) {      if ($env{'user.adv'}) {
         foreach my $envkey (sort(keys(%env))) {          foreach my $envkey (sort(keys(%env))) {
             if ($envkey=~/^user\.role\.dc\.\/($match_domain)\/$/) {              if ($envkey=~/^user\.role\.(dc|dh)\.\/($match_domain)\/$/) {
                 my $dcdom = $1;                  my $role = $1;
                 my $livedc = 1;                  my $roledom = $2;
                   my $liverole = 1;
                 my ($tstart,$tend)=split(/\./,$env{$envkey});                  my ($tstart,$tend)=split(/\./,$env{$envkey});
                 my $limit = $update;                  my $limit = $update;
                 if ($env{'request.role'} eq 'dc./'.$dcdom.'/') {                  if ((($role eq 'dc') && ($env{'request.role'} eq 'dc./'.$roledom.'/')) ||
                       (($role eq 'dh') && ($env{'request.role'} eq 'dh./'.$roledom.'/'))) {
                     $limit = $then;                      $limit = $then;
                 }                  }
                 if ($tstart && $tstart>$limit) { $livedc = 0; }                  if ($tstart && $tstart>$limit) { $liverole = 0; }
                 if ($tend   && $tend  <$limit) { $livedc = 0; }                  if ($tend   && $tend  <$limit) { $liverole = 0; }
                 if ($livedc) {                  if ($liverole) {
                     $$dcroles{$dcdom} = $envkey;                      if ($role eq 'dc') {
                     $numdc++;                          $dcroles->{$roledom} = $envkey;
                           $numdc++;
                       } else {
                           $dhroles->{$roledom} = $envkey;
                           if ($env{'environment.adhocroles.'.$roledom} ne '') {
                               $numadhoc ++;
                           }
                           $numdh++;
                       }
                 }                  }
             }              }
         }          }
     }      }
     return $numdc;      return ($numdc,$numdh,$numadhoc);
 }  }
   
 sub adhoc_course_role {  sub adhoc_course_role {
Line 1759  sub check_forcc { Line 1810  sub check_forcc {
 }  }
   
 sub courselink {  sub courselink {
     my ($dcdom,$rowtype) = @_;      my ($roledom,$rowtype,$role) = @_;
     my $courseform=&Apache::loncommon::selectcourse_link      my $courseform=&Apache::loncommon::selectcourse_link
                    ('rolechoice','dccourse'.$rowtype.'_'.$dcdom,                     ('rolechoice','course'.$rowtype.'_'.$roledom.'_'.$role,
                     'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'.                      'domain'.$rowtype.'_'.$roledom.'_'.$role,
                     $dcdom,$dcdom,undef,'Course/Community');                      'coursedesc'.$rowtype.'_'.$roledom.'_'.$role,
     my $hiddenitems = '<input type="hidden" name="dcdomain'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.                      $roledom.':'.$role,undef,'Course/Community');
                       '<input type="hidden" name="origdom'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.      my $hiddenitems = '<input type="hidden" name="domain'.$rowtype.'_'.$roledom.'_'.$role.'" value="'.$roledom.'" />'.
                       '<input type="hidden" name="dccourse'.$rowtype.'_'.$dcdom.'" value="" />'.                        '<input type="hidden" name="origdom'.$rowtype.'_'.$roledom.'_'.$role.'" value="'.$roledom.'" />'.
                       '<input type="hidden" name="coursedesc'.$rowtype.'_'.$dcdom.'" value="" />';                        '<input type="hidden" name="course'.$rowtype.'_'.$roledom.'_'.$role.'" value="" />'.
                         '<input type="hidden" name="coursedesc'.$rowtype.'_'.$roledom.'_'.$role.'" value="" />';
     return $courseform.$hiddenitems;      return $courseform.$hiddenitems;
 }  }
   
Line 1862  sub adhoc_roles_row { Line 1914  sub adhoc_roles_row {
                  .&mt('[_1]Ad hoc[_2] roles in domain [_3] --'                   .&mt('[_1]Ad hoc[_2] roles in domain [_3] --'
                      ,'<span class="LC_cusr_emph">','</span>',$dcdom)                       ,'<span class="LC_cusr_emph">','</span>',$dcdom)
                  .' ';                   .' ';
     my $selectcclink = &courselink($dcdom,$rowtype);      my $role = 'cc';
       my $selectcclink = &courselink($dcdom,$rowtype,$role);
     my $ccrole = &Apache::lonnet::plaintext('co',undef,undef,1);      my $ccrole = &Apache::lonnet::plaintext('co',undef,undef,1);
     my $carole = &Apache::lonnet::plaintext('ca');      my $carole = &Apache::lonnet::plaintext('ca');
     my $selectcalink = &coauthorlink($dcdom,$rowtype);      my $selectcalink = &coauthorlink($dcdom,$rowtype);
Line 1872  sub adhoc_roles_row { Line 1925  sub adhoc_roles_row {
     return $output;      return $output;
 }  }
   
   sub adhoc_customroles_row {
       my ($dhdom,$rowtype) = @_;
       my $output = &Apache::loncommon::continue_data_table_row()
                    .' <td colspan="5" class="LC_textsize_mobile">'
                    .&mt('[_1]Ad hoc[_2] course/community roles in domain [_3] --',
                         '<span class="LC_cusr_emph">','</span>',$dhdom);
       my @customroles = split(/,/,$env{'environment.adhocroles.'.$dhdom});
       my $count = 0;
       foreach my $role (@customroles) {
           next if (($role eq '') || ($role =~ /\W/));
           $output .= ' '.$role.': '.&courselink($dhdom,$rowtype,$role).' |';
           $count ++;
       }
       if ($count) {
           return $output;
       }
       return;
   }
   
 sub recent_filename {  sub recent_filename {
     my $area=shift;      my $area=shift;
     return 'nohist_recent_'.&escape($area);      return 'nohist_recent_'.&escape($area);

Removed from v.1.269.2.26  
changed lines
  Added in v.1.269.2.27


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