Diff for /loncom/interface/lonmenu.pm between versions 1.244.2.15 and 1.247

version 1.244.2.15, 2010/05/23 19:16:02 version 1.247, 2008/12/04 13:41:37
Line 120  The javascript is usually similar to "go Line 120  The javascript is usually similar to "go
   
 =item get_nav_status()  =item get_nav_status()
   
   =item convert_menu_function()
   
   FIXME this needs to move into mydesktab and the other locations 
   the text is generated
   
 =item hidden_button_check()  =item hidden_button_check()
   
 =item roles_selector()  =item roles_selector()
Line 139  use Apache::loncommon(); Line 144  use Apache::loncommon();
 use Apache::lonenc();  use Apache::lonenc();
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();  
   
 use vars qw(@desklines %category_names %category_members %category_positions $readdesk);  use vars qw(@desklines %category_names %category_members %category_positions $readdesk);
   
Line 163  sub show_course { Line 167  sub show_course {
 }  }
   
 sub initlittle {  sub initlittle {
     my %lt=&Apache::lonlocal::texthash('ret' => 'Return to Last Location',      return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
        'nav' => 'Course Contents',         'nav' => 'Navigate Contents',
        'main' => 'Main Menu',         'main' => 'Main Menu',
                                        'roles' => (&Apache::loncommon::show_course()?                                         'roles' => (&show_course()?
                                                     'Courses':'Roles'),                                                      'Courses':'Roles'),
                                        'other' => 'Other Roles',                                         'other' => 'Other Roles',
                                        'docs' => 'Edit Course',                                         'docs' => 'Edit Course',
                                        'exit' => 'Logout',                                         'exit' => 'Exit',
                                        'login' => 'Log In',                                         'login' => 'Log In',
        'launch' => 'Launch Remote Control',         'launch' => 'Launch Remote Control',
                                        'groups' => 'Groups',                                         'groups' => 'Groups',
                                        'gdoc' => 'Community Documents',                                         'gdoc' => 'Group Documents',
                                        );                                         );
     if (&Apache::loncommon::course_type() eq 'Community') {  
         $lt{'nav'} = &mt('Community Contents');  
         $lt{'docs'} = &mt('Edit Community');  
     }  
     return %lt;  
 }  }
   
 sub menubuttons {  sub menubuttons {
Line 208  sub menubuttons { Line 207  sub menubuttons {
   
     my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");      my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");
     $logo = '<td class="LC_top_nav_logo"><a href="/adm/about.html"><img src="'.      $logo = '<td class="LC_top_nav_logo"><a href="/adm/about.html"><img src="'.
  $logo.'" alt="LON-CAPA Logo" /></a></td>';   $logo.'" alt="LON-CAPA Logo" class="noBorder" /></a></td>';
   
     if ($env{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
         if (($env{'request.noversionuri'} eq '') || (!defined($env{'request.noversionuri'}))) {          if (($env{'request.noversionuri'} eq '') || (!defined($env{'request.noversionuri'}))) {
Line 247  ENDNAV Line 246  ENDNAV
 <a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a>  <a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a>
 ENDRELOAD  ENDRELOAD
             }              }
             my $is_community =      if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 (&Apache::loncommon::course_type() eq 'Community');                 $docs=(<<ENDDOCS);
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  <a href="/adm/coursedocs" target="_top">$lt{'docs'}</a>
                 my $text = ($is_community) ? $lt{'gdoc'} : $lt{'docs'};  
                 $docs=(<<ENDDOCS);  
 <a href="/adm/coursedocs" target="_top">$text</a>  
 ENDDOCS  ENDDOCS
             }              }
             if ($showgroups) {              if ($showgroups) {
Line 303  ENDMAINMENU Line 299  ENDMAINMENU
      </td>       </td>
     </tr>      </tr>
   </table>    </table>
 </font>  
 ENDINLINEMENU  ENDINLINEMENU
         }          }
         $roles = '<td><a href="/adm/roles" target="_top">'.$lt{'roles'}.'</a></td>';          $roles = '<td><a href="/adm/roles" target="_top">'.$lt{'roles'}.'</a></td>';
Line 317  ENDINLINEMENU Line 312  ENDINLINEMENU
     $navmaps=(<<ENDNAV);      $navmaps=(<<ENDNAV);
 <td><a href="$link" target="_top">$lt{'nav'}</a></td>  <td><a href="$link" target="_top">$lt{'nav'}</a></td>
 ENDNAV  ENDNAV
             my $is_community =              my $is_group = (&Apache::loncommon::course_type() eq 'Group');
                 (&Apache::loncommon::course_type() eq 'Community');  
     if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {      if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 my $text = ($is_community) ? $lt{'gdoc'} : $lt{'docs'};                  my $text = ($is_group) ? $lt{'gdoc'} : $lt{'docs'};
  $docs=(<<ENDDOCS);   $docs=(<<ENDDOCS);
 <td><a href="/adm/coursedocs" target="_top">$text</a></td>  <td><a href="/adm/coursedocs" target="_top">$text</a></td>
 ENDDOCS  ENDDOCS
Line 356  ENDCRELOAD Line 350  ENDCRELOAD
         my $helplink=&Apache::loncommon::top_nav_help('Help');          my $helplink=&Apache::loncommon::top_nav_help('Help');
  return (<<ENDINLINEMENU);   return (<<ENDINLINEMENU);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   // <![CDATA[
 $utility  $utility
 // ]]>  // ]]>
 </script>  </script>
Line 370  $navmaps Line 364  $navmaps
 $docs  $docs
 $groups  $groups
 $roles  $roles
 <td class="LC_top_nav_help">$helplink</td>  <td style="width: 2.0em;">$helplink</td>
 <td class="LC_top_nav_exit"><a href="/adm/logout" target="_top">$lt{'exit'}</a></td>  <td style="width: 2.0em;"><a href="/adm/logout" target="_top">$lt{'exit'}</a></td>
 </tr>  </tr>
 </table>  </table>
 $form  $form
Line 414  sub registerurl { Line 408  sub registerurl {
    &unescape($env{'request.noversionuri'})))) &&     &unescape($env{'request.noversionuri'})))) &&
         (!$forcereg))) {          (!$forcereg))) {
   return $result.    return $result.
                '<script type="text/javascript">'."\n".            '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>'.$force_title;
                'function LONCAPAreg(){;} function LONCAPAstale(){}'."\n".  
                '</script>'.$force_title;  
     }      }
 # Graphical display after login only  # Graphical display after login only
     if ($env{'request.registered'} && !$forcereg) { return ''; }      if ($env{'request.registered'} && !$forcereg) { return ''; }
