Diff for /loncom/interface/lonmenu.pm between versions 1.296 and 1.315.2.4

version 1.296, 2009/10/28 09:01:59 version 1.315.2.4, 2010/09/14 03:16:04
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 primary_menu()
   
 =item initlittle()  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 
   
 =item menubuttons()  =item secondary_menu()
   
 This gets called at the top of the body section  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 162  sub primary_menu { Line 220  sub primary_menu {
     my $menu;      my $menu;
     # 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 169  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'     ##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>';              $menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>';
         } else {          } else {
Line 193  sub primary_menu { Line 256  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 211  sub secondary_menu { Line 302  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 230  sub secondary_menu { Line 322  sub secondary_menu {
         next if $$menuitem[4] =~ /^(no|)remotenavCommunity$/           next if $$menuitem[4] =~ /^(no|)remotenavCommunity$/ 
                 && $crstype ne 'Community';                  && $crstype ne 'Community';
         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
             my $roles_selector = roles_selector(              my $roles_selector = &roles_selector(
                         $env{'course.' . $env{'request.course.id'} . '.domain'},                          $env{'course.' . $env{'request.course.id'} . '.domain'},
                         $env{'course.' . $env{'request.course.id'} . '.num'}  );                          $env{'course.' . $env{'request.course.id'} . '.num'}  );
   
Line 273  sub secondary_menu { Line 367  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 show_return_link {
       if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)})
           || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) {
   
 #          return if ($env{'form.register'});
 # 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 (<<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 478  sub show_return_link { Line 387  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 512  sub registerurl { Line 421  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 545  sub innerregister { Line 454  sub innerregister {
   
         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 @crumbs = ({text  => "Course Contents",           my $contentstext;
                        href  => "Javascript:gonav('/adm/navmaps')"});          if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Community') {
               $contentstext = &mt('Community Contents');
           } else {
               $contentstext = &mt('Course Contents');
           }
           my @crumbs;
           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 561  sub innerregister { Line 479  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') ||
  ($env{'form.register'})) {   ($env{'form.register'})) {
             $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 661  sub innerregister { Line 585  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 671  sub innerregister { Line 597  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) {
                 $editbutton=&switch                  my $nocrsedit;
                     ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',                  # Suppress display where CC has switched to student role.
                      "go('".$cfile."');","Edit this resource");                  if ($env{'request.course.id'}) {
                 $noeditbutton = 0;                      unless(&Apache::lonnet::allowed('mdc',
                                                       $env{'request.course.id'})) {
                           $nocrsedit = 1;
                       }
                   }
                   if ($nocrsedit) {
                       $editbutton=&clear(6,1);
                   } 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
                          ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',
                          $bot,"Edit this resource");
                       $noeditbutton = 0;
                   }
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);                  $editbutton=&clear(6,1);
             }              }
Line 735  s&7&1&del.gif&delete[_1]&resource[_2]&go Line 685  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 '' ) {
 #  #
Line 771  $menuitems.="Make notes and annotations Line 729  $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 811  ENDMENUITEMS Line 769  ENDMENUITEMS
     my $addremote=0;      my $addremote=0;
     foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }      foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }
     my $inlinebuttons='';      my $inlinebuttons='';
     if ($addremote) {      if ($addremote) {
             # Registered, textual output  
                     if ($env{'environment.icons'} eq 'iconsonly') {          Apache::lonhtmlcommon::clear_breadcrumb_tools();
                         $inlinebuttons=(<<ENDARROWSINLINE);  
 <tr><td>              Apache::lonhtmlcommon::add_breadcrumb_tool(
 $inlineremote[21] $inlineremote[23]                  'navigation', @inlineremote[21,23]);
 ENDARROWSINLINE  
                         if (&hidden_button_check() ne 'yes') {          if(hidden_button_check() ne 'yes') {
                             $inlinebuttons .= (<<ENDINLINEICONS);              Apache::lonhtmlcommon::add_breadcrumb_tool(
 $inlineremote[61] $inlineremote[63]                  'tools', @inlineremote[93,91,81,82,83]);
 $inlineremote[71] $inlineremote[72] $inlineremote[73]  
 $inlineremote[81] $inlineremote[82] $inlineremote[83]              #publish button in construction space
 $inlineremote[91] $inlineremote[92] $inlineremote[93]</td></tr>              if ($env{'request.state'} eq 'construct'){
 ENDINLINEICONS                  Apache::lonhtmlcommon::add_breadcrumb_tool(
                         }                       'advtools', @inlineremote[63]);
                     } else {              }else{
  if ($inlineremote[21] ne '' || $inlineremote[23] ne '') {                  Apache::lonhtmlcommon::add_breadcrumb_tool(
     $inlinebuttons=(<<ENDFIRSTLINE);                       'tools', @inlineremote[63]);
 <tr><td>$inlineremote[21]</td><td>&nbsp;</td><td>$inlineremote[23]</td></tr>              }
 ENDFIRSTLINE  
                         }              unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {
                         if (&hidden_button_check() ne 'yes') {                   Apache::lonhtmlcommon::add_breadcrumb_tool(
     foreach my $row (6..9) {                      'advtools', @inlineremote[61,71,72,73,92]);
  if ($inlineremote[${row}.'1'] ne ''              }
     || $inlineremote[$row.'2'] ne ''          }
     || $inlineremote[$row.'3'] ne '') {  
     $inlinebuttons .= <<"ENDLINE";  #       # Registered, textual output
 <tr><td>$inlineremote["${row}1"]</td><td>$inlineremote["${row}2"]</td><td>$inlineremote["${row}3"]</td></tr>  #        if ( $env{'environment.icons'} eq 'iconsonly' ) {
 ENDLINE  #            $inlinebuttons = (<<ENDARROWSINLINE);
  }  #<tr><td>
     }  #$inlineremote[21] $inlineremote[23]
  }  #ENDARROWSINLINE
     }  #            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
 $breadcrumb  $breadcrumb
 $tablestart  <!-- $tablestart -->
 $inlinebuttons  <!-- $inlinebuttons -->
 $tableend  <!-- $tableend -->
 $newmail  $newmail
 $separator  <!-- $separator -->
 <script type="text/javascript">  <script type="text/javascript">
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
Line 1213  sub switch { Line 1198  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').'" class="LC_noBorder" />';     '" align="'.($nobreak==3?'right':'left').'" class="LC_icon" />';
        if ($env{'browser.interface'} eq 'faketextual') {         if ($env{'browser.interface'} eq 'faketextual') {
 # Main Menu  # Main Menu
    if ($nobreak==3) {     if ($nobreak==3) {
Line 1239  sub switch { Line 1224  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 1273  sub inlinemenu { Line 1258  sub inlinemenu {
     undef(%category_members);      undef(%category_members);
 # calling rawconfig with "1" will evaluate mydesk.tab, even if there is no active remote control  # 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><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.='<div class="LC_Box">';                 $output.='<div class="LC_Box LC_400Box">';
        $output.='<h4 class="LC_hcell">'.&mt($category_names{$cat}).'</h4>';         $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>';
                $output.='<table>';                 $output.='<table>';
                my %active=();                 my %active=();
                foreach my $menu_item (split(/\:/,$category_members{$cat})) {                 foreach my $menu_item (split(/\:/,$category_members{$cat})) {
Line 1398  sub rawconfig { Line 1383  sub rawconfig {
             }              }
         } elsif ($pro =~ /^courseenv_(.*)$/) {          } elsif ($pro =~ /^courseenv_(.*)$/) {
             my $key = $1;              my $key = $1;
             if (($env{'course.'.$env{'request.course.id'}.'.'.$key}) &&               if ($crstype ne 'Community') {
                 ($crstype ne 'Community')) {                  my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};
                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                  if ($key eq 'canuse_pdfforms') {
                       if ($env{'request.course.id'} && $coursepref eq '') {
                           my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
                           $coursepref = $domdefs{'canuse_pdfforms'};
                       }
                   }
                   if ($coursepref) { 
                       $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
                   }
             }              }
         } elsif ($pro =~ /^communityenv_(.*)$/) {          } elsif ($pro =~ /^communityenv_(.*)$/) {
             my $key = $1;              my $key = $1;
             if (($env{'course.'.$env{'request.course.id'}.'.'.$key}) &&               if ($crstype eq 'Community') {
                 ($crstype eq 'Community')) {                  my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};
                 $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);                  if ($key eq 'canuse_pdfforms') {
                       if ($env{'request.course.id'} && $coursepref eq '') {
                           my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
                           $coursepref = $domdefs{'canuse_pdfforms'};
                       }
                   }
                   if ($coursepref) { 
                       $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
                   }
             }              }
         } elsif ($pro =~ /^course_(.*)$/) {          } elsif ($pro =~ /^course_(.*)$/) {
             # Check for permissions inside of a course              # Check for permissions inside of a course
Line 1551  function gonav(url) { Line 1552  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{'environment.remote'} eq 'off' ||       unless ($env{'environment.remote'} eq 'off' || 
Line 1568  sub utilityfunctions { Line 1594  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 1588  sub utilityfunctions { Line 1621  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 1595  return (<<ENDUTILITY) Line 1631  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 1604  function go(url) { Line 1641  function go(url) {
    }     }
 }  }
   
   function gotop(url) {
       if (url!='' && url!= null) {
           top.location.href = 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 1693  function edit_bookmarks() { Line 1745  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 1788  sub hidden_button_check { Line 1840  sub hidden_button_check {
   
 sub roles_selector {  sub roles_selector {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};      my $crstype = &Apache::loncommon::course_type();
     if ($crstype eq '') {  
         $crstype = 'Course';  
     }  
     my $now = time;      my $now = time;
     my (%courseroles,%seccount);      my (%courseroles,%seccount);
     my $is_cc;      my $is_cc;
     my $role_selector;      my $role_selector;
     if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) {      my $ccrole;
         my ($start,$end) = split(/\./,$env{'user.role.cc./'.$cdom.'/'.$cnum});      if ($crstype eq 'Community') {
           $ccrole = 'co';
       } else {
           $ccrole = 'cc';
       } 
       if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) {
           my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum});
                   
         if ((($start) && ($start<0)) ||           if ((($start) && ($start<0)) || 
             (($end) && ($end<$now))  ||              (($end) && ($end<$now))  ||
Line 1847  sub roles_selector { Line 1902  sub roles_selector {
     } else {      } else {
         $switchtext = &mt('Switch course role to...')          $switchtext = &mt('Switch course role to...')
     }      }
     my @roles_order = ('cc','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);
         $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">          $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">
Line 1855  sub roles_selector { Line 1910  sub roles_selector {
         $role_selector .= '<option value="">'.$switchtext.'</option>';          $role_selector .= '<option value="">'.$switchtext.'</option>';
         foreach my $role (@roles_order) {          foreach my $role (@roles_order) {
             if (defined($courseroles{$role})) {              if (defined($courseroles{$role})) {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>';                   $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role,$crstype).'</option>'; 
             }              }
         }          }
         foreach my $role (sort(keys(%courseroles))) {          foreach my $role (sort(keys(%courseroles))) {
Line 1983  function adhocRole(roleitem) { Line 2038  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.296  
changed lines
  Added in v.1.315.2.4


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