Diff for /loncom/publisher/lonpubdir.pm between versions 1.120 and 1.127

version 1.120, 2009/05/19 10:16:02 version 1.127, 2011/10/21 17:51:23
Line 47  sub handler { Line 47  sub handler {
   
   my $r=shift;    my $r=shift;
   
   my $fn;  
   
   
   
   $fn = getEffectiveUrl($r);  
   
   # Validate access to the construction space and get username@domain.    # Validate access to the construction space and get username@domain.
   
   my $uname;    my $uname;
   my $udom;    my $udom;
   
   ($uname,$udom)=    ($uname,$udom)=&Apache::loncacc::constructaccess($r->uri); 
     &Apache::loncacc::constructaccess(  
              $fn,$r->dir_config('lonDefDomain'));   
   unless (($uname) && ($udom)) {    unless (($uname) && ($udom)) {
      $r->log_reason($uname.':'.$udom.  
          ' trying to list directory '.$env{'form.filename'}.  
          ' ('.$fn.') - not authorized',   
          $r->filename);   
      return HTTP_NOT_ACCEPTABLE;       return HTTP_NOT_ACCEPTABLE;
   }    }
   
   # Remove trailing / from directory name.  
   
   $fn=~s/\/$//;  
   
   unless ($fn) {   
      $r->log_reason($env{'user.name'}.':'.$env{'user.domain'}.  
          ' trying to list empty directory', $r->filename);   
      return HTTP_NOT_FOUND;  
   }   
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   
     my $fn=$r->filename;
   
   my $thisdisfn=$fn;    my $thisdisfn=$fn;
   $thisdisfn=~s/^\/home\/$uname\/public_html//; # subdirectory part of  
                                                 # construction space.   
   my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.    my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.
     $thisdisfn=~s/^\Q$docroot\E\/priv//;
   
   &Apache::lonnet::logthis("Thisdisfn: $thisdisfn");
   
   my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn; # Resource directory    my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory
   my $targetdir=$udom.'/'.$uname.$thisdisfn; # Publiction target directory.    my $targetdir='/res'.$thisdisfn; # Publication target directory.
   my $linkdir='/priv/'.$uname.$thisdisfn;      # Full URL name of constr space.    my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.
   
   &Apache::lonnet::logthis("Values: $resdir $targetdir $linkdir");
   
   my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);    my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
   
   &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.    &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.
   if ($env{'environment.remote'} eq 'off') {    &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory, 
       &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory,   
                                                # browse/upload + new file page.                                                 # browse/upload + new file page.
   } else {  
       &pubbuttons($r,$uname,$thisdisfn);  
   }  
   &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.    &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.
   
   my $numdir = 0;    my $numdir = 0;
Line 145  sub handler { Line 124  sub handler {
   );    );
   return OK;      return OK;  
 }  }
 #  
 #  Gets the effective URL of the request and returns it:  
 #    $effn = getEffectiveUrl($r);  
 #       $r  - The Apache Request object.  
 sub getEffectiveUrl {  
     my $r = shift;  
     my $fn;  
       
     if ($env{'form.filename'}) { # If a form filename is defined.  
  $fn=$env{'form.filename'};  
  #  
  #   Replace the ~username of the URL with /home/username/public_html  
  #   so that we don't have to worry about ~ expansion internally.  
  #  
  $fn=~s/^https?\:\/\/[^\/]+\///;  
         $fn=~s/^\///;  
         $fn=~s{~($LONCAPA::username_re)}{/home/$1/public_html};  
   
  #  Remove trailing / strings (?)   
   
  $fn=~s/\/[^\/]+$//;  
     } else {  
  #   If no form is defined, use request filename.  
  $fn = $r->filename();  
  my $lonDocRoot=$r->dir_config('lonDocRoot');  
  if ( $fn =~ /$lonDocRoot/ ) {  
     #internal authentication, needs fixup.  
     $fn = $r->uri(); # non users do not get the full path request  
                              # through SCRIPT_FILENAME  
     $fn=~s{^/~($LONCAPA::username_re)}{/home/$1/public_html};  
  }  
     }  
     $fn=~s/\/+/\//g;  
     return $fn;  
 }  
 #  #
 #   Output the header of the page.  This includes:  #   Output the header of the page.  This includes:
 #   - The HTML header   #   - The HTML header 
