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

version 1.244.2.15, 2010/05/23 19:16:02 version 1.315.2.7, 2011/01/07 21:32:52
Line 26 Line 26
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  #
 # There are two parameters controlling the action of this module:  # There is one parameter controlling the action of this module:
 #  
 # browser.interface - if this is 'textual', it overrides the second parameter  
 # and goes to screen reader PDA mode  
 #  #
 # environment.remote - if this is 'on', the routines controll the remote  # environment.remote - if this is 'on', the routines controll the remote
 # control, otherwise they render the main window controls; ignored it  # control, otherwise they render the main window controls; 
 # browser.interface is 'textual'  
 #  
   
 =head1 NAME  =head1 NAME
   
Line 47  Coordinates the response to clicking an Line 42  Coordinates the response to clicking an
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
   
   =head1 GLOBAL VARIABLES
   
   =over
   
   =item @desklines
   
   Each element of this array contains a line of mydesk.tab that doesn't start with
   cat, prim or scnd. 
   It gets filled in the BEGIN block of this module.
   
   =item %category_names
   
   The keys of this hash are the abbreviations used in mydesk.tab in those lines that 
   start with cat, the values are strings representing titles. 
   It gets filled in the BEGIN block of this module.
   
   =item %category_members
   
   TODO 
   
   =item %category_positions
   
   The keys of this hash are the abbreviations used in mydesk.tab in those lines that
   start with cat, its values are position vectors (column, row). 
   It gets filled in the BEGIN block of this module.
   
   =item $readdesk
   
   Indicates that mydesk.tab has been read. 
   It is set to 'done' in the BEGIN block of this module.
   
   =item @primary_menu
   
   The elements of this array reference arrays that are made up of the components
   of those lines of mydesk.tab that start with prim.
   It is used by primary_menu() to generate the corresponding menu.
   It gets filled in the BEGIN block of this module.
   
   =item @secondary_menu
   
   The elements of this array reference arrays that are made up of the components
   of those lines of mydesk.tab that start with scnd.
   It is used by secondary_menu() to generate the corresponding menu.
   It gets filled in the BEGIN block of this module.
   
   =back
   
 =head1 SUBROUTINES  =head1 SUBROUTINES
   
 =over  =over
   
 =item show_course()  =item prep_menuitems(\@menuitem)
   
 Little texts  This routine wraps a menuitem in proper HTML. It is used by primary_menu() and 
   secondary_menu().
   
 =item initlittle()  =item primary_menu()
   
 =item menubuttons()  This routine evaluates @primary_menu and returns XHTML for the menu
   that contains following links: About, Message, Roles, Help, Logout
   @primary_menu is filled within the BEGIN block of this module with 
   entries from mydesk.tab 
   
 This gets called at the top of the body section  =item secondary_menu()
   
   Same as primary_menu() but operates on @secondary_menu.
   
 =item show_return_link()  =item show_return_link()
   
