Diff for /loncom/interface/lonmenu.pm between versions 1.309.2.4 and 1.315.2.5

version 1.309.2.4, 2009/12/15 05:25:07 version 1.315.2.5, 2010/12/25 00:32:05
Line 42  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
   
 Little texts  =item prep_menuitems(\@menuitem)
   
   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 150  sub prep_menuitem { Line 205  sub prep_menuitem {
     } else {             # textual Link      } else {             # textual Link
         $link = &mt($$menuitem[3]);          $link = &mt($$menuitem[3]);
     }      }
       if($$menuitem[4] eq 'newmsg'){   #special style for New Messages
           return '<li><a href="'.$$menuitem[0].'"><span class="LC_new_message">'.$link.'</span></a></li>';
       }
     return '<li><a href="'.$$menuitem[0].'">'.$link.'</a></li>';      return '<li><a href="'.$$menuitem[0].'">'.$link.'</a></li>';
 }  }
   
Line 160  sub prep_menuitem { Line 218  sub prep_menuitem {
 # entries from mydesk.tab  # entries from mydesk.tab
 sub primary_menu {  sub primary_menu {
     my $menu;      my $menu;
     my $custommenu = &Apache::loncommon::needs_gci_custom();  
     # each element of @primary contains following array:      # each element of @primary contains following array:
     # (link url, icon path, alt text, link text, condition)      # (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) {      foreach my $menuitem (@primary_menu) {
         # evaluate conditions           # evaluate conditions 
         next if    ref($menuitem)       ne 'ARRAY';    #          next if    ref($menuitem)       ne 'ARRAY';    #
Line 170  sub primary_menu { Line 232  sub primary_menu {
                 && &Apache::lonmsg::mynewmail();       # whether a new msg                   && &Apache::lonmsg::mynewmail();       # whether a new msg 
         next if    $$menuitem[4]        eq 'newmsg'    # arrived or not          next if    $$menuitem[4]        eq 'newmsg'    # arrived or not
                 && !&Apache::lonmsg::mynewmail();      #                   && !&Apache::lonmsg::mynewmail();      # 
         next if    $$menuitem[4]        !~ /public/    ##we've a public user,           next if    $$menuitem[4]        !~ /public/    ##we've a public user,
                 && $env{'user.name'}    eq 'public'    ##who should not see all                   && $public;                            ##who should not see all
                 && $env{'user.domain'}  eq 'public';   ##links                                                         ##links
         next if    $$menuitem[4]        eq 'onlypublic'# hide links which are           next if    $$menuitem[4]        eq 'onlypublic'# hide links which are
                 && $env{'user.name'}    ne 'public'    # only visible to public                  && !$public;                           # only visible to public
                 && $env{'user.domain'}  ne 'public';   # users                                                         # users
         next if    $$menuitem[4]        eq 'roles'     # hide links which are  
                 && $custommenu;                        # not visible when GCI  
         next if    $$menuitem[4]        eq 'courses'   # tabbed interface in use  
                 && $custommenu;                        #   
         next if    $$menuitem[4]        eq 'roles'     ##show links depending on          next if    $$menuitem[4]        eq 'roles'     ##show links depending on
                 && &Apache::loncommon::show_course();  ##term 'Courses' or                   && &Apache::loncommon::show_course();  ##term 'Courses' or
         next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted          next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
                 && !&Apache::loncommon::show_course(); ##                  && !&Apache::loncommon::show_course(); ##
           
               
         if ($$menuitem[3] eq 'Help') { # special treatment for helplink          if ($$menuitem[3] eq 'Help') { # special treatment for helplink
             $menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>';              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 {          } else {
             my @items = @{$menuitem};              my @items = @{$menuitem};
             $items[0] = 'javascript:'.$menuitem->[0].';';              $items[0] = 'javascript:'.$menuitem->[0].';';
Line 198  sub primary_menu { Line 267  sub primary_menu {
     return "<ol class=\"LC_primary_menu LC_right\">$menu</ol>";      return "<ol class=\"LC_primary_menu LC_right\">$menu</ol>";
 }  }
   
   #returns hashref {user=>'',dom=>''} containing:
   #   own name, domain if user is au
   #   name, domain of parent author if user is ca or aa
   #empty return if user is not an author or not on homeserver
   #
   #TODO this should probably be moved somewhere more central
   #since it can be used by different parts of the system
   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;
       }
   
       # if wrong server
       return;
   }
   
   
 sub secondary_menu {  sub secondary_menu {
     my $menu;      my $menu;
   
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});      my $crs_sec = $env{'request.course.id'} . ($env{'request.course.sec'}
     my $canviewgrps = &Apache::lonnet::allowed('vcg', $env{'request.course.id'}                                                 ? "/$env{'request.course.sec'}"
                    . ($env{'request.course.sec'} ? "/$env{'request.course.sec'}"                                                 : '');
                                                  : ''));       my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
       my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec);
       my $author        = getauthor();
   
     my $showlink = &show_return_link();      my $showlink = &show_return_link();
     my %groups = &Apache::lonnet::get_active_groups(      my %groups = &Apache::lonnet::get_active_groups(
                      $env{'user.domain'}, $env{'user.name'},                       $env{'user.domain'}, $env{'user.name'},
Line 216  sub secondary_menu { Line 313  sub secondary_menu {
         # evaluate conditions           # evaluate conditions 
         next if    ref($menuitem)  ne 'ARRAY';          next if    ref($menuitem)  ne 'ARRAY';
         next if    $$menuitem[4]   ne 'always'          next if    $$menuitem[4]   ne 'always'
                   && $$menuitem[4]   ne 'author'
                 && !$env{'request.course.id'};                  && !$env{'request.course.id'};
         next if    $$menuitem[4]   eq 'showreturn'          next if    $$menuitem[4]   eq 'showreturn'
                 && !$showlink                  && !$showlink
Line 237  sub secondary_menu { Line 335  sub secondary_menu {
         next if    $$menuitem[4]   =~ /showgroups$/          next if    $$menuitem[4]   =~ /showgroups$/
                 && !$canviewgrps                  && !$canviewgrps
                 && !%groups;                  && !%groups;
           next if    $$menuitem[4]    eq 'author'
                   && !$author;
   
         if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {          if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
             # special treatment for role selector              # special treatment for role selector
Line 278  sub secondary_menu { Line 378  sub secondary_menu {
         $menu =~ s/\[url\]/$escurl/g;          $menu =~ s/\[url\]/$escurl/g;
         $menu =~ s/\[symb\]/$escsymb/g;          $menu =~ s/\[symb\]/$escsymb/g;
     }      }
       $menu =~ s/\[uname\]/$$author{user}/g;
       $menu =~ s/\[udom\]/$$author{dom}/g;
   
     return "<ul id=\"LC_secondary_menu\">$menu</ul>";      return "<ul id=\"LC_secondary_menu\">$menu</ul>";
 }  }
   
 sub gci_secondary_menu {  sub show_return_link {
     my %courses = (      if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)})
         'review' => 'gci_9615072b469884921gcil1',          || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) {
         'submit' => 'gci_1H96711d710194bfegcil1',  
     );  
     my %linktext = (  
         'review'      => 'Review Questions',  
         'submit'      => 'Submit Questions',  
         'managetest'  => 'Manage Tests',  
     );  
     my %links = (  
                   'managetest' => '/adm/menu',  
                 );  
     my $current = 'managetest';  
     foreach my $key (keys(%courses)) {  
         $links{$key} = "javascript:switchpage('$key');";  
         if ($env{'request.course.id'} eq $courses{$key}) {  
             $links{$key} = '/adm/navmaps';  
             $current = $key;  
             $links{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu';  
         }  
     }  
     my @menutabs = ('review','submit','managetest');  
     my $tabs;  
     foreach my $item (@menutabs) {  
         if ($item eq $current) {  
             $tabs .= ' <li id="current"><a href="'.$links{$item}.'">'.  
                      $linktext{$item}.'</a></li>';  
         } else {  
             $tabs .= ' <li><a href="'.$links{$item}.'">'.  
                      $linktext{$item}.'</a></li>';  
         }  
     }  
     return '<div id="gciheader">'.  
            '<ul>'.$tabs.'</ul></div><br />';  
 }  
   
 #  
 # This routine returns a translated hash for the menu items in the top inline menu row  
 # Probably should be in mydesk.tab  
   
 #SD this sub is deprecated - don't use it  
 sub initlittle {  
     return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',  
        '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',  
                                        );  
 }  
   
 #SD this sub is deprecated - don't use it  
 #SD functionality is covered by new loncommon::bodytag and primary_menu(), secondary_menu()  
 sub menubuttons {  
     my $forcereg=shift;  
     my $titletable=shift;  
 #  
 # Early-out for pages that should not have a menu, triggered by query string "inhibitmenu=yes"  
 #  
     &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();  
     my $navmaps='';  
     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);  
 #  
 # if the URL is hidden, symbs and the non-versioned version of the URL would be encrypted  
 #  
     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 = '<a href="/adm/about.html"><img src="'.  
  $logo.'" alt="LON-CAPA Logo" class="LC_noBorder" /></a>';  
   
     if ($env{'request.state'} eq 'construct') {  
 #  
 # We are in construction space  
 #  
         if (($env{'request.noversionuri'} eq '') || (!defined($env{'request.noversionuri'}))) {  
             my $returnurl = $env{'request.filename'};  
             $returnurl =~ s:^/home/([^/]+)/public_html/(.*)$:/priv/$1/$2:;  
             $escurl = &escape($returnurl);  
         }  
     }  
     if ($env{'request.course.id'}) {  
 #  
 # We are in a course  
 #  
         $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
         $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
         my %coursegroups;  
         my $viewgrps_permission =  
     &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));  
         if (!$viewgrps_permission) {  
             %coursegroups = &Apache::lonnet::get_active_groups($env{'user.domain'},$env{'user.name'},$cdom,$cnum);  
  }  
         if ((keys(%coursegroups) > 0) || ($viewgrps_permission)) {  
             $showgroups = 1;  
         }  
         $role_selector = &roles_selector($cdom,$cnum);  
         if ($role_selector) {  
             $roles = '<span class="LC_nobreak">'.$role_selector.'&nbsp;&nbsp;<a href="/adm/roles" target="_top">'.$lt{'other'}.'</a></span>';  
         }  
     }  
   
     if ($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);  
             <ol class="LC_primary_menu LC_right">  
                 <li>$logo</li>  
                 <li><a href="/adm/roles" target="_top">$lt{'login'}</a></li>  
             </ol>  
             <hr />  
 ENDINLINEMENU  
         }  
         $roles = '<a href="/adm/roles" target="_top">'.$lt{'roles'}.'</a>';  
 # 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);  
 <li><a href="$link" target="_top">$lt{'nav'}</a></li>  
 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);  
 <li><a href="/adm/coursedocs" target="_top">$text</a></li>  
 ENDDOCS  
             }  
             if ($showgroups) {  
                 $groups =(<<ENDGROUPS);  
 <li><a href="/adm/coursegroups" target="_top">$lt{'groups'}</a></li>  
 ENDGROUPS  
             }  
     if (&show_return_link()) {  
                 my $escreload=&escape('return:');  
                 $reloadlink=(<<ENDRELOAD);  
 <li><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></li>  
 ENDRELOAD  
             }  
             if ($role_selector) {  
             #$roles = '<td>'.$role_selector.'</td><td><a href="/adm/roles" target="_top">'.$lt{'other'}.'</a></td>';  
  $role_selector = '<li>'.$role_selector.'</li>';  
             }  
         }  
  if (($env{'request.state'} eq 'construct') && ($env{'request.course.id'})) {  
     my $escreload=&escape('return:');  
     $reloadlink=(<<ENDCRELOAD);  
 <li><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></li>  
 ENDCRELOAD  
         }  
     my $reg     = $forcereg ? &innerregister($forcereg,$titletable) : '';  
     my $form    = &serverform();  
     my $utility = &utilityfunctions();  
   
     #Prepare the message link that indicates the arrival of new mail  
     my $messagelink = &Apache::lonmsg::mynewmail() ? "Message (new)" : "Message";  
        $messagelink = '<a href="javascript:go(\'/adm/communicate\');">'  
                       . mt($messagelink) .'</a>';  
   
     my $helplink = &Apache::loncommon::top_nav_help('Help');          return if ($env{'form.register'});
  return (<<ENDINLINEMENU);  
 <script type="text/javascript">  
 // <![CDATA[  
 // BEGIN LON-CAPA Internal  
 $utility  
 // ]]>  
 </script>  
 <ol class="LC_primary_menu LC_right">  
  <li>$logo</li>  
  <li>$messagelink</li>  
  <li>$roles</li>  
  <li>$helplink</li>  
  <li><a href="/adm/logout" target="_top">$lt{'exit'}</a></li>  
 </ol>  
 <ul id="LC_secondary_menu">  
 <li><a href="/adm/menu" target="_top">$lt{'main'}</a></li>  
 $reloadlink  
 $navmaps  
 $docs  
 $groups  
 $role_selector  
 </ul>  
 $form  
 <script type="text/javascript">  
 // END LON-CAPA Internal  
 </script>  
 $reg  
 ENDINLINEMENU  
     } else {  
  return '';  
     }      }
 }  
   
 sub show_return_link {  
     return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&      return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&
      $env{'request.symb'} eq '')       $env{'request.symb'} eq '')
     ||      ||