Line 500  sub innerregister { Line 492  sub innerregister {
         if ($env{'request.symb'} ne '' &&          if ($env{'request.symb'} ne '' &&
     $env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {      $env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
     if (&Apache::lonnet::allowed('mgr',$crs)) {      if (&Apache::lonnet::allowed('mgr',$crs)) {
  $hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_4]',   $hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_3]',
                        "gocmd('/adm/grades','gradingmenu')",                         "gocmd('/adm/grades','gradingmenu')",
                        'Modify user grades for this assessment resource');                         'Modify user grades for this assessment resource');
             } elsif (&Apache::lonnet::allowed('vgr',$crs)) {              } elsif (&Apache::lonnet::allowed('vgr',$crs)) {
Line 521  sub innerregister { Line 513  sub innerregister {
         ### resource          ### resource
         ###          ###
         my $editbutton = '';          my $editbutton = '';
         my $noeditbutton = 1;  
         my ($cnum,$cdom);  
         if ($env{'request.course.id'}) {  
             $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
             $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
         }  
         if ($env{'user.author'}) {          if ($env{'user.author'}) {
             if ($env{'request.role'}=~/^(aa|ca|au)/) {              if ($env{'request.role'}=~/^(aa|ca|au)/) {
                 # Set defaults for authors                  # Set defaults for authors
Line 554  sub innerregister { Line 540  sub innerregister {
  foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }   foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
  if (!$allowed) {   if (!$allowed) {
     $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);      $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);
                     $noeditbutton = 0;  
                 }                  }
             }              }
             ##              ##
Line 563  sub innerregister { Line 548  sub innerregister {
             my $cfile='';              my $cfile='';
             my $cfuname='';              my $cfuname='';
             my $cfudom='';              my $cfudom='';
             my $uploaded;  
             if ($env{'request.filename'}) {              if ($env{'request.filename'}) {
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  my $file=&Apache::lonnet::declutter($env{'request.filename'});
                 $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/;                  $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/;
Line 581  sub innerregister { Line 565  sub innerregister {
             }                      }        
             # Finally, turn the button on or off              # Finally, turn the button on or off
             if ($cfile && !$const_space) {              if ($cfile && !$const_space) {
                 my $nocrsedit;                  $editbutton=&switch
                 # Suppress display where CC has switched to student role.                      ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',
                 if ($env{'request.course.id'}) {  
                     unless(&Apache::lonnet::allowed('mdc',  
                                                     $env{'request.course.id'})) {  
                         $nocrsedit = 1;  
                     }  
                 }  
                 if ($nocrsedit) {  
                     $editbutton=&clear(6,1);  
                 } else {  
                     $editbutton=&switch  
                        ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',  
                      "go('".$cfile."');","Edit this resource");                       "go('".$cfile."');","Edit this resource");
                     $noeditbutton = 0;  
                 }  
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);                  $editbutton=&clear(6,1);
             }              }
         }          }
         if (($noeditbutton) && ($env{'request.filename'})) {  
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});  
                 if (defined($cnum) && defined($cdom)) {  
                     if (&is_course_upload($file,$cnum,$cdom)) {  
                         my $cfile = &edit_course_upload($file,$cnum,$cdom);  
                         if ($cfile) {  
                             $editbutton=&switch  
                                         ('','',6,1,'pcstr.gif','edit[_1]',  
                                          'resource[_2]',"go('".$cfile."');",  
                                          'Edit this resource');  
                         }  
                     }  
                 }  
             }  
         }  
         ###          ###
         ###          ###
 # Prepare the rest of the buttons  # Prepare the rest of the buttons
Line 634  sub innerregister { Line 589  sub innerregister {
                 $menuitems=(<<ENDMENUITEMS);                  $menuitems=(<<ENDMENUITEMS);
 s&6&1&list.gif&list[_1]&dir[_1]&golist('$esc_currdir')&List current directory  s&6&1&list.gif&list[_1]&dir[_1]&golist('$esc_currdir')&List current directory
 s&6&2&rtrv.gif&retrieve[_1]&version[_1]&gocstr('/adm/retrieve','/~$uname/$cleandisfn')&Retrieve old version  s&6&2&rtrv.gif&retrieve[_1]&version[_1]&gocstr('/adm/retrieve','/~$uname/$cleandisfn')&Retrieve old version
 s&6&3&pub.gif&publish[_1]&resource[_3]&gocstr('/adm/publish','/~$uname/$cleandisfn')&Publish this resource  s&6&3&pub.gif&publish[_1]&resource[_1]&gocstr('/adm/publish','/~$uname/$cleandisfn')&Publish this resource
 s&7&1&del.gif&delete[_1]&resource[_2]&gocstr('/adm/cfile?action=delete','/~$uname/$cleandisfn')&Delete this resource  s&7&1&del.gif&delete[_1]&resource[_2]&gocstr('/adm/cfile?action=delete','/~$uname/$cleandisfn')&Delete this resource
 s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document  s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
Line 664  if(length($annotation) > 0){ Line 619  if(length($annotation) > 0){
 $menuitems.="&anno-[_1]&tations[_1]&annotate()&";  $menuitems.="&anno-[_1]&tations[_1]&annotate()&";
 $menuitems.="Make notes and annotations about this resource&&1\n";  $menuitems.="Make notes and annotations about this resource&&1\n";
   
             unless ($noremote) {  
                 my $showreqcrs = &check_for_rcrs();  
                 if ($showreqcrs) {  
                     $menuitems.="s&8&1&rcrs.gif&request[_1]&course[_16]".  
                                 "&go('/adm/requestcourse')&Course requests\n";  
                 }  
             }  
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
                 if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) {   if (!$env{'request.enc'}) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.gif&catalog[_2]&info[_1]&catalog_info()&Show Metadata  s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show catalog information
 ENDREALRES  ENDREALRES
                 }                  }
         $menuitems.=(<<ENDREALRES);          $menuitems.=(<<ENDREALRES);
Line 776  ENDREGTEXT Line 724  ENDREGTEXT
     $result = (<<ENDREGTHIS);      $result = (<<ENDREGTHIS);
             
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
 var swmenu=null;  var swmenu=null;
   
Line 812  var swmenu=null; Line 759  var swmenu=null;
       }        }
   
 // END LON-CAPA Internal   // END LON-CAPA Internal 
 // ]]>  
 </script>  </script>
 ENDREGTHIS  ENDREGTHIS
         }          }
Line 828  ENDDONOTREGTEXT Line 774  ENDDONOTREGTEXT
            $result = (<<ENDDONOTREGTHIS);             $result = (<<ENDDONOTREGTHIS);
   
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
 var swmenu=null;  var swmenu=null;
   
Line 853  var swmenu=null; Line 798  var swmenu=null;
     }      }
   
 // END LON-CAPA Internal  // END LON-CAPA Internal
 // ]]>  
 </script>  </script>
 ENDDONOTREGTHIS  ENDDONOTREGTHIS
        }         }
