Diff for /loncom/auth/lonroles.pm between versions 1.183 and 1.186

version 1.183, 2008/01/30 01:18:58 version 1.186, 2008/03/12 02:47:34
Line 110  sub handler { Line 110  sub handler {
             $env{'form.'.$env{'form.newrole'}}=1;              $env{'form.'.$env{'form.newrole'}}=1;
  }   }
  if ($env{'request.course.id'}) {   if ($env{'request.course.id'}) {
               # Check if user is CC trying to select a course role
               if ($env{'form.switchrole'}) {
                   if (!defined($env{'user.role.'.$env{'form.switchrole'}})) {
                       &adhoc_course_role($then);
                   }
               }
     my %temp=('logout_'.$env{'request.course.id'} => time);      my %temp=('logout_'.$env{'request.course.id'} => time);
     &Apache::lonnet::put('email_status',\%temp);      &Apache::lonnet::put('email_status',\%temp);
     &Apache::lonnet::delenv('user.state.'.$env{'request.course.id'});      &Apache::lonnet::delenv('user.state.'.$env{'request.course.id'});
  }   }
  &Apache::lonnet::appenv("request.course.id"   => '',   &Apache::lonnet::appenv({"request.course.id"   => '',
  "request.course.fn"   => '',   "request.course.fn"   => '',
  "request.course.uri"  => '',   "request.course.uri"  => '',
  "request.course.sec"  => '',   "request.course.sec"  => '',
  "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 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) {          if ($numdc > 0) {
             foreach my $envkey (keys %env) {              foreach my $envkey (keys %env) {
Line 269  ENDENTERKEY Line 274  ENDENTERKEY
  "Role ".$trolecode);   "Role ".$trolecode);
           
     &Apache::lonnet::appenv(      &Apache::lonnet::appenv(
    'request.role'        => $trolecode,     {'request.role'        => $trolecode,
    'request.role.domain' => $cdom,      'request.role.domain' => $cdom,
    'request.course.sec'  => $csec,      'request.course.sec'  => $csec,
                                            'request.course.groups' => $cgrps);                                              'request.course.groups' => $cgrps});
                     my $tadv=0;                      my $tadv=0;
   
     if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {      if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {
Line 283  ENDENTERKEY Line 288  ENDENTERKEY
     ($env{'form.orgurl'}!~/^\/adm\/flip/)) {      ($env{'form.orgurl'}!~/^\/adm\/flip/)) {
     my $dest=$env{'form.orgurl'};      my $dest=$env{'form.orgurl'};
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv('request.role.adv'=>$tadv);      &Apache::lonnet::appenv({'request.role.adv'=>$tadv});
                             if (($ferr) && ($tadv)) {                              if (($ferr) && ($tadv)) {
  &error_page($r,$ferr,$dest);   &error_page($r,$ferr,$dest);
     } else {      } else {
Line 293  ENDENTERKEY Line 298  ENDENTERKEY
  } else {   } else {
     if (!$env{'request.course.id'}) {      if (!$env{'request.course.id'}) {
  &Apache::lonnet::appenv(   &Apache::lonnet::appenv(
       "request.course.id"  => $cdom.'_'.$cnum);        {"request.course.id"  => $cdom.'_'.$cnum});
  $furl='/adm/roles?tryagain=1';   $furl='/adm/roles?tryagain=1';
  $msg=   $msg=
     '<h1><span class="LC_error">'.      '<h1><span class="LC_error">'.
Line 302  ENDENTERKEY Line 307  ENDENTERKEY
     '</span></h1><h3>'.&mt('Please try again.').'</h3>'.$ferr;      '</span></h1><h3>'.&mt('Please try again.').'</h3>'.$ferr;
     }      }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv('request.role.adv'=>$tadv);      &Apache::lonnet::appenv({'request.role.adv'=>$tadv});
   
     if (($ferr) && ($tadv)) {      if (($ferr) && ($tadv)) {
  &error_page($r,$ferr,$furl);   &error_page($r,$ferr,$furl);
Line 319  ENDENTERKEY Line 324  ENDENTERKEY
     $furl = "/adm/helper/course.initialization.helper";      $furl = "/adm/helper/course.initialization.helper";
     # Send the user to the course they selected      # Send the user to the course they selected
  } elsif ($env{'request.course.id'}) {   } elsif ($env{'request.course.id'}) {
                                       if ($env{'form.destinationurl'}) {
                                           my $dest = $env{'form.destinationurl'};
                                           &redirect_user($r,&mt('Entering [_1]',
                                                         $env{'course.'.$courseid.'.description'}),
                                                  $dest,$msg,
                                                  $env{'environment.remotenavmap'});
                                           return OK;
                                       }
     if (&Apache::lonnet::allowed('whn',      if (&Apache::lonnet::allowed('whn',
  $env{'request.course.id'})   $env{'request.course.id'})
  || &Apache::lonnet::allowed('whn',   || &Apache::lonnet::allowed('whn',
Line 389  ENDENTERKEY Line 402  ENDENTERKEY
     my $start_page=&Apache::loncommon::start_page('User Roles');      my $start_page=&Apache::loncommon::start_page('User Roles');
     my $standby=&mt('Role selected. Please stand by.');      my $standby=&mt('Role selected. Please stand by.');
     $standby=~s/\n/\\n/g;      $standby=~s/\n/\\n/g;
     my $noscript='<span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will ba unavailable.').'</span><br />';      my $noscript='<span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />';
   
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 $start_page  $start_page
Line 956  sub check_fordc { Line 969  sub check_fordc {
     return $numdc;      return $numdc;
 }  }
   
   sub adhoc_course_role {
       my ($then) = @_; 
       my ($cdom,$cnum);
       my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       if (&check_forcc($cdom,$cnum,$then)) {
           my $setprivs;
           if (!defined($env{'user.role.'.$env{'form.selectrole'}})) {
               $setprivs = 1;
           } else {
               my ($start,$end) = split(/\./,$env{'user.role.'.$env{'form.selectrole'}});
               if (($start && ($start>$then || $start == -1)) ||
                   ($end && $end<$then)) {
                   $setprivs = 1;
               }
           } 
           if ($setprivs) {
               if ($env{'form.switchrole'} =~ m-^(in|ta|ep|ad|st|cr)([\w/]*)\./\Q$cdom\E/\Q$cnum\E(/?\w*)$-) {
                   my $role = $1;
                   my $custom_role = $2;
                   my $usec = $3;
                   if ($role eq 'cr') {
                       if ($custom_role =~ m-^$match_domain/$match_courseid/\w+$-) {
                           $role .= $custom_role;
                       } else {
                           return;
                       }
                   }
                   my (%userroles,%newrole,%newgroups);
                   my $area = '/'.$cdom.'/'.$cnum;
                   my $spec = $role.'.'.$area;
                   if ($usec ne '') {
                       $spec .= '/'.$usec;
                       $area .= '/'.$usec;
                   }
                   &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,$area);
                   &Apache::lonnet::set_userprivs(\%userroles,\%newrole,%newgroups);
                   my $adhocstart = $then-1;
                   $userroles{'user.role.'.$spec} = $adhocstart.'.';
                   &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
               }
           }
       }
       return;
   }
   
   sub check_forcc {
       my ($cdom,$cnum,$then) = @_;
       my $is_cc;
       if ($cdom ne '' && $cnum ne '') {
           if (&Apache::lonnet::is_course($cdom,$cnum)) {
               my $envkey = 'user.role.cc./'.$cdom.'/'.$cnum;
               if (defined($env{$envkey})) {
                   $is_cc = 1;
                   my ($tstart,$tend)=split(/\./,$env{$envkey});
                   if ($tstart && $tstart>$then) { $is_cc = 0; }
                   if ($tend   && $tend  <$then) { $is_cc = 0; }
               }
           }
       }
       return $is_cc;
   }
   
 sub courselink {  sub courselink {
     my ($dcdom,$rowtype,$selecttype) = @_;      my ($dcdom,$rowtype,$selecttype) = @_;
     my $courseform=&Apache::loncommon::selectcourse_link      my $courseform=&Apache::loncommon::selectcourse_link
Line 970  sub courselink { Line 1046  sub courselink {
 }  }
   
 sub coursepick_jscript {  sub coursepick_jscript {
       my %lt = &Apache::lonlocal::texthash(
                     plsu => "Please use the 'Select Course' link to open a separate pick course window where you may select the course you wish to enter.",
                     youc => 'You can only use this screen to select courses in the current domain.',
                );
     my $verify_script = <<"END";      my $verify_script = <<"END";
 <script type="text/javascript">  <script type="text/javascript">
 function verifyCoursePick(caller) {  function verifyCoursePick(caller) {
Line 985  function verifyCoursePick(caller) { Line 1065  function verifyCoursePick(caller) {
             }              }
         }          }
         else {          else {
             alert("Please use the 'Select Course' link to open a separate pick course window where you may select the course you wish to enter.");              alert("$lt{'plsu'}");
         }          }
     }      }
     else {      else {
         alert("You can only use this screen to select courses in the current domain")          alert("$lt{'youc'}")
     }      }
 }  }
 function getIndex(caller) {  function getIndex(caller) {
Line 1078  sub set_privileges { Line 1158  sub set_privileges {
     my %ccrole = ();      my %ccrole = ();
     &Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area);      &Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area);
     my ($author,$adv)= &Apache::lonnet::set_userprivs(\%userroles,\%ccrole);      my ($author,$adv)= &Apache::lonnet::set_userprivs(\%userroles,\%ccrole);
     &Apache::lonnet::appenv(%userroles);      &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
   
     &Apache::lonnet::log($env{'user.domain'},      &Apache::lonnet::log($env{'user.domain'},
                          $env{'user.name'},                           $env{'user.name'},
                          $env{'user.home'},                           $env{'user.home'},
                         "Role ".$role);                          "Role ".$role);
     &Apache::lonnet::appenv(      &Apache::lonnet::appenv(
                           'request.role'        => $spec,                            {'request.role'        => $spec,
                           'request.role.domain' => $dcdom,                            'request.role.domain' => $dcdom,
                           'request.course.sec'  => '');                            'request.course.sec'  => ''});
     my $tadv=0;      my $tadv=0;
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv('request.role.adv'    => $tadv);      &Apache::lonnet::appenv({'request.role.adv'    => $tadv});
 }  }
   
 sub courseloadpage {  sub courseloadpage {

Removed from v.1.183  
changed lines
  Added in v.1.186


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