Line 199  sub startpage { Line 144  sub startpage {
   
     my $formaction='/priv/'.$uname.$thisdisfn.'/';      my $formaction='/priv/'.$uname.$thisdisfn.'/';
     $formaction=~s|/+|/|g;      $formaction=~s|/+|/|g;
     my $pagetitle .= &Apache::loncommon::help_open_menu('','',3,'Authoring').  
         '<font face="Arial, Helvetica, sans-serif" size="+1"><b>'.&mt('Construction Space').'</b>:</font>&nbsp;'.  
         '<form name="dirs" method="post" action="'.$formaction.  
         '" target="_parent"><tt><b>'.  
         &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />".  
         &Apache::lonhtmlcommon::select_recent('construct','recent',  
                  'this.form.action=this.form.recent.value;this.form.submit()').  
               '</form>';  
     &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);      &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);
     if ($env{'environment.remote'} eq 'off') {  
  $env{'request.noversionuri'}=$currdir.'/';      &Apache::lonhtmlcommon::clear_breadcrumbs();
  $r->print(&Apache::loncommon::start_page('Construction Space',undef,      &Apache::lonhtmlcommon::add_breadcrumb({
  {'body_title' =>          'text'  => 'Construction Space',
       $pagetitle,}));          'href'  => &Apache::loncommon::authorspace(),
     } else {      });
  $r->print(&Apache::loncommon::start_page('Construction Space',undef,      # breadcrumbs (and tools) will be created 
  { 'only_body' => 1,}));      # in start_page->bodytag->innerregister
  $r->print($pagetitle);  
     }      $env{'request.noversionuri'}=$currdir.'/';
       $r->print(&Apache::loncommon::start_page('Construction Space',undef));
   
       $r->print(&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader(1)));
   
     my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);      my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);
     my $doctitle = 'LON-CAPA '.&mt('Construction Space');      my $doctitle = 'LON-CAPA '.&mt('Construction Space');
Line 330  parent.lastknownpriv='/~$uname$esc_thisd Line 271  parent.lastknownpriv='/~$uname$esc_thisd
 </script>  </script>
 ENDPUBDIRSCRIPT  ENDPUBDIRSCRIPT
     $r->print($pubdirscript);      $r->print($pubdirscript);
   
     if ((($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) &&  
  $env{'environment.remote'} ne 'off') {  
         $r->print('<h3>'.&mt('Co-Author [_1]',$uname.':'.$udom).'</h3>');  
     }  
 }  }
   
 sub dircontrols {  sub dircontrols {
Line 447  sub dircontrols { Line 383  sub dircontrols {
 END  END
 }  }
   
 sub pubbuttons {  
     my ($r,$uname,$thisdisfn) = @_;  
     $r->print('<form method="post" action="/adm/publish" target="_parent">'.  
               '<table><tr><td><input type="hidden" name="filename" value="/~'.  
                $uname.$thisdisfn.'/" />'.  
               '<input type="submit" value="'.&mt('Publish Directory').'" /></td><td>'.  
 '<input type="button" onclick="window.location='."'/~".  
                $uname.$thisdisfn."/default.meta'".'" value="'.  
 &mt('Edit Directory Metadata').'" /></td></tr></table></form>');  
 }  
   
 sub resourceactions {  sub resourceactions {
     my ($r,$uname,$udom,$thisdisfn) = @_;      my ($r,$uname,$udom,$thisdisfn) = @_;
     $r->print(<<END);      $r->print(<<END);
Line 568  sub putdirectory { Line 493  sub putdirectory {
         }          }
  $r->print('<tr class="LC_browser_folder">'.   $r->print('<tr class="LC_browser_folder">'.
   '<td><img src="'.    '<td><img src="'.
   $Apache::lonnet::perlvar{'lonIconsURL'}.'/folder_closed.gif" alt="folder" /></td>'.    $Apache::lonnet::perlvar{'lonIconsURL'}.'/navmap.folder.closed.gif" alt="folder" /></td>'.
   '<td>'.$actionitem.'</td>'.    '<td>'.$actionitem.'</td>'.
   '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.    '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.
   $disfilename.'</a></span></td>'.    $disfilename.'</a></span></td>'.
Line 627  sub putresource { Line 552  sub putresource {
     $meta_same = 0;      $meta_same = 0;
  }   }
  $publish_button=&mt('Re-publish');   $publish_button=&mt('Re-publish');
  my $rights_status =  
     &mt(&getCopyRightString($targetdir.'/'.$filename)).' '.          my $rights_status =
     &mt(&getSourceRightString($targetdir.'/'.$filename));              &mt(&getCopyRightString($targetdir.'/'.$filename)).', ';
   
           my %lt_SourceRight = &Apache::lonlocal::texthash(
                  'open'   => 'Source: open',
                  'closed' => 'Source: closed',
           );
           $rights_status .=
               $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};
   
  $title = '<a href="/res/'.$targetdir.'/'.$filename.   $title = '<a href="/res/'.$targetdir.'/'.$filename.
     '.meta" target="cat">'.      '.meta" target="cat">'.
     &getTitleString($targetdir.'/'.$filename).'</a>';      &getTitleString($targetdir.'/'.$filename).'</a>';

Removed from v.1.120  
changed lines
  Added in v.1.127


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