Diff for /rat/lonpageflip.pm between versions 1.80.8.12 and 1.81

version 1.80.8.12, 2021/03/04 01:33:43 version 1.81, 2013/05/10 12:49:39
Line 36  use LONCAPA; Line 36  use LONCAPA;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonuserstate;  
 use Apache::lonlocal;  
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
Line 83  sub hash_src { Line 81  sub hash_src {
     my ($mapid,$resid)=split(/\./,$id);      my ($mapid,$resid)=split(/\./,$id);
     my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},      my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
   $resid,$hash{'src_'.$id});    $resid,$hash{'src_'.$id});
     my $anchor;  
     if ($hash{'ext_'.$id} eq 'true:') {  
         if ($hash{'src_'.$id} =~ /(\#.+)$/) {  
             $anchor = $1;  
         }  
     }  
     if ($hash{'encrypted_'.$id}) {      if ($hash{'encrypted_'.$id}) {
  return (&Apache::lonenc::encrypted($hash{'src_'.$id}),   return (&Apache::lonenc::encrypted($hash{'src_'.$id}),
  &Apache::lonenc::encrypted($symb),   &Apache::lonenc::encrypted($symb));
                 $hash{'encrypted_'.$id},$anchor);  
     }      }
     return ($hash{'src_'.$id},$symb,$hash{'encrypted_'.$id},$anchor);      return ($hash{'src_'.$id},$symb);
 }  }
   
 sub move {  sub move {
Line 255  sub first_accessible_resource { Line 246  sub first_accessible_resource {
     }      }
 }  }
   
 sub check_http_req {  
     my ($srcref) = @_;  
     return unless (ref($srcref) eq 'SCALAR');  
     my $usehttp;  
     if ($env{'request.course.id'}) {  
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
         if (($$srcref =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) &&  
             ($ENV{'SERVER_PORT'} == 443) &&  
             ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {  
             unless (&Apache::lonnet::uses_sts()) {  
                 $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';  
                 $usehttp = 1;  
             }  
         } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) &&  
                  ($ENV{'SERVER_PORT'} == 443)) {  
             unless (&Apache::lonnet::uses_sts()) {  
                 my ($url,$anchor) = ($$srcref =~ /^([^\#]+)(?:|(\#[^\#]+))$/);  
                 $$srcref = $url . (($$srcref =~/\?/)? '&':'?') . 'usehttp=1' .$anchor;  
                 $usehttp = 1;  
             }  
         }  
     }  
     return $usehttp;  
 }  
   
 sub reinited_js {  
     my ($url,$cid,$timeout) = @_;  
     if (!$timeout) {  
         $timeout = 0;  
     }  
     return <<"END";  
 <script type="text/javascript">  
 // <![CDATA[  
 setTimeout(function() {  
     var newurl = '$url';  
     if (document.getElementById('LC_update_$cid')) {  
         document.getElementById('LC_update_$cid').style.display = 'none';  
     }  
     if ((newurl !== null) && (newurl !== '') && (newurl !== 'undefined')) {  
         window.location.href = "$url";  
     }  
 }, $timeout);  
 // ]]>  
 </script>  
 END  
 }  
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 319  sub handler { Line 262  sub handler {
   my %cachehash=();     my %cachehash=(); 
   my $multichoice=0;    my $multichoice=0;
   my %multichoicehash=();    my %multichoicehash=();
   my %prog_state=();     my ($redirecturl,$redirectsymb);
   my ($redirecturl,$redirectsymb,$enc,$anchor);  
   my $next='';    my $next='';
   my $hostname = $r->hostname();  
   my @possibilities=();    my @possibilities=();
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);
   if (($env{'form.postdata'})&&($env{'request.course.fn'})) {    if (($env{'form.postdata'})&&($env{'request.course.fn'})) {
       my ($direction,$currenturl) = ($env{'form.postdata'}=~/(\w+)\:(.*)/);        $env{'form.postdata'}=~/(\w+)\:(.*)/;
         my $direction=$1;
         my $currenturl=$2;
       if ($currenturl=~m|^/enc/|) {        if ($currenturl=~m|^/enc/|) {
           $currenturl=&Apache::lonenc::unencrypted($currenturl);    $currenturl=&Apache::lonenc::unencrypted($currenturl);
       }        }
       $currenturl=~s/\.\d+\.(\w+)$/\.$1/;        $currenturl=~s/\.\d+\.(\w+)$/\.$1/;
       $currenturl=~s/^https?\:\/\///;  
       $currenturl=~s/^[^\/]+//;  
       my ($preupdatepos,$last,$reinitcheck);  
       if ($direction eq 'return') {  
           if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',  
                     &GDBM_READER(),0640)) {  
               $last=$hash{'last_known'};  
               untie(%hash);  
           }  
       }  
       if ($env{'request.course.id'}) {  
           # Check if course needs to be re-initialized  
           my $loncaparev = $r->dir_config('lonVersion');  
           ($reinitcheck,my @reinit) = &Apache::loncommon::needs_coursereinit($loncaparev);  
           if ($reinitcheck eq 'switch') {  
               &Apache::loncommon::content_type($r,'text/html');  
               $r->send_http_header;  
               $r->print(&Apache::loncommon::check_release_result(@reinit));  
               return OK;  
           } elsif ($reinitcheck eq 'update') {  
               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
               my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
               $preupdatepos = &Apache::lonnet::symbread($currenturl);  
               unless ($direction eq 'return') {  
                   if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',  
                                 &GDBM_READER(),0640)) {  
                       $last=$hash{'last_known'};  
                       untie(%hash);  
                   }  
               }  
               &Apache::loncommon::content_type($r,'text/html');  
               $r->send_http_header;  
               $r->print(&Apache::loncommon::start_page('Content Changed'));  
               my $preamble = '<div id="LC_update_'.$env{'request.course.id'}.'" class="LC_info">'.  
                              '<br />'.  
                              &mt('Your course session is being updated because of recent changes by course personnel.').  
                              ' '.&mt('Please be patient').'.<br /></div>'.  
                              '<div style="padding:0;clear:both;margin:0;border:0"></div>';  
               %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble);  
               &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Updating course'));  
               my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");  
               &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!'));  
               if ($ferr) {  
                   &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
                   my $requrl = $r->uri;  
                   $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";  
                   $env{'user.reinit'} = 1;  
                   return HTTP_NOT_ACCEPTABLE;  
               } else {  
                   if ($last) {  
                       my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);  
                       unless (&Apache::lonnet::symbverify($last,$fn)) {  
                           undef($last);  
                       }  
                   }  
               }  
           }  
       }  
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
           my $usehttp = &check_http_req(\$furl);    &Apache::loncommon::content_type($r,'text/html');
           if (($usehttp) && ($hostname ne '')) {    $r->header_out(Location => 
               $furl='http://'.$hostname.$furl;   &Apache::lonnet::absolute_url().$furl);
           } else {       
               $furl=&Apache::lonnet::absolute_url().$furl;    return REDIRECT;
           }  
           if ($reinitcheck eq 'update') {  
               &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
               $r->print(&reinited_js($furl,$env{'request.course.id'},100));  
               $r->print(&Apache::loncommon::end_page());  
               return OK;  
           } else {  
       &Apache::loncommon::content_type($r,'text/html');  
       $r->header_out(Location => $furl);  
       return REDIRECT;  
           }  
       }        }
       if ($direction eq 'return') {        if ($direction eq 'return') {
 # -------------------------------------------------------- Return to last known  # -------------------------------------------------------- Return to last known
          my ($newloc,$usehttp);           my $last;
            if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
                       &GDBM_READER(),0640)) {
        $last=$hash{'last_known'};
                untie(%hash);
            }
            my $newloc;
          if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',           if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
                         &GDBM_READER(),0640))) {                          &GDBM_READER(),0640))) {
             my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);              my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);
     $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;      $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;
     $newloc=$hash{'src_'.$id};      $newloc=$hash{'src_'.$id};
     if ($newloc) {      if ($newloc) {
                 $usehttp = &check_http_req(\$newloc);   if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }
                 if ($hash{'encrypted_'.$id}) {        
                     $newloc=&Apache::lonenc::encrypted($newloc);  
                 }  
                 if ($newloc =~ m{^(/adm/wrapper/ext/[^\#]+)(?:|(\#[^\#]+))$}) {  
                     my ($url,$anchor) = ($1,$2);  
                     if ($anchor) {  
                         $newloc = $url.(($url=~/\?/)?'&':'?').'symb='.&escape($last).$anchor;  
                     }  
                 }  
     } else {      } else {
  $newloc='/adm/navmaps';   $newloc='/adm/navmaps';
     }      }
             untie %hash;              untie %hash;
          } else {           } else {
     $newloc='/adm/navmaps';      $newloc='/adm/navmaps';
          }           }  
          if (($usehttp) && ($hostname ne '')) {       &Apache::loncommon::content_type($r,'text/html');
              $newloc='http://'.$hostname.$newloc;       $r->header_out(Location => 
          } else {      &Apache::lonnet::absolute_url().$newloc);
              $newloc=&Apache::lonnet::absolute_url().$newloc       
          }       return REDIRECT;
          if ($reinitcheck eq 'update') {  
              $r->print(&reinited_js($newloc,$env{'request.course.id'},100));  
              $r->print(&Apache::loncommon::end_page());  
              return OK;  
          } else {  
              &Apache::loncommon::content_type($r,'text/html');  
              $r->header_out(Location => $newloc);  
              return REDIRECT;  
          }  
       }        }
         $currenturl=~s/^https?\:\/\///;
         $currenturl=~s/^[^\/]+//;
 #  #
 # Is the current URL on the map? If not, start with last known URL  # Is the current URL on the map? If not, start with last known URL
 #  #
   
       unless (&Apache::lonnet::is_on_map($currenturl)) {        unless (&Apache::lonnet::is_on_map($currenturl)) {
          if ($preupdatepos) {   my $last;
              undef($preupdatepos);           if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
          } elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',                      &GDBM_READER(),0640)) {
                             &GDBM_READER(),0640)) {       $last=$hash{'last_known'};
              $last=$hash{'last_known'};  
              untie(%hash);               untie(%hash);
          }           }
          if ($last) {           if ($last) {
      $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);       $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);
  } else {   } else {
              my $newloc = &Apache::lonnet::absolute_url().   &Apache::loncommon::content_type($r,'text/html');
                           '/adm/navmaps';   $r->header_out(Location => 
              if ($reinitcheck eq 'update') {   &Apache::lonnet::absolute_url().
                  &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);   '/adm/noidea.html');
                  $r->print(&reinited_js($newloc,$env{'request.course.id'},100));   return REDIRECT;
                  $r->print(&Apache::loncommon::end_page());  
                  return OK;  
              } else {  
                  &Apache::loncommon::content_type($r,'text/html');  
          $r->header_out(Location => $newloc);  
          return REDIRECT;  
              }  
          }           }
       }        }
 # ------------------------------------------- Do we have any idea where we are?  # ------------------------------------------- Do we have any idea where we are?
       my $position;        my $position;
       if ($preupdatepos) {        if ($position=Apache::lonnet::symbread($currenturl)) {
           $position = $preupdatepos;  
       } else {  
           $position=Apache::lonnet::symbread($currenturl);  
       }  
       if ($position) {  
 # ------------------------------------------------------------------------- Yes  # ------------------------------------------------------------------------- Yes
   my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);    my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);
           $cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum];            $cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum];
