Diff for /loncom/interface/lonmenu.pm between versions 1.369.2.25 and 1.401

version 1.369.2.25, 2012/10/09 12:07:18 version 1.401, 2012/12/27 00:24:45
Line 117  Same as primary_menu() but operates on @ Line 117  Same as primary_menu() but operates on @
   
 =item create_submenu()  =item create_submenu()
   
 Creates XHTML for unordered list of sub-menu items which belong to a  Creates XHTML for unordered list of sub-menu items which belong to a 
 particular top-level menu item. Uses hover pseudo class in css to display  particular top-level menu item. Uses hover pseudo class in css to display
 dropdown list when mouse hovers over top-level item. Support for IE6  dropdown list when mouse hovers over top-level item. Support for IE6 
 (no hover psuedo class) via LC_hoverable class for <li> tag for top-  (no hover psuedo class) via LC_hoverable class for <li> tag for top-
 level item, which employs jQuery to handle behavior on mouseover.  level item, which employs jQuery to handle behavior on mouseover.
   
Line 131  Inputs: 4 - (a) link and (b) target for Line 131  Inputs: 4 - (a) link and (b) target for
   
 This gets called in order to register a URL in the body of the document  This gets called in order to register a URL in the body of the document
   
 =item loadevents()  
   
 =item unloadevents()  
   
 =item startupremote()  
   
 =item setflags()  
   
 =item maincall()  
   
 =item load_remote_msg()  
   
 =item get_menu_name()  
   
 =item reopenmenu()  
   
 =item open()  
   
 Open the menu  
   
 =item clear()  =item clear()
   
 =item switch()  =item switch()
Line 202  use HTML::Entities(); Line 182  use HTML::Entities();
 use Apache::lonwishlist();  use Apache::lonwishlist();
   
 use vars qw(@desklines %category_names %category_members %category_positions   use vars qw(@desklines %category_names %category_members %category_positions 
             $readdesk @primary_menu %primary_submenu @secondary_menu %secondary_submenu);              $readdesk @primary_menu %primary_submenu @secondary_menu);
   
 my @inlineremote;  my @inlineremote;
   
Line 267  sub primary_menu { Line 247  sub primary_menu {
             my @primsub;              my @primsub;
             if (ref($primary_submenu{$title}) eq 'ARRAY') {              if (ref($primary_submenu{$title}) eq 'ARRAY') {
                 foreach my $item (@{$primary_submenu{$title}}) {                  foreach my $item (@{$primary_submenu{$title}}) {
                     next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'}));                       next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'}));
                     next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs()));                      next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs()));
                     next if ((($item->[2] eq 'portfolio') ||                       next if ((($item->[2] eq 'portfolio') ||
                              ($item->[2] eq 'blog')) &&                                ($item->[2] eq 'blog')) &&
                              (!&Apache::lonnet::usertools_access('','',$item->[2],                               (!&Apache::lonnet::usertools_access('','',$item->[2],
                                                            undef,'tools')));                                                             undef,'tools')));
                     push(@primsub,$item);                      push(@primsub,$item);