Line 519  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 592  sub innerregister { Line 471  sub innerregister {
         } else {          } else {
             $contentstext = &mt('Course Contents');              $contentstext = &mt('Course Contents');
         }          }
         my @crumbs = ({text  => $contentstext,           my @crumbs;
                        href  => "Javascript:gonav('/adm/navmaps')"});          unless (($forcereg) && ($env{'request.noversionuri'} eq '/adm/navmaps')
                   && ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
               @crumbs = ({text  => $contentstext,
                           href  => "Javascript:gopost('/adm/navmaps','')"});
           }
         if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) {           if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { 
             push(@crumbs, {text  => '...',              push(@crumbs, {text  => '...',
                            no_mt => 1});                             no_mt => 1});
Line 608  sub innerregister { Line 490  sub innerregister {
   
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);          &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
   
         #$breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);          #$breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
  unless (($env{'request.state'} eq 'edit') || ($newmail) ||   unless (($env{'request.state'} eq 'edit') || ($newmail) ||
  ($env{'request.state'} eq 'construct') ||   ($env{'request.state'} eq 'construct') ||
Line 615  sub innerregister { Line 498  sub innerregister {
             $separator = &Apache::loncommon::head_subbox();              $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;
Line 708  sub innerregister { Line 596  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'});
                 if (defined($cnum) && defined($cdom)) {                  if (defined($cnum) && defined($cdom)) {
Line 718  sub innerregister { Line 608  sub innerregister {
                     # Check that the user has permission to edit this resource                      # Check that the user has permission to edit this resource
                     ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);                      ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
                     if (defined($cfudom)) {                      if (defined($cfudom)) {
         my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);          $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
         my $allowed=0;          my $allowed=0;
         my @ids=&Apache::lonnet::current_machine_ids();          my @ids=&Apache::lonnet::current_machine_ids();
         foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }          foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
         if ($allowed) {          if ($allowed) {
                             $cfile=$file;                              $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 741  sub innerregister { Line 633  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 '') {
Line 838  $menuitems.="Make notes and annotations Line 740  $menuitems.="Make notes and annotations
                                 "&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
Line 880  ENDMENUITEMS Line 782  ENDMENUITEMS
     my $inlinebuttons='';      my $inlinebuttons='';
     if ($addremote) {      if ($addremote) {
   
         #SD START (work in progress!)  
         Apache::lonhtmlcommon::clear_breadcrumb_tools();          Apache::lonhtmlcommon::clear_breadcrumb_tools();
         # Arrows for navigation  
         Apache::lonhtmlcommon::add_breadcrumb_tool( 'A', $inlineremote[21] );  
         Apache::lonhtmlcommon::add_breadcrumb_tool( 'A', $inlineremote[23] );  
         if(hidden_button_check() ne 'yes'){  
             # notes  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[93]);  
             # bookmark  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[91]);  
             # evaluate  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[81]);  
             # feedback  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[82]);  
             # print  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[83]);  
             # metadata  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'B', $inlineremote[63]);  
   
             # ?  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'C', $inlineremote[61]);  
             # ?  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'C', $inlineremote[71]);  
             # ?  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'C', $inlineremote[72]);  
             # ?  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'C', $inlineremote[73]);  
             # ?  
             Apache::lonhtmlcommon::add_breadcrumb_tool( 'C', $inlineremote[92]);  
   
               Apache::lonhtmlcommon::add_breadcrumb_tool(
                   'navigation', @inlineremote[21,23]);
   
           if(hidden_button_check() ne 'yes') {
               Apache::lonhtmlcommon::add_breadcrumb_tool(
                   'tools', @inlineremote[93,91,81,82,83]);
   
               #publish button in construction space
               if ($env{'request.state'} eq 'construct'){
                   Apache::lonhtmlcommon::add_breadcrumb_tool(
                        'advtools', @inlineremote[63]);
               }else{
                   Apache::lonhtmlcommon::add_breadcrumb_tool(
                        'tools', @inlineremote[63]);
               }
   
               unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {
                   Apache::lonhtmlcommon::add_breadcrumb_tool(
                       'advtools', @inlineremote[61,71,72,73,92]);
               }
         }          }
   
         #SD END  
 #       # Registered, textual output  #       # Registered, textual output
 #        if ( $env{'environment.icons'} eq 'iconsonly' ) {  #        if ( $env{'environment.icons'} eq 'iconsonly' ) {
 #            $inlinebuttons = (<<ENDARROWSINLINE);  #            $inlinebuttons = (<<ENDARROWSINLINE);
Line 947  ENDMENUITEMS Line 840  ENDMENUITEMS
 #            }  #            }
 #        }  #        }
     }      }
         #SD see below  
         $breadcrumb = &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);          $breadcrumb = &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
     $result =(<<ENDREGTEXT);      $result =(<<ENDREGTEXT);
 <script type="text/javascript">  <script type="text/javascript">
Line 1373  sub openmenu { Line 1265  sub openmenu {
 }  }
   
 sub inlinemenu {  sub inlinemenu {
     my ($context,$switcher) = @_;  
     undef(@inlineremote);      undef(@inlineremote);
     undef(%category_members);      undef(%category_members);
     my $output;  # calling rawconfig with "1" will evaluate mydesk.tab, even if there is no active remote control
     if ($context eq 'gcicustom') {      &rawconfig(1);
         my $createtext = &mt('Create Concept Test');      my $output='<table><tr>';
         if ($switcher) {      for (my $col=1; $col<=2; $col++) {
             $createtext = &mt('Create New Test');          $output.='<td class="LC_mainmenu_col_fieldset">';
         }          for (my $row=1; $row<=8; $row++) {
         $output='<table><tr>'.              foreach my $cat (keys(%category_members)) {
                 '<td class="LC_mainmenu_col_fieldset">'.                 if ($category_positions{$cat} ne "$col,$row") { next; }
                 '<div class="LC_Box LC_400Box">'.                 #$output.='<table><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>';
                 '<h3 class="LC_hcell">'.&mt('Utilities').'</h3>'.                 $output.='<div class="LC_Box LC_400Box">';
                 '<table><tr><td align="left"><a href="javascript:switchpage('."'createtest'".');"><img alt="choose role" src="/res/adm/pages/rcrs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:switchpage('."'createtest'".');"><span class="LC_menubuttons_inline_text">'.$createtext.'</span></a></td></tr>';         $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>';
         if ($switcher) {                 $output.='<table>';
             $output .= '<tr><td align="left"><a href="javascript:courseswitcher('."'icon'".');"><img alt="choose role" src="/res/adm/pages/roles.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="2">'.$switcher.'</td></tr>';                 my %active=();
         }                 foreach my $menu_item (split(/\:/,$category_members{$cat})) {
         $output .= '<tr><td align="left"><a href="javascript:go('."'/adm/communicate'".');"><img alt="communication" src="/res/adm/pages/com.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/communicate'".');"><span class="LC_menubuttons_inline_text">'.&mt('Send/Display Messages').'</span></a></td></tr></table></div></td>';                    if ($inlineremote[$menu_item]) {
         if (($env{'request.course.id'}) &&                       $active{$menu_item}=1;
             (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {                    }
             $output.= '<td class="LC_mainmenu_col_fieldset">'.                 }  
                       '<div class="LC_Box LC_400Box">'.                 foreach my $item (sort(keys(%active))) {
                       '<h3 class="LC_hcell">'.&mt('Test Management').'</h3>'.                    $output.=$inlineremote[$item];
                       '<table><tr><td align="left"><a href="javascript:gonav('."'/adm/navmaps'".');"><img alt="course contents" src="/res/adm/pages/nav.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:gonav('."'/adm/navmaps'".');"><span class="LC_menubuttons_inline_text">Concept Test Contents</span></a></td></tr>'."\n".                 }
                       '<tr><td align="left"><a href="javascript:go('."'/adm/coursedocs'".');"><img alt="assemble test" src="/res/adm/pages/docs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/coursedocs'".');"><span class="LC_menubuttons_inline_text">Assemble Concept Test</span></a></td></tr>'."\n".                 $output.='</table>';
                       '<tr><td align="left"><a href="javascript:go('."'/adm/createuser'".');"><img alt="user privs" src="/res/adm/pages/cprv.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/createuser'".');"><span class="LC_menubuttons_inline_text">'.&mt('Manage Enrollment').'</span></a></td></tr>'."\n".                 $output.='</div>';
                 '<tr><td align="left"><a href="javascript:go('."'/adm/whatsnew'".');"><img alt="what is new" src="/res/adm/pages/new.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/whatsnew'".');"><span class="LC_menubuttons_inline_text">'.&mt("What's New?").'</span></a></td></tr></table></div></td>';  
         }  
         $output.='</tr></table>';  
     } else {  
         # calling rawconfig with "1" will evaluate mydesk.tab,   
         # even if there is no active remote control  
         &rawconfig(1);  
         $output='<table><tr>';  
         for (my $col=1; $col<=2; $col++) {  
             $output.='<td class="LC_mainmenu_col_fieldset">';  
             for (my $row=1; $row<=8; $row++) {  
                 foreach my $cat (keys(%category_members)) {  
                     if ($category_positions{$cat} ne "$col,$row") { next; }  
                     $output.='<div class="LC_Box LC_400Box">';  
             $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>';  
                     $output.='<table>';  
                     my %active=();  
                     foreach my $menu_item (split(/\:/,$category_members{$cat})) {  
                         if ($inlineremote[$menu_item]) {  
                             $active{$menu_item}=1;  
                         }  
                     }  
                     foreach my $item (sort(keys(%active))) {  
                         $output.=$inlineremote[$item];  
                     }  
                     $output.='</table>';  
                     $output.='</div>';  
                 }  
             }              }
             $output.="</td>";           }
         }           $output.="</td>";
         $output.="</tr></table>";  
     }      }
       $output.="</tr></table>";
     return $output;      return $output;
 }  }
   
Line 1726  END Line 1589  END
 }  }
   
 sub utilityfunctions {  sub utilityfunctions {
     my ($caller,$custommenu) = @_;      my $caller = shift;
     unless ($env{'environment.remote'} eq 'off' ||       unless ($env{'environment.remote'} eq 'off' || 
             $caller eq '/adm/menu') {               $caller eq '/adm/menu') { 
             return ''; }              return ''; }
                    
     my $gcimenujs;  
     if ($custommenu) {  
         my %concepttests = &Apache::loncommon::existing_gcitest_courses();  
         my $managetesturl = '/adm/menu';  
         my $createtesturl = '/adm/requestcourse';  
         if (($env{'request.course.id'}) &&  
             ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gci')) {  
             my @items = keys(%concepttests);  
             if (@items== 1) {  
                 my $newrole = $items[0];  
                 $newrole =~ s{_}{/};  
                 $managetesturl = '/adm/roles?selectrole=1&cc./'.$newrole.'=1';  
             } else {  
                 $managetesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu';  
             }  
         }  
         if ($env{'request.course.id'}) {  
             $createtesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2frequestcourse';  
         }  
         $gcimenujs = <<"ENDCUSTOM";  
   
 function switchpage(caller) {  
     if (caller == 'review') {  
         document.location.href = '/adm/roles?selectrole=1&st./gci/9615072b469884921gcil1=1';  
     }  
     if (caller == 'submit') {  
         document.location.href = '/adm/roles?selectrole=1&st./gci/1H96711d710194bfegcil1=1';  
     }  
     if (caller == 'createtest') {  
         document.location.href = '$createtesturl';  
     }  
     if (caller == 'managetest') {  
         document.location.href = '$managetesturl';  
     }  
     return;  
 }  
   
 ENDCUSTOM  
     }  
          
     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 1809  ENDCUSTOM Line 1632  ENDCUSTOM
     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 1818  return (<<ENDUTILITY) Line 1644  return (<<ENDUTILITY)
 $nav_control  $nav_control
 $dc_popup_cid  $dc_popup_cid
   
 $gcimenujs  
   
 function go(url) {  function go(url) {
    if (url!='' && url!= null) {     if (url!='' && url!= null) {
        currentURL = null;         currentURL = null;
Line 1834  function gotop(url) { Line 1658  function gotop(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 1923  function edit_bookmarks() { Line 1756  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 2216  function adhocRole(roleitem) { Line 2049  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;

Removed from v.1.309.2.4  
changed lines
  Added in v.1.315.2.5


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