Diff for /loncom/interface/londocs.pm between versions 1.150 and 1.158

version 1.150, 2004/12/10 19:21:21 version 1.158, 2004/12/23 14:00:58
Line 30  package Apache::londocs; Line 30  package Apache::londocs;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
   use Apache::imsexport;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonratedt;  use Apache::lonratedt;
Line 283  sub exportcourse { Line 284  sub exportcourse {
             $outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created.  Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export';              $outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created.  Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export';
         } else {          } else {
             my $now = time;              my $now = time;
             my $count = 0;  
             my %symbs;              my %symbs;
             my $manifestok = 0;              my $manifestok = 0;
             my $imsresources;              my $imsresources;
Line 291  sub exportcourse { Line 291  sub exportcourse {
             my $copyresult;              my $copyresult;
             my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);              my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);
             if ($manifestok) {              if ($manifestok) {
                 &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,\$tempexport,\$copyresult,$ims_manifest);                  &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest);
                 close($ims_manifest);                  close($ims_manifest);
   
 #Create zip file in prtspool  #Create zip file in prtspool
Line 320  sub exportcourse { Line 320  sub exportcourse {
         }          }
   
         $r->print('<html><head><title>Export Course</title></head>'.          $r->print('<html><head><title>Export Course</title></head>'.
             &Apache::loncommon::bodytag('Export course to IMS or SCORM content package'));              &Apache::loncommon::bodytag('Export course to IMS content package'));
         $r->print($outcome);          $r->print($outcome);
         $r->print('</body></html>');          $r->print('</body></html>');
     } else {      } else {
Line 369  sub exportcourse { Line 369  sub exportcourse {
             }              }
             if (ref($curRes)) {              if (ref($curRes)) {
                 my $symb = $curRes->symb();                  my $symb = $curRes->symb();
                   my $ressymb = $symb;
                   if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) {
                       unless ($ressymb =~ m|adm/wrapper/adm|) {
                           $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                       }
                   }
                 my $color = $count%2;                  my $color = $count%2;
                 $display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n".                  $display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n".
                     '<input type="checkbox" name="archive" value="'.$count.'" ';                      '<input type="checkbox" name="archive" value="'.$count.'" ';
Line 390  sub exportcourse { Line 396  sub exportcourse {
                 my $currelem = $count+$boards+$startcount;                  my $currelem = $count+$boards+$startcount;
                 $children{$parent{$depth}} .= $currelem.':';                  $children{$parent{$depth}} .= $currelem.':';
                 $display .= '&nbsp;'.$curRes->title().'</td>';                  $display .= '&nbsp;'.$curRes->title().'</td>';
                 if ($discussiontime{$symb} > 0) {                  if ($discussiontime{$ressymb} > 0) {
                     $boards ++;                      $boards ++;
                     $currelem = $count+$boards+$startcount;                      $currelem = $count+$boards+$startcount;
                     $display .= '<td>&nbsp;</td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" />&nbsp;</td>'."\n";                      $display .= '<td>&nbsp;</td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" />&nbsp;</td>'."\n";
Line 403  sub exportcourse { Line 409  sub exportcourse {
 <script>  <script>
   
 function checkAll(field) {  function checkAll(field) {
     for (i = 0; i < field.length; i++)      if (field.length > 0) {
         field[i].checked = true ;          for (i = 0; i < field.length; i++) {
               field[i].checked = true ;
           }
       } else {
           field.checked = true
       }
 }  }
                                                                                   
 function uncheckAll(field) {  function uncheckAll(field) {
     for (i = 0; i < field.length; i++)      if (field.length > 0) {
         field[i].checked = false ;          for (i = 0; i < field.length; i++) {
               field[i].checked = false ;
           }
       } else {
           field.checked = false ;
       }
 }  }
   
 function propagateCheck(item) {  function propagateCheck(item) {
Line 445  function containerCheck(item) { Line 461  function containerCheck(item) {
 </script>  </script>
         |;          |;
         $r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'.          $r->print('<html><head><title>Export Course</title>'.$scripttag.'</head>'.
             &Apache::loncommon::bodytag('Export course to IMS or SCORM content package'              &Apache::loncommon::bodytag('Export course to IMS content package'
 ));  ));
   
         $r->print($display.'</table>'.          $r->print($display.'</table>'.
Line 483  sub create_ims_store { Line 499  sub create_ims_store {
 ' identifier="MANIFEST-'.$ENV{'request.course.id'}.'-'.$now.'"'.  ' identifier="MANIFEST-'.$ENV{'request.course.id'}.'-'.$now.'"'.
 '  xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'.  '  xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'.
 '  http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n".  '  http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n".
 '  <organizations default="ORG-."'.$ENV{'request,course.id'}.'-'.$now.'">'."\n".  '  <organizations default="ORG-'.$ENV{'request.course.id'}.'-'.$now.'">'."\n".
 '    <organization identifier="ORG-'.$ENV{'request.course.id'}.'-'.$now.'"'.  '    <organization identifier="ORG-'.$ENV{'request.course.id'}.'-'.$now.'"'.
 ' structure="hierarchical">'."\n".  ' structure="hierarchical">'."\n".
 '      <title>'.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'</title>'  '      <title>'.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'</title>'
Line 504  sub build_package { Line 520  sub build_package {
     my $lastcontainer = 0;      my $lastcontainer = 0;
     my %parent = ();      my %parent = ();
     my @dependencies = ();      my @dependencies = ();
     my $cnum = $ENV{'request.'.$ENV{'request.course.id'}.'.num'};      my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
     my $cdom = $ENV{'request.'.$ENV{'request.course.id'}.'.domain'};      my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if (ref($curRes)) {          if (ref($curRes)) {
             $count ++;              $count ++;
Line 534  sub build_package { Line 550  sub build_package {
     $count = 0;      $count = 0;
     my $imsresources;      my $imsresources;
     my $pkgdepth;      my $pkgdepth;
     if ($curRes == $it->BEGIN_MAP()) {      my $included = 0;
         $prevdepth = $depth;      while ($curRes = $it->next()) {
         $depth++;          if ($curRes == $it->BEGIN_MAP()) {
     }              $prevdepth = $depth;
     if ($curRes == $it->END_MAP()) {              $depth++;
         $prevdepth = $depth;          }
         $depth--;          if ($curRes == $it->END_MAP()) {
     }  
   
     if (ref($curRes)) {  
         if ((grep/^$count$/,@$exportitems) || (grep/^$count$/,@dependencies)) {  
             my $symb = $curRes->symb();  
             my $isvisible = 'true';  
             my $resourceref;  
             if ($curRes->randomout()) {  
                 $isvisible = 'false';  
             }  
             unless ($curRes->is_sequence()) {  
                 $resourceref = 'identifierref="RES-'.$ENV{'request.course.id'}.'-'.$count.'"';  
             }  
             if (($depth <= $prevdepth) && ($count > 1)) {  
                 print $ims_manifest '  </item>'."\n";  
             }  
             $prevdepth = $depth;              $prevdepth = $depth;
               $depth--;
           }
   
           if (ref($curRes)) {
               $count ++;
               if ((grep/^$count$/,@$exportitems) || (grep/^$count$/,@dependencies)) {
                   my $symb = $curRes->symb();
                   my $isvisible = 'true';
                   my $resourceref;
                   if ($curRes->randomout()) {
                       $isvisible = 'false';
                   }
                   unless ($curRes->is_sequence()) {
                       $resourceref = 'identifierref="RES-'.$ENV{'request.course.id'}.'-'.$count.'"';
                   }
                   if (($depth <= $prevdepth) && ($count > 1) && ($included)) {
                       print $ims_manifest "\n".'  </item>'."\n";
                   }
                   $included = 1;
                   $prevdepth = $depth;
   
             my $itementry =                  my $itementry =
               '<item identifier="ITEM-'.$ENV{'request.course.id'}.'-'.$count.                '<item identifier="ITEM-'.$ENV{'request.course.id'}.'-'.$count.
               '" isvisible="'.$isvisible.'" '.$resourceref.'>'.                '" isvisible="'.$isvisible.'" '.$resourceref.'>'.
               '<title>'.$curRes->title().'</title>';                '<title>'.$curRes->title().'</title>';
             print $ims_manifest "\n".$itementry;                  print $ims_manifest "\n".$itementry;
   
             unless ($curRes->is_sequence()) {                  unless ($curRes->is_sequence()) {
                 my $content_file;                      my $content_file;
                 my @hrefs = ();                      my @hrefs = ();
                 &process_content($count,$curRes,$cdom,$cnum,$symb,$content_file,\@hrefs,$copyresult,$tempexport);                      &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport);
                 if ($content_file) {                      if ($content_file) {
                     $imsresources .= "\n".                          $imsresources .= "\n".
                      '   <resource identifier="RES-'.$ENV{'request.course.id'}.'-'.$count.                       '   <resource identifier="RES-'.$ENV{'request.course.id'}.'-'.$count.
                      '" type="webcontent" href="'.$content_file.'">'."\n".                       '" type="webcontent" href="'.$content_file.'">'."\n".
                      '       <file href="'.$content_file.'" />'."\n";                       '       <file href="'.$content_file.'" />'."\n";
                     foreach (@hrefs) {                          foreach (@hrefs) {
                         $imsresources .=                              $imsresources .=
                      '        <file href="'.$_.'" />'."\n";                       '        <file href="'.$_.'" />'."\n";
                           }
                           if (grep/^$count$/,@$discussions) {
                               my $ressymb = $symb;
                               my $mode;
                               if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) {
                                   unless ($ressymb =~ m|adm/wrapper/adm|) {
                                       $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                                   }
                                   $mode = 'board';
                               }
                               my %extras = (
                                             caller => 'imsexport',
                                             tempexport => $tempexport,
                                             count => $count
                                            );
                               my $discresult = &Apache::lonfeedback::list_discussion($mode,undef,$ressymb,\%extras);
                           }
                           $imsresources .= '    </resource>'."\n";
                     }                      }
                     $imsresources .= '    </resource>'."\n";  
                 }                  }
                   $pkgdepth = $depth;
               } else {
                   $included = 0;
             }              }
             $pkgdepth = $depth;  
         }          }
     }      }
     while ($pkgdepth > -1) {      while ($pkgdepth > 0) {
         print $ims_manifest "    </item>\n";          print $ims_manifest "    </item>\n";
         $pkgdepth --;          $pkgdepth --;
     }      }
Line 602  sub build_package { Line 641  sub build_package {
 sub get_dependencies {  sub get_dependencies {
     my ($exportitems,$parent,$depth,$dependencies) = @_;      my ($exportitems,$parent,$depth,$dependencies) = @_;
     if ($depth > 1) {      if ($depth > 1) {
         unless (grep/^$$parent{$depth}$/,@$exportitems || grep/^$$parent{$depth}$/,@$dependencies) {          if ((!grep/^$$parent{$depth}$/,@$exportitems) && (!grep/^$$parent{$depth}$/,@$dependencies)) {
             push @$dependencies, $$parent{$depth};              push @$dependencies, $$parent{$depth};
             if ($depth > 2) {              if ($depth > 2) {
                 &get_dependencies($exportitems,$parent,$depth-1,$dependencies);                  &get_dependencies($exportitems,$parent,$depth-1,$dependencies);
Line 616  sub process_content { Line 655  sub process_content {
     my $content_type;      my $content_type;
     my $message;      my $message;
 # find where user is author or co-author  # find where user is author or co-author
     my %roleshash = &Appache::lonnet::get_my_roles();      my %roleshash = &Apache::lonnet::get_my_roles();
     if ($curRes->is_page()) {      my @uploads = ();
         $content_type = 'page';      if ($curRes->is_sequence()) {
           $content_type = 'sequence';
       } elsif ($curRes->is_page()) {
           $content_type = 'page'; # need to handle individual items in pages.
     } elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) {      } elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) {
         $content_type = 'syllabus';          $content_type = 'syllabus';
     } elsif ($symb =~ m-\.sequence____\d+____ext-) {          my $contents = &Apache::imsexport::templatedpage($content_type);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
       } elsif ($symb =~ m-\.sequence___\d+___ext-) {
         $content_type = 'external';          $content_type = 'external';
           my $title = $curRes->title;
           my $contents =  &Apache::imsexport::external($symb,$title);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
     } elsif ($symb =~ m-adm/navmaps$-) {      } elsif ($symb =~ m-adm/navmaps$-) {
         $content_type =  'navmap';          $content_type =  'navmap';
     } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/smppg$-) {      } elsif ($symb =~ m-adm/[^/]+/[^/]+/(\d+)/smppg$-) {
         $content_type = 'simplepage';          $content_type = 'simplepage';
     } elsif ($symb =~ m-$-) {          my $contents = &Apache::imsexport::templatedpage($content_type,$1,$count,\@uploads);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
       } elsif ($symb =~ m-lib/templates/simpleproblem\.problem$-) {
         $content_type = 'simpleproblem';          $content_type = 'simpleproblem';
     } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/bulletinboard$-) {          my $contents =  &Apache::imsexport::simpleproblem($symb);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
       } elsif ($symb =~ m-lib/templates/examupload\.problem-m) {
           $content_type = 'examupload';
       } elsif ($symb =~ m-adm/(\w+)/(\w+)/(\d+)/bulletinboard$-) {
         $content_type = 'bulletinboard';          $content_type = 'bulletinboard';
     } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/aboutme$-) {          my $contents =  &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
       } elsif ($symb =~ m-adm/([^/]+)/([^/]+)/aboutme$-) {
         $content_type = 'aboutme';          $content_type = 'aboutme';
           my $contents =  &Apache::imsexport::templatedpage($content_type,undef,$count,\@uploads,$1,$2);
           if ($contents) {
               $$content_file = &store_template($contents,$tempexport,$count,$content_type);
           }
     } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {      } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
         &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'uploaded');          $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
     } elsif ($symb =~ m-\.sequence____\d+____([^/])/([^/])-) {      } elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) {
         my $coauth = $2.':'.$1.':ca';          $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
       } elsif ($symb =~ m-\.(sequence|page)___\d+___([^/])/([^/])-) {
           my $coauth = $3.':'.$2.':ca';
         my $canedit = 0;          my $canedit = 0;
         if ($1 eq $ENV{'user.domain'} && $2 eq $ENV{'user.name'})  {          if ($2 eq $ENV{'user.domain'} && $3 eq $ENV{'user.name'})  {
             $canedit= 1;              $canedit= 1;
         } elsif (defined($roleshash{$coauth})) {          } elsif (defined($roleshash{$coauth})) {
             if ($roleshash{$coauth} =~ /(\d+):(\d+)/) {              if ($roleshash{$coauth} =~ /(\d+):(\d+)/) {
Line 650  sub process_content { Line 721  sub process_content {
             }              }
         }          }
         if ($canedit) {          if ($canedit) {
             &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'resource');              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
         } else {          } else {
             &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'noedit');              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
           }
       }
       if (@uploads > 0) {
           foreach my $item (@uploads) {
               my $uploadmsg = '';
               &replicate_content($cdom,$cnum,$tempexport,$item,$count,\$uploadmsg,$href,'uploaded');
               if ($uploadmsg) {
                   $$copyresult .= $uploadmsg."\n";
               }
         }          }
     }      }
     $$copyresult .= $message."\n";      if ($message) {
           $$copyresult .= $message."\n";
       }
 }  }
   
 sub replicate_content {  sub replicate_content {
     my ($cdom,$cnum,$tempexport,$symb,$count,$message,$caller) = @_;      my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;
     my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
     my $feedurl = &Apache::lonnet::clutter($url);      my $feedurl = &Apache::lonnet::clutter($url);
   
     my $content;      my $content;
     my $filename;      my $filename;
     my $repstatus;      my $repstatus;
     if ($url =~ m-[^/]/(.+)$-) {      my $content_name;
       if ($url =~ m-/([^/]+)$-) {
         $filename = $1;          $filename = $1;
         if (!-e $tempexport.'/resources') {          if (!-e $tempexport.'/resources') {
             mkdir($tempexport.'/resources',0700);              mkdir($tempexport.'/resources',0700);
         }          }
         if (!-e $tempexport.'/resources') {          if (!-e $tempexport.'/resources/'.$count) {
             mkdir($tempexport.'/resources/'.$count,0700);              mkdir($tempexport.'/resources/'.$count,0700);
         }          }
         my $destination = $$tempexport.'/resources/'.$count.'/'.$filename;          my $destination = $tempexport.'/resources/'.$count.'/'.$filename;
         my $copiedfile;          my $copiedfile;
         if ($copiedfile = Apache::File->new('>'.$destination)) {          if ($copiedfile = Apache::File->new('>'.$destination)) {
             my $content;              my $content;
             if ($caller eq 'uploaded' || $caller eq 'resource') {              if ($caller eq 'resource') {
                 $content = &Apache::lonnet::getfile($url);                  $content = &Apache::lonnet::getfile($url);
                 if ($content eq -1) {                  if ($content eq -1) {
                     $$message = 'Could not copy file '.$filename;                      $$message = 'Could not copy file '.$filename;
                 } else {                  } else {
                       &extract_media($content,$count,$tempexport,$href,'resource');
                     $repstatus = 'ok';                      $repstatus = 'ok';
                 }                  }
             } elsif ($caller eq 'noedit') {              } elsif ($caller eq 'noedit' || $caller eq 'uploaded') {
                 my $rtncode;                  my $rtncode;
                 $repstatus = &getuploaded('GET',$url,$cdom,$cnum,$content,$rtncode);                  $repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode);
                 unless ($repstatus eq 'ok') {                  if ($repstatus eq 'ok') {
                       if ($url =~ /\.html?$/i) {
                           &extract_media(\$content,$count,$tempexport,$href,'uploaded');
                       }
                   } else {
                     $$message = 'Could not render '.$url.' server message - '.$rtncode;                      $$message = 'Could not render '.$url.' server message - '.$rtncode;
                 }                  }
             }              }
Line 700  sub replicate_content { Line 788  sub replicate_content {
             $$message = 'Could not open destination file for '.$filename."\n";              $$message = 'Could not open destination file for '.$filename."\n";
         }          }
     } else {      } else {
         $$message = 'Could not determine name of file for ';          $$message = 'Could not determine name of file for '.$url."\n";
       }
       if ($repstatus eq 'ok') {
           $content_name = $count.'/'.$filename;
       }
       return $content_name;
   }
   
   sub extract_media {
       my ($content,$count,$tempexport,$href,$caller) = @_;
   # @$href will contain path to any embedded resources in the content.
   # For LON-CAPA problems this would be images. applets etc. 
   # For uploaded HTML files this would be images etc.
   # paths will be in the form $count/res/$file, and urls in the $content will be rewritten with the new paths. 
       return;
   }
   
   sub store_template {
       my ($contents,$tempexport,$count,$content_type) = @_;
       if ($contents) {
           my $destination = $tempexport.'/resources/'.$count.'/'.$content_type.'.xml';
           my $storetemplate;
           if ($storetemplate = Apache::File->new('>'.$destination)) {
               print $storetemplate $contents;
               close($storetemplate);
           }
           return $count.'/'.$content_type.'.xml';
     }      }
     return $repstatus;  
 }  }
   
 # Imports the given (name, url) resources into the course  # Imports the given (name, url) resources into the course
Line 1034  sub entryline { Line 1147  sub entryline {
  $folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'});   $folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'});
  # $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"');   # $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"');
     }      }
     my $pagepath;      my ($pagepath,$pagesymb);
     if ($ENV{'form.pagepath'}) {      if ($ENV{'form.pagepath'}) {
         $container = 'page';          $container = 'page';
         $pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'});          $pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'});
           $pagesymb=&Apache::lonnet::escape($ENV{'form.pagesymb'});
     }      }
     if ($allowed) {      if ($allowed) {
  my $incindex=$index+1;   my $incindex=$index+1;
Line 1064  sub entryline { Line 1178  sub entryline {
             $line.=(<<END);              $line.=(<<END);
 <form name="entry_$index" action="/adm/coursedocs" method="post">  <form name="entry_$index" action="/adm/coursedocs" method="post">
 <input type="hidden" name="pagepath" value="$ENV{'form.pagepath'}" />  <input type="hidden" name="pagepath" value="$ENV{'form.pagepath'}" />
   <input type="hidden" name="pagesymb" value="$ENV{'form.pagesymb'}" />
 <input type="hidden" name="setparms" value="$orderidx" />  <input type="hidden" name="setparms" value="$orderidx" />
 <td><table border='0' cellspacing='2' cellpadding='0'>  <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath'>  <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb'>
 <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>  <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath'>  <a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath&pagesymb=$pagesymb'>
 <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>  <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>
 </table></td>  </table></td>
 <td>$selectbox  <td>$selectbox
 </td><td bgcolor="#DDDDDD">  </td><td bgcolor="#DDDDDD">
 <a href='javascript:removeres("$pagepath","$index","$renametitle","page");'>  <a href='javascript:removeres("$pagepath","$index","$renametitle","page","$pagesymb");'>
 <font size="-2" color="#990000">$lt{'rm'}</font></a>  <font size="-2" color="#990000">$lt{'rm'}</font></a>
 <a href='javascript:changename("$pagepath","$index","$renametitle","page");'>  <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'>
 <font size="-2" color="#009900">$lt{'rn'}</font></a></td>  <font size="-2" color="#009900">$lt{'rn'}</font></a></td>
 END  END
         } else {          } else {
Line 1152  END Line 1267  END
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) { 
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
  }   }
         unless ($container eq 'page') {   $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);
    if ($container eq 'page') {
       my $symb=$ENV{'form.pagesymb'};
           
       $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
     $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);
         }   }
     }      }
     my $parameterset='&nbsp;';      my $parameterset='&nbsp;';
     if ($isfolder) {      if ($isfolder) {
Line 1176  END Line 1295  END
         my $folderpath=$ENV{'form.folderpath'};          my $folderpath=$ENV{'form.folderpath'};
         if ($folderpath) { $pagepath = $folderpath.'&' };          if ($folderpath) { $pagepath = $folderpath.'&' };
         $pagepath.=$pagearg.'&'.$pagename;          $pagepath.=$pagearg.'&'.$pagename;
         $url.='pagepath='.&Apache::lonnet::escape($pagepath);   my $symb=$ENV{'form.pagesymb'};
    if (!$symb) {
       my $path='uploaded/'.
    $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'.
    $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/';
       $symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence',
          $residx,
          $path.$pagearg.'.page');
    }
    $url.='pagepath='.&Apache::lonnet::escape($pagepath).
       '&pagesymb='.&Apache::lonnet::escape($symb);
     }      }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.      $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.
  '" border="0"></a></td>'.   '" border="0"></a></td>'.
Line 1210  ENDPARMS Line 1339  ENDPARMS
 sub tiehash {  sub tiehash {
     my ($mode)=@_;      my ($mode)=@_;
     $hashtied=0;      $hashtied=0;
     &Apache::lonnet::logthis(" tiehash1 -- $hashtied ");  
     if ($ENV{'request.course.fn'}) {      if ($ENV{'request.course.fn'}) {
  &Apache::lonnet::logthis(" tiehash2 -- $hashtied ");  
  if ($mode eq 'write') {   if ($mode eq 'write') {
     &Apache::lonnet::logthis(" tiehash3 -- $hashtied ");  
     if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",      if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
     &GDBM_WRCREAT(),0640)) {      &GDBM_WRCREAT(),0640)) {
                 $hashtied=2;                  $hashtied=2;
  &Apache::lonnet::logthis(" tiehash4 -- $hashtied ");  
     }      }
  } else {   } else {
     &Apache::lonnet::logthis(" tiehash5 -- $hashtied ");  
     if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",      if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
     &GDBM_READER(),0640)) {      &GDBM_READER(),0640)) {
                 $hashtied=1;                  $hashtied=1;
  &Apache::lonnet::logthis(" tiehash6 -- $hashtied ");  
     }      }
  }   }
     }          }    
     &Apache::lonnet::logthis(" tiehash7 -- $hashtied ");  
 }  }
   
 sub untiehash {  sub untiehash {
     &Apache::lonnet::logthis(" untiehash1 -- $hashtied ");  
     if ($hashtied) { untie %hash; }      if ($hashtied) { untie %hash; }
     $hashtied=0;      $hashtied=0;
     &Apache::lonnet::logthis(" untiehash2 -- $hashtied ");  
 }  }
   
 # --------------------------------------------------------------- check on this  # --------------------------------------------------------------- check on this
Line 1592  ENDHEADERS Line 1712  ENDHEADERS
   
 sub mark_hash_old {  sub mark_hash_old {
     my $retie_hash=0;      my $retie_hash=0;
     &Apache::lonnet::logthis(" markold1 -- $hashtied $retie_hash ");  
     if ($hashtied) {      if ($hashtied) {
  $retie_hash=1;   $retie_hash=1;
  &Apache::lonnet::logthis(" markold2 -- $hashtied $retie_hash ");  
  &untiehash();   &untiehash();
  &Apache::lonnet::logthis(" markold3 -- $hashtied $retie_hash ");  
     }      }
     &tiehash('write');      &tiehash('write');
     &Apache::lonnet::logthis(" markold4 -- $hashtied $retie_hash ");  
     $hash{'old'}=1;      $hash{'old'}=1;
     &Apache::lonnet::logthis(" markold5 -- $hashtied $retie_hash ");      
     &untiehash();      &untiehash();
     &Apache::lonnet::logthis(" markold6 -- $hashtied $retie_hash ");  
     if ($retie_hash) { &tiehash(); }      if ($retie_hash) { &tiehash(); }
     &Apache::lonnet::logthis(" markold7 -- $hashtied $retie_hash ");  
 }  }
   
 sub is_hash_old {  sub is_hash_old {
Line 1628  sub changewarning { Line 1741  sub changewarning {
     if (defined($ENV{'form.pagepath'})) {      if (defined($ENV{'form.pagepath'})) {
  $pathvar='pagepath';   $pathvar='pagepath';
  $path=&Apache::lonnet::escape($ENV{'form.pagepath'});   $path=&Apache::lonnet::escape($ENV{'form.pagepath'});
    $path.='&amp;symb='.&Apache::lonnet::escape($ENV{'form.pagesymb'});
     }      }
     $r->print(      $r->print(
 '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'.   '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. 
Line 1683  sub handler { Line 1797  sub handler {
 # is this a standard course?  # is this a standard course?
   
     my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);      my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);
     my $forcestandard;      my $forcestandard = 0;
     my $forcesupplement;      my $forcesupplement;
     my $script='';      my $script='';
     my $allowed;      my $allowed;
Line 1692  sub handler { Line 1806  sub handler {
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['folderpath','pagepath']);      ['folderpath','pagepath','pagesymb']);
     if ($ENV{'form.folderpath'}) {      if ($ENV{'form.folderpath'}) {
  my (@folderpath)=split('&',$ENV{'form.folderpath'});   my (@folderpath)=split('&',$ENV{'form.folderpath'});
  $ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath));   $ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath));
Line 1702  sub handler { Line 1816  sub handler {
         my (@pagepath)=split('&',$ENV{'form.pagepath'});          my (@pagepath)=split('&',$ENV{'form.pagepath'});
         $ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath));          $ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath));
         $ENV{'form.folder'}=pop(@pagepath);          $ENV{'form.folder'}=pop(@pagepath);
         $containertag = '<input type="hidden" name="pagepath" value="" />';          $containertag = '<input type="hidden" name="pagepath" value="" />'.
         $uploadtag = '<input type="hidden" name="pagepath" value="'.$ENV{'form.pagepath'}.'" />';      '<input type="hidden" name="pagesymb" value="" />';
           $uploadtag = '<input type="hidden" name="pagepath" value="'.$ENV{'form.pagepath'}.'" />'.
       '<input type="hidden" name="pagesymb" value="'.$ENV{'form.pagesymb'}.'" />';
     }      }
     if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {      if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
        $showdoc='/'.$1;         $showdoc='/'.$1;
     }      }
     unless ($showdoc) { # got called from remote      unless ($showdoc) { # got called from remote
        $forcestandard=($ENV{'form.folder'}=~/^default_/);         if (($ENV{'form.folder'}=~/^default_/) || 
             ($ENV{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) {
              $forcestandard = 1;
          } 
        $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);         $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
   
 # does this user have privileges to post, etc?  # does this user have privileges to post, etc?
Line 1843  function finishpick() { Line 1962  function finishpick() {
     '";this.document.forms.'+form+'.submit();');      '";this.document.forms.'+form+'.submit();');
 }  }
   
 function changename(folderpath,index,oldtitle,container) {  function changename(folderpath,index,oldtitle,container,pagesymb) {
     var title=prompt('New Title',oldtitle);      var title=prompt('New Title',oldtitle);
     if (title) {      if (title) {
  this.document.forms.renameform.title.value=title;   this.document.forms.renameform.title.value=title;
Line 1853  function changename(folderpath,index,old Line 1972  function changename(folderpath,index,old
         }          }
         if (container == 'page') {          if (container == 'page') {
             this.document.forms.renameform.pagepath.value=folderpath;              this.document.forms.renameform.pagepath.value=folderpath;
               this.document.forms.renameform.pagesymb.value=pagesymb;
         }          }
         this.document.forms.renameform.submit();          this.document.forms.renameform.submit();
     }      }
 }  }
   
 function removeres(folderpath,index,oldtitle,container) {  function removeres(folderpath,index,oldtitle,container,pagesymb) {
     if (confirm('Remove "'+oldtitle+'"?')) {      if (confirm('Remove "'+oldtitle+'"?')) {
  this.document.forms.renameform.cmd.value='del_'+index;   this.document.forms.renameform.cmd.value='del_'+index;
         if (container == 'sequence') {          if (container == 'sequence') {
Line 1866  function removeres(folderpath,index,oldt Line 1986  function removeres(folderpath,index,oldt
         }          }
         if (container == 'page') {          if (container == 'page') {
             this.document.forms.renameform.pagepath.value=folderpath;              this.document.forms.renameform.pagepath.value=folderpath;
               this.document.forms.renameform.pagesymb.value=pagesymb;
         }          }
         this.document.forms.renameform.submit();          this.document.forms.renameform.submit();
     }      }

Removed from v.1.150  
changed lines
  Added in v.1.158


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