Diff for /loncom/publisher/lonunauthorized.pm between versions 1.10 and 1.11

version 1.10, 2011/06/07 18:05:08 version 1.11, 2011/11/13 01:07:09
Line 35  use Apache::lonnet; Line 35  use Apache::lonnet;
 use Apache::loncacc;  use Apache::loncacc;
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA();  use LONCAPA();
   use HTML::Entities();
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 45  sub handler { Line 46  sub handler {
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
 # Figure out who the user is and what they wanted to access  # Figure out who the user is and what they wanted to access
   
     my ($ownername,$ownerdomain)=      my ($ownername,$ownerdomain,$ownerhome);
      &Apache::loncacc::constructaccess($env{'request.editurl'},$r->dir_config('lonDefDomain'));      if ($env{'request.editurl'} ne '') {
           ($ownername,$ownerdomain,$ownerhome) = 
               &Apache::loncacc::constructaccess($env{'request.editurl'});
       }
   
       # Breadcrumbs
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       if ($env{'request.role'} =~ /^(au|ca|aa)/) { 
           &Apache::lonhtmlcommon::add_breadcrumb({
               'text' => 'Construction Space',
               'href' => &Apache::loncommon::authorspace(),
           });
       } elsif (($env{'request.course.id'}) && 
                (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
           &Apache::lonhtmlcommon::add_breadcrumb({
               'text' => 'Course Contents',
               'href' => '/adm/coursedocs',
           });
       }
   
 # print header  # print header
     $r->print(&Apache::loncommon::start_page("Failed Access to Construction Space",      $r->print(&Apache::loncommon::start_page("Failed Access to Construction Space",
      undef,       undef,
      {'domain' => $ownerdomain,}));       {'domain' => $ownerdomain,}).
                                                &Apache::lonhtmlcommon::breadcrumbs());
 # figure out what went wrong  # figure out what went wrong
   
     if ($ownerdomain) {      if ($ownerdomain) {
  $r->print('<p class="LC_error">'          if ($ownerhome eq 'no_host') {
                  .&mt('The construction space for this resource is located on another server.')              $r->print('<p class="LC_error">'.
                  .'</p>'                        &mt('Unable to determine home server for this resource: [_1]',
                  .'<p>'                        '<span class="LC_filename">'.$env{'request.editurl'}.'</span>').
                  .&mt('Choose another server.')                        '</p>');
                  .'</p>');          } else {
         my $ownerhome=&Apache::lonnet::homeserver($ownername,$ownerdomain);              my @hosts = &Apache::lonnet::current_machine_ids();
         unless ($ownerhome eq 'no_host') {              if (!grep(/^\Q$ownerhome\E$/,@hosts)) {
     $r->print('<p>'                  my $switchlink = '/adm/switchserver?otherserver='.$ownerhome.
                      .&mt('Please log into [_1] to edit.'                                   '&origurl='.&HTML::Entities::encode($env{'request.editurl'},'<>&"');
                          ,'<tt>'.&Apache::lonnet::hostname($ownerhome).'</tt>')          $r->print('<p class="LC_warning">'.
                      .'</p>');                            &mt('The construction space for this resource is located on a different server: [_1]',
                             '<b><tt>'.&Apache::lonnet::hostname($ownerhome).'</b></tt>').
                             '</p>'.
                             '<p class="LC_error"><a href="'.$switchlink.'">'.
                             &mt('Switch Server').'</a>'.
                             '</p>');
               } else {
                   $r->print('<p class="LC_error">'.
                             &mt('You do not have authoring privileges for this resource').' '.
                             '<span class="LC_filename">'.$env{'request.editurl'}.'</span>'.
                             '</p>');
               }
         }          }
     } elsif (!$env{'request.editurl'}) {      } elsif (!$env{'request.editurl'}) {
         $r->print('<p class="LC_error">'          if ($ENV{'REDIRECT_URL'} =~ m{^/adm/([^/]+)}) {
                  .&mt('There may be a problem with the filename, e.g., you may be attempting to edit a versioned file (files in construction may not include a version number in front of the extension).')              my $action = $1;   
                  .'</p>');              my ($option,$filename,$filename1,$filename2,$decompress,
                   $qualifiedfilename);
               if ($ENV{'REDIRECT_QUERY_STRING'} ne '') {
                   foreach my $pair (split(/&/,$ENV{'REDIRECT_QUERY_STRING'})) {
                       my ($name,$value) = split(/=/,$pair);
                       if ($name eq 'filename') {
                           if (($action eq 'publish') || ($action eq 'cfile')) {
                               $filename = &LONCAPA::unescape($value);
                           } else {
                               $filename = $value;
                           }
                       } elsif ($name eq 'filename1') {
                           $filename1 = $value;
                       } elsif ($name eq 'filename2') {
                           $filename2 = $value;
                       } elsif ($name eq 'decompress') {
                           $decompress = $value;
                           $option = 'decompress';
                       } elsif ($name eq 'qualifiedfilename') {
                           $qualifiedfilename = $value;
                       } elsif ($name = 'versionone') {
                           if ($value eq 'priv') {
                               $option = 'cstr';
                           }
                       } elsif ($name eq 'versiontwo') {
                           if ($value eq 'priv') {
                               $option = 'cstr';
                           }
                       } elsif ($name eq 'filetwo') {
                           $option = $value; 
                       }
                   }
                   if (($action eq 'upload') || ($action eq 'testbank')) {
                       if (($filename1 ne '') && ($filename ne '')) {
                           $filename = $filename1.$filename2;
                       }
                   } elsif ($action eq 'cfile') {
                       if ($decompress ne '') {
                           $filename = $decompress;
                       } elsif ($qualifiedfilename ne '') {
                           $filename = $qualifiedfilename;
                       }
                   }
                   my %deniedactions = &get_denied_action_text();
                   my $warning;
                   if ($option eq 'decompress') {
                       $warning = $deniedactions{$option};
                   } else {
                       $warning = $deniedactions{$action};
                   }
                   if ($warning) {
                       if (($action eq 'diff') && ($option ne 'cstr')) {
                           $r->print('<p class="LC_error">'.
                                     $deniedactions{$action}.'</p><p class="LC_warning">'
                                     &mt('You do not have privileges to view the published resource').' '.
                                         '<span class="LC_filename">'.$filename.'</span>'.
                                     '</p>');
                       } else {
                           if (($action eq 'diff') && ($option eq 'cstr')) {
                               $filename =~ s{^/res/}{/priv/};
                           }
                           $r->print('<p class="LC_error">'.
                                     $deniedactions{$action}.'</p><p class="LC_warning">'.
                                     &mt('You do not have authoring privileges for this resource').' '.
                                         '<span class="LC_filename">'.$filename.'</span>'.
                                     '</p>');
                       }
                   } else {
                       $r->print('<p class="LC_error">'.
                                 &mt('You are not permitted to take this action.').
                                 '</p>');
                   }
               }
           } elsif ($r->uri =~ m{priv/.+\.\d+\.[^.]+$}) {
               $r->print('<p class="LC_error">'.
                         &mt('There is a problem with the filename').' '.
                         '<span class="LC_filename">'.$r->uri.'</span></p>'.
                         '<p class="LC_warning">'.
                         &mt('You may be attempting to edit a versioned file (files in construction space may not include a version number before the extension).').
                         '</p>');
           } else {
               $r->print('<p class="LC_error">'.
                         &mt('You are not permitted to take this action.').
                         '</p>'); 
           }
       } elsif ($env{'request.editurl'} =~ m{priv/.+\.\d+\.[^.]+$}) {
           $r->print('<p class="LC_error">'.
                     &mt('There is a problem with the filename').' '.
                     '<span class="LC_filename">'.$env{'request.editurl'}.'</span></p>'.
                     '<p class="LC_warning">'.
                     &mt('You may be attempting to edit a versioned file (files in construction space may not include a version number before the extension).').
                     '</p>');
     } else {      } else {
         $r->print('<p class="LC_error">'          $r->print('<p class="LC_error">'
                  .&mt('You do not have authoring privileges for this resource')                   .&mt('You do not have authoring privileges for this resource').' '
                    .'<span class="LC_filename">'.$env{'request.editurl'}.'</span>'
                  .'</p>');                   .'</p>');
         my ($realownername)=          my ($realownerdom,$realownername) =
     ($env{'request.editurl'}=~m{/(?:~|priv/|home/)($LONCAPA::username_re)});      ($env{'request.editurl'}=~m{^/priv/($LONCAPA::domain_re)/($LONCAPA::username_re)});
         my $realownerhome=          my $realownerhome=
     &Apache::lonnet::homeserver($realownername,      &Apache::lonnet::homeserver($realownername,$realownerdom);
  $r->dir_config('lonDefDomain'));  
         unless ($realownerhome eq 'no_host') {          unless ($realownerhome eq 'no_host') {
             my $plainname=&Apache::loncommon::plainname($realownername,$r->dir_config('lonDefDomain'));              my $plainname=&Apache::loncommon::plainname($realownername,$realownerdom);
             my $user=$realownername.':'.$r->dir_config('lonDefDomain');              my $user=$realownername.':'.$realownerdom;
             my $userlink=&Apache::loncommon::aboutmewrapper(              my $userlink=&Apache::loncommon::aboutmewrapper(
                              $plainname.' ('.$user.')'                               $plainname.' ('.$user.')'
                             ,$realownername                              ,$realownername
                             ,$r->dir_config('lonDefDomain'));                              ,$realownerdom);
     $r->print('<p>'      $r->print('<p>'
                      .&mt('Contact [_1] for access.',$userlink)                       .&mt('Contact [_1] for access.',$userlink)
                      .'</p>');                       .'</p>');
         }          }
     }      }
       
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }   }
   
   sub get_denied_action_text {
       my %deniedtext = 
           &Apache::lonlocal::texthash(
              cfile      => 'Copying, moving, renaming or creating file not allowed.',
              publish    => 'Publishing not allowed.',
              upload     => 'Uploading file not allowed.',
              testbank   => 'Uploading testbank file not allowed',
              retrieve   => 'Retrieving version information not allowed.',
              cleanup    => 'Clean up of file not allowed.',
              diff       => 'Display of differences between file versions disallowed.',
              decompress => 'Decompression of archive file disallowed.',
       );
       return %deniedtext;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.10  
changed lines
  Added in v.1.11


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