Diff for /loncom/interface/lonmenu.pm between versions 1.238 and 1.239

version 1.238, 2008/06/13 01:07:50 version 1.239, 2008/07/05 23:21:23
Line 1427  sub hidden_button_check { Line 1427  sub hidden_button_check {
 sub roles_selector {  sub roles_selector {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my $now = time;      my $now = time;
     my %courseroles;      my (%courseroles,%seccount,%gotnosection);
     my $is_cc;      my $is_cc;
     my $role_selector;      my $role_selector;
     if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) {      if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) {
Line 1444  sub roles_selector { Line 1444  sub roles_selector {
     if ($is_cc) {      if ($is_cc) {
         my %adv_roles =          my %adv_roles =
              &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);               &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
         foreach my $role (keys(%adv_roles),'st') {          foreach my $role (keys(%adv_roles)) {
             my ($urole,$usec) = split(/:/,$role);              my ($urole,$usec) = split(/:/,$role);
             @{$courseroles{$urole}} = 'none';              if (!$gotnosection{$urole}) {
                   $seccount{$urole} ++;
                   $gotnosection{$urole} = 1;
               }
               if (ref($courseroles{$urole}) eq 'ARRAY') {
                   if ($usec ne '') {
                       if (!grep(/^Q$usec\E$/,@{$courseroles{$urole}})) {
                           push(@{$courseroles{$urole}},$usec);
                           $seccount{$urole} ++;
                       }
                   }
               } else {
                   @{$courseroles{$urole}} = ();
                   if ($usec ne '') {
                       $seccount{$urole} ++;
                       push(@{$courseroles{$urole}},$usec);
                   }
               }
           }
           my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
           @{$courseroles{'st'}} = ();
           if (keys(%sections_count) > 0) {
               push(@{$courseroles{'st'}},keys(%sections_count));
         }          }
     } else {      } else {
         foreach my $item (keys(%env)) {          foreach my $item (keys(%env)) {
             if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E(/?\w*)$-) {              if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) {
                 my $role = $1;                  my $role = $1;
                 my $sec = $2;                  my $sec = $2;
                 next if ($role eq 'gr');                  next if ($role eq 'gr');
                 my ($start,$end) = split(/\./,$env{$item});                  my ($start,$end) = split(/\./,$env{$item});
                 next if (($start && $start > $now) || ($end && $end < $now));                  next if (($start && $start > $now) || ($end && $end < $now));
                 if ($sec eq '') {                  if ($sec eq '') {
                     $sec = 'none';                      if (!$gotnosection{$role}) {
                           $seccount{$role} ++;
                           $gotnosection{$role} = 1;
                       }
                 }                  }
                 if (ref($courseroles{$role}) eq 'ARRAY') {                  if (ref($courseroles{$role}) eq 'ARRAY') {
                     if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) {                      if ($sec ne '') {
                         push(@{$courseroles{$role}},$sec);                          if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) {
                               push(@{$courseroles{$role}},$sec);
                               $seccount{$role} ++;
                           }
                     }                      }
                 } else {                  } else {
                     @{$courseroles{$role}} = ($sec);                      @{$courseroles{$role}} = ();
                       if ($sec ne '') {
                           $seccount{$role} ++;
                           push(@{$courseroles{$role}},$sec);
                       }
                 }                  }
             }              }
         }          }
     }      }
     my @roles_order = ('cc','in','ta','ep','ad','st');      my @roles_order = ('cc','in','ta','ep','ad','st');
     if (keys(%courseroles) > 1) {      if (keys(%courseroles) > 1) {
         $role_selector = &jump_to_role($cdom,$cnum);          $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles);
         $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">          $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">
                           <select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">';                            <select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">';
         $role_selector .= '<option value="">'.&mt('Switch course role to...').'</option>';          $role_selector .= '<option value="">'.&mt('Switch course role to...').'</option>';
Line 1497  sub roles_selector { Line 1529  sub roles_selector {
 }  }
   
 sub jump_to_role {  sub jump_to_role {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum,$seccount,$courseroles) = @_;
       my %lt = &Apache::lonlocal::texthash(
                   this => 'This role has section(s) associated with it.',
                   ente => 'Enter a specific section.',
                   orlb => 'Enter a specific section, or leave blank for no section.',
                   avai => 'Available sections are:',
                   youe => 'You entered an invalid section choice:',
                   plst => 'Please try again',
       );
       my $js;
       if (ref($courseroles) eq 'HASH') {
           $js = '    var secpick = new Array("'.$lt{'ente'}.'","'.$lt{'orlb'}.'");'."\n". 
                 '    var numsec = new Array();'."\n".
                 '    var rolesections = new Array();'."\n".
                 '    var rolenames = new Array();'."\n".
                 '    var roleseclist = new Array();'."\n";
           my @items = keys(%{$courseroles});
           for (my $i=0; $i<@items; $i++) {
               $js .= '    rolenames['.$i.'] = "'.$items[$i].'";'."\n";
               my ($secs,$secstr);
               if (ref($courseroles->{$items[$i]}) eq 'ARRAY') {
                   my @sections = sort { $a <=> $b } @{$courseroles->{$items[$i]}};
                   $secs = join('","',@sections);
                   $secstr = join(', ',@sections);
               }
               $js .= '    rolesections['.$i.'] = new Array("'.$secs.'");'."\n".
                      '    roleseclist['.$i.'] = "'.$secstr.'";'."\n".
                      '    numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n";
           }
       }
     my $output = <<"END";      my $output = <<"END";
 <script type="text/javascript">  <script type="text/javascript">
 function adhocRole(roleitem) {  function adhocRole(roleitem) {
       $js
     var newrole =  document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value;      var newrole =  document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value;
     if (newrole == '') {      if (newrole == '') {
         return;           return; 
     }       } 
     newrole += './$cdom/$cnum';      var fullrole = newrole+'./$cdom/$cnum';
     if (newrole == "$env{'request.role'}") {      var selidx = '';
       for (var i=0; i<rolenames.length; i++) {
           if (rolenames[i] == newrole) {
               selidx = i;
           }
       }
       var secok = 1;
       var secchoice = '';
       if (selidx >= 0) {
           if (numsec[selidx] > 1) {
               secok = 0;
               var numrolesec = rolesections[selidx].length;
               var msgidx = numsec[selidx] - numrolesec;
               secchoice = prompt("$lt{'this'}\\n"+secpick[msgidx]+"\\n$lt{'avai'} "+roleseclist[selidx],"");
               if (secchoice == '') {
                   if (msgidx > 0) {
                       secok = 1;
                   }
               } else {
                   for (var j=0; j<rolesections[selidx].length; j++) {
                       if (rolesections[selidx][j] == secchoice) {
                           secok = 1;
                       }
                   }
               }
           } else {
               if (rolesections[selidx].length == 1) {
                   secchoice = rolesections[selidx][0];
               }
           }
       }
       if (secok == 1) {
           if (secchoice != '') {
               fullrole += '/'+secchoice;
           }
       } else {
           document.rolechooser.elements[roleitem].selectedIndex = 0;
           if (secchoice != null) {
               alert("$lt{'youe'} \\""+secchoice+"\\".\\n $lt{'plst'}");
           }
           return;
       }
       if (fullrole == "$env{'request.role'}") {
         return;          return;
     }      }
     itemid = retrieveIndex('gotorole');      itemid = retrieveIndex('gotorole');
     if (itemid != -1) {      if (itemid != -1) {
         document.rolechooser.elements[itemid].name = newrole;          document.rolechooser.elements[itemid].name = fullrole;
     }      }
     document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value = newrole;      document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value = fullrole;
     document.rolechooser.selectrole.value = '1';      document.rolechooser.selectrole.value = '1';
     document.rolechooser.submit();      document.rolechooser.submit();
     return;      return;

Removed from v.1.238  
changed lines
  Added in v.1.239


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