Diff for /loncom/interface/lonmenu.pm between versions 1.328 and 1.338

version 1.328, 2010/05/30 18:30:52 version 1.338, 2010/08/25 12:38:45
Line 225  sub primary_menu { Line 225  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;
Line 238  sub secondary_menu { Line 262  sub secondary_menu {
     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 $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(
Line 249  sub secondary_menu { Line 274  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 268  sub secondary_menu { Line 294  sub secondary_menu {
         next if    $$menuitem[4]   =~ /showgroups$/          next if    $$menuitem[4]   =~ /showgroups$/
                 && !$canviewgrps                  && !$canviewgrps
                 && !%groups;                  && !%groups;
           next if    $$menuitem[4]    eq 'author'
                   && !$author;
   
         if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {          if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
             # special treatment for role selector              # special treatment for role selector
Line 300  sub secondary_menu { Line 328  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>";
 }  }
Line 458  sub innerregister { Line 488  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 468  sub innerregister { Line 500  sub innerregister {
                     # Check that the user has permission to edit this resource                      # Check that the user has permission to edit this resource
                     ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);                      ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
                     if (defined($cfudom)) {                      if (defined($cfudom)) {
         my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);          $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
         my $allowed=0;          my $allowed=0;
         my @ids=&Apache::lonnet::current_machine_ids();          my @ids=&Apache::lonnet::current_machine_ids();
         foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }          foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
         if ($allowed) {          if ($allowed) {
                             $cfile=$file;                              $cfile=$file;
                           } else {
                               $switchserver=$file;
                         }                          }
                     }                      }
                 }                  }
             }              }
             # Finally, turn the button on or off              # Finally, turn the button on or off
             if ($cfile && !$const_space) {              if (($cfile || $switchserver) && !$const_space) {
                 my $nocrsedit;                  my $nocrsedit;
                 # Suppress display where CC has switched to student role.                  # Suppress display where CC has switched to student role.
                 if ($env{'request.course.id'}) {                  if ($env{'request.course.id'}) {
Line 491  sub innerregister { Line 525  sub innerregister {
                 if ($nocrsedit) {                  if ($nocrsedit) {
                     $editbutton=&clear(6,1);                      $editbutton=&clear(6,1);
                 } else {                  } else {
                       my $bot = "go('$cfile')";
                       if ($switchserver) {
                           if ( $env{'request.symb'} && $env{'request.course.id'} ) {
                               $cfile = '/adm/switchserver?otherserver='.$home.'&amp;role='.
                                        &HTML::Entities::encode($env{'request.role'},'"<>&').'&amp;symb='.
                                        &HTML::Entities::encode($env{'request.symb'},'"<>&');
                               $bot = "need_switchserver('$cfile');";
                           }
                       }
                     $editbutton=&switch                      $editbutton=&switch
                        ('','',6,1,'pcstr.png','edit[_1]','resource[_2]',                         ('','',6,1,'pcstr.png','edit[_1]','resource[_2]',
                      "go('".$cfile."');","Edit this resource");                          $bot,"Edit this resource");
                     $noeditbutton = 0;                      $noeditbutton = 0;
                 }                  }
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
Line 564  c&6&3 Line 607  c&6&3
 c&8&1  c&8&1
 c&8&2  c&8&2
 s&8&3&prt.png&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 s&9&1&sbkm.png&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1  
 ENDMENUITEMS  ENDMENUITEMS
               if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) {
                   # wishlist is only available for users with access to resource-pool
                   # and links can only be set for resources within the resource-pool
                   $menuitems .= (<<ENDMENUITEMS);
   s&9&1&wishlist-link.png&set[_1]&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1
   ENDMENUITEMS
               }
   
 my $currentURL = &Apache::loncommon::get_symb();  my $currentURL = &Apache::loncommon::get_symb();
 my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL);  my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL);
Line 595  ENDREALRES Line 644  ENDREALRES
     $menuitems .= (<<ENDMENUITEMS);      $menuitems .= (<<ENDMENUITEMS);
 s&8&3&prt.png&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
               if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') {
                   # wishlist is only available for users with access to resource-pool
                   $menuitems .= (<<ENDMENUITEMS);
   s&9&1&wishlist-link.png&set[_1]&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1
   ENDMENUITEMS
               }
  }   }
         my $buttons='';          my $buttons='';
         foreach (split(/\n/,$menuitems)) {          foreach (split(/\n/,$menuitems)) {
Line 1052  sub utilityfunctions { Line 1107  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 $start_page_bookmark =       my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
         &Apache::loncommon::start_page('Bookmarks',undef,                           &mt('Switch server?');
   
       my $start_page_wishlistlink = 
           &Apache::loncommon::start_page('Set link to wishlist',undef,
        {'only_body' => 1,         {'only_body' => 1,
  'js_ready'  => 1,   'js_ready'  => 1,
  'bgcolor'   => '#BBBBBB',});   'bgcolor'   => '#FFFFFF',});
   
       my $warningLink = &mt('You must insert a title!');
   
     my $end_page_bookmark =       # HTML-Markup for 'Set a link for this resource to wishlist'
       # this is written via JavaScript document.write (function set_wishlistlink) 
       # it is split into 3 parts and the inputfields for title and path are left out
       # these fields are inserted later to set the values for title and path
       # automatically via JavaScript (document.title and location.pathname) 
       my %folders = &Apache::lonnet::get('wishlist',['folders']);
       if ($folders{'folders'} eq '') {
           $folders{'folders'} = '<option value="" selected="selected">('.&mt('Top level').')</option>';
       }
       my $in_page_wishlistlink1 = '<h1>'.&mt('Set a link to wishlist').'</h1>'.
                                   '<form method="post" name="newlink" action="/adm/wishlist?mode=set" '.
                                   'onsubmit="return newlinksubmit();" >'.
                                   &Apache::lonhtmlcommon::start_pick_box().
                                   &Apache::lonhtmlcommon::row_title(&mt('Link Title'));
   
       my $in_page_wishlistlink2 = &Apache::lonhtmlcommon::row_closure().
                                   &Apache::lonhtmlcommon::row_title(&mt('Path'));
   
       my $in_page_wishlistlink3 = &Apache::lonhtmlcommon::row_closure().
                                   &Apache::lonhtmlcommon::row_title(&mt('Note')).
                                   '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea>'.
                                   &Apache::lonhtmlcommon::row_closure(1).
                                   &Apache::lonhtmlcommon::end_pick_box().
                                   '<br/><br/>'.
                                   '<input type="submit" value="'.&mt('Save in').'" />'.
                                   '<select name="folders">'.
                                   $folders{'folders'}.
                                   '</select>'.
                                   '<input type="button" value="'.&mt('cancel').'" onclick="javascript:window.close();" />'.
                                   '</form>';
   
       # remove all \n for inserting on javascript document.write
       $in_page_wishlistlink1 =~ s/\n//g;
       $in_page_wishlistlink2 =~ s/\n//g;
       $in_page_wishlistlink3 =~ s/\n//g;
   
       my $end_page_wishlistlink = 
         &Apache::loncommon::end_page({'js_ready' => 1});          &Apache::loncommon::end_page({'js_ready' => 1});
   
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
Line 1077  function go(url) { Line 1173  function go(url) {
    }     }
 }  }
   
   function need_switchserver(url) {
       if (url!='' && url!= null) {
           if (confirm("$confirm_switch")) {
               go(url); 
           }
       }
       return;
   }
   
 function gopost(url,postdata) {  function gopost(url,postdata) {
    if (url!='') {     if (url!='') {
       this.document.server.action=url;        this.document.server.action=url;
Line 1162  function group_chat(group) { Line 1267  function group_chat(group) {
    grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');     grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
 }  }
   
 function edit_bookmarks() {  
    go('');  
    w_BookmarkPal_flag=1;  
    bookmarkpal=window.open("/adm/bookmarks",  
                "BookmarkPal", "width=500,height=505,scrollbars=0");  
 }  
   
 function annotate() {  function annotate() {
    w_Annotator_flag=1;     w_Annotator_flag=1;
    annotator=window.open('','Annotator','width=365,height=265,scrollbars=0');     annotator=window.open('','Annotator','width=365,height=265,scrollbars=0');
Line 1182  function annotate() { Line 1280  function annotate() {
    annotator.document.close();     annotator.document.close();
 }  }
   
 function set_bookmark() {  function set_wishlistlink(title, path) {
    go('');     if (!title) {
    clienttitle=document.title;         title=document.title;
    clienthref=location.pathname;     }
    w_bmquery_flag=1;     if (!path) {
    bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0');         path=location.pathname;
    bmquery.document.write(     }
    '$start_page_bookmark'     title = title.replace(/^LON-CAPA /,'');
    +'<center><form method="post"'     wishlistlink=window.open('','wishlistNewLink','width=560,height=350,scrollbars=0');
    +' name="newlink" action="/adm/bookmarks" target="bmquery" '     wishlistlink.document.write(
    +'> <table width="340" height="150" '     '$start_page_wishlistlink'
    +'bgcolor="#FFFFFF" align="center"><tr><td>Link Name:<br /><input '     +'<script type="text\/javascript">'
    +'type="text" name="title" size="45" value="'+clienttitle+'" />'     +'function newlinksubmit(){'
    +'<br />Address:<br /><input type="text" name="address" size="45" '     +'var title = document.getElementsByName("title")[0].value;'
    +'value="'+clienthref+'" /><br /><center><input type="submit" '     +'if (!title) {'
    +'value="Save" /> <input type="button" value="Close" '     +'alert("$warningLink");'
    +'onclick="javascript:window.close();" /></center></td>'     +'return false;}'
    +'</tr></table></form></center>'     +'return true;}'
    +'$end_page_bookmark' );     +'<\/scr'+'ipt>'
    bmquery.document.close();     +'$in_page_wishlistlink1'
      +'<input type="text" name="title" size="45" value="'+title+'"/>'
      +'$in_page_wishlistlink2'
      +'<input type="text" name="path" size="45" value="'+path+'" '
      +'readonly="readonly" style="background-color: #DDDDDD"/>'
      +'$in_page_wishlistlink3'
      +'$end_page_wishlistlink' );
      wishlistlink.document.close();
   }
   
   function open_Wishlist_Import(rat) {
      var newWin;
      if (rat) {
          newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
                               'wishlistImport','scrollbars=1,resizable=1,menubar=0');
      }
      else {
          newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import',
                               'wishlistImport','scrollbars=1,resizable=1,menubar=0');
      }
      newWin.focus();
 }  }
   
 ENDUTILITY  ENDUTILITY

Removed from v.1.328  
changed lines
  Added in v.1.338


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