Diff for /loncom/interface/lonmenu.pm between versions 1.388 and 1.389

version 1.388, 2012/10/29 17:38:56 version 1.389, 2012/10/31 12:54:13
Line 523  sub innerregister { Line 523  sub innerregister {
         ###          ###
         my $editbutton = '';          my $editbutton = '';
         my $noeditbutton = 1;          my $noeditbutton = 1;
         my ($cnum,$cdom);          my ($cnum,$cdom,$cfile,$switchserver,$home,$uploaded);
         if ($env{'request.course.id'}) {          if ($env{'request.course.id'}) {
             $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};              $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
             $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};              $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 555  sub innerregister { Line 555  sub innerregister {
                 my $home = &Apache::lonnet::homeserver($caname,$cadom);                  my $home = &Apache::lonnet::homeserver($caname,$cadom);
  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; } }   if (($home ne 'no_host') && (grep(/^\Q$home\E$/,@ids))) {
  if (!$allowed) {  
     $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);      $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);
                     $noeditbutton = 0;  
                 }                  }
             }              } else {
 #  #
 # We are an author for some stuff, but currently do not have the role of author.  # 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.  # Figure out if we have authoring privileges for the resource we are looking at.
 # This should maybe become a privilege check in lonnet  
 #  #
             ##                  my ($cfile,$switchserver,$home,$uploaded);
             ## Determine if user can edit url.                  if ($env{'request.filename'}) {
             ##                      my $file=&Apache::lonnet::declutter($env{'request.filename'});
             my $cfile='';                      ##
             my $cfuname='';                      ## Determine if user can edit url.
             my $cfudom='';                      ##
             my $uploaded;                      ($cfile,$home,$switchserver,$uploaded) =
             my $switchserver='';                          &Apache::lonnet::can_edit_resource($file,$cnum,$cdom);
             my $home;                  }
             if ($env{'request.filename'}) {                  # Turn the button on or off
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  if (($cfile) && ($home ne '') && ($home ne 'no_host')) {
                 if (defined($cnum) && defined($cdom)) {                      my $nocrsedit;
                     $uploaded = &is_course_upload($file,$cnum,$cdom);                      # Suppress display where CC has switched to student role.
                 }                      if ($env{'request.course.id'}) {
                 if (!$uploaded) {                          unless(&Apache::lonnet::allowed('mdc',
                                                           $env{'request.course.id'})) {
                     $file=~s{^(priv/$match_domain/$match_username)}{/$1};                              $nocrsedit = 1;
                     $file=~s{^($match_domain/$match_username)}{/priv/$1};  
   
                     # Check that the user has permission to edit this resource  
                     my $setpriv = 1;  
                     ($cfuname,$cfudom)=&Apache::lonnet::constructaccess($file,$setpriv);  
                     if (defined($cfudom)) {  
         $home=&Apache::lonnet::homeserver($cfuname,$cfudom);  
         my $allowed=0;  
         my @ids=&Apache::lonnet::current_machine_ids();  
         foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }  
         if ($allowed) {  
                             $cfile=$file;  
                         } else {  
                             $switchserver=$file;  
                         }                          }
                     }                      }
                 }                      if ($nocrsedit) {
             }                          $editbutton=&clear(6,1);
             # Finally, turn the button on or off                      } else {
             if (($cfile || $switchserver) && !$const_space) {                          $editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded);
                 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;  
                     }                      }
                 }                  } elsif ($editbutton eq '') {
                 if ($nocrsedit) {  
                     $editbutton=&clear(6,1);                      $editbutton=&clear(6,1);
                 } else {  
                     my $bot = "go('$cfile')";  
                     if ($switchserver) {  
                         if ( $env{'request.symb'} && $env{'request.course.id'} ) {  
                             $cfile = '/adm/switchserver?otherserver='.$home.'&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','Edit','resource[_2]',  
                         $bot,"Edit this resource");  
                     $noeditbutton = 0;  
                 }                  }
             } elsif ($editbutton eq '') {  
                 $editbutton=&clear(6,1);  
             }              }
         }          } elsif (($env{'request.filename'}) && $env{'request.course.id'}) {
         if (($noeditbutton) && ($env{'request.filename'})) {   
             if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {              if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 my $file=&Apache::lonnet::declutter($env{'request.filename'});                  my $file=&Apache::lonnet::declutter($env{'request.filename'});
                 if (defined($cnum) && defined($cdom)) {                  if (($cnum =~ /$match_courseid/) && ($cdom =~ /$match_domain/)) {
                     if (&is_course_upload($file,$cnum,$cdom)) {                      my ($cfile,$home,$switchserver,$uploaded) =
                         my $cfile = &edit_course_upload($file,$cnum,$cdom);                          &Apache::lonnet::can_edit_resource($file,$cnum,$cdom);
                         if ($cfile) {                      if (($uploaded) && ($cfile ne '')) {
                             $editbutton=&switch                          $editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded);
                                         ('','',6,1,'pcstr.png','Edit',  
                                          'resource[_2]',"go('".$cfile."');",  
                                          'Edit this resource');  
                         }  
                     }                      }
                 }                  }
             }              }
Line 829  ENDMENUITEMS Line 784  ENDMENUITEMS
            . &Apache::lonhtmlcommon::scripttag('', 'end');             . &Apache::lonhtmlcommon::scripttag('', 'end');
 }  }
   
 sub is_course_upload {  sub get_editbutton {
     my ($file,$cnum,$cdom) = @_;      my ($cfile,$home,$switchserver,$uploaded) = @_;
     my $uploadpath = &LONCAPA::propath($cdom,$cnum);      my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,
     $uploadpath =~ s{^\/}{};                                                           $uploaded,$env{'request.symb'});
     if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) ||      if ($jscall) {
         ($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) {          return &switch('','',6,1,'pcstr.png','Edit','resource[_2]',
         return 1;                         $jscall,"Edit this resource");
     }      }
     return;  
 }  
   
 sub edit_course_upload {  
     my ($file,$cnum,$cdom) = @_;  
     my $cfile;  
     if ($file =~/\.(htm|html|css|js|txt)$/) {  
         my $ext = $1;  
         my $url = &Apache::lonnet::hreflocation('',$file);  
         my $home = &Apache::lonnet::homeserver($cnum,$cdom);  
         my @ids=&Apache::lonnet::current_machine_ids();  
         my $dest;  
         if ($home && grep(/^\Q$home\E$/,@ids)) {  
             $dest = $url.'?forceedit=1';  
         } else {  
             unless (&Apache::lonnet::get_locks()) {  
                 $dest = '/adm/switchserver?otherserver='.  
                         $home.'&role='.$env{'request.role'}.  
                         '&url='.$url.'&forceedit=1';  
             }  
         }  
         if ($dest) {  
             $cfile = &HTML::Entities::encode($dest,'"<>&');  
         }  
     }  
     return $cfile;  
 }  }
   
 # ================================================================== Raw Config  # ================================================================== Raw Config
Line 1264  sub utilityfunctions { Line 1193  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 1280  return (<<ENDUTILITY) Line 1208  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!='') {

Removed from v.1.388  
changed lines
  Added in v.1.389


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