Line 338  sub secondary_menu { Line 318  sub secondary_menu {
                                                : '');                                                 : '');
     my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});      my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
     my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};      my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};
     my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec);      my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec); 
     my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec);      my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); 
     my $canviewwnew   = &Apache::lonnet::allowed('whn', $crs_sec);      my $canviewwnew   = &Apache::lonnet::allowed('whn', $crs_sec); 
     my $canmodpara    = &Apache::lonnet::allowed('opa', $crs_sec);      my $canmodpara    = &Apache::lonnet::allowed('opa', $crs_sec);
     my $canvgr        = &Apache::lonnet::allowed('vgr', $crs_sec);      my $canvgr        = &Apache::lonnet::allowed('vgr', $crs_sec);
     my $canmgr        = &Apache::lonnet::allowed('mgr', $crs_sec);      my $canmgr        = &Apache::lonnet::allowed('mgr', $crs_sec); 
     my $author        = &getauthor();      my $author        = &getauthor();
   
     my %groups = &Apache::lonnet::get_active_groups(      my %groups = &Apache::lonnet::get_active_groups(
Line 351  sub secondary_menu { Line 331  sub secondary_menu {
                      $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'});
   
       my ($roleswitcher_js,$roleswitcher_form);
   
     foreach my $menuitem (@secondary_menu) {      foreach my $menuitem (@secondary_menu) {
         # evaluate conditions           # evaluate conditions 
         next if    ref($menuitem)  ne 'ARRAY';          next if    ref($menuitem)  ne 'ARRAY';
Line 359  sub secondary_menu { Line 341  sub secondary_menu {
                 && !$env{'request.course.id'};                  && !$env{'request.course.id'};
         next if    $$menuitem[4]   =~ /^mdc/          next if    $$menuitem[4]   =~ /^mdc/
                 && !$canedit;                  && !$canedit;
         next if    $$menuitem[4]  eq 'mdcCourse'  
                 && ($crstype eq 'Community');  
         next if    $$menuitem[4]  eq 'mdcCommunity'  
                 && ($crstype eq 'Course');  
         next if    $$menuitem[4]  eq 'nvgr'          next if    $$menuitem[4]  eq 'nvgr'
                 && $canvgr;                  && $canvgr;
         next if    $$menuitem[4]  eq 'vgr'          next if    $$menuitem[4]  eq 'vgr'
Line 379  sub secondary_menu { Line 357  sub secondary_menu {
                 && !$canviewwnew;                  && !$canviewwnew;
         next if    $$menuitem[4]   eq 'opa'          next if    $$menuitem[4]   eq 'opa'
                 && !$canmodpara;                  && !$canmodpara;
         next if    $$menuitem[4]   eq 'nvcg'          next if    $$menuitem[4]   =~ /showgroups$/
                 && ($canviewgrps || !%groups);                  && !$canviewgrps
                   && !%groups;
         next if    $$menuitem[4]    eq 'author'          next if    $$menuitem[4]    eq 'author'
                 && !$author;                  && !$author;
   
         my $title = $menuitem->[3];          if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
         if (defined($secondary_submenu{$title})) {  
             my ($link,$target);  
             if ($menuitem->[0] ne '') {  
                 $link = $menuitem->[0];  
                 $target = '_top';  
             } else {  
                 $link = '#';  
             }  
             my @scndsub;     
             if (ref($secondary_submenu{$title}) eq 'ARRAY') {  
                 foreach my $item (@{$secondary_submenu{$title}}) {  
                     if (ref($item) eq 'ARRAY') {  
                         next if ($item->[2] eq 'vgr' && !$canvgr);  
                         next if ($item->[2] eq 'opa' && !$canmodpara);  
                         next if ($item->[2] eq 'cst' && !$canmodifyuser);  
                         next if ($item->[2] eq 'mgr' && !$canmgr);  
                         next if ($item->[2] eq 'vcg' && !$canviewgrps);  
                         push(@scndsub,$item);   
                     }  
                 }  
                 if (@scndsub > 0) {  
                     $menu .= &create_submenu($link,$target,$title,\@scndsub);  
                 } elsif ($link) {  
                     $menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>';  
                 }  
             }  
         } elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {  
             # special treatment for role selector              # special treatment for role selector
             my $roles_selector = &roles_selector(              ($roleswitcher_js,$roleswitcher_form,my $switcher) =
                   &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'}
                   );
             $menu .= $roles_selector ? "<li style=\"padding: 0 0.8em;\">$roles_selector</li>"              $menu .= $switcher;
                                      : '';  
         } else {          } else {
             $menu .= &prep_menuitem(\@$menuitem);              $menu .= &prep_menuitem(\@$menuitem);
         }          }
Line 446  sub secondary_menu { Line 398  sub secondary_menu {
     if ($menu) {      if ($menu) {
         $menu = "<ul id=\"LC_secondary_menu\">$menu</ul>";          $menu = "<ul id=\"LC_secondary_menu\">$menu</ul>";
     }      }
       if ($roleswitcher_form) {
           $menu .= "\n$roleswitcher_js\n$roleswitcher_form";
       }
     return $menu;      return $menu;
 }  }
   
Line 457  sub create_submenu { Line 412  sub create_submenu {
         $disptarget = ' target="'.$target.'"';          $disptarget = ' target="'.$target.'"';
     }      }
     my $menu = '<li class="LC_hoverable">'.      my $menu = '<li class="LC_hoverable">'.
                '<a href="'.$link.'"'.$disptarget.'>'.                  '<a href="'.$link.'"'.$disptarget.'>'.
                '<span class="LC_nobreak">'.&mt($title).                 '<span class="LC_nobreak">'.&mt($title).
                '<span class="LC_fontsize_small" style="font-weight:normal;">'.                 '<span class="LC_fontsize_small" style="font-weight:normal;">'.
                ' &#9660;</span></span></a>'.                 ' &#9660;</span></span></a>'.
Line 480  sub create_submenu { Line 435  sub create_submenu {
     return $menu;      return $menu;
 }  }
   
 sub registerurl {  
     my ($forcereg) = @_;  
     my $result = '';  
     if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }  
     my $force_title='';  
     if ($env{'request.state'} eq 'construct') {  
         $force_title=&Apache::lonxml::display_title();  
     }  
     if (($env{'environment.remote'} ne 'on') ||  
         ((($env{'request.publicaccess'}) ||  
          (!&Apache::lonnet::is_on_map(  
            &unescape($env{'request.noversionuri'})))) &&  
         (!$forcereg))) {  
         return  
         $result  
        .'<script type="text/javascript">'."\n"  
        .'// <![CDATA['."\n"  
        .'function LONCAPAreg(){;} function LONCAPAstale(){}'."\n"  
        .'// ]]>'."\n"  
        .'</script>'  
        .$force_title;  
     }  
 # Graphical display after login only  
     if ($env{'request.registered'} && !$forcereg) { return ''; }  
     $result.=&innerregister($forcereg);  
     return $result.$force_title;  
 }  
   
 sub innerregister {  sub innerregister {
     my ($forcereg,$bread_crumbs) = @_;      my ($forcereg,$bread_crumbs,$group) = @_;
     my $const_space = ($env{'request.state'} eq 'construct');      my $const_space = ($env{'request.state'} eq 'construct');
     my $is_const_dir = 0;      my $is_const_dir = 0;
   
Line 517  sub innerregister { Line 444  sub innerregister {
   
     $env{'request.registered'} = 1;      $env{'request.registered'} = 1;
   
     my $noremote = ($env{'environment.remote'} ne 'on');  
   
     undef(@inlineremote);      undef(@inlineremote);
   
     my $reopen=&Apache::lonmenu::reopenmenu();      my ($mapurl,$resurl);
   
     my $newmail='';      if ($env{'request.course.id'}) {
           if ($env{'request.symb'}) {
     if (&Apache::lonmsg::newmail() && !$noremote) {              ($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
         # We have new mail and remote is up              my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};
         $newmail= 'swmenu.setstatus("you have","messages");';  
     }  
   
     my $resurl;   
     if ( $env{'request.symb'} && $env{'request.course.id'} ) {  
   
         (my $mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());  
         my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};  
   
         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());
   
 #SD  #SD
 #course_type only Course and Community?  #course_type only Course and Community?
 #  #
         my @crumbs;              my @crumbs;
         unless (($forcereg) && ($env{'request.noversionuri'} eq '/adm/navmaps')              unless (($forcereg) &&
                 && ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {                      ($env{'request.noversionuri'} eq '/adm/navmaps') &&
             @crumbs = ({text  => Apache::loncommon::course_type()                       ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
                                 . ' Contents',                   @crumbs = ({text  => Apache::loncommon::course_type() 
                         href  => "Javascript:gopost('/adm/navmaps','')"});                                      . ' Contents', 
         }                              href  => "Javascript:gopost('/adm/navmaps','')"});
         if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) {               }
             push(@crumbs, {text  => '...',              if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { 
                            no_mt => 1});                  push(@crumbs, {text  => '...',
         }                                 no_mt => 1});
               }
         push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle   
                                                    && $maptitle ne 'default.sequence'               push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle 
                                                    && $maptitle ne $coursetitle);                                                         && $maptitle ne 'default.sequence' 
                                                          && $maptitle ne $coursetitle);
         push @crumbs, {text => $restitle, no_mt => 1} if $restitle;   
               push @crumbs, {text => $restitle, no_mt => 1} if $restitle; 
         &Apache::lonhtmlcommon::clear_breadcrumbs();              &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);              &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
     }elsif (! $const_space){          } else {
               $resurl = $env{'request.noversionuri'};
               my $courseurl = &Apache::lonnet::courseid_to_courseurl($env{'request.course.id'});
               my $crstype = &Apache::loncommon::course_type();
               my $title = &mt('View Resource');
               if ($resurl =~ m{^\Q/uploaded$courseurl/supplemental/\E(default|\d+)/}) {
                   &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folderpath','title']);
                   &Apache::lonhtmlcommon::clear_breadcrumbs();
                   if ($env{'form.title'}) {
                       $title = $env{'form.title'};
                   }
                   my $trail;
                   if ($env{'form.folderpath'}) {
                       &prepare_functions($resurl,$forcereg,$group,undef,undef,1);
                       ($trail) =
                           &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
                   } else {
                       &Apache::lonhtmlcommon::add_breadcrumb(
                       {text  => "Supplemental $crstype Content",
                        href  => "javascript:gopost('/adm/supplemental','')"});
                       $title = &mt('View Resource');
                       ($trail) = 
                           &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
                   }
                   return $trail;
               }
               unless ($env{'request.state'} eq 'construct') {
                   &Apache::lonhtmlcommon::clear_breadcrumbs();
                   &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'});
               }
           }
       } elsif (! $const_space){
         #a situation when we're looking at a resource outside of context of a           #a situation when we're looking at a resource outside of context of a 
         #course or construction space (e.g. with cumulative rights)          #course or construction space (e.g. with cumulative rights)
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'});          unless ($env{'request.noversionuri'} =~ m{^/adm/$match_domain/$match_username/aboutme$}) {
               &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'});
           }
     }      }
     my $timesync   = ( $noremote ? '' : 'swmenu.syncclock(1000*'.time.');' );  
 # =============================================================================  # =============================================================================
 # ============================ 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/})      return '' unless ( ($env{'request.noversionuri'}!~m{^/(res/)*adm/}) 
                        || ($forcereg)) {                         || $forcereg );
 # -- This applies to homework problems for users with grading privileges      my ($cdom,$cnum,%perms,$cfile,$switchserver,$home,$forceedit,
  my $crs='/'.$env{'request.course.id'};          $forceview,$editbutton);
  if ($env{'request.course.sec'}) {      if (($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) ||
     $crs.='_'.$env{'request.course.sec'};          ($env{'request.role'} !~/^(aa|ca|au)/)) {
  }          $editbutton = &prepare_functions($resurl,$forcereg,$group);
  $crs=~s/\_/\//g;      }
       if ($editbutton eq '') {
           $editbutton = &clear(6,1);
       }
   
         my %swtext;  #
         if ($noremote) {  # This applies in course context
             %swtext = &get_inline_text();  #
         } else {      if ($env{'request.course.id'}) {
             %swtext = &get_rc_text();          $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         }           $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $hwkadd='';          $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});
         if ($env{'request.symb'} ne '' &&          my @privs;
     $env{'request.filename'}=~/$LONCAPA::assess_re/) {          if ($env{'request.symb'} ne '') {
     if (&Apache::lonnet::allowed('mgr',$crs)) {               if ($env{'request.filename'}=~/$LONCAPA::assess_re/) {
  $hwkadd.=&switch('','',7,2,'pgrd.png',$swtext{'pgrd'},'grades[_4]',                   push(@privs,('mgr','vgr'));
                        "gocmd('/adm/grades','gradingmenu')",               }
                        'Content Grades');               push(@privs,'opa');
             } elsif (&Apache::lonnet::allowed('vgr',$crs)) {          }
  $hwkadd.=&switch('','',7,2,'subm.png',$swtext{'subm'},'missions[_1]',          foreach my $priv (@privs) {
                        "gocmd('/adm/grades','submission')",              $perms{$priv} = &Apache::lonnet::allowed($priv,$env{'request.course.id'});
        'Content Submissions');              if (!$perms{$priv} && $env{'request.course.sec'} ne '') {
                   $perms{$priv} = 
                       &Apache::lonnet::allowed($priv,"$env{'request.course.id'}/$env{'request.course.sec'}");
             }              }
           }
   #
   # Determine whether or not to show Grades and Submissions buttons
   #
           if ($env{'request.symb'} ne '' &&
               $env{'request.filename'}=~/$LONCAPA::assess_re/) {
               if ($perms{'mgr'}) {
                   &switch('','',7,2,'pgrd.png','Content Grades','grades[_4]',
                           "gocmd('/adm/grades','gradingmenu')",
                           'Content Grades');
               } elsif ($perms{'vgr'}) {
                   &switch('','',7,2,'subm.png','Content Submissions','missions[_1]',
                           "gocmd('/adm/grades','submission')",
                           'Content Submissions');
                }
           }
           if (($env{'request.symb'} ne '') && ($perms{'opa'})) {
               &switch('','',7,3,'pparm.png','Content Settings','parms[_2]',
                       "gocmd('/adm/parmset','set')",
                       'Content Settings');
  }   }
  if ($env{'request.symb'} ne '' &&  # End grades/submissions check
     &Apache::lonnet::allowed('opa',$crs)) {  
     $hwkadd.=&switch('','',7,3,'pparm.png',$swtext{'pparm'},'parms[_2]',  
      "gocmd('/adm/parmset','set')",  
      'Content Settings');  
  }  
         if ($noremote) {    
             if ($env{'request.symb'}=~/^uploaded/ &&  
                 &Apache::lonnet::allowed('mdc',$crs)) {  
                 $hwkadd.=&switch('','',7,4,'docs.png',$swtext{'docs'},'parms[_2]',  
                                  "gocmd('/adm/coursedocs','direct')",  
                                  'Folder/Page Content');  
             }  
         }  
 # -- End Homework  
         ###  
         ### Determine whether or not to display the 'cstr' button for this  
         ### resource  
         ###  
         my $editbutton = '';  
         my $noeditbutton = 1;  
         my ($cnum,$cdom);  
         if ($env{'request.course.id'}) {  
             $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
             $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
         }  
         if ($env{'user.author'}) {  
             if ($env{'request.role'}=~/^(aa|ca|au)/) {  
 #  
 # We have the role of an author  
 #  
                 # Set defaults for authors  
                 my ($top,$bottom) = ('con-','struct');  
                 my $action = "go('/priv/".$env{'user.domain'}.'/'.$env{'user.name'}."');";  
                 my $cadom  = $env{'request.role.domain'};  
                 my $caname = $env{'user.name'};  
                 my $desc = "Enter my construction space";  
                 # Set defaults for co-authors  
                 if ($env{'request.role'} =~ /^ca/) {   
                     ($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/);  
                     ($top,$bottom) = ('co con-','struct');  
                     $action = "go('/priv/".$cadom.'/'.$caname."');";  
                     $desc = "Enter construction space as co-author";  
                 } elsif ($env{'request.role'} =~ /^aa/) {  
                     ($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/);  
                     ($top,$bottom) = ('co con-','struct');  
                     $action = "go('/priv/".$cadom.'/'.$caname."');";  
                     $desc = "Enter construction space as assistant co-author";  
                 }  
                 # Check that we are on the correct machine  
                 my $home = &Apache::lonnet::homeserver($caname,$cadom);  
  my $allowed=0;  
  my @ids=&Apache::lonnet::current_machine_ids();  
  foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }  
  if (!$allowed) {  
     $editbutton=&switch('','',6,1,,$top,$bottom,$action,$desc);  
                     $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.  
             ##  
             my $cfile='';  
             my $cfuname='';  
             my $cfudom='';  
             my $uploaded;  
             my $switchserver='';  
             my $home;  
             if ($env{'request.filename'}) {  
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});  
                 if (defined($cnum) && defined($cdom)) {  
                     $uploaded = &is_course_upload($file,$cnum,$cdom);  
                 }  
                 if (!$uploaded) {  
   
                     $file=~s{^(priv/$match_domain/$match_username)}{/$1};  #
                     $file=~s{^($match_domain/$match_username)}{/priv/$1};  # This applies to items inside a folder/page modifiable in the course.
   #
                     # Check that the user has permission to edit this resource          if (($env{'request.symb'}=~/^uploaded/) && ($perms{'mdc'})) {
                     my $setpriv = 1;              my $text = 'Edit Folder';
                     ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$setpriv);              if (($mapurl =~ /\.page$/) ||
                     if (defined($cfudom)) {                  ($env{'request.symb'}=~
         $home=&Apache::lonnet::homeserver($cfuname,$cfudom);                       m{uploaded/$cdom/$cnum/default_\d+\.page$}))  {
         my $allowed=0;                  $text = 'Edit Page';
         my @ids=&Apache::lonnet::current_machine_ids();              }
         foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }              &switch('','',7,4,'docs-22x22.png',$text,'parms[_2]',
         if ($allowed) {                      "gocmd('/adm/coursedocs','direct')",
                             $cfile=$file;                      'Folder/Page Content');
                         } else {  
                             $switchserver=$file;  
                         }  
                     }  
                 }  
             }  
             # Finally, turn the button on or off  
             if (($cfile || $switchserver) && !$const_space) {  
                 my $nocrsedit;  
                 # Suppress display where CC has switched to student role.  
                 if ($env{'request.course.id'}) {  
                     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'} ) {  
                             $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.png',$swtext{'pcstr'},'resource[_2]',  
                         $bot,"Edit this resource");  
                     $noeditbutton = 0;  
                 }  
             } elsif ($editbutton eq '') {  
                 $editbutton=&clear(6,1);  
             }  
         }  
         if (($noeditbutton) && ($env{'request.filename'})) {   
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});  
                 if (defined($cnum) && defined($cdom)) {  
                     if (&is_course_upload($file,$cnum,$cdom)) {  
                         my $cfile = &edit_course_upload($file,$cnum,$cdom);  
                         if ($cfile) {  
                             $editbutton=&switch  
                                         ('','',6,1,'pcstr.png',$swtext{'pcstr'},  
                                          'resource[_2]',"go('".$cfile."');",  
                                          'Edit this resource');  
                         }  
                     }  
                 }  
             }  
         }  
         if ($env{'request.course.id'}) {  
             if ($resurl eq "public/$cdom/$cnum/syllabus") {  
                 if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) {  
                     if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                         $editbutton=&switch('','',6,1,'pcstr.png',$swtext{'pcstr'},  
                                             'resource[_2]',  
                                             "go('/adm/courseprefs?phase=display&actions=courseinfo')",  
                                             'Edit this resource');  
                     }  
                 }  
             }  
         }          }
         ###  # End modifiable folder/page container check
         ###      }
   # End course context
   
 # Prepare the rest of the buttons  # Prepare the rest of the buttons
         my ($menuitems,$got_prt,$got_wishlist,$cstritems);          my ($menuitems,$got_prt,$got_wishlist);
         if ($const_space) {          if ($const_space) {
 #  #
 # We are in construction space  # We are in construction space
Line 786  s&6&3&pub.png&Publish&resource[_3]&gocst Line 620  s&6&3&pub.png&Publish&resource[_3]&gocst
 s&7&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/priv/$udom/$uname/$cleandisfn')&Delete this resource  s&7&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/priv/$udom/$uname/$cleandisfn')&Delete this resource
 s&7&2&prt.png&Print&printout[_1]&gocstr('/adm/printout','/priv/$udom/$uname/$cleandisfn')&Prepare a printable document  s&7&2&prt.png&Print&printout[_1]&gocstr('/adm/printout','/priv/$udom/$uname/$cleandisfn')&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
                 unless ($noremote) {  
                     $cstritems = $menuitems;  
                     undef($menuitems);  
                 }  
             }              }
                 if (ref($bread_crumbs) eq 'ARRAY') {                  if (ref($bread_crumbs) eq 'ARRAY') {
                     &Apache::lonhtmlcommon::clear_breadcrumbs();                      &Apache::lonhtmlcommon::clear_breadcrumbs();
Line 803  ENDMENUITEMS Line 633  ENDMENUITEMS
 # We are in a course and looking at a registered URL  # We are in a course and looking at a registered URL
 # Should probably be in mydesk.tab  # Should probably be in mydesk.tab
 #  #
   
     $menuitems=(<<ENDMENUITEMS);      $menuitems=(<<ENDMENUITEMS);
 c&3&1  c&3&1
 s&2&1&back.png&$swtext{'back'}&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1  s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1
 s&2&3&forw.png&$swtext{'forw'}&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3  s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3
 c&6&3  c&6&3
 c&8&1  c&8&1
 c&8&2  c&8&2
 s&8&3&prt.png&$swtext{'prt'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
             $got_prt = 1;              $got_prt = 1;
             if (($env{'user.adv'}) && ($env{'request.uri'} =~ /^\/res/)              if (($env{'user.adv'}) && ($env{'request.uri'} =~ /^\/res/)
Line 819  ENDMENUITEMS Line 648  ENDMENUITEMS
                 # wishlist is only available for users with access to resource-pool                  # wishlist is only available for users with access to resource-pool
                 # and links can only be set for resources within the resource-pool                  # and links can only be set for resources within the resource-pool
                 $menuitems .= (<<ENDMENUITEMS);                  $menuitems .= (<<ENDMENUITEMS);
 s&9&1&alnk.png&$swtext{'alnk'}&linkstor[_1]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
                 $got_wishlist = 1;                  $got_wishlist = 1;
             }              }
Line 833  if(length($annotation) > 0){ Line 662  if(length($annotation) > 0){
 }else{  }else{
  $menuitems.="anot.png";   $menuitems.="anot.png";
 }  }
 $menuitems.="&$swtext{'anot'}&tations[_1]&annotate()&";  $menuitems.="&Notes&&annotate()&";
 $menuitems.="Make notes and annotations about this resource&&1\n";  $menuitems.="Make notes and annotations about this resource&&1\n";
   
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {
  if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) {   if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.png&$swtext{'catalog'}&info[_1]&catalog_info()&Show Metadata  s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata
 ENDREALRES  ENDREALRES
                 }                  }
                 unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) {                  unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) {
             $menuitems.=(<<ENDREALRES);                      $menuitems.=(<<ENDREALRES);
 s&8&1&eval.png&$swtext{'eval'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource  s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource
 ENDREALRES  ENDREALRES
                 }                  }
                 $menuitems.=(<<ENDREALRES);                  $menuitems.=(<<ENDREALRES);
 s&8&2&fdbk.png&$swtext{'fdbk'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource  s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource
 ENDREALRES  ENDREALRES
     }      }
         }          }
  if ($env{'request.uri'} =~ /^\/res/) {   if ($env{'request.uri'} =~ /^\/res/) {
             unless ($got_prt) {              unless ($got_prt) {
         $menuitems .= (<<ENDMENUITEMS);          $menuitems .= (<<ENDMENUITEMS);
 s&8&3&prt.png&$swtext{'prt'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
                 $got_prt = 1;                  $got_prt = 1;
             }              }
Line 863  ENDMENUITEMS Line 692  ENDMENUITEMS
                 if (($env{'user.adv'}) && (!$env{'request.enc'})) {                  if (($env{'user.adv'}) && (!$env{'request.enc'})) {
                     # wishlist is only available for users with access to resource-pool                      # wishlist is only available for users with access to resource-pool
                     $menuitems .= (<<ENDMENUITEMS);                      $menuitems .= (<<ENDMENUITEMS);
 s&9&1&alnk.png&$swtext{'alnk'}&linkstor[_1]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
                     $got_wishlist = 1;                      $got_wishlist = 1;
                 }                  }
             }      }
  }  
         unless ($got_prt) {  
             $menuitems .= (<<ENDMENUITEMS);  
 c&8&3  
 ENDMENUITEMS  
         }  
         unless ($got_wishlist) {  
             $menuitems .= (<<ENDMENUITEMS);  
 c&9&1  
 ENDMENUITEMS  
         }          }
         my $buttons='';          my $buttons='';
         foreach (split(/\n/,$menuitems)) {          foreach (split(/\n/,$menuitems)) {
Line 897  ENDMENUITEMS Line 716  ENDMENUITEMS
                 }                  }
             }              }
         }          }
         if ($noremote) {  
     my $addremote=0;      my $addremote=0;
     foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }      foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }
             if ($addremote) {      if ($addremote) {
   
                 &Apache::lonhtmlcommon::clear_breadcrumb_tools();          &Apache::lonhtmlcommon::clear_breadcrumb_tools();
   
                 &Apache::lonhtmlcommon::add_breadcrumb_tool(              &Apache::lonhtmlcommon::add_breadcrumb_tool(
                     'navigation', @inlineremote[21,23]);                  'navigation', @inlineremote[21,23]);
   
                 my $countdown = &countdown_timer();  
                 if (&hidden_button_check() eq 'yes') {  
                     if ($countdown) {  
                         &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown);  
                     }  
                 } else {  
                     my @tools = @inlineremote[93,91,81,82,83];  
                     if ($countdown) {  
                         unshift(@tools,$countdown);  
                     }  
                     &Apache::lonhtmlcommon::add_breadcrumb_tool(  
                         'tools',@tools);  
   
                     #publish button in construction space          my $countdown = &countdown_timer();
                     if ($env{'request.state'} eq 'construct'){          if (&hidden_button_check() eq 'yes') {
                         &Apache::lonhtmlcommon::add_breadcrumb_tool(              if ($countdown) {
                             'advtools', $inlineremote[63]);                  &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown);
                     } 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,74,92]);  
                     }  
                 }  
             }              }
             return   &Apache::lonhtmlcommon::scripttag('', 'start')  
                    . &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0)  
                    . &Apache::lonhtmlcommon::scripttag('', 'end');  
   
         } else {          } else {
             my $cstrcrumbs;              my @tools = @inlineremote[93,91,81,82,83];
             if ($const_space) {              if ($countdown) {
                 foreach (split(/\n/,$cstritems)) {                  unshift(@tools,$countdown);
                     my ($command,@rest)=split(/\&/,$_);              }
                     my $idx=10*$rest[0]+$rest[1];              &Apache::lonhtmlcommon::add_breadcrumb_tool(
                     &switch('','',@rest);                  'tools',@tools);
                 }  
                 &Apache::lonhtmlcommon::add_breadcrumb_tool('advtools',  
                                                             @inlineremote[63,61,71,72]);  
   
                 $cstrcrumbs = &Apache::lonhtmlcommon::scripttag('', 'start')  
                              .&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0)  
                              .&Apache::lonhtmlcommon::scripttag('', 'end');  
             }  
             my $requri=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));  
             $requri=&Apache::lonenc::check_encrypt(&unescape($requri));  
             my $cursymb=&Apache::lonenc::check_encrypt($env{'request.symb'});  
             my $navstatus=&get_nav_status();  
             my $clearcstr;  
   
             if ($env{'user.adv'}) { $clearcstr='clearbut(6,1)'; }  
             return <<ENDREGTHIS;  
   
 <script type="text/javascript">              #publish button in construction space
 // <![CDATA[              if ($env{'request.state'} eq 'construct'){
 // BEGIN LON-CAPA Internal                  &Apache::lonhtmlcommon::add_breadcrumb_tool(
 var swmenu=null;                       'advtools', $inlineremote[63]);
               } else {
     function LONCAPAreg() {                  &Apache::lonhtmlcommon::add_breadcrumb_tool(
           swmenu=$reopen;                       'tools', $inlineremote[63]);
           swmenu.clearTimeout(swmenu.menucltim);              }
           $timesync              &advtools_crumbs(@inlineremote);
           $newmail          }
           $buttons      }
           swmenu.currentURL="$requri";  
           swmenu.reloadURL=swmenu.currentURL+window.location.search;  
           swmenu.currentSymb="$cursymb";  
           swmenu.reloadSymb="$cursymb";  
           swmenu.currentStale=0;  
           $navstatus  
           $hwkadd  
           $editbutton  
     }  
   
     function LONCAPAstale() {  
           swmenu=$reopen  
           swmenu.currentStale=1;  
           if (swmenu.reloadURL!='' && swmenu.reloadURL!= null) {  
              swmenu.switchbutton  
              (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence');  
           }  
           swmenu.clearbut(7,2);  
           swmenu.clearbut(7,3);  
           swmenu.menucltim=swmenu.setTimeout(  
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+  
  'clearbut(9,1);clearbut(9,3);clearbut(6,3);$clearcstr',  
                           2000);  
       }  
   
 // END LON-CAPA Internal      return   &Apache::lonhtmlcommon::scripttag('', 'start')
 // ]]>             . &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0)
 </script>             . &Apache::lonhtmlcommon::scripttag('', 'end');
   }
   
 $cstrcrumbs  sub get_editbutton {
 ENDREGTHIS      my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_;
       my $jscall;
       if (($forceview) && ($env{'form.todocs'})) {
           my ($folderpath,$command);
           if ($env{'request.symb'}) {
               $folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'});
           } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
               $folderpath = $env{'form.folderpath'};
               $command = '&forcesupplement=1';
         }          }
           $folderpath = &escape(&HTML::Entities::encode(&escape($folderpath),'<>&"'));
           $jscall = "go('/adm/coursedocs?folderpath=$folderpath$command')";
     } else {      } else {
        unless ($noremote) {          $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,
 # Not registered, graphical                                                  $forceedit,$forcereg,$env{'request.symb'},
            return (<<ENDDONOTREGTHIS);                                                  &escape($env{'form.folderpath'}),
                                                   &escape($env{'form.title'}),$env{'form.idx'},
 <script type="text/javascript">                                                  &escape($env{'form.suppurl'},$env{'form.todocs'}));
 // <![CDATA[      }
 // BEGIN LON-CAPA Internal      if ($jscall) {
 var swmenu=null;          my $icon = 'pcstr.png';
           my $label = 'Edit';
     function LONCAPAreg() {          if ($forceview) {
           swmenu=$reopen              $icon = 'tolastloc.png';
           $timesync              $label = 'Exit Editing';
           swmenu.currentStale=1;          }
           swmenu.clearbut(2,1);          &switch('','',6,1,$icon,$label,'resource[_2]',
           swmenu.clearbut(2,3);                  $jscall,"Edit this resource");
           swmenu.clearbut(8,1);          return 1;
           swmenu.clearbut(8,2);  
           swmenu.clearbut(8,3);  
           swmenu.clearbut(9,1);  
           if (swmenu.currentURL) {  
              swmenu.switchbutton  
               (3,1,'reload.gif','return','location','go(currentURL)');  
           } else {  
               swmenu.clearbut(3,1);  
           }  
     }      }
       return;
   }
   
     function LONCAPAstale() {  sub prepare_functions {
       my ($resurl,$forcereg,$group,$bread_crumbs,$advtools,$docscrumbs) = @_;
       unless ($env{'request.registered'}) {
           undef(@inlineremote);
     }      }
       my ($cdom,$cnum,%perms,$cfile,$switchserver,$home,$forceedit,
           $forceview);
   
 // END LON-CAPA Internal      if ($env{'request.course.id'}) {
 // ]]>          $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
 </script>          $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
 ENDDONOTREGTHIS          $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});
       }
   
       my $editbutton = '';
   #
   # Determine whether or not to display 'Edit' icon/button
   #
       if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) {
           my $file=&Apache::lonnet::declutter($env{'request.filename'});
           ($cfile,$home,$switchserver,$forceedit,$forceview) =
               &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,
                   &Apache::lonnet::clutter($resurl),$env{'request.symb'},$group);
           if (($cfile) && ($home ne '') && ($home ne 'no_host')) {
               $editbutton = &get_editbutton($cfile,$home,$switchserver,
                                             $forceedit,$forceview,$forcereg);
           }
       } elsif ((!$env{'request.course.id'}) &&
                ($env{'user.author'}) && ($env{'request.filename'}) &&
                ($env{'request.role'} !~/^(aa|ca|au)/)) {
   #
   # Currently do not have the role of author or co-author.
   # Do we have authoring privileges for the resource?
   #
           my $file=&Apache::lonnet::declutter($env{'request.filename'});
           ($cfile,$home,$switchserver,$forceedit,$forceview) =
               &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,
                   &Apache::lonnet::clutter($resurl),$env{'request.symb'},$group);
           if (($cfile) && ($home ne '') && ($home ne 'no_host')) {
               $editbutton = &get_editbutton($cfile,$home,$switchserver,
                                             $forceedit,$forceview,$forcereg);
           }
       } elsif ($env{'request.course.id'}) {
   #
   # This applies in course context
   #
           if (($resurl eq "/public/$cdom/$cnum/syllabus") && ($perms{'mdc'})) {
               if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) {
                   &switch('','',6,1,'pcstr.png','Edit',
                           'resource[_2]',
                           "go('/adm/courseprefs?phase=display&actions=courseinfo')",
                           'Edit this resource');
                   $editbutton = 1;
               } else {
                   $cfile = $resurl;
                   $home = &Apache::lonnet::homeserver($cnum,$cdom);
                   if ($env{'form.forceedit'}) {
                       $forceview = 1;
                   } else {
                       $forceedit = 1;
                   }
                   $editbutton = &get_editbutton($cfile,$home,$switchserver,
                                                 $forceedit,$forceview,$forcereg);
               }
           } elsif (($resurl eq '/adm/extresedit') &&
                    (($env{'form.symb'}) || ($env{'form.folderpath'}))) {
               ($cfile,$home,$switchserver,$forceedit,$forceview) =
               &Apache::lonnet::can_edit_resource($resurl,$cnum,$cdom,$resurl,
                                                  $env{'form.symb'});
               if ($cfile ne '') {
                   $editbutton = &get_editbutton($cfile,$home,$switchserver,
                                                 $forceedit,$forceview,$forcereg,
                                                 $env{'form.title'},$env{'form.suppurl'});
               }
           } elsif ($resurl !~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) {
               if ($env{'request.filename'}) {
                   my $file=&Apache::lonnet::declutter($env{'request.filename'});
                   ($cfile,$home,$switchserver,$forceedit,$forceview) =
                       &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,
                           &Apache::lonnet::clutter($resurl),$env{'request.symb'},$group);
                   if ($cfile ne '') {
                       $editbutton = &get_editbutton($cfile,$home,$switchserver,
                                                     $forceedit,$forceview,$forcereg);
                   }
               }
         }          }
         return '';  
     }      }
 }  # End determination of 'Edit' icon/button display
   
 sub get_inline_text {  
     my %text = (  
                  pgrd     => 'Content Grades',  
                  subm     => 'Content Submissions',  
                  pparm    => 'Content Settings',  
                  docs     => 'Folder/Page Content',  
                  pcstr    => 'Edit',  
                  prt      => 'Print',  
                  alnk     => 'Stored Links',  
                  anot     => 'Notes',  
                  catalog  => 'Info',  
                  eval     => 'Evaluate',  
                  fdbk     => 'Feedback',  
     );  
     return %text;  
 }  
   
 sub get_rc_text {  
     my %text = (  
                    pgrd    => 'problem[_1]',  
                    subm    => 'view sub-[_1]',  
                    pparm   => 'problem[_2]',  
                    pcstr   => 'edit[_1]',  
                    prt     => 'prepare[_1]',  
                    back    => 'backward[_1]',  
                    forw    => 'forward[_1]',  
                    alnk    => 'add to[_1]',  
                    anot    => 'anno-[_1]',  
                    catalog => 'catalog[_2]',  
                    eval    => 'evaluate[_1]',  
                    fdbk    => 'feedback[_1]',  
     );  
     return %text;  
 }  
   
 sub is_course_upload {      if ($env{'request.course.id'}) {
     my ($file,$cnum,$cdom) = @_;  # This applies to about me page for users in a course
     my $uploadpath = &LONCAPA::propath($cdom,$cnum);          if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) {
     $uploadpath =~ s{^\/}{};              my ($sdom,$sname) = ($1,$2);
     if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) ||              unless (&Apache::lonnet::is_course($sdom,$sname)) {
         ($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) {                  &switch('','',6,4,'mail-message-new-22x22.png','Message to user',
         return 1;                          '',
                           "go('/adm/email?compose=individual&recname=$sname&recdom=$sdom')",
                               'Send message to specific user');
               }
               my $hideprivileged = 1;
               if (&Apache::lonnet::in_course($sdom,$sname,$cdom,$cnum,undef,
                                              $hideprivileged)) {
                   foreach my $priv ('vsa','vgr','srm') {
                       $perms{$priv} = &Apache::lonnet::allowed($priv,$env{'request.course.id'});
                       if (!$perms{$priv} && $env{'request.course.sec'} ne '') {
                           $perms{$priv} =
                               &Apache::lonnet::allowed($priv,"$env{'request.course.id'}/$env{'request.course.sec'}");
                       }
                   }
                   if ($perms{'vsa'}) {
                       &switch('','',6,5,'trck-22x22.png','Activity',
                               '',
                               "go('/adm/trackstudent?selected_student=$sname:$sdom')",
                               'View recent activity by this person');
                   }
                   if ($perms{'vgr'}) {
                       &switch('','',6,6,'rsrv-22x22.png','Reservations',
                               '',
                               "go('/adm/slotrequest?command=showresv&origin=aboutme&uname=$sname&udom=$sdom')",
                               'Slot reservation history');
                   }
                   if ($perms{'srm'}) {
                       &switch('','',6,7,'contact-new-22x22.png','Records',
                               '',
                               "go('/adm/email?recordftf=retrieve&recname=$sname&recdom=$sdom')",
                               'Add records');
                   }
               }
           } elsif ($resurl =~ m{^/?adm/viewclasslist}) {
   # This applies to viewclasslist page for users in a course
               if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
                   &switch('','',6,4,'pparm.png','Settings',
                           '',
                           "go('/adm/courseprefs?actions=classlists&phase=display')",
                           'Student-viewable classlist options');
               }
           }
           if (($env{'form.folderpath'} =~ /^supplemental/) &&
               (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
               (($resurl =~ m{^/adm/wrapper/ext/}) ||
                ($resurl =~ m{^/uploaded/$cdom/$cnum/supplemental/}) ||
                ($resurl eq '/adm/supplemental') ||
                ($resurl =~ m{^/public/$cdom/$cnum/syllabus$}) ||
                ($resurl =~ m{^/adm/$match_domain/$match_username/aboutme$}))) {
               my @folders=split('&',$env{'form.folderpath'});
               if ((@folders > 2) || ($resurl ne '/adm/supplemental')) {
                   my $esc_path=&escape(&HTML::Entities::encode(&escape($env{'form.folderpath'}),'<>&"'));
                   &switch('','',7,4,'docs-22x22.png','Edit Folder','parms[_2]',
                           "location.href='/adm/coursedocs?command=direct&forcesupplement=1&supppath=$esc_path'",
                           'Folder/Page Content');
               }
           }
     }      }
     return;  
 }  
   
 sub edit_course_upload {  # End checking for items for about me page for users in a course
     my ($file,$cnum,$cdom) = @_;      if ($docscrumbs) {
     my $cfile;          &Apache::lonhtmlcommon::clear_breadcrumb_tools();
     if ($file =~/\.(htm|html|css|js|txt)$/) {          &advtools_crumbs(@inlineremote);
         my $ext = $1;          return $editbutton;
         my $url = &Apache::lonnet::hreflocation('',$file);      } elsif ($env{'request.registered'}) {
         my $home = &Apache::lonnet::homeserver($cnum,$cdom);          return $editbutton;
         my @ids=&Apache::lonnet::current_machine_ids();      } else {
         my $dest;          if (ref($bread_crumbs) eq 'ARRAY') {
         if ($home && grep(/^\Q$home\E$/,@ids)) {              if (@inlineremote > 0) {
             $dest = $url.'?forceedit=1';                  if (ref($advtools) eq 'ARRAY') {
         } else {                      @{$advtools} = @inlineremote;
             unless (&Apache::lonnet::get_locks()) {                  }
                 $dest = '/adm/switchserver?otherserver='.  
                         $home.'&role='.$env{'request.role'}.  
                         '&url='.$url.'&forceedit=1';  
             }              }
         }              return;
         if ($dest) {          } elsif (@inlineremote > 0) {
             $cfile = &HTML::Entities::encode($dest,'"<>&');              &Apache::lonhtmlcommon::clear_breadcrumb_tools();
               &advtools_crumbs(@inlineremote);
               return   &Apache::lonhtmlcommon::scripttag('', 'start')
                      . &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0)
                      . &Apache::lonhtmlcommon::scripttag('', 'end');
         }          }
     }      }
     return $cfile;  
 }  }
   
 sub loadevents() {  sub advtools_crumbs {
     if ($env{'request.state'} eq 'construct' ||      my @funcs = @_;
         $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }      if ($env{'request.noversionuri'} =~ m{^/adm/$match_domain/$match_username/aboutme$}) {
     return 'LONCAPAreg();';          &Apache::lonhtmlcommon::add_breadcrumb_tool(
 }              'advtools', @funcs[61,64,65,66,67,74]);
       } elsif ($env{'request.noversionuri'} !~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {
 sub unloadevents() {          &Apache::lonhtmlcommon::add_breadcrumb_tool(
     if ($env{'request.state'} eq 'construct' ||              'advtools', @funcs[61,71,72,73,74,92]);
         $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; }      } elsif ($env{'request.noversionuri'} eq '/adm/viewclasslist') {
     return 'LONCAPAstale();';          &Apache::lonhtmlcommon::add_breadcrumb_tool(
 }              'advtools', @funcs[64]);
   
 sub startupremote {  
     my ($lowerurl)=@_;  
     unless ($env{'environment.remote'} eq 'on') {  
         return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');  
     }      }
 #  
 # The Remote actually gets launched!  
 #  
     my $configmenu=&rawconfig();  
     my $esclowerurl=&escape($lowerurl);  
     my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited');  
     return(<<ENDREMOTESTARTUP);  
 <script type="text/javascript">  
 // <![CDATA[  
 var timestart;  
 function wheelswitch() {  
     if (typeof(document.wheel) != 'undefined') {  
         if (typeof(document.wheel.spin) != 'undefined') {  
             var date=new Date();  
             var waited=Math.round(30-((date.getTime()-timestart)/1000));  
             document.wheel.spin.value=$message;  
         }  
     }  
    if (window.status=='|') {  
       window.status='/';  
    } else {  
       if (window.status=='/') {  
          window.status='-';  
       } else {  
          if (window.status=='-') {  
             window.status='\\\\';  
          } else {  
             if (window.status=='\\\\') { window.status='|'; }  
          }  
       }  
    }  
 }  }
   
 // ---------------------------------------------------------- The wait function  
 var canceltim;  
 function wait() {  
    if ((menuloaded==1) || (tim==1)) {  
       window.status='Done.';  
       if (tim==0) {  
          clearTimeout(canceltim);  
          $configmenu  
          window.location='$lowerurl';  
       } else {  
           window.location='/adm/remote?action=collapse&url=$esclowerurl';  
       }  
    } else {  
       wheelswitch();  
       setTimeout('wait();',200);  
    }  
 }  
   
 function main() {  
    canceltim=setTimeout('tim=1;',30000);  
    window.status='-';  
    var date=new Date();  
    timestart=date.getTime();  
    wait();  
 }  
   
 // ]]>  
 </script>  
 ENDREMOTESTARTUP  
 }  
   
 sub setflags() {  
     return(<<ENDSETFLAGS);  
 <script type="text/javascript">  
 // <![CDATA[  
     menuloaded=0;  
     tim=0;  
 // ]]>  
 </script>  
 ENDSETFLAGS  
 }  
   
 sub maincall() {  
     unless ($env{'environment.remote'} eq 'on') { return ''; }  
     return(<<ENDMAINCALL);  
 <script type="text/javascript">  
 // <![CDATA[  
     main();  
 // ]]>  
 </script>  
 ENDMAINCALL  
 }  
   
 sub load_remote_msg {  
     my ($lowerurl)=@_;  
   
     unless ($env{'environment.remote'} eq 'on') { return ''; }  
   
     my $esclowerurl=&escape($lowerurl);  
     my $link=&mt('[_1]Continue[_2] on in Inline Menu mode'  
                 ,'<a href="/adm/remote?action=collapse&amp;url='.$esclowerurl.'">'  
                 ,'</a>');  
     return(<<ENDREMOTEFORM);  
 <p>  
 <form name="wheel">  
 <input name="spin" type="text" size="60" />  
 </form>  
 </p>  
 <p>$link</p>  
 ENDREMOTEFORM  
 }  
   
 sub get_menu_name {  
     my $hostid = $Apache::lonnet::perlvar{'lonHostID'};  
     $hostid =~ s/\W//g;  
     return 'LCmenu'.$hostid;  
 }  
   
   
 sub reopenmenu {  
    unless ($env{'environment.remote'} eq 'on') { return ''; }  
    my $menuname = &get_menu_name();  
    my $nothing = &Apache::lonhtmlcommon::javascript_nothing();  
    return('window.open('.$nothing.',"'.$menuname.'","",false);');  
 }  
   
   
 sub open {  
     my $returnval='';  
     unless ($env{'environment.remote'} eq 'on') {  
         return  
         '<script type="text/javascript">'."\n"  
        .'// <![CDATA['."\n"  
        .'self.name="loncapaclient";'."\n"  
        .'// ]]>'."\n"  
        .'</script>';  
     }  
     my $menuname = &get_menu_name();  
   
 #    unless (shift eq 'unix') {  
 # resizing does not work on linux because of virtual desktop sizes  
 #       $returnval.=(<<ENDRESIZE);  
 #if (window.screen) {  
 #    self.resizeTo(screen.availWidth-215,screen.availHeight-55);  
 #    self.moveTo(190,15);  
 #}  
 #ENDRESIZE  
 #    }  
     $returnval=(<<ENDOPEN);  
 // <![CDATA[  
 window.status='Opening LON-CAPA Remote Control';  
 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");  
 self.name='loncapaclient';  
 // ]]>  
 ENDOPEN  
     return '<script type="text/javascript">'.$returnval.'</script>';  
 }  
   
   
 # ================================================================== Raw Config  # ================================================================== Raw Config
   
 sub clear {  sub clear {
     my ($row,$col)=@_;      my ($row,$col)=@_;
     if ($env{'environment.remote'} eq 'on') {      $inlineremote[10*$row+$col]='';
        if (($row<1) || ($row>13)) { return ''; }      return ''; 
        return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););  
     } else {  
         $inlineremote[10*$row+$col]='';  
         return '';  
     }  
 }  }
   
 # ============================================ Switch a button or create a link  # ============================================ Switch a button or create a link