Line 141  use Apache::lonlocal; Line 189  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();  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 @primary_menu @secondary_menu);
   
 my @inlineremote;  my @inlineremote;
   
   sub prep_menuitem {
       my ($menuitem) = @_;
       return '' unless(ref($menuitem) eq 'ARRAY');
       my $link;
       if ($$menuitem[1]) { # graphical Link
           $link = "<img class=\"LC_noBorder\""
                 . " src=\"" . &Apache::loncommon::lonhttpdurl($$menuitem[1]) . "\"" 
                 . " alt=\"" . &mt($$menuitem[2]) . "\" />";
       } else {             # textual Link
           $link = &mt($$menuitem[3]);
       }
       return '<li><a'
              # highlighting for new messages
              . ( $$menuitem[4] eq 'newmsg' ? ' class="LC_new_message"' : '')
              . qq| href="$$menuitem[0]" target="_top">$link</a></li>|;
   }
   
   # primary_menu() evaluates @primary_menu and returns XHTML for the menu
   # that contains following links:
   # About, Message, Roles, Help, Logout
   # @primary_menu is filled within the BEGIN block of this module with 
   # entries from mydesk.tab
   sub primary_menu {
       my $menu;
       # each element of @primary contains following array:
       # (link url, icon path, alt text, link text, condition)
       my $public;
       if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))
           || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {
           $public = 1;
       }
       foreach my $menuitem (@primary_menu) {
           # evaluate conditions 
           next if    ref($menuitem)       ne 'ARRAY';    #
           next if    $$menuitem[4]        eq 'nonewmsg'  # show links depending on
                   && &Apache::lonmsg::mynewmail();       # whether a new msg 
           next if    $$menuitem[4]        eq 'newmsg'    # arrived or not
                   && !&Apache::lonmsg::mynewmail();      # 
           next if    $$menuitem[4]        !~ /public/    ##we've a public user,
                   && $public;                            ##who should not see all
                                                          ##links
           next if    $$menuitem[4]        eq 'onlypublic'# hide links which are
                   && !$public;                           # only visible to public
                                                          # users
           next if    $$menuitem[4]        eq 'roles'     ##show links depending on
                   && &Apache::loncommon::show_course();  ##term 'Courses' or
           next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
                   && !&Apache::loncommon::show_course(); ##
   
   
           if ($$menuitem[3] eq 'Help') { # special treatment for helplink
               if ($public) {
                   my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
                   my $defdom = &Apache::lonnet::default_login_domain();
                   my $to = &Apache::loncommon::build_recipient_list(undef,
                                                                     'helpdeskmail',
                                                                     $defdom,$origmail);
                   if ($to ne '') {
                       $menu .= &prep_menuitem($menuitem);
                   }
               } else {
                   $menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>';
               }
           } else {
               my @items = @{$menuitem};
               $items[0] = 'javascript:'.$menuitem->[0].';';
               $menu .= &prep_menuitem(\@items);
           }
       }
   
       return "<ol class=\"LC_primary_menu LC_right\">$menu</ol>";
   }
   
 sub show_course {  #returns hashref {user=>'',dom=>''} containing:
     my $course = !$env{'user.adv'};  #   own name, domain if user is au
     if (!$env{'user.adv'}) {  #   name, domain of parent author if user is ca or aa
  foreach my $env (keys(%env)) {  #empty return if user is not an author or not on homeserver
     next if ($env !~ m/^user\.priv\./);  #
     if ($env !~ m/^user\.priv\.(?:st|cm)/) {  #TODO this should probably be moved somewhere more central
  $course = 0;  #since it can be used by different parts of the system
  last;  sub getauthor{
     }      return unless $env{'request.role'}=~/^(ca|aa|au)/; #nothing to do if user isn't some kind of author
  }  
                           #co- or assistent author?
       my ($dom, $user) = ($env{'request.role'} =~ /^(?:ca|aa)\.\/($match_domain)\/($match_username)$/)
                          ? ($1, $2) #domain, username of the parent author
                          : @env{ ('request.role.domain', 'user.name') }; #own domain, username
   
       # current server == home server?
       my $home =  &Apache::lonnet::homeserver($user,$dom);
       foreach (&Apache::lonnet::current_machine_ids()){
           return {user => $user, dom => $dom} if $_ eq $home;
     }      }
     return $course;  
 }  
   
 sub initlittle {      # if wrong server
     my %lt=&Apache::lonlocal::texthash('ret' => 'Return to Last Location',      return;
        'nav' => 'Course Contents',  }
        'main' => 'Main Menu',  
                                        'roles' => (&Apache::loncommon::show_course()?  
                                                     'Courses':'Roles'),  
                                        'other' => 'Other Roles',  
                                        'docs' => 'Edit Course',  
                                        'exit' => 'Logout',  
                                        'login' => 'Log In',  
        'launch' => 'Launch Remote Control',  
                                        'groups' => 'Groups',  
                                        'gdoc' => 'Community Documents',  
                                        );  
     if (&Apache::loncommon::course_type() eq 'Community') {  
         $lt{'nav'} = &mt('Community Contents');  
         $lt{'docs'} = &mt('Edit Community');  
     }  
     return %lt;  
 }  
   
 sub menubuttons {  
     my $forcereg=shift;  
     my $registration=shift;  
     my $titletable=shift;  
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},  
     ['inhibitmenu']);  
     if (($env{'form.inhibitmenu'} eq 'yes') ||  
         ($ENV{'REQUEST_URI'} eq '/adm/logout')) { return ''; }  
   
     if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }  
   
     my %lt=&initlittle();  sub secondary_menu {
     my $navmaps='';      my $menu;
     my $reloadlink='';  
     my $docs='';  
     my $groups='';  
     my $roles='<a href="/adm/roles" target="_top">'.$lt{'roles'}.'</a>';  
     my $role_selector;  
     my $showgroups=0;  
     my ($cnum,$cdom);  
     my $escurl=&escape(&Apache::lonenc::check_encrypt($env{'request.noversionuri'}));  
     my $escsymb=&escape(&Apache::lonenc::check_encrypt($env{'request.symb'}));  
   
     my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");  
     $logo = '<td class="LC_top_nav_logo"><a href="/adm/about.html"><img src="'.  
  $logo.'" alt="LON-CAPA Logo" /></a></td>';  
   
     if ($env{'request.state'} eq 'construct') {      my $crstype = &Apache::loncommon::course_type();
         if (($env{'request.noversionuri'} eq '') || (!defined($env{'request.noversionuri'}))) {      my $crs_sec = $env{'request.course.id'} . ($env{'request.course.sec'}
             my $returnurl = $env{'request.filename'};                                                 ? "/$env{'request.course.sec'}"
             $returnurl =~ s:^/home/([^/]+)/public_html/(.*)$:/priv/$1/$2:;                                                 : '');
             $escurl = &escape($returnurl);      my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
         }      my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec);
     }      my $author        = getauthor();
     if ($env{'request.course.id'}) {  
         $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};      my $showlink = &show_return_link();
         $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my %groups = &Apache::lonnet::get_active_groups(
         my %coursegroups;                       $env{'user.domain'}, $env{'user.name'},
         my $viewgrps_permission =                       $env{'course.' . $env{'request.course.id'} . '.domain'},
     &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));                       $env{'course.' . $env{'request.course.id'} . '.num'});
         if (!$viewgrps_permission) {      foreach my $menuitem (@secondary_menu) {
             %coursegroups = &Apache::lonnet::get_active_groups($env{'user.domain'},$env{'user.name'},$cdom,$cnum);          # evaluate conditions 
  }          next if    ref($menuitem)  ne 'ARRAY';
         if ((keys(%coursegroups) > 0) || ($viewgrps_permission)) {          next if    $$menuitem[4]   ne 'always'
             $showgroups = 1;                  && $$menuitem[4]   ne 'author'
         }                  && !$env{'request.course.id'};
         $role_selector = &roles_selector($cdom,$cnum);          next if    $$menuitem[4]   eq 'showreturn'
         if ($role_selector) {                  && !$showlink
             $roles = '<span class="LC_nobreak">'.$role_selector.'&nbsp;&nbsp;<a href="/adm/roles" target="_top">'.$lt{'other'}.'</a></span>';                  && !($env{'request.state'} eq 'construct');
           next if    $$menuitem[4]   =~ /^mdc/
                   && !$canedit;
           next if    $$menuitem[4]  eq 'mdcCourse'
                   && $crstype eq 'Community';
           next if    $$menuitem[4]  eq 'mdcCommunity'
                   && $crstype ne 'Community';
           next if    $$menuitem[4]  =~ /^remotenav/
                   && $env{'environment.remotenavmap'} ne 'on';
           next if    $$menuitem[4]  =~ /noremotenav/
                   && $env{'environment.remotenavmap'} eq 'on';
           next if $$menuitem[4] =~ /^(no|)remotenav$/ 
                   && $crstype eq 'Community';
           next if $$menuitem[4] =~ /^(no|)remotenavCommunity$/ 
                   && $crstype ne 'Community';
           next if    $$menuitem[4]   =~ /showgroups$/
                   && !$canviewgrps
                   && !%groups;
           next if    $$menuitem[4]    eq 'author'
                   && !$author;
   
           if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
               # special treatment for role selector
               my $roles_selector = &roles_selector(
                           $env{'course.' . $env{'request.course.id'} . '.domain'},
                           $env{'course.' . $env{'request.course.id'} . '.num'}  );
   
               $menu .= $roles_selector ? "<li>$roles_selector</li>"
                                        : '';
           } elsif ($env{'environment.remotenavmap'} eq 'on') {
               # open link using javascript when remote navmap is activated
               my @items = @{$menuitem}; 
               if ($menuitem->[4] eq 'remotenav') {
                   $items[0] = "javascript:gonav('$menuitem->[0]');";
               } else {
                   $items[0] = "javascript:go('$menuitem->[0]');";
               }
               $menu .= &prep_menuitem(\@items);
           } else {
               $menu .= &prep_menuitem(\@$menuitem);
         }          }
     }      }
       if ($menu =~ /\[url\].*\[symb\]/) {
           my $escurl  = &escape( &Apache::lonenc::check_encrypt(
                                $env{'request.noversionuri'}));
   
     if ($env{'browser.interface'} eq 'textual') {          my $escsymb = &escape( &Apache::lonenc::check_encrypt(
 # Textual display only                               $env{'request.symb'})); 
         if ($env{'request.course.id'}) {  
     $navmaps=(<<ENDNAV);  
 <a href="/adm/navmaps?postdata=$escurl&amp;postsymb=$escsymb" target="_top">$lt{'nav'}</a>  
 ENDNAV  
             if (&show_return_link()) {  
                 my $escreload=&escape('return:');  
                 $reloadlink=(<<ENDRELOAD);  
 <a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a>  
 ENDRELOAD  
             }  
             my $is_community =  
                 (&Apache::loncommon::course_type() eq 'Community');  
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                 my $text = ($is_community) ? $lt{'gdoc'} : $lt{'docs'};  
                 $docs=(<<ENDDOCS);  
 <a href="/adm/coursedocs" target="_top">$text</a>  
 ENDDOCS  
             }  
             if ($showgroups) {  
                 $groups =(<<ENDGROUPS);  
 <a href="/adm/coursegroups" target="_top">$lt{'groups'}</a>  
 ENDGROUPS  
             }  
  }  
         my $form=&serverform();  
         my $utility=&utilityfunctions();  
  my $output=(<<ENDMAINMENU);  
 <script type="text/javascript">  
 // BEGIN LON-CAPA Internal  
 $utility  
 </script>  
 <div id="LC_top_nav">  
 <a href="/adm/menu" target="_top">$lt{'main'}</a>  
 $reloadlink $navmaps $docs $groups $roles  
 <a href="/adm/logout" target="_top">$lt{'exit'}</a>  
 </div>  
 <br />  
 <script type="text/javascript">  
 // END LON-CAPA Internal  
 </script>  
 $form  
 ENDMAINMENU  
         if ($registration) { $output.=&innerregister($forcereg); }  
  return $output."<hr />";  
     } elsif ($env{'environment.remote'} eq 'off') {  
 # Remote Control is switched off  
 # figure out colors  
  my %lt=&initlittle();  
   
         my $domain=&Apache::loncommon::determinedomain();  
  my $function =&Apache::loncommon::get_users_function();  
         my $link=&Apache::loncommon::designparm($function.'.link',$domain);  
         my $alink=&Apache::loncommon::designparm($function.'.alink',$domain);  
         my $vlink=&Apache::loncommon::designparm($function.'.vlink',$domain);  
         my $sidebg=&Apache::loncommon::designparm($function.'.sidebg',$domain);  
  if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {  
     return (<<ENDINLINEMENU);  
    <table id="LC_top_nav">  
     <tr>  
       $logo  
       <td></td>  
       <td class="LC_top_nav_login">  
         <a href="/adm/roles" target="_top">$lt{'login'}</a>  
      </td>  
     </tr>  
   </table>  
 </font>  
 ENDINLINEMENU  
         }  
         $roles = '<td><a href="/adm/roles" target="_top">'.$lt{'roles'}.'</a></td>';  
 # Do we have a NAV link?  
         if ($env{'request.course.id'}) {  
     my $link='/adm/navmaps?postdata='.$escurl.'&amp;postsymb='.  
  $escsymb;  
     if ($env{'environment.remotenavmap'} eq 'on') {  
  $link="javascript:gonav('".$link."')";  
     }  
     $navmaps=(<<ENDNAV);  
 <td><a href="$link" target="_top">$lt{'nav'}</a></td>  
 ENDNAV  
             my $is_community =  
                 (&Apache::loncommon::course_type() eq 'Community');  
     if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                 my $text = ($is_community) ? $lt{'gdoc'} : $lt{'docs'};  
  $docs=(<<ENDDOCS);  
 <td><a href="/adm/coursedocs" target="_top">$text</a></td>  
 ENDDOCS  
             }  
             if ($showgroups) {  
                 $groups =(<<ENDGROUPS);  
 <td><a href="/adm/coursegroups" target="_top">$lt{'groups'}</a></td>  
 ENDGROUPS  
             }  
     if (&show_return_link()) {  
                 my $escreload=&escape('return:');  
                 $reloadlink=(<<ENDRELOAD);  
 <td><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></td>  
 ENDRELOAD  
             }  
             if ($role_selector) {  
                 $roles = '<td>'.$role_selector.'</td><td><a href="/adm/roles" target="_top">'.$lt{'other'}.'</a></td>';  
             }  
         }  
  if (($env{'request.state'} eq 'construct') && ($env{'request.course.id'})) {  
     my $escreload=&escape('return:');  
     $reloadlink=(<<ENDCRELOAD);  
 <td><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></td>  
 ENDCRELOAD  
         }  
         my $reg='';  
         if ($registration) {  
            $reg=&innerregister($forcereg,$titletable);  
         }  
         my $form=&serverform();  
  my $utility=&utilityfunctions();  
   
         my $helplink=&Apache::loncommon::top_nav_help('Help');          if (    $env{'request.state'} eq 'construct'
  return (<<ENDINLINEMENU);              and (   $env{'request.noversionuri'} eq '' 
 <script type="text/javascript">                   || !defined($env{'request.noversionuri'}))) 
 // <![CDATA[          {
 // BEGIN LON-CAPA Internal              ($escurl = $env{'request.filename'}) =~ 
 $utility                  s{^/home/([^/]+)/public_html/(.*)$}{/priv/$1/$2};
 // ]]>  
 </script>              $escurl  = &escape($escurl);
 <table id="LC_top_nav">          }    
 <tr>          $menu =~ s/\[url\]/$escurl/g;
 $logo          $menu =~ s/\[symb\]/$escsymb/g;
 <td><a href="/adm/menu" target="_top">$lt{'main'}</a></td>  
 $reloadlink  
 $navmaps  
 $docs  
 $groups  
 $roles  
 <td class="LC_top_nav_help">$helplink</td>  
 <td class="LC_top_nav_exit"><a href="/adm/logout" target="_top">$lt{'exit'}</a></td>  
 </tr>  
 </table>  
 $form  
 <script type="text/javascript">  
 // END LON-CAPA Internal  
 </script>  
 $reg  
 ENDINLINEMENU  
     } else {  
  return '';  
     }      }
       $menu =~ s/\[uname\]/$$author{user}/g;
       $menu =~ s/\[udom\]/$$author{dom}/g;
   
       return "<ul id=\"LC_secondary_menu\">$menu</ul>";
 }  }
   
 sub show_return_link {  sub show_return_link {
       if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)})
           || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) {
   
           return if ($env{'form.register'});
       }
     return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&      return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&
      $env{'request.symb'} eq '')       $env{'request.symb'} eq '')
     ||      ||