Line 862  ENDDONOTREGTHIS Line 806  ENDDONOTREGTHIS
     return $result;      return $result;
 }  }
   
 sub is_course_upload {  
     my ($file,$cnum,$cdom) = @_;  
     my $uploadpath = &LONCAPA::propath($cdom,$cnum);  
     $uploadpath =~ s{^\/}{};  
     if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) ||  
         ($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) {  
         return 1;  
     }  
     return;  
 }  
   
 sub edit_course_upload {  
     my ($file,$cnum,$cdom) = @_;  
     my $cfile;  
     if ($file =~/\.(htm|html|css|js|txt)$/) {  
         my $ext = $1;  
         my $url = &Apache::lonnet::hreflocation('',$file);  
         my $home = &Apache::lonnet::homeserver($cnum,$cdom);  
         my @ids=&Apache::lonnet::current_machine_ids();  
         my $dest;  
         if ($home && grep(/^\Q$home\E$/,@ids)) {  
             $dest = $url.'?forceedit=1';  
         } else {  
             unless (&Apache::lonnet::get_locks()) {  
                 $dest = '/adm/switchserver?otherserver='.  
                         $home.'&role='.$env{'request.role'}.  
                         '&url='.$url.'&forceedit=1';  
             }  
         }  
         if ($dest) {  
             $cfile = &HTML::Entities::encode($dest,'"<>&');  
         }  
     }  
     return $cfile;  
 }  
   
 sub loadevents() {  sub loadevents() {
     if ($env{'request.state'} eq 'construct' ||      if ($env{'request.state'} eq 'construct' ||
  $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }   $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }
Line 925  sub startupremote { Line 833  sub startupremote {
     my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited');      my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited');
     return(<<ENDREMOTESTARTUP);      return(<<ENDREMOTESTARTUP);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 var timestart;  var timestart;
 function wheelswitch() {  function wheelswitch() {
     if (typeof(document.wheel) != 'undefined') {      if (typeof(document.wheel) != 'undefined') {
Line 975  function main() { Line 882  function main() {
    timestart=date.getTime();     timestart=date.getTime();
    wait();     wait();
 }  }
 // ]]>  
 </script>  </script>
 ENDREMOTESTARTUP  ENDREMOTESTARTUP
 }  }
Line 983  ENDREMOTESTARTUP Line 890  ENDREMOTESTARTUP
 sub setflags() {  sub setflags() {
     return(<<ENDSETFLAGS);      return(<<ENDSETFLAGS);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
     menuloaded=0;      menuloaded=0;
     tim=0;      tim=0;
 // ]]>  
 </script>  </script>
 ENDSETFLAGS  ENDSETFLAGS
 }  }
Line 996  sub maincall() { Line 901  sub maincall() {
         ($env{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
     return(<<ENDMAINCALL);      return(<<ENDMAINCALL);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
     main();      main();
 // ]]>  
 </script>  </script>
 ENDMAINCALL  ENDMAINCALL
 }  }
Line 1010  sub load_remote_msg { Line 913  sub load_remote_msg {
         ($env{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
   
     my $esclowerurl=&escape($lowerurl);      my $esclowerurl=&escape($lowerurl);
     my $link=&mt('[_1]Continue[_2] on in Inline Menu mode',      my $link=&mt('<a href="[_1]">Continue</a> on in Inline Menu mode',
  '<a href="/adm/remote?action=collapse&amp;url='.$esclowerurl.'">',   "/adm/remote?action=collapse&amp;url=$esclowerurl");
                  '</a>');  
     return(<<ENDREMOTEFORM);      return(<<ENDREMOTEFORM);
 <p>  <p>
 <form name="wheel">  <form name="wheel">
Line 1043  sub open { Line 945  sub open {
     my $returnval='';      my $returnval='';
     if (($env{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($env{'environment.remote'} eq 'off')) {           ($env{'environment.remote'} eq 'off')) { 
  return    return '<script type="text/javascript">self.name="loncapaclient";</script>';
          '<script type="text/javascript">'."\n".  
          '// <![CDATA['."\n".  
          'self.name="loncapaclient";'."\n".  
          '// ]]>'."\n".  
          '</script>';  
     }      }
     my $menuname = &get_menu_name();      my $menuname = &get_menu_name();
           
Line 1061  sub open { Line 958  sub open {
 #}  #}
 #ENDRESIZE  #ENDRESIZE
 #    }  #    }
     $returnval=(<<ENDOPEN);      $returnval.=(<<ENDOPEN);
 // <![CDATA[  
 window.status='Opening LON-CAPA Remote Control';  window.status='Opening LON-CAPA Remote Control';
 var menu=window.open("/res/adm/pages/menu.html","$menuname",  var menu=window.open("/res/adm/pages/menu.html","$menuname",
 "height=375,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");  "height=375,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");
 self.name='loncapaclient';  self.name='loncapaclient';
 // ]]>  
 ENDOPEN  ENDOPEN
     return '<script type="text/javascript">'.$returnval.'</script>';      return '<script type="text/javascript">'.$returnval.'</script>';
 }  }
Line 1132  sub switch { Line 1027  sub switch {
        my $pic=         my $pic=
    '<img alt="'.$text.'" src="'.     '<img alt="'.$text.'" src="'.
    &Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$img).     &Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$img).
    '" align="'.($nobreak==3?'right':'left').'" />';     '" align="'.($nobreak==3?'right':'left').'" class="noBorder" />';
        if ($env{'browser.interface'} eq 'faketextual') {         if ($env{'browser.interface'} eq 'faketextual') {
 # Accessibility  # Accessibility
    if ($nobreak==3) {     if ($nobreak==3) {
        $inlineremote[$idx]="\n".         $inlineremote[$idx]="\n".
    '<td class="LC_menubuttons_text" align="right">'.$text.     '<td class="LC_menubuttons_text" align="right">'.$text.
    '</td><td class="LC_menubuttons_img" align="left">'.     '</td><td align="left">'.
    '<a href="javascript:'.$act.';">'.$pic.'</a></td></tr>';     '<a href="javascript:'.$act.';">'.$pic.'</a></td></tr>';
    } elsif ($nobreak) {     } elsif ($nobreak) {
        $inlineremote[$idx]="\n<tr>".         $inlineremote[$idx]="\n<tr>".
    '<td class="LC_menubuttons_img" align="left">'.     '<td align="left">'.
    '<a href="javascript:'.$act.';">'.$pic.'</a></td>     '<a href="javascript:'.$act.';">'.$pic.'</a></td>
                     <td class="LC_menubuttons_text" align="left"><a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$text.'</span></a></td>';                      <td class="LC_menubuttons_text" align="left"><a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$text.'</span></a></td>';
    } else {     } else {
        $inlineremote[$idx]="\n<tr>".         $inlineremote[$idx]="\n<tr>".
    '<td class="LC_menubuttons_img" align="left">'.     '<td align="left">'.
    '<a href="javascript:'.$act.';">'.$pic.     '<a href="javascript:'.$act.';">'.$pic.
    '</a></td><td class="LC_menubuttons_text" colspan="3">'.     '</a></td><td class="LC_menubuttons_text" colspan="3">'.
    '<a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$desc.'</span></a></td></tr>';     '<a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$desc.'</span></a></td></tr>';
Line 1198  sub inlinemenu { Line 1093  sub inlinemenu {
         for (my $row=1; $row<=8; $row++) {          for (my $row=1; $row<=8; $row++) {
             foreach my $cat (keys(%category_members)) {              foreach my $cat (keys(%category_members)) {
                if ($category_positions{$cat} ne "$col,$row") { next; }                 if ($category_positions{$cat} ne "$col,$row") { next; }
                #$output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>';                 #$output.='<table><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>';
                $output.='<fieldset id="LC_mainmenu_fieldset">';                 $output.='<div class="ContentBoxSpecial">';
        $output.='<legend class="LC_mainmenu_fieldset_category">'.&mt($category_names{$cat}).'</legend>';         $output.='<h4 class="hcell">'.&mt($category_names{$cat}).'</h4>';
                $output.='<table id="LC_menubuttons_mainmenu">';                 $output.='<table>';
                my %active=();                 my %active=();
                foreach my $menu_item (split(/\:/,$category_members{$cat})) {                 foreach my $menu_item (split(/\:/,$category_members{$cat})) {
                   if ($inlineremote[$menu_item]) {                    if ($inlineremote[$menu_item]) {
Line 1210  sub inlinemenu { Line 1105  sub inlinemenu {
                }                   }  
                foreach my $item (sort(keys(%active))) {                 foreach my $item (sort(keys(%active))) {
                   $output.=$inlineremote[$item];                    $output.=$inlineremote[$item];
    &Apache::lonnet::logthis("item=$item output=$inlineremote[$item]");
                }                 }
                $output.='</table>';                 $output.='</table>';
                $output.='</fieldset>';                 $output.='</div>';
             }              }
          }           }
          $output.="</td>";           $output.="</td>";
Line 1235  sub rawconfig { Line 1131  sub rawconfig {
     my $uname=$env{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};      my $udom=$env{'user.domain'};
     my $adv=$env{'user.adv'};      my $adv=$env{'user.adv'};
     my $show_course=&Apache::loncommon::show_course();      my $show_course=&show_course();
     my $author=$env{'user.author'};      my $author=$env{'user.author'};
     my $crs='';      my $crs='';
     my $crstype='';  
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
        $crs='/'.$env{'request.course.id'};         $crs='/'.$env{'request.course.id'};
        if ($env{'request.course.sec'}) {         if ($env{'request.course.sec'}) {
    $crs.='_'.$env{'request.course.sec'};     $crs.='_'.$env{'request.course.sec'};
        }         }
        $crs=~s/\_/\//g;         $crs=~s/\_/\//g;
        $crstype = &Apache::loncommon::course_type();  
     }      }
     my $pub=($env{'request.state'} eq 'published');      my $pub=($env{'request.state'} eq 'published');
     my $con=($env{'request.state'} eq 'construct');      my $con=($env{'request.state'} eq 'construct');
Line 1255  sub rawconfig { Line 1149  sub rawconfig {
         my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line);          my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line);
         $prt=~s/\$uname/$uname/g;          $prt=~s/\$uname/$uname/g;
         $prt=~s/\$udom/$udom/g;          $prt=~s/\$udom/$udom/g;
         $prt=~s/\$crs/$crs/g;          $prt=~s/\$crs/$crs/g; 
         if ($prt =~ /\$crs/) {  
             next unless ($env{'request.course.id'});  
             next if ($crstype eq 'Community');  
             $prt=~s/\$crs/$crs/g;  
         } elsif ($prt =~ /\$cmty/) {  
             next unless ($env{'request.course.id'});  
             next if ($crstype ne 'Community');  
             $prt=~s/\$cmty/$crs/g;  
         }  
         $prt=~s/\$requested_domain/$requested_domain/g;          $prt=~s/\$requested_domain/$requested_domain/g;
         if ($category_names{$cat}!~/\w/) { $cat='oth'; }          if ($category_names{$cat}!~/\w/) { $cat='oth'; }
           my $type = &Apache::loncommon::course_type();
           if ($type eq 'Group') {
               $desc = &convert_menu_function($desc,$type);
           }
         if ($pro eq 'clear') {          if ($pro eq 'clear') {
     $output.=&clear($row,$col);      $output.=&clear($row,$col);
         } elsif ($pro eq 'any') {          } elsif ($pro eq 'any') {
Line 1293  sub rawconfig { Line 1182  sub rawconfig {
   $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);    $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);
             }              }
         } elsif (($pro=~/^p(\w+)/) && ($prt)) {          } elsif (($pro=~/^p(\w+)/) && ($prt)) {
             my $priv = $1;      if (&Apache::lonnet::allowed($1,$prt)) {
             if ($priv =~ /^mdc(Course|Community)/) {  
                 if ($crstype eq $1) {  
                     $priv = 'mdc';  
                 } else {  
                     next;  
                 }  
             }  
     if (&Apache::lonnet::allowed($priv,$prt)) {  
                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
             }              }
         } elsif ($pro eq 'course')  {          } elsif ($pro eq 'course') {
             if (($env{'request.course.fn'}) && ($crstype ne 'Community')) {              if ($env{'request.course.fn'}) {
                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
             }      }
         } elsif ($pro eq 'community')  {  
             if (($env{'request.course.fn'}) && ($crstype eq 'Community')) {  
                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);  
             }  
         } elsif ($pro =~ /^courseenv_(.*)$/) {          } elsif ($pro =~ /^courseenv_(.*)$/) {
             my $key = $1;              my $key = $1;
             if ($crstype ne 'Community') {              if ($env{'course.'.$env{'request.course.id'}.'.'.$key}) {
                 my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};                  $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
                 if ($key eq 'canuse_pdfforms') {  
                     if ($env{'request.course.id'} && $coursepref eq '') {  
                         my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});  
                         $coursepref = $domdefs{'canuse_pdfforms'};  
                     }  
                 }  
                 if ($coursepref) {  
                     $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);  
                 }  
             }  
         } elsif ($pro =~ /^communityenv_(.*)$/) {  
             my $key = $1;  
             if ($crstype eq 'Community') {  
                 my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};  
                 if ($key eq 'canuse_pdfforms') {  
                     if ($env{'request.course.id'} && $coursepref eq '') {  
                         my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});  
                         $coursepref = $domdefs{'canuse_pdfforms'};  
                     }  
                 }  
                 if ($coursepref) {  
                     $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);  
                 }  
             }              }
         } elsif ($pro =~ /^course_(.*)$/) {          } elsif ($pro =~ /^course_(.*)$/) {
             # Check for permissions inside of a course              # Check for permissions inside of a course
             if (($env{'request.course.id'}) && ($crstype ne 'Community') &&              if (($env{'request.course.id'}) &&
                 (&Apache::lonnet::allowed($1,$env{'request.course.id'}.  
             ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))  
                  )) {  
                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);  
             }  
         } elsif ($pro =~ /^community_(.*)$/) {  
             # Check for permissions inside of a community  
             if (($env{'request.course.id'}) && ($crstype eq 'Community') &&  
                 (&Apache::lonnet::allowed($1,$env{'request.course.id'}.                  (&Apache::lonnet::allowed($1,$env{'request.course.id'}.
             ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))              ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))
                  )) {                   )) {
                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                  $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
             }      }
         } elsif ($pro eq 'author') {          } elsif ($pro eq 'author') {
             if ($author) {              if ($author) {
                 if ((($prt eq 'rca') && ($env{'request.role'}=~/^ca/)) ||                  if ((($prt eq 'rca') && ($env{'request.role'}=~/^ca/)) ||
Line 1379  sub rawconfig { Line 1225  sub rawconfig {
                     }                      }
                 }                  }
             }              }
         } elsif ($pro eq 'tools') {  
             my @tools = ('aboutme','blog','portfolio');  
             if (grep(/^\Q$prt\E$/,@tools)) {  
                 if (!&Apache::lonnet::usertools_access($env{'user.name'},  
                                                        $env{'user.domain'},  
                                                        $prt,undef,'tools')) {  
                     $output.=&clear($row,$col);  
                     next;  
                 }  
             } elsif (($prt eq 'reqcrsnsc') || ($prt eq 'reqcrsshc')) {  
                 if (($prt eq 'reqcrsnsc') && ($show_course))   {  
                     next;  
                 }  
                 if (($prt eq 'reqcrsshc') && (!$show_course)) {  
                     next;  
                 }  
                 my $showreqcrs = &check_for_rcrs();  
                 if (!$showreqcrs) {  
                     $output.=&clear($row,$col);  
                     next;  
                 }  
             }  
             $prt='any';  
             $output.=&secondlevel(  
           $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);  
   
         }          }
     }      }
     unless (($env{'browser.interface'} eq 'textual') ||      unless (($env{'browser.interface'} eq 'textual') ||
Line 1418  sub rawconfig { Line 1238  sub rawconfig {
     return $output;      return $output;
 }  }
   
 sub check_for_rcrs {  
     my $showreqcrs = 0;  
     my @reqtypes = ('official','unofficial','community');  
     foreach my $type (@reqtypes) {  
         if (&Apache::lonnet::usertools_access($env{'user.name'},  
                                               $env{'user.domain'},  
                                               $type,undef,'requestcourses')) {  
             $showreqcrs = 1;  
             last;  
         }  
     }  
     if (!$showreqcrs) {  
         foreach my $type (@reqtypes) {  
             if ($env{'environment.reqcrsotherdom.'.$type} ne '') {  
                 $showreqcrs = 1;  
                 last;  
             }  
         }  
     }  
     return $showreqcrs;  
 }  
   
 # ======================================================================= Close  # ======================================================================= Close
   
 sub close {  sub close {
Line 1448  sub close { Line 1246  sub close {
     my $menuname = &get_menu_name();      my $menuname = &get_menu_name();
     return(<<ENDCLOSE);      return(<<ENDCLOSE);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 window.status='Accessing Remote Control';  window.status='Accessing Remote Control';
 menu=window.open("/adm/rat/empty.html","$menuname",  menu=window.open("/adm/rat/empty.html","$menuname",
                  "height=350,width=150,scrollbars=no,menubar=no");                   "height=350,width=150,scrollbars=no,menubar=no");
Line 1458  menu.autologout=0; Line 1255  menu.autologout=0;
 window.status='Closing Remote Control';  window.status='Closing Remote Control';
 menu.close();  menu.close();
 window.status='Done.';  window.status='Done.';
 // ]]>  
 </script>  </script>
 ENDCLOSE  ENDCLOSE
 }  }
Line 1491  sub utilityfunctions { Line 1287  sub utilityfunctions {
     unless (($env{'browser.interface'} eq 'textual')  ||      unless (($env{'browser.interface'} eq 'textual')  ||
         ($env{'environment.remote'} eq 'off') || ($caller eq '/adm/menu')) { return ''; }          ($env{'environment.remote'} eq 'off') || ($caller eq '/adm/menu')) { return ''; }
     my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));      my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
     if ($currenturl =~ m{^/adm/wrapper/ext/}) {  
         if ($env{'request.external.querystring'}) {  
             $currenturl .= ($currenturl=~/\?/)?'&':'?'.$env{'request.external.querystring'};  
         }  
     }  
     $currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl));      $currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl));
           
     my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});      my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
Line 1650  function set_bookmark() { Line 1441  function set_bookmark() {
    bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0');     bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0');
    bmquery.document.write(     bmquery.document.write(
    '$start_page_bookmark'     '$start_page_bookmark'
    +'<center><form method="post"'     +"<center><form method='post'"
    +' name="newlink" action="/adm/bookmarks" target="bmquery" '     +" name='newlink' action='/adm/bookmarks' target='bmquery' "
    +'> <table width="340" height="150" '     +">\\n <table width=340 height=150 "
    +'bgcolor="ffffff" align="center"><tr><td>Link Name:<br /><input '     +"bgcolor='ffffff' align=center><tr><td>Link Name:<br /><input "
    +'type="text" name="title" size="45" value="'+clienttitle+'" />'     +"type='text' name='title' size=45 value='"+clienttitle+"' />"
    +'<br />Address:<br /><input type="text" name="address" size="45" '     +"<br />Address:<br /><input type='text' name='address' size='45' "
    +'value="'+clienthref+'" /><br /><center><input type="submit" '     +"value='"+clienthref+"' /><br /><center><input type='submit' "
    +'value="Save" /> <input type="button" value="Close" '     +"value='Save' /> <input type='button' value='Close (no save)' "
    +'onclick="javascript:window.close();" /></center></td>'     +"onclick='javascript:window.close();' /><\\/center><\\/td>"
    +'</tr></table></form></center>'     +"<\\/tr><\\/table><\\/form><\\/center>"
    +'$end_page_bookmark' );     +'$end_page_bookmark' );
    bmquery.document.close();     bmquery.document.close();
 }  }
Line 1707  sub get_nav_status { Line 1498  sub get_nav_status {
     return $navstatus;      return $navstatus;
 }  }
   
   #FIXME this needs to move into mydesktab and the other locations 
   # the text is generated
   sub convert_menu_function {
       my ($rolename,$type) = @_;
       if ($type eq 'Group') {
           $rolename =~ s/student/member/g;
           $rolename =~ s/group/team/g;
           $rolename =~ s/course/group/g;
           $rolename =~ s/Course/Group/g;
       }
       return $rolename;
   }
   
 sub hidden_button_check {  sub hidden_button_check {
     my $hidden;      my $hidden;
     if ($env{'request.course.id'} eq '') {      if ($env{'request.course.id'} eq '') {
Line 1721  sub hidden_button_check { Line 1525  sub hidden_button_check {
   
 sub roles_selector {  sub roles_selector {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my $crstype = &Apache::loncommon::course_type();  
     my $now = time;      my $now = time;
     my (%courseroles,%seccount);      my (%courseroles,%seccount,%gotnosection);
     my $is_cc;      my $is_cc;
     my $role_selector;      my $role_selector;
     my $ccrole;      if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) {
     if ($crstype eq 'Community') {          my ($start,$end) = split(/\./,$env{'user.role.cc./'.$cdom.'/'.$cnum});
         $ccrole = 'co';          
     } else {  
         $ccrole = 'cc';  
     }  
     if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) {  
         my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum});  
         if ((($start) && ($start<0)) ||           if ((($start) && ($start<0)) || 
             (($end) && ($end<$now))  ||              (($end) && ($end<$now))  ||
             (($start) && ($now<$start))) {              (($start) && ($now<$start))) {
Line 1743  sub roles_selector { Line 1541  sub roles_selector {
         }          }
     }      }
     if ($is_cc) {      if ($is_cc) {
         &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount);          my %adv_roles =
                &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
           foreach my $role (keys(%adv_roles)) {
               my ($urole,$usec) = split(/:/,$role);
               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 {
         my %gotnosection;  
         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;
Line 1776  sub roles_selector { Line 1600  sub roles_selector {
             }              }
         }          }
     }      }
     my $switchtext;      my @roles_order = ('cc','in','ta','ep','ad','st');
     if ($crstype eq 'Community') {  
         $switchtext = &mt('Switch community role to...')  
     } else {  
         $switchtext = &mt('Switch course role to...')  
     }  
   
     my @roles_order = ($ccrole,'in','ta','ep','ad','st');  
     if (keys(%courseroles) > 1) {      if (keys(%courseroles) > 1) {
         $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles);          $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="">'.$switchtext.'</option>';          $role_selector .= '<option value="">'.&mt('Switch course role to...').'</option>';
         foreach my $role (@roles_order) {          foreach my $role (@roles_order) {
             if (defined($courseroles{$role})) {              if (defined($courseroles{$role})) {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role,$crstype).'</option>';                   $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>'; 
             }              }
         }          }
         foreach my $role (sort(keys(%courseroles))) {          foreach my $role (sort(keys(%courseroles))) {
Line 1801  sub roles_selector { Line 1618  sub roles_selector {
         }          }
         $role_selector .= '</select>'."\n".          $role_selector .= '</select>'."\n".
                '<input type="hidden" name="destinationurl" value="'.                 '<input type="hidden" name="destinationurl" value="'.
                &HTML::Entities::encode($ENV{'REQUEST_URI'},'"<>&').'" />'."\n".                 $ENV{'REQUEST_URI'}.'" />'."\n".
                '<input type="hidden" name="gotorole" value="1" />'."\n".                 '<input type="hidden" name="gotorole" value="1" />'."\n".
                '<input type="hidden" name="selectrole" value="" />'."\n".                 '<input type="hidden" name="selectrole" value="" />'."\n".
                '<input type="hidden" name="switch" value="1" />'."\n".                 '<input type="hidden" name="switch" value="1" />'."\n".
Line 1810  sub roles_selector { Line 1627  sub roles_selector {
     return $role_selector;      return $role_selector;
 }  }
   
 sub get_all_courseroles {  
     my ($cdom,$cnum,$courseroles,$seccount) = @_;  
     unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) {  
         return;  
     }  
     my ($result,$cached) =  
         &Apache::lonnet::is_cached_new('getcourseroles',$cdom.'_'.$cnum);  
     if (defined($cached)) {  
         if (ref($result) eq 'HASH') {  
             if ((ref($result->{'roles'}) eq 'HASH') &&  
                 (ref($result->{'seccount'}) eq 'HASH')) {  
                 %{$courseroles} = %{$result->{'roles'}};  
                 %{$seccount} = %{$result->{'seccount'}};  
                 return;  
             }  
         }  
     }  
     my %gotnosection;  
     my %adv_roles =  
          &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);  
     foreach my $role (keys(%adv_roles)) {  
         my ($urole,$usec) = split(/:/,$role);  
         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,['st']);  
     @{$courseroles->{'st'}} = ();  
     if (keys(%sections_count) > 0) {  
         push(@{$courseroles->{'st'}},keys(%sections_count));  
         $seccount->{'st'} = scalar(keys(%sections_count));  
     }  
     my $rolehash = {  
                      'roles'    => $courseroles,  
                      'seccount' => $seccount,  
                    };  
     &Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash);  
     return;  
 }  
   
 sub jump_to_role {  sub jump_to_role {
     my ($cdom,$cnum,$seccount,$courseroles) = @_;      my ($cdom,$cnum,$seccount,$courseroles) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
Line 1896  sub jump_to_role { Line 1658  sub jump_to_role {
                    '    numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n";                     '    numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n";
         }          }
     }      }
     return <<"END";      my $output = <<"END";
 <script type="text/javascript">  <script type="text/javascript">
 //<![CDATA[  
 function adhocRole(roleitem) {  function adhocRole(roleitem) {
     $js      $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;
Line 1969  function retrieveIndex(item) { Line 1730  function retrieveIndex(item) {
     }      }
     return -1;      return -1;
 }  }
 // ]]>  
   
 </script>  </script>
 END  END
       return $output;
 }  }
   
   

Removed from v.1.244.2.15  
changed lines
  Added in v.1.247


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