Line 1314  sub switch { Line 1005  sub switch {
     my $idx=10*$row+$col;      my $idx=10*$row+$col;
     $category_members{$cat}.=':'.$idx;      $category_members{$cat}.=':'.$idx;
   
     if ($env{'environment.remote'} eq 'on') {  
         if (($row<1) || ($row>13)) { return ''; }  
         if ($env{'request.state'} eq 'construct') {  
             my $text = $top.' '.$bot;  
             $text=~s/\s*\-\s*//gs;  
             my $pic = '<img alt="'.$text.'" src="'.  
                       &Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$img).  
                       '" align="'.($nobreak==3?'right':'left').'" class="LC_icon" />';  
            $inlineremote[$idx] =  
                '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.  
                $pic.'<span class="LC_menubuttons_inline_text">'.$top.'&nbsp;</span></a>';  
         }  
 # Remote  
         $img=~s/\.png$/\.gif/;  
         return "\n".  
  qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););  
     }  
   
 # Inline Menu  # Inline Menu
     if ($nobreak==2) { return ''; }      if ($nobreak==2) { return ''; }
     my $text=$top.' '.$bot;      my $text=$top.' '.$bot;
Line 1366  sub switch { Line 1039  sub switch {
         unless ($env{'request.state'} eq 'construct') {          unless ($env{'request.state'} eq 'construct') {
             push(@tools,63);              push(@tools,63);
         }          }
         if (($env{'environment.icons'} eq 'iconsonly') &&          if (($env{'environment.icons'} eq 'iconsonly') && 
             (grep(/^$idx$/,@tools))) {              (grep(/^$idx$/,@tools))) {
             $inlineremote[$idx] =              $inlineremote[$idx] =
         '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>';          '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>';
Line 1393  sub secondlevel { Line 1066  sub secondlevel {
     return $output;      return $output;
 }  }
   
 sub openmenu {  
     my $menuname = &get_menu_name();  
     unless ($env{'environment.remote'} eq 'on') { return ''; }  
     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();  
     return "window.open(".$nothing.",'".$menuname."');";  
 }  
   
 sub inlinemenu {  sub inlinemenu {
     undef(@inlineremote);      undef(@inlineremote);
     undef(%category_members);      undef(%category_members);
Line 1442  sub rawconfig { Line 1108  sub rawconfig {
 #  #
     my $textualoverride=shift;      my $textualoverride=shift;
     my $output='';      my $output='';
     if ($env{'environment.remote'} eq 'on') {      return '' unless $textualoverride;
        $output.=  
  "window.status='Opening Remote Control';var swmenu=".&openmenu().  
 "\nwindow.status='Configuring Remote Control ';";  
     } else {  
         unless ($textualoverride) { return ''; }  
     }  
     my $uname=$env{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};      my $udom=$env{'user.domain'};
     my $adv=$env{'user.adv'};      my $adv=$env{'user.adv'};
Line 1623  sub rawconfig { Line 1283  sub rawconfig {
           $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);            $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);
         }          }
     }      }
     if ($env{'environment.remote'} eq 'on') {  
         $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";  
         if (&Apache::lonmsg::newmail()) {  
             $output.='swmenu.setstatus("you have","messages");';  
         }  
     }  
     return $output;      return $output;
 }  }
   
Line 1654  sub check_for_rcrs { Line 1308  sub check_for_rcrs {
     return $showreqcrs;      return $showreqcrs;
 }  }
   
 # ======================================================================= Close  
   
 sub close {  
     unless ($env{'environment.remote'} eq 'on') { return ''; }  
     my $menuname = &get_menu_name();  
     return(<<ENDCLOSE);  
 <script type="text/javascript">  
 // <![CDATA[  
 window.status='Accessing Remote Control';  
 menu=window.open("/adm/rat/empty.html","$menuname",  
                  "height=350,width=150,scrollbars=no,menubar=no");  
 window.status='Disabling Remote Control';  
 menu.active=0;  
 menu.autologout=0;  
 window.status='Closing Remote Control';  
 menu.close();  
 window.status='Done.';  
 // ]]>  
 </script>  
 ENDCLOSE  
 }  
   
 sub dc_popup_js {  sub dc_popup_js {
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                           more => '(More ...)',                                            more => '(More ...)',
Line 1750  sub utilityfunctions { Line 1382  sub utilityfunctions {
     my $end_page_annotate =       my $end_page_annotate = 
         &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'.      my $jumptores = &Apache::lonhtmlcommon::javascript_jumpto_resource();
                          &mt('Switch server?');  
   
     my $esc_url=&escape($currenturl);      my $esc_url=&escape($currenturl);
     my $esc_symb=&escape($currentsymb);      my $esc_symb=&escape($currentsymb);
Line 1766  return (<<ENDUTILITY) Line 1397  return (<<ENDUTILITY)
   
 $dc_popup_cid  $dc_popup_cid
   
 function go(url) {  $jumptores
    if (url!='' && url!= null) {  
        currentURL = null;  
        currentSymb= null;  
        window.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!='') {
Line 1942  sub constspaceform { Line 1558  sub constspaceform {
 ENDCONSTSPACEFORM  ENDCONSTSPACEFORM
 }  }
   
 sub get_nav_status {  
     my $navstatus="swmenu.w_loncapanav_flag=";  
     if ($env{'environment.remotenavmap'} eq 'on') {  
         $navstatus.="1";  
     } else {  
         $navstatus.="-1";  
     }  
     return $navstatus;  
 }  
   
 sub hidden_button_check {  sub hidden_button_check {
     if ( $env{'request.course.id'} eq ''      if ( $env{'request.course.id'} eq ''
          || $env{'request.role.adv'} ) {           || $env{'request.role.adv'} ) {
Line 1968  sub roles_selector { Line 1574  sub roles_selector {
     my $now = time;      my $now = time;
     my (%courseroles,%seccount,%courseprivs);      my (%courseroles,%seccount,%courseprivs);
     my $is_cc;      my $is_cc;
     my $role_selector;      my ($js,$form,$switcher,$switchtext);
     my $ccrole;      my $ccrole;
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         $ccrole = 'co';          $ccrole = 'co';
Line 2056  sub roles_selector { Line 1662  sub roles_selector {
             }              }
         }          }
     }      }
     my $switchtext;  
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         $switchtext = &mt('Switch community role to...')          $switchtext = &mt('Switch community role to...')
     } else {      } else {
Line 2064  sub roles_selector { Line 1669  sub roles_selector {
     }      }
     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,\%courseprivs,$priv);          my @submenu;
         $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">          $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv);
                           <select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">';          $form = 
         $role_selector .= '<option value="">'.$switchtext.'</option>';              '<form name="rolechooser" method="post" action="/adm/roles">'."\n".
               '  <input type="hidden" name="destinationurl" value="'.
               &HTML::Entities::encode($destinationurl).'" />'."\n".
               '  <input type="hidden" name="gotorole" value="1" />'."\n".
               '  <input type="hidden" name="selectrole" value="" />'."\n".
               '  <input type="hidden" name="switchrole" value="" />'."\n".
               '</form>'."\n";
         foreach my $role (@roles_order) {          foreach my $role (@roles_order) {
             if (defined($courseroles{$role})) {              if (defined($courseroles{$role})) {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role,$crstype).'</option>';                   push(@submenu,['javascript:adhocRole('."'$role'".')',
                                  &Apache::lonnet::plaintext($role,$crstype)]);
             }              }
         }          }
         foreach my $role (sort(keys(%courseroles))) {          foreach my $role (sort(keys(%courseroles))) {
             if ($role =~ /^cr/) {              if ($role =~ /^cr/) {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>';                    push(@submenu,['javascript:adhocRole('."'$role'".')',
                                   &Apache::lonnet::plaintext($role)]);
   
             }              }
         }          }
         $role_selector .= '</select>'."\n";          if (@submenu > 0) {
         if ($destsymb ne '') {              $switcher = &create_submenu('','',$switchtext,\@submenu);
             $role_selector .= '<input type="hidden" name="destsymb" value="'.  
                               &HTML::Entities::encode($destsymb).'" />'."\n";  
         }          }
         $role_selector .=  
                '<input type="hidden" name="destinationurl" value="'.  
                &HTML::Entities::encode($destinationurl).'" />'."\n".  
                '<input type="hidden" name="gotorole" value="1" />'."\n".  
                '<input type="hidden" name="selectrole" value="" />'."\n".  
                '<input type="hidden" name="switch" value="1" />'."\n".  
                '</form>';  
     }      }
     return $role_selector;      return ($js,$form,$switcher);
 }  }
   
 sub get_all_courseroles {  sub get_all_courseroles {
Line 2230  sub jump_to_role { Line 1835  sub jump_to_role {
     return <<"END";      return <<"END";
 <script type="text/javascript">  <script type="text/javascript">
 //<![CDATA[  //<![CDATA[
 function adhocRole(roleitem) {  function adhocRole(newrole) {
     $js      $js
     var newrole =  document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value;  
     if (newrole == '') {      if (newrole == '') {
         return;          return;
     }       } 
Line 2249  function adhocRole(roleitem) { Line 1853  function adhocRole(roleitem) {
                 if (confirm("$lt{'role'}\\n$lt{'swit'}")) {                  if (confirm("$lt{'role'}\\n$lt{'swit'}")) {
                     document.rolechooser.destinationurl.value = '/adm/menu';                      document.rolechooser.destinationurl.value = '/adm/menu';
                 } else {                  } else {
                     document.rolechooser.elements[roleitem].selectedIndex = 0;  
                     return;                      return;
                 }                  }
             }              }
Line 2285  function adhocRole(roleitem) { Line 1888  function adhocRole(roleitem) {
             fullrole += '/'+secchoice;              fullrole += '/'+secchoice;
         }          }
     } else {      } else {
         document.rolechooser.elements[roleitem].selectedIndex = 0;  
         if (secchoice != null) {          if (secchoice != null) {
             alert("$lt{'youe'} \\""+secchoice+"\\".\\n $lt{'plst'}");              alert("$lt{'youe'} \\""+secchoice+"\\".\\n $lt{'plst'}");
         }          }
         return;          return;
     }      }
     if (fullrole == "$env{'request.role'}") {      if (fullrole == "$env{'request.role'}") {
         document.rolechooser.elements[roleitem].selectedIndex = 0;  
         return;          return;
     }      }
     itemid = retrieveIndex('gotorole');      itemid = retrieveIndex('gotorole');
     if (itemid != -1) {      if (itemid != -1) {
         document.rolechooser.elements[itemid].name = fullrole;          document.rolechooser.elements[itemid].name = fullrole;
     }      }
     document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value = fullrole;      document.rolechooser.switchrole.value = fullrole;
     document.rolechooser.selectrole.value = '1';      document.rolechooser.selectrole.value = '1';
     document.rolechooser.submit();      document.rolechooser.submit();
     return;      return;
Line 2421  BEGIN { Line 2022  BEGIN {
                         $category_names{$entries[2]}=$entries[3];                          $category_names{$entries[2]}=$entries[3];
                     } elsif ($configline=~/^prim\:/) {                      } elsif ($configline=~/^prim\:/) {
                         my @entries = (split(/\:/, $configline))[1..5];                          my @entries = (split(/\:/, $configline))[1..5];
                         push @primary_menu, \@entries;                          push(@primary_menu,\@entries);
                     } elsif ($configline=~/^primsub\:/) {                      } elsif ($configline=~/^primsub\:/) {
                         my ($parent,@entries) = (split(/\:/, $configline))[1..4];                          my ($parent,@entries) = (split(/\:/, $configline))[1..4];
                         push (@{$primary_submenu{$parent}},\@entries);                          push(@{$primary_submenu{$parent}},\@entries);
                     } elsif ($configline=~/^scnd\:/) {                      } elsif ($configline=~/^scnd\:/) {
                         my @entries = (split(/\:/, $configline))[1..5];                          my @entries = (split(/\:/, $configline))[1..5];
                         push @secondary_menu, \@entries;                           push(@secondary_menu,\@entries);
                     } elsif ($configline=~/^scndsub\:/) {  
                         my ($parent,@entries) = (split(/\:/, $configline))[1..4];  
                         push (@{$secondary_submenu{$parent}},\@entries);  
                     } elsif ($configline) {                      } elsif ($configline) {
                         push(@desklines,$configline);                          push(@desklines,$configline);
                     }                      }

Removed from v.1.369.2.25  
changed lines
  Added in v.1.401


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