Line 508  sub handler { Line 359  sub handler {
                   @possibilities=split(/\,/,$next);                    @possibilities=split(/\,/,$next);
                   if ($#possibilities==0) {                    if ($#possibilities==0) {
 # ---------------------------------------------- Only one possibility, redirect  # ---------------------------------------------- Only one possibility, redirect
               ($redirecturl,$redirectsymb,$enc,$anchor)=&hash_src($next);                ($redirecturl,$redirectsymb)=&hash_src($next);
                       $cachehash{$endupmap}{$redirecturl}=                        $cachehash{$endupmap}{$redirecturl}=
   [$redirecturl,(split(/\./,$next))[1]];    [$redirecturl,(split(/\./,$next))[1]];
                   } else {                    } else {
Line 538  sub handler { Line 389  sub handler {
       untie(%hash);        untie(%hash);
 # --------------------------------------------------------- Store position info  # --------------------------------------------------------- Store position info
               $cachehash{$startoutmap}{'last_direction'}=[$direction,'notasymb'];                $cachehash{$startoutmap}{'last_direction'}=[$direction,'notasymb'];
               foreach my $thismap (keys(%cachehash)) {                foreach my $thismap (keys %cachehash) {
   my $mapnum=$cachehash{$thismap}->{'mapnum'};    my $mapnum=$cachehash{$thismap}->{'mapnum'};
   delete($cachehash{$thismap}->{'mapnum'});    delete($cachehash{$thismap}->{'mapnum'});
   &Apache::lonnet::symblist($thismap,    &Apache::lonnet::symblist($thismap,
Line 553  sub handler { Line 404  sub handler {
   if ($direction eq 'back') {    if ($direction eq 'back') {
                      &Apache::lonnet::linklog($redirecturl,$currenturl);                       &Apache::lonnet::linklog($redirecturl,$currenturl);
   }    }
 # ------------------------------------- Check for and display critical messages  # ------------------------------------------------- Check for critical messages
                   my ($redirect, $url) = &Apache::loncommon::critical_redirect(300);    if ((time-$env{'user.criticalcheck.time'})>300) {
                   unless ($redirect) {                       my @what=&Apache::lonnet::dump
                       my $usehttp = &check_http_req(\$redirecturl);                                    ('critical',$env{'user.domain'},
                       if (($usehttp) && ($hostname ne '')) {                                                $env{'user.name'});
                           $url='http://'.$hostname.$redirecturl;                       if ($what[0]) {
                       } else {                  if (($what[0] ne 'con_lost') && 
                           $url=&Apache::lonnet::absolute_url().$redirecturl;                              ($what[0]!~/^error\:/)) {
                       }                     $redirecturl='/adm/email?critical=display';
                       my $addanchor;     $redirectsymb='';
                       if (($anchor ne '') && (!$enc || $env{'request.role.adv'})) {                          }
                           $addanchor = 1;                       }
                           $url =~ s/\#.+$//;                       &Apache::lonnet::appenv({'user.criticalcheck.time'=>time});
                       }    }
                       $url = &add_get_param($url, { 'symb' => $redirectsymb});  
                       if ($addanchor) {    &Apache::loncommon::content_type($r,'text/html');
                           $url .= $anchor;    my $url=&Apache::lonnet::absolute_url().$redirecturl;
                       }    $url = &add_get_param($url, { 'symb' => $redirectsymb});
                   }                    $r->header_out(Location => $url);
                   if ($reinitcheck eq 'update') {                    return REDIRECT;
                       &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
                       $r->print(&reinited_js($url,$env{'request.course.id'},100));  
                       $r->print(&Apache::loncommon::end_page());  
                       return OK;  
                   } else {  
                       &Apache::loncommon::content_type($r,'text/html');  
                       $r->header_out(Location => $url);  
                       return REDIRECT;  
                   }  
       } else {        } else {
 # --------------------------------------------------------- There was a problem  # --------------------------------------------------------- There was a problem
                   &Apache::loncommon::content_type($r,'text/html');                    &Apache::loncommon::content_type($r,'text/html');
Line 590  sub handler { Line 432  sub handler {
      'explain' =>       'explain' =>
      'You have reached the end of the sequence of materials.',       'You have reached the end of the sequence of materials.',
      'back' => 'Go Back',       'back' => 'Go Back',
      'nav' => 'Course Contents',       'nav' => 'Navigate Course Content',
      'wherenext' =>       'wherenext' =>
      'There are several possibilities of where to go next',       'There are several possibilities of where to go next',
      'pick' =>       'pick' =>
      'Please click on the the resource you intend to access',       'Please click on the the resource you intend to access',
      'titleheader' => 'Title',       'titleheader' => 'Title',
      'type' => 'Type',       'type' => 'Type');
                                                      'update' => 'Content updated',  
                                                      'expupdate' => 'As a result of a recent update to the sequence of materials, it is not possible to complete the page flip.',  
                                                      'gonav' => 'Go to the Contents page to select a resource to display.');  
                   if (&Apache::loncommon::course_type() eq 'Community') {  
                       $lt{'nav'} = &mt('Community Contents');  
                   }  
                   if ($#possibilities>0) {                    if ($#possibilities>0) {
       my $start_page=        my $start_page=
   &Apache::loncommon::start_page('Multiple Resources');    &Apache::loncommon::start_page('Multiple Resources');
Line 616  $lt{'pick'}: Line 452  $lt{'pick'}:
 <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>  <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>
 ENDSTART  ENDSTART
                      foreach my $id (@possibilities) {                       foreach my $id (@possibilities) {
                         my $src = $multichoicehash{'src_'.$id};  
                         my $usehttp = &check_http_req(\$src);  
                         if (($usehttp) && ($hostname ne '')) {  
                             $src = 'http://'.$hostname.$src;  
                         }  
                         $r->print(                          $r->print(
                               '<tr><td><a href="'.                                '<tr><td><a href="'.
   &add_get_param($src,    &add_get_param($multichoicehash{'src_'.$id},
  {'symb' =>   {'symb' =>
       $multichoicehash{'symb_'.$id},        $multichoicehash{'symb_'.$id},
   }).'">'.    }).'">'.
Line 633  ENDSTART Line 464  ENDSTART
                      }                       }
                      $r->print('</table>');                       $r->print('</table>');
                   } else {                    } else {
                       if ($reinitcheck) {        my $start_page=
                           if (&Apache::loncommon::course_type() eq 'Community') {    &Apache::loncommon::start_page('No Resource');
                               $r->print(        $r->print(<<ENDNONE);
                                   &Apache::loncommon::start_page('Community Contents Updated'));  $start_page
                           } else {   <h3>$lt{'title'}</h3>
                               $r->print(  <p>$lt{'explain'}</p>
                                   &Apache::loncommon::start_page('Course Contents Updated'));  ENDNONE
                           }  
                           $r->print('<h2>'.$lt{'update'}.'</h2>'  
                                   .'<p>'.$lt{'expupdate'}.'<br />'  
                                   .$lt{'gonav'}.'</p>');  
                       } else {  
                           $r->print(  
                               &Apache::loncommon::start_page('No Resource')  
                              .'<h2>'.$lt{'title'}.'</h2>'  
                              .'<p>'.$lt{'explain'}.'</p>');  
                       }  
   }    }
                   if ((!@possibilities) && ($reinitcheck))  {    $r->print(<<ENDMENU);
                       $r->print(  <ul>
                           &Apache::lonhtmlcommon::actionbox(  <li><a href="/adm/flip?postdata=return:">$lt{'back'}</a></li>
                               ['<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'  <li><a href="/adm/navmaps">$lt{'nav'}</a></li>
                               ]));  </ul>
                   } else {  ENDMENU
                       $r->print(  
                           &Apache::lonhtmlcommon::actionbox(  
                               ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',  
                                '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'  
                               ]));  
                   }  
                   $r->print(&Apache::loncommon::end_page());                    $r->print(&Apache::loncommon::end_page());
         
                   return OK;                    return OK;
       }        }
   } else {    } else {
 # ------------------------------------------------- Problem, could not tie hash  # ------------------------------------------------- Problem, could not tie hash
               if ($reinitcheck eq 'update') {  
                   &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
                   $r->print(&Apache::loncommon::end_page());  
               }  
               $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";                $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";
               return HTTP_NOT_ACCEPTABLE;                 return HTTP_NOT_ACCEPTABLE; 
           }            }
       } else {        } else {
 # ---------------------------------------- No, could not determine where we are  # ---------------------------------------- No, could not determine where we are
           my $newloc = '/adm/ambiguous';    $r->internal_redirect('/adm/ambiguous');
           if ($reinitcheck eq 'update') {  
               &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
               $r->print(&reinited_js($newloc,$env{'request.course.id'},100));  
               $r->print(&Apache::loncommon::end_page());  
           } else {  
       $r->internal_redirect($newloc);  
           }  
           return OK;            return OK;
       }        }
   } else {    } else {

Removed from v.1.80.8.12  
changed lines
  Added in v.1.81


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.