Line 394  sub show_return_link { Line 398  sub show_return_link {
     (($env{'request.noversionuri'}=~/^\/adm\//) &&      (($env{'request.noversionuri'}=~/^\/adm\//) &&
      ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&       ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
      ($env{'request.noversionuri'}!~       ($env{'request.noversionuri'}!~
       m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)])        m[^/adm/.*/(smppg|bulletinboard)($|\?)])
      ));       ));
 }  }
   
Line 407  sub registerurl { Line 411  sub registerurl {
     if ($env{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
  $force_title=&Apache::lonxml::display_title();   $force_title=&Apache::lonxml::display_title();
     }      }
     if (($env{'browser.interface'} eq 'textual') ||      if (($env{'environment.remote'} eq 'off') ||
         ($env{'environment.remote'} eq 'off') ||  
         ((($env{'request.publicaccess'}) ||           ((($env{'request.publicaccess'}) || 
          (!&Apache::lonnet::is_on_map(           (!&Apache::lonnet::is_on_map(
    &unescape($env{'request.noversionuri'})))) &&     &unescape($env{'request.noversionuri'})))) &&
         (!$forcereg))) {          (!$forcereg))) {
   return $result.    return
                '<script type="text/javascript">'."\n".          $result
                'function LONCAPAreg(){;} function LONCAPAstale(){}'."\n".         .'<script type="text/javascript">'."\n"
                '</script>'.$force_title;         .'// <![CDATA['."\n"
          .'function LONCAPAreg(){;} function LONCAPAstale(){}'."\n"
          .'// ]]>'."\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 425  sub registerurl { Line 432  sub registerurl {
 }  }
   
 sub innerregister {  sub innerregister {
     my ($forcereg, $titletable) = @_;      my ($forcereg,$titletable,$bread_crumbs) = @_;
     my $result = '';      my $result = '';
     my ($uname,$thisdisfn);      my ($uname,$thisdisfn);
     my $const_space = ($env{'request.state'} eq 'construct');      my $const_space = ($env{'request.state'} eq 'construct');
Line 435  sub innerregister { Line 442  sub innerregister {
   
     $env{'request.registered'} = 1;      $env{'request.registered'} = 1;
   
     my $textinter=($env{'browser.interface'} eq 'textual');      my $noremote = ($env{'environment.remote'} eq 'off');
     my $noremote=($env{'environment.remote'} eq 'off');  
           
     my $textual=($textinter || $noremote);  
   
     undef(@inlineremote);      undef(@inlineremote);
   
     my $reopen=&Apache::lonmenu::reopenmenu();      my $reopen=&Apache::lonmenu::reopenmenu();
   
     my $newmail='';      my $newmail='';
     if ($noremote) {  
  $newmail='<table id="LC_nav_location"><tr>';      if (&Apache::lonmsg::newmail() && !$noremote) { 
     }          # We have new mail and remote is up
     if (&Apache::lonmsg::newmail()) {           $newmail= 'swmenu.setstatus("you have","messages");';
  if ($textual) {  
     $newmail.= '<td class="LC_new_mail">  
                    <a href="/adm/communicate" target="_top">'.  
    &mt('You have new messages').'</a></td>';  
  } else {  
     $newmail= 'swmenu.setstatus("you have","messages");';  
  }  
     }       } 
     if (($textual)   
       my ($breadcrumb,$separator);
       if ($noremote
      && ($env{'request.symb'})        && ($env{'request.symb'}) 
      && ($env{'request.course.id'})) {       && ($env{'request.course.id'})) {
  $newmail.= '<td class="LC_current_location">';  
  my ($mapurl,$rid,$resurl)=          my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
     &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());          my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};
         my $coursetitle=$env{'course.'.$env{'request.course.id'}.'.description'};  
         $newmail.=$coursetitle;          my $maptitle = &Apache::lonnet::gettitle($mapurl);
         my $maptitle=&Apache::lonnet::gettitle($mapurl);          my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread());
  my $restitle=&Apache::lonnet::gettitle(&Apache::lonnet::symbread());          my $contentstext;
         if ($maptitle && ($maptitle ne 'default.sequence') && ($maptitle ne $coursetitle)) {          if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Community') {
     $newmail.=', '.$maptitle;              $contentstext = &mt('Community Contents');
         }          } else {
         if ($restitle) {              $contentstext = &mt('Course Contents');
     $newmail.=': '.$restitle;  
         }          }
         $newmail.='&nbsp;&nbsp;&nbsp;</td>';          my @crumbs;
           unless (($forcereg) && ($env{'request.noversionuri'} eq '/adm/navmaps')
                   && ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
               my $navhref = "javascript:gopost('/adm/navmaps','')";
               if ($env{'environment.remotenavmap'} eq 'on') {
                    $navhref = "javascript:gonav('/adm/navmaps');";
               }
               @crumbs = ({text  => $contentstext,
                           href  => $navhref});
           }
           if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { 
               push(@crumbs, {text  => '...',
                              no_mt => 1});
           }
   
           push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle 
                                                      && $maptitle ne 'default.sequence' 
                                                      && $maptitle ne $coursetitle);
   
           push @crumbs, {text => $restitle, no_mt => 1} if $restitle; 
   
           &Apache::lonhtmlcommon::clear_breadcrumbs();
           &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
   
           #$breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
    unless (($env{'request.state'} eq 'edit') || ($newmail) ||
    ($env{'request.state'} eq 'construct') ||
    ($env{'form.register'})) {
               $separator = &Apache::loncommon::head_subbox();
           }
           #
       } elsif (!$const_space){
           #a situation when we're looking at a resource outside of context of a
           #course or construction space (e.g. with cumulative rights)
           &Apache::lonhtmlcommon::clear_breadcrumbs();
           &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'});
     }      }
     if ($env{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
         $newmail = $titletable;          $newmail = $titletable;
     } else {      } 
  if ($noremote) {      my $timesync   = ( $noremote ? '' : 'swmenu.syncclock(1000*'.time.');' );
     $newmail.='</tr></table>';      my $tablestart = ( $noremote ? '<table id="LC_menubuttons">' : '');
  }      my $tableend   = ( $noremote ? '</table>' : '');
     }  
     my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');  
     my $tablestart=($noremote?'<table id="LC_menubuttons">':'').  
  ($textinter?'<br /><a href="#content">'.&mt('Skip to Content').'</a><br />':'');  
     my $tableend=($noremote?'</table>':'').($textinter?'<a name="content" />':'');  
 # =============================================================================  # =============================================================================
 # ============================ This is for URLs that actually can be registered  # ============================ This is for URLs that actually can be registered
     if (($env{'request.noversionuri'}!~m|^/(res/)*adm/|) || ($forcereg)) {      if (($env{'request.noversionuri'}!~m{^/(res/)*adm/}) || ($forcereg)) {
 # -- This applies to homework problems for users with grading privileges  # -- This applies to homework problems for users with grading privileges
  my $crs='/'.$env{'request.course.id'};   my $crs='/'.$env{'request.course.id'};
  if ($env{'request.course.sec'}) {   if ($env{'request.course.sec'}) {
Line 529  sub innerregister { Line 557  sub innerregister {
         }          }
         if ($env{'user.author'}) {          if ($env{'user.author'}) {
             if ($env{'request.role'}=~/^(aa|ca|au)/) {              if ($env{'request.role'}=~/^(aa|ca|au)/) {
   #
   # We have the role of an author
   #
                 # Set defaults for authors                  # Set defaults for authors
                 my ($top,$bottom) = ('con-','struct');                  my ($top,$bottom) = ('con-','struct');
                 my $action = "go('/priv/".$env{'user.name'}."');";                  my $action = "go('/priv/".$env{'user.name'}."');";
Line 557  sub innerregister { Line 588  sub innerregister {
                     $noeditbutton = 0;                      $noeditbutton = 0;
                 }                  }
             }              }
   #
   # We are an author for some stuff, but currently do not have the role of author.
   # Figure out if we have authoring privileges for the resource we are looking at.
   # This should maybe become a privilege check in lonnet
   #
             ##              ##
             ## Determine if user can edit url.              ## Determine if user can edit url.
             ##              ##
Line 564  sub innerregister { Line 600  sub innerregister {
             my $cfuname='';              my $cfuname='';
             my $cfudom='';              my $cfudom='';
             my $uploaded;              my $uploaded;
               my $switchserver='';
               my $home;
             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/;                  if (defined($cnum) && defined($cdom)) {
                 # Check that the user has permission to edit this resource                      $uploaded = &is_course_upload($file,$cnum,$cdom);
                 ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);                  }
                 if (defined($cfudom)) {                  if (!$uploaded) {
     my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);                      $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/;
     my $allowed=0;                      # Check that the user has permission to edit this resource
     my @ids=&Apache::lonnet::current_machine_ids();                      ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
     foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }                      if (defined($cfudom)) {
     if ($allowed) {          $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
                         $cfile=$file;          my $allowed=0;
           my @ids=&Apache::lonnet::current_machine_ids();
           foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
           if ($allowed) {
                               $cfile=$file;
                           } else {
                               $switchserver=$file;
                           }
                     }                      }
                 }                  }
             }                      }
             # Finally, turn the button on or off              # Finally, turn the button on or off
             if ($cfile && !$const_space) {              if (($cfile || $switchserver) && !$const_space) {
                 my $nocrsedit;                  my $nocrsedit;
                 # Suppress display where CC has switched to student role.                  # Suppress display where CC has switched to student role.
                 if ($env{'request.course.id'}) {                  if ($env{'request.course.id'}) {
Line 592  sub innerregister { Line 637  sub innerregister {
                 if ($nocrsedit) {                  if ($nocrsedit) {
                     $editbutton=&clear(6,1);                      $editbutton=&clear(6,1);
                 } else {                  } else {
                       my $bot = "go('$cfile')";
                       if ($switchserver) {
                           if ( $env{'request.symb'} && $env{'request.course.id'} ) {
                               my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
                               $cfile = '/adm/switchserver?otherserver='.$home.'&amp;role='.
                                        &HTML::Entities::encode($env{'request.role'},'"<>&').'&amp;symb='.
                                        &HTML::Entities::encode($env{'request.symb'},'"<>&');
                               $bot = "need_switchserver('$cfile');";
                           }
                       }
                     $editbutton=&switch                      $editbutton=&switch
                        ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',                         ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',
                      "go('".$cfile."');","Edit this resource");                         $bot,"Edit this resource");
                     $noeditbutton = 0;                      $noeditbutton = 0;
                 }                  }
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);                  $editbutton=&clear(6,1);
             }              }
         }          }
         if (($noeditbutton) && ($env{'request.filename'})) {          if (($noeditbutton) && ($env{'request.filename'})) { 
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {              if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  my $file=&Apache::lonnet::declutter($env{'request.filename'});
                 if (defined($cnum) && defined($cdom)) {                  if (defined($cnum) && defined($cdom)) {
Line 622  sub innerregister { Line 677  sub innerregister {
 # Prepare the rest of the buttons  # Prepare the rest of the buttons
         my $menuitems;          my $menuitems;
         if ($const_space) {          if ($const_space) {
   #
   # We are in construction space
   #
     my ($uname,$thisdisfn) =      my ($uname,$thisdisfn) =
  ($env{'request.filename'}=~m|^/home/([^/]+)/public_html/(.*)|);   ($env{'request.filename'}=~m|^/home/([^/]+)/public_html/(.*)|);
             my $currdir = '/priv/'.$uname.'/'.$thisdisfn;              my $currdir = '/priv/'.$uname.'/'.$thisdisfn;
             if ($currdir =~ m-/$-) {              if ($currdir =~ m-/$-) {
                 $is_const_dir = 1;                  $is_const_dir = 1;
             } else {              } else {
                 $currdir =~ s#[^/]+$##;                  $currdir =~ s|[^/]+$||;
  my $cleandisfn = &Apache::loncommon::escape_single($thisdisfn);   my $cleandisfn = &Apache::loncommon::escape_single($thisdisfn);
  my $esc_currdir = &Apache::loncommon::escape_single($currdir);   my $esc_currdir = &Apache::loncommon::escape_single($currdir);
   #
   # Probably should be in mydesk.tab
   #
                 $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
Line 639  s&7&1&del.gif&delete[_1]&resource[_2]&go Line 700  s&7&1&del.gif&delete[_1]&resource[_2]&go
 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
             }              }
               if ($noremote) {
                   if (ref($bread_crumbs) eq 'ARRAY') {
                       &Apache::lonhtmlcommon::clear_breadcrumbs();
                       foreach my $crumb (@{$bread_crumbs}){
                           &Apache::lonhtmlcommon::add_breadcrumb($crumb);
                       }
                   }
               }
         } elsif ( defined($env{'request.course.id'}) &&           } elsif ( defined($env{'request.course.id'}) && 
  $env{'request.symb'} ne '' ) {   $env{'request.symb'} ne '' ) {
   #
   # We are in a course and looking at a registred URL
   # Should probably be in mydesk.tab
   #
     $menuitems=(<<ENDMENUITEMS);      $menuitems=(<<ENDMENUITEMS);
 c&3&1  c&3&1
 s&2&1&back.gif&backward[_1]&&gopost('/adm/flip','back:'+currentURL)&Go to the previous resource in the course sequence&&1  s&2&1&back.gif&backward[_1]&&gopost('/adm/flip','back:'+currentURL)&Go to the previous resource in the course sequence&&1
Line 664  if(length($annotation) > 0){ Line 737  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) {              unless ($noremote) { 
                 my $showreqcrs = &check_for_rcrs();                  my $showreqcrs = &check_for_rcrs();
                 if ($showreqcrs) {                  if ($showreqcrs) {
                     $menuitems.="s&8&1&rcrs.gif&request[_1]&course[_16]".                      $menuitems.="s&8&1&rcrs.gif&request[_1]&course[_16]".
                                 "&go('/adm/requestcourse')&Course requests\n";                                  "&go('/adm/requestcourse')&Course requests\n";
                 }                  }
             }              }
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {
                 if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) {   if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.gif&catalog[_2]&info[_1]&catalog_info()&Show Metadata  s&6&3&catalog.gif&catalog[_2]&info[_1]&catalog_info()&Show Metadata
 ENDREALRES  ENDREALRES
Line 707  ENDMENUITEMS Line 780  ENDMENUITEMS
             }              }
         }          }
   
         if ($textual) {          if ($noremote) {
     my $addremote=0;      my $addremote=0;
     foreach (@inlineremote) { if ($_ ne '') { $addremote=1; } }      foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }
     my $inlinebuttons='';      my $inlinebuttons='';
     if ($addremote) {      if ($addremote) {
 # Registered, textual output  
  if ($env{'browser.interface'} eq 'textual') {          Apache::lonhtmlcommon::clear_breadcrumb_tools();
     $inlinebuttons=  
                         join('',map { (defined($_)?$_:'') } @inlineremote);              Apache::lonhtmlcommon::add_breadcrumb_tool(
  } else {                  'navigation', @inlineremote[21,23]);
                     if ($env{'environment.icons'} eq 'iconsonly') {  
                         $inlinebuttons=(<<ENDARROWSINLINE);          if(hidden_button_check() ne 'yes') {
 <tr><td>              Apache::lonhtmlcommon::add_breadcrumb_tool(
 $inlineremote[21] $inlineremote[23]                  'tools', @inlineremote[93,91,81,82,83]);
 ENDARROWSINLINE  
                         if (&hidden_button_check() ne 'yes') {              #publish button in construction space
                             $inlinebuttons .= (<<ENDINLINEICONS);              if ($env{'request.state'} eq 'construct'){
 $inlineremote[61] $inlineremote[63]                  Apache::lonhtmlcommon::add_breadcrumb_tool(
 $inlineremote[71] $inlineremote[72] $inlineremote[73]                       'advtools', @inlineremote[63]);
 $inlineremote[81] $inlineremote[82] $inlineremote[83]              }else{
 $inlineremote[91] $inlineremote[92] $inlineremote[93]</td></tr>                  Apache::lonhtmlcommon::add_breadcrumb_tool(
 ENDINLINEICONS                       'tools', @inlineremote[63]);
                         }              }
                     } else {  
  if ($inlineremote[21] ne '' || $inlineremote[23] ne '') {              unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {
     $inlinebuttons=(<<ENDFIRSTLINE);                  Apache::lonhtmlcommon::add_breadcrumb_tool(
 <tr><td>$inlineremote[21]</td><td>&nbsp;</td><td>$inlineremote[23]</td></tr>                      'advtools', @inlineremote[61,71,72,73,92]);
 ENDFIRSTLINE              }
                         }          }
                         if (&hidden_button_check() ne 'yes') {   
     foreach my $row (6..9) {  #       # Registered, textual output
  if ($inlineremote[${row}.'1'] ne ''  #        if ( $env{'environment.icons'} eq 'iconsonly' ) {
     || $inlineremote[$row.'2'] ne ''  #            $inlinebuttons = (<<ENDARROWSINLINE);
     || $inlineremote[$row.'3'] ne '') {  #<tr><td>
     $inlinebuttons .= <<"ENDLINE";  #$inlineremote[21] $inlineremote[23]
 <tr><td>$inlineremote["${row}1"]</td><td>$inlineremote["${row}2"]</td><td>$inlineremote["${row}3"]</td></tr>  #ENDARROWSINLINE
 ENDLINE  #            if ( &hidden_button_check() ne 'yes' ) {
  }  #                $inlinebuttons .= (<<ENDINLINEICONS);
     }  #$inlineremote[61] $inlineremote[63]
  }  #$inlineremote[71] $inlineremote[72] $inlineremote[73]
     }  #$inlineremote[81] $inlineremote[82] $inlineremote[83]
  }  #$inlineremote[91] $inlineremote[92] $inlineremote[93]</td></tr>
     }  #ENDINLINEICONS
   #            }
   #        } else { # not iconsonly
   #            if ( $inlineremote[21] ne '' || $inlineremote[23] ne '' ) {
   #                $inlinebuttons = (<<ENDFIRSTLINE);
   #<tr><td>$inlineremote[21]</td><td>&nbsp;</td><td>$inlineremote[23]</td></tr>
   #ENDFIRSTLINE
   #            }
   #            if ( &hidden_button_check() ne 'yes' ) {
   #                foreach my $row ( 6 .. 9 ) {
   #                    if (   $inlineremote[ ${row} . '1' ] ne ''
   #                        || $inlineremote[ $row . '2' ] ne ''
   #                        || $inlineremote[ $row . '3' ] ne '' )
   #                    {
   #                        $inlinebuttons .= <<"ENDLINE";
   #<tr><td>$inlineremote["${row}1"]</td><td>$inlineremote["${row}2"]</td><td>$inlineremote["${row}3"]</td></tr>
   #ENDLINE
   #                    }
   #                }
   #            }
   #        }
       }
           $breadcrumb = &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
     $result =(<<ENDREGTEXT);      $result =(<<ENDREGTEXT);
 <script type="text/javascript">  <script type="text/javascript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
 </script>  </script>
 $timesync  $timesync
 $tablestart  $breadcrumb
 $inlinebuttons  <!-- $tablestart -->
 $tableend  <!-- $inlinebuttons -->
   <!-- $tableend -->
 $newmail  $newmail
   <!-- $separator -->
 <script type="text/javascript">  <script type="text/javascript">
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
Line 819  ENDREGTHIS Line 916  ENDREGTHIS
 # =============================================================================  # =============================================================================
     } else {      } else {
 # ========================================== This can or will not be registered  # ========================================== This can or will not be registered
         if ($textual) {          if ($noremote) {
 # Not registered, textual  # Not registered
     $result= (<<ENDDONOTREGTEXT);              $result= (<<ENDDONOTREGTEXT);
 ENDDONOTREGTEXT  ENDDONOTREGTEXT
         } else {          } else {
 # Not registered, graphical  # Not registered, graphical
Line 913  sub unloadevents() { Line 1010  sub unloadevents() {
   
 sub startupremote {  sub startupremote {
     my ($lowerurl)=@_;      my ($lowerurl)=@_;
     if (($env{'browser.interface'} eq 'textual') ||      if ($env{'environment.remote'} eq 'off') {
         ($env{'environment.remote'} eq 'off')) {  
      return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');       return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');
     }      }
 #  #
Line 975  function main() { Line 1071  function main() {
    timestart=date.getTime();     timestart=date.getTime();
    wait();     wait();
 }  }
   
 // ]]>  // ]]>
 </script>  </script>
 ENDREMOTESTARTUP  ENDREMOTESTARTUP
Line 992  ENDSETFLAGS Line 1089  ENDSETFLAGS
 }  }
   
 sub maincall() {  sub maincall() {
     if (($env{'browser.interface'} eq 'textual') ||      if ($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[  // <![CDATA[
Line 1006  ENDMAINCALL Line 1102  ENDMAINCALL
 sub load_remote_msg {  sub load_remote_msg {
     my ($lowerurl)=@_;      my ($lowerurl)=@_;
   
     if (($env{'browser.interface'} eq 'textual') ||      if ($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('[_1]Continue[_2] on in Inline Menu mode'
  '<a href="/adm/remote?action=collapse&amp;url='.$esclowerurl.'">',                  ,'<a href="/adm/remote?action=collapse&amp;url='.$esclowerurl.'">'
                  '</a>');                  ,'</a>');
     return(<<ENDREMOTEFORM);      return(<<ENDREMOTEFORM);
 <p>  <p>
 <form name="wheel">  <form name="wheel">
Line 1031  sub get_menu_name { Line 1126  sub get_menu_name {
   
   
 sub reopenmenu {  sub reopenmenu {
    if (($env{'browser.interface'} eq 'textual') ||     if ($env{'environment.remote'} eq 'off') { return ''; }
        ($env{'environment.remote'} eq 'off')) { return ''; }  
    my $menuname = &get_menu_name();     my $menuname = &get_menu_name();
    my $nothing = &Apache::lonhtmlcommon::javascript_nothing();     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
    return('window.open('.$nothing.',"'.$menuname.'","",false);');     return('window.open('.$nothing.',"'.$menuname.'","",false);');
Line 1041  sub reopenmenu { Line 1135  sub reopenmenu {
   
 sub open {  sub open {
     my $returnval='';      my $returnval='';
     if (($env{'browser.interface'} eq 'textual') ||      if ($env{'environment.remote'} eq 'off') { 
         ($env{'environment.remote'} eq 'off')) {    return
  return           '<script type="text/javascript">'."\n"
          '<script type="text/javascript">'."\n".         .'// <![CDATA['."\n"
          '// <![CDATA['."\n".         .'self.name="loncapaclient";'."\n"
          'self.name="loncapaclient";'."\n".         .'// ]]>'."\n"
          '// ]]>'."\n".         .'</script>';
          '</script>';  
     }      }
     my $menuname = &get_menu_name();      my $menuname = &get_menu_name();
           
Line 1064  sub open { Line 1157  sub open {
     $returnval=(<<ENDOPEN);      $returnval=(<<ENDOPEN);
 // <![CDATA[  // <![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?inhibitmenu=yes","$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';
 // ]]>  // ]]>
Line 1077  ENDOPEN Line 1170  ENDOPEN
   
 sub clear {  sub clear {
     my ($row,$col)=@_;      my ($row,$col)=@_;
     unless (($env{'browser.interface'} eq 'textual') ||      unless ($env{'environment.remote'} eq 'off') {
             ($env{'environment.remote'} eq 'off')) {         if (($row<1) || ($row>13)) { return ''; }
        return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););         return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););
    } else {      } else { 
        $inlineremote[10*$row+$col]='';         $inlineremote[10*$row+$col]='';
Line 1103  sub switch { Line 1196  sub switch {
     my $idx=10*$row+$col;      my $idx=10*$row+$col;
     $category_members{$cat}.=':'.$idx;      $category_members{$cat}.=':'.$idx;
   
     unless (($env{'browser.interface'} eq 'textual')  ||      unless ($env{'environment.remote'} eq 'off') {
             ($env{'environment.remote'} eq 'off')) {         if (($row<1) || ($row>13)) { return ''; }
 # Remote  # Remote
        return "\n".         return "\n".
  qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););   qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););
    } elsif ($env{'browser.interface'} eq 'textual') {  
 # Accessibility  
        if ($nobreak==2) { return ''; }  
        my $text=$top.' '.$bot;  
        $text=~s/\s*\-\s*//gs;  
        if ($nobreak) {  
    $inlineremote[$idx]=  
        '<a href="javascript:'.$act.';">'.$text.'</a>';  
        } else {  
    $inlineremote[$idx]="\n<br />".  
        $desc.' <a href="javascript:'.$act.';">'.$text.'</a>';  
        }  
    } else {     } else {
 # Inline Remote  # Inline Remote
        if ($env{'environment.icons'} ne 'classic') {         if ($env{'environment.icons'} ne 'classic') {
Line 1132  sub switch { Line 1213  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="LC_icon" />';
        if ($env{'browser.interface'} eq 'faketextual') {         if ($env{'browser.interface'} eq 'faketextual') {
 # Accessibility  # Main Menu
    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 1158  sub switch { Line 1239  sub switch {
               $inlineremote[$idx]='<a title="'.$desc.'" href="javascript:'.$act.';">'.$pic.'</a>';                $inlineremote[$idx]='<a title="'.$desc.'" href="javascript:'.$act.';">'.$pic.'</a>';
            } else {             } else {
       $inlineremote[$idx]=        $inlineremote[$idx]=
    '<a class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.     '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.
    '<span class="LC_menubuttons_inline_text">'.$desc.'</span></a>';     '<span class="LC_menubuttons_inline_text">'.$desc.'</span></a>';
            }             }
        }         }
Line 1182  sub secondlevel { Line 1263  sub secondlevel {
   
 sub openmenu {  sub openmenu {
     my $menuname = &get_menu_name();      my $menuname = &get_menu_name();
     if (($env{'browser.interface'} eq 'textual') ||      if ($env{'environment.remote'} eq 'off') { return ''; }
         ($env{'environment.remote'} eq 'off')) { return ''; }  
     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();      my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
     return "window.open(".$nothing.",'".$menuname."');";      return "window.open(".$nothing.",'".$menuname."');";
 }  }
Line 1191  sub openmenu { Line 1271  sub openmenu {
 sub inlinemenu {  sub inlinemenu {
     undef(@inlineremote);      undef(@inlineremote);
     undef(%category_members);      undef(%category_members);
   # calling rawconfig with "1" will evaluate mydesk.tab, even if there is no active remote control
     &rawconfig(1);      &rawconfig(1);
     my $output='<table id="LC_mainmenu"><tr>';      my $output='<table><tr>';
     for (my $col=1; $col<=2; $col++) {      for (my $col=1; $col<=2; $col++) {
         $output.='<td class="LC_mainmenu_col_fieldset">';          $output.='<td class="LC_mainmenu_col_fieldset">';
         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="LC_Box LC_400Box">';
        $output.='<legend class="LC_mainmenu_fieldset_category">'.&mt($category_names{$cat}).'</legend>';         $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>';
                $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 1212  sub inlinemenu { Line 1293  sub inlinemenu {
                   $output.=$inlineremote[$item];                    $output.=$inlineremote[$item];
                }                 }
                $output.='</table>';                 $output.='</table>';
                $output.='</fieldset>';                 $output.='</div>';
             }              }
          }           }
          $output.="</td>";           $output.="</td>";
Line 1222  sub inlinemenu { Line 1303  sub inlinemenu {
 }  }
   
 sub rawconfig {  sub rawconfig {
   #
   # This evaluates mydesk.tab
   # Need to add more positions and more privileges to deal with all
   # menu items.
   #
     my $textualoverride=shift;      my $textualoverride=shift;
     my $output='';      my $output='';
     unless (($env{'browser.interface'} eq 'textual') ||      unless ($env{'environment.remote'} eq 'off') {
             ($env{'environment.remote'} eq 'off')) {  
        $output.=         $output.=
  "window.status='Opening Remote Control';var swmenu=".&openmenu().   "window.status='Opening Remote Control';var swmenu=".&openmenu().
 "\nwindow.status='Configuring Remote Control ';";  "\nwindow.status='Configuring Remote Control ';";
Line 1255  sub rawconfig { Line 1340  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;          if ($env{'environment.remotenavmap'} eq 'on') {
                unless ($env{'environment.remote'} eq 'on') {
                    if ($img eq 'nav.gif') {
                        $act = "gonav('/adm/navmaps','')";
                    }
                }
           }
         if ($prt =~ /\$crs/) {          if ($prt =~ /\$crs/) {
             next unless ($env{'request.course.id'});              next unless ($env{'request.course.id'});
             next if ($crstype eq 'Community');              next if ($crstype eq 'Community');
Line 1307  sub rawconfig { Line 1398  sub rawconfig {
         } elsif ($pro eq 'course')  {          } elsif ($pro eq 'course')  {
             if (($env{'request.course.fn'}) && ($crstype ne 'Community')) {              if (($env{'request.course.fn'}) && ($crstype ne 'Community')) {
                $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')  {          } elsif ($pro eq 'community')  {
             if (($env{'request.course.fn'}) && ($crstype eq 'Community')) {              if (($env{'request.course.fn'}) && ($crstype eq 'Community')) {
                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
Line 1322  sub rawconfig { Line 1413  sub rawconfig {
                         $coursepref = $domdefs{'canuse_pdfforms'};                          $coursepref = $domdefs{'canuse_pdfforms'};
                     }                      }
                 }                  }
                 if ($coursepref) {                  if ($coursepref) { 
                     $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                      $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
                 }                  }
             }              }
Line 1336  sub rawconfig { Line 1427  sub rawconfig {
                         $coursepref = $domdefs{'canuse_pdfforms'};                          $coursepref = $domdefs{'canuse_pdfforms'};
                     }                      }
                 }                  }
                 if ($coursepref) {                  if ($coursepref) { 
                     $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 =~ /^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'}) && ($crstype ne '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 =~ /^community_(.*)$/) {          } elsif ($pro =~ /^community_(.*)$/) {
             # Check for permissions inside of a community              # Check for permissions inside of a community
             if (($env{'request.course.id'}) && ($crstype eq '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'}:''))
                  )) {                   )) {
Line 1404  sub rawconfig { Line 1495  sub rawconfig {
             $prt='any';              $prt='any';
             $output.=&secondlevel(              $output.=&secondlevel(
           $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);
   
         }          }
     }      }
     unless (($env{'browser.interface'} eq 'textual') ||      unless ($env{'environment.remote'} eq 'off') {
             ($env{'environment.remote'} eq 'off')) {  
        $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";         $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";
        if (&Apache::lonmsg::newmail()) {          if (&Apache::lonmsg::newmail()) { 
    $output.='swmenu.setstatus("you have","messages");';     $output.='swmenu.setstatus("you have","messages");';
Line 1443  sub check_for_rcrs { Line 1532  sub check_for_rcrs {
 # ======================================================================= Close  # ======================================================================= Close
   
 sub close {  sub close {
     if (($env{'browser.interface'} eq 'textual') ||      if ($env{'environment.remote'} eq 'off') { return ''; }
         ($env{'environment.remote'} eq 'off')) { return ''; }  
     my $menuname = &get_menu_name();      my $menuname = &get_menu_name();
     return(<<ENDCLOSE);      return(<<ENDCLOSE);
 <script type="text/javascript">  <script type="text/javascript">
Line 1486  function gonav(url) { Line 1574  function gonav(url) {
 NAVCONTROL  NAVCONTROL
 }  }
   
   sub dc_popup_js {
       my %lt = &Apache::lonlocal::texthash(
                                             more => '(More ...)',
                                             less => '(Less ...)',
                                           );
       return <<"END";
   
   function showCourseID() {
       document.getElementById('dccid').style.display='block';
       document.getElementById('dccid').style.textAlign='left';
       document.getElementById('dccid').style.textFace='normal';
       document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();">$lt{'less'}</a>';
       return;
   }
   
   function hideCourseID() {
       document.getElementById('dccid').style.display='none';
       document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()">$lt{'more'}</a>';
       return;
   }
   
   END
   
   }
   
 sub utilityfunctions {  sub utilityfunctions {
     my $caller = shift;      my $caller = shift;
     unless (($env{'browser.interface'} eq 'textual')  ||      unless ($env{'environment.remote'} eq 'off' || 
         ($env{'environment.remote'} eq 'off') || ($caller eq '/adm/menu')) { return ''; }              $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 ($currenturl =~ m{^/adm/wrapper/ext/}) {
         if ($env{'request.external.querystring'}) {          if ($env{'request.external.querystring'}) {
Line 1501  sub utilityfunctions { Line 1616  sub utilityfunctions {
     my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});      my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
     my $nav_control=&nav_control_js();      my $nav_control=&nav_control_js();
   
       my $dc_popup_cid;
       if ($env{'user.adv'} && exists($env{'user.role.dc./'.
                           $env{'course.'.$env{'request.course.id'}.
                                    '.domain'}.'/'})) {
           $dc_popup_cid = &dc_popup_js();
       }
   
     my $start_page_annotate =       my $start_page_annotate = 
         &Apache::loncommon::start_page('Annotator',undef,          &Apache::loncommon::start_page('Annotator',undef,
        {'only_body' => 1,         {'only_body' => 1,
Line 1521  sub utilityfunctions { Line 1643  sub utilityfunctions {
     my $end_page_bookmark =       my $end_page_bookmark = 
         &Apache::loncommon::end_page({'js_ready' => 1});          &Apache::loncommon::end_page({'js_ready' => 1});
   
       my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
                            &mt('Switch server?');
   
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
   
     var currentURL="$currenturl";      var currentURL="$currenturl";
Line 1528  return (<<ENDUTILITY) Line 1653  return (<<ENDUTILITY)
     var currentSymb="$currentsymb";      var currentSymb="$currentsymb";
   
 $nav_control  $nav_control
   $dc_popup_cid
   
 function go(url) {  function go(url) {
    if (url!='' && url!= null) {     if (url!='' && url!= null) {
Line 1537  function go(url) { Line 1663  function go(url) {
    }     }
 }  }
   
   function need_switchserver(url) {
       if (url!='' && url!= null) {
           if (confirm("$confirm_switch")) {
               go(url);
           }
       }
       return;
   }
   
 function gopost(url,postdata) {  function gopost(url,postdata) {
    if (url!='') {     if (url!='') {
       this.document.server.action=url;        this.document.server.action=url;
Line 1613  function catalog_info() { Line 1748  function catalog_info() {
 }  }
   
 function chat_win() {  function chat_win() {
    lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');     lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
 }  }
   
 function group_chat(group) {  function group_chat(group) {
Line 1626  function edit_bookmarks() { Line 1761  function edit_bookmarks() {
    go('');     go('');
    w_BookmarkPal_flag=1;     w_BookmarkPal_flag=1;
    bookmarkpal=window.open("/adm/bookmarks",     bookmarkpal=window.open("/adm/bookmarks",
                "BookmarkPal", "width=400,height=505,scrollbars=0");                 "BookmarkPal", "width=500,height=505,scrollbars=0");
 }  }
   
 function annotate() {  function annotate() {
Line 1653  function set_bookmark() { Line 1788  function set_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" '     +'> <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" '
Line 1731  sub roles_selector { Line 1866  sub roles_selector {
         $ccrole = 'co';          $ccrole = 'co';
     } else {      } else {
         $ccrole = 'cc';          $ccrole = 'cc';
     }      } 
     if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) {      if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) {
         my ($start,$end) = split(/\./,$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 1761  sub roles_selector { Line 1897  sub roles_selector {
                 }                  }
                 if (ref($courseroles{$role}) eq 'ARRAY') {                  if (ref($courseroles{$role}) eq 'ARRAY') {
                     if ($sec ne '') {                      if ($sec ne '') {
                         if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) {                          if (!grep(/^\Q$sec\E$/,@{$courseroles{$role}})) {
                             push(@{$courseroles{$role}},$sec);                              push(@{$courseroles{$role}},$sec);
                             $seccount{$role} ++;                              $seccount{$role} ++;
                         }                          }
Line 1782  sub roles_selector { Line 1918  sub roles_selector {
     } else {      } else {
         $switchtext = &mt('Switch course role to...')          $switchtext = &mt('Switch course role to...')
     }      }
   
     my @roles_order = ($ccrole,'in','ta','ep','ad','st');      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);
Line 1801  sub roles_selector { Line 1936  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".                 &HTML::Entities::encode($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 1815  sub get_all_courseroles { Line 1950  sub get_all_courseroles {
     unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) {      unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) {
         return;          return;
     }      }
     my ($result,$cached) =      my ($result,$cached) = 
         &Apache::lonnet::is_cached_new('getcourseroles',$cdom.'_'.$cnum);          &Apache::lonnet::is_cached_new('getcourseroles',$cdom.'_'.$cnum);
     if (defined($cached)) {      if (defined($cached)) {
         if (ref($result) eq 'HASH') {          if (ref($result) eq 'HASH') {
             if ((ref($result->{'roles'}) eq 'HASH') &&              if ((ref($result->{'roles'}) eq 'HASH') && 
                 (ref($result->{'seccount'}) eq 'HASH')) {                  (ref($result->{'seccount'}) eq 'HASH')) {
                 %{$courseroles} = %{$result->{'roles'}};                  %{$courseroles} = %{$result->{'roles'}};
                 %{$seccount} = %{$result->{'seccount'}};                  %{$seccount} = %{$result->{'seccount'}};
Line 1838  sub get_all_courseroles { Line 1973  sub get_all_courseroles {
         }          }
         if (ref($courseroles->{$urole}) eq 'ARRAY') {          if (ref($courseroles->{$urole}) eq 'ARRAY') {
             if ($usec ne '') {              if ($usec ne '') {
                 if (!grep(/^\Q$usec\E$/,@{$courseroles->{$urole}})) {                  if (!grep(/^Q$usec\E$/,@{$courseroles->{$urole}})) {
                     push(@{$courseroles->{$urole}},$usec);                      push(@{$courseroles->{$urole}},$usec);
                     $seccount->{$urole} ++;                      $seccount->{$urole} ++;
                 }                  }
Line 1855  sub get_all_courseroles { Line 1990  sub get_all_courseroles {
     @{$courseroles->{'st'}} = ();      @{$courseroles->{'st'}} = ();
     if (keys(%sections_count) > 0) {      if (keys(%sections_count) > 0) {
         push(@{$courseroles->{'st'}},keys(%sections_count));          push(@{$courseroles->{'st'}},keys(%sections_count));
         $seccount->{'st'} = scalar(keys(%sections_count));          $seccount->{'st'} = scalar(keys(%sections_count)); 
     }      }
     my $rolehash = {      my $rolehash = {
                      'roles'    => $courseroles,                       'roles'    => $courseroles,
Line 1919  function adhocRole(roleitem) { Line 2054  function adhocRole(roleitem) {
             secok = 0;              secok = 0;
             var numrolesec = rolesections[selidx].length;              var numrolesec = rolesections[selidx].length;
             var msgidx = numsec[selidx] - numrolesec;              var msgidx = numsec[selidx] - numrolesec;
             secchoice = prompt("$lt{'this'}\\n"+secpick[msgidx]+"\\n$lt{'avai'} "+roleseclist[selidx],"");              secchoice = prompt("$lt{'this'} "+secpick[msgidx]+"\\n$lt{'avai'} "+roleseclist[selidx],"");
             if (secchoice == '') {              if (secchoice == '') {
                 if (msgidx > 0) {                  if (msgidx > 0) {
                     secok = 1;                      secok = 1;
Line 1979  END Line 2114  END
   
 BEGIN {  BEGIN {
     if (! defined($readdesk)) {      if (! defined($readdesk)) {
  {          {
     my $tabfile = $Apache::lonnet::perlvar{'lonTabDir'}.'/mydesk.tab';              my $tabfile = $Apache::lonnet::perlvar{'lonTabDir'}.'/mydesk.tab';
     if ( CORE::open( my $config,"<$tabfile") ) {              if ( CORE::open( my $config,"<$tabfile") ) {
  while (my $configline=<$config>) {                  while (my $configline=<$config>) {
     $configline=(split(/\#/,$configline))[0];                      $configline=(split(/\#/,$configline))[0];
     $configline=~s/^\s+//;                      $configline=~s/^\s+//;
     chomp($configline);                      chomp($configline);
                     if ($configline=~/^cat\:/) {                      if ($configline=~/^cat\:/) {
                        my @entries=split(/\:/,$configline);                          my @entries=split(/\:/,$configline);
                        $category_positions{$entries[2]}=$entries[1];                          $category_positions{$entries[2]}=$entries[1];
                        $category_names{$entries[2]}=$entries[3];                          $category_names{$entries[2]}=$entries[3];
     } elsif ($configline) {                      } elsif ($configline=~/^prim\:/) {
  push(@desklines,$configline);                          my @entries = (split(/\:/, $configline))[1..5];
     }                          push @primary_menu, \@entries;
  }                      } elsif ($configline=~/^scnd\:/) {
  CORE::close($config);                          my @entries = (split(/\:/, $configline))[1..5];
     }                          push @secondary_menu, \@entries; 
  }                      } elsif ($configline) {
  $readdesk='done';                          push(@desklines,$configline);
                       }
                   }
                   CORE::close($config);
               }
           }
           $readdesk='done';
     }      }
 }  }
   
 1;  1;
 __END__  __END__
   
   
   
   
   
   
   

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


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