Diff for /loncom/interface/londocs.pm between versions 1.197 and 1.213

version 1.197, 2005/07/26 13:30:34 version 1.213, 2005/11/17 19:37:30
Line 166  sub dumpcourse { Line 166  sub dumpcourse {
  $crs=~s/\_/\//g;   $crs=~s/\_/\//g;
  foreach (keys %replacehash) {   foreach (keys %replacehash) {
     my $newfilename=$title.'/'.$replacehash{$_};      my $newfilename=$title.'/'.$replacehash{$_};
       $newfilename=~s/\.(\w+)$//;
       my $ext=$1;
     $newfilename=&clean($newfilename);      $newfilename=&clean($newfilename);
       $newfilename.='.'.$ext;
     my @dirs=split(/\//,$newfilename);      my @dirs=split(/\//,$newfilename);
     my $path='/home/'.$ca.'/public_html';      my $path='/home/'.$ca.'/public_html';
     my $makepath=$path;      my $makepath=$path;
Line 252  sub exportbutton { Line 255  sub exportbutton {
     return '</td><td bgcolor="#DDDDCC">'.      return '</td><td bgcolor="#DDDDCC">'.
             '<input type="submit" name="exportcourse" value="'.              '<input type="submit" name="exportcourse" value="'.
             &mt('Export Course to IMS').'" />'.              &mt('Export Course to IMS').'" />'.
             &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
 }  }
   
 sub exportcourse {  sub exportcourse {
Line 490  sub create_ims_store { Line 493  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".
   '  <metadata>
       <schema></schema>
       <imsmd:lom>
         <imsmd:general>
           <imsmd:identifier>'.$env{'request.course.id'}.'</imsmd:identifier>
           <imsmd:title>
             <imsmd:langstring xml:lang="en">'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</imsmd:langstring>
           </imsmd:title>
         </imsmd:general>
       </imsmd:lom>
     </metadata>'."\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{'course.'.$env{'request.course.id'}.'.description'}.'</title>'
     } else {      } else {
         $$outcome .= 'An error occurred opening the IMS manifest file.<br />'          $$outcome .= 'An error occurred opening the IMS manifest file.<br />'
 ;  ;
Line 541  sub build_package { Line 555  sub build_package {
     $count = 0;      $count = 0;
     my $imsresources;      my $imsresources;
     my $pkgdepth;      my $pkgdepth;
     my $included = 0;  
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if ($curRes == $it->BEGIN_MAP()) {          if ($curRes == $it->BEGIN_MAP()) {
             $prevdepth = $depth;              $prevdepth = $depth;
Line 564  sub build_package { Line 577  sub build_package {
                 unless ($curRes->is_sequence()) {                  unless ($curRes->is_sequence()) {
                     $resourceref = 'identifierref="RES-'.$env{'request.course.id'}.'-'.$count.'"';                      $resourceref = 'identifierref="RES-'.$env{'request.course.id'}.'-'.$count.'"';
                 }                  }
                 if (($depth <= $prevdepth) && ($count > 1) && ($included)) {                  my $step = $prevdepth - $depth;
                     print $ims_manifest "\n".'  </item>'."\n";                  if (($step >= 0) && ($count > 1)) {
                       while ($step >= 0) {
                           print $ims_manifest "\n".'  </item>'."\n";
                           $step --;
                       }
                 }                  }
                 $included = 1;  
                 $prevdepth = $depth;                  $prevdepth = $depth;
   
                 my $itementry =                  my $itementry =
Line 609  sub build_package { Line 625  sub build_package {
                     }                      }
                 }                  }
                 $pkgdepth = $depth;                  $pkgdepth = $depth;
             } else {  
                 $included = 0;  
             }              }
         }          }
     }      }
Line 645  sub process_content { Line 659  sub process_content {
     my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_;      my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_;
     my $content_type;      my $content_type;
     my $message;      my $message;
 # find where user is author or co-author  
     my @uploads = ();      my @uploads = ();
     if ($curRes->is_sequence()) {      if ($curRes->is_sequence()) {
         $content_type = 'sequence';          $content_type = 'sequence';
Line 699  sub process_content { Line 712  sub process_content {
         if ($2 eq $env{'user.domain'} && $3 eq $env{'user.name'})  {          if ($2 eq $env{'user.domain'} && $3 eq $env{'user.name'})  {
             $canedit= 1;              $canedit= 1;
         }          }
   # only include problem code where current user is author
         if ($canedit) {          if ($canedit) {
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
         } else {          } else {
Line 782  sub replicate_content { Line 796  sub replicate_content {
         $$message = 'Could not determine name of file for '.$symb."<br />\n";          $$message = 'Could not determine name of file for '.$symb."<br />\n";
     }      }
     if ($repstatus eq 'ok') {      if ($repstatus eq 'ok') {
         $content_name = $count.'/'.$filename;          $content_name = 'resources/'.$count.'/'.$filename;
     }      }
     return $content_name;      return $content_name;
 }  }
   
 sub extract_media {  sub extract_media {
     my ($url,$cdom,$cnum,$content,$count,$tempexport,$href,$message,$caller) = @_;      my ($url,$cdom,$cnum,$content,$count,$tempexport,$href,$message,$caller) = @_;
       my ($dirpath,$container);
     my %allfiles = ();      my %allfiles = ();
     my %codebase = ();      my %codebase = ();
     $url =~ s#([^/]+)$##;      if ($url =~ m-(.*/)([^/]+)$-) {
           $dirpath = $1;
           $container = $2;
       } else {
           $dirpath = $url;
           $container = '';
       }
     &Apache::lonnet::extract_embedded_items(undef,undef,\%allfiles,\%codebase,$content);      &Apache::lonnet::extract_embedded_items(undef,undef,\%allfiles,\%codebase,$content);
     foreach my $embed_file (keys(%allfiles)) {      foreach my $embed_file (keys(%allfiles)) {
         my $filename;          my $filename;
Line 809  sub extract_media { Line 830  sub extract_media {
             if ($embed_file =~ m-https?://-) {              if ($embed_file =~ m-https?://-) {
                 next;                           # points to url                  next;                           # points to url
             } else {              } else {
                 $embed_url = $url.$embed_file;  # points to relative path                  $embed_url = $dirpath.$embed_file;  # points to relative path
             }              }
         }          }
         if ($caller eq 'resource') {          if ($caller eq 'resource') {
Line 832  sub extract_media { Line 853  sub extract_media {
             my $copiedfile;              my $copiedfile;
             if ($copiedfile = Apache::File->new('>'.$destination)) {              if ($copiedfile = Apache::File->new('>'.$destination)) {
                 print $copiedfile $embed_content;                  print $copiedfile $embed_content;
                 push @{$href}, .'resources/'.$count.'/res/'.$filename;                  push @{$href}, 'resources/'.$count.'/res/'.$filename;
                 my $attrib_regexp = '';                  my $attrib_regexp = '';
                 if (@{$allfiles{$embed_file}} > 1) {                  if (@{$allfiles{$embed_file}} > 1) {
                     $attrib_regexp = join('|',@{$allfiles{$embed_file}});                      $attrib_regexp = join('|',@{$allfiles{$embed_file}});
Line 840  sub extract_media { Line 861  sub extract_media {
                     $attrib_regexp = $allfiles{$embed_file}[0];                      $attrib_regexp = $allfiles{$embed_file}[0];
                 }                  }
                 $$content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$embed_file\E(['"]?)#$1$newname$2#gi;                  $$content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$embed_file\E(['"]?)#$1$newname$2#gi;
                 if ($caller eq 'resource' && $url =~ /\.(problem|library)$/) {                  if ($caller eq 'resource' && $container =~ /\.(problem|library)$/) {
                     $$content =~ s#\Q$embed_file\E#$newname#gi;                      $$content =~ s#\Q$embed_file\E#$newname#gi;
                 }                  }
             }              }
Line 868  sub store_template { Line 889  sub store_template {
                 close($storetemplate);                  close($storetemplate);
             }              }
             if ($content_type eq 'external') {              if ($content_type eq 'external') {
                 return $count.'/'.$content_type.'.html';                  return 'resources/'.$count.'/'.$content_type.'.html';
             } else {              } else {
                 return $count.'/'.$content_type.'.xml';                  return 'resources/'.$count.'/'.$content_type.'.xml';
             }              }
         }          }
     }      }
Line 1093  sub editor { Line 1114  sub editor {
                 if ($cmd eq 'del') {                  if ($cmd eq 'del') {
     my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);      my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);
     if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&      if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
  ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library)$/)) {   ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
  &Apache::lonnet::removeuploadedurl($url);   &Apache::lonnet::removeuploadedurl($url);
     } else {      } else {
  &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);   &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);
Line 1194  sub editor { Line 1215  sub editor {
         $r->print('<table>');          $r->print('<table>');
         foreach (@Apache::lonratedt::order) {          foreach (@Apache::lonratedt::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);             my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
      $name=&Apache::lonratsrv::qtescape($name);
      $url=&Apache::lonratsrv::qtescape($url);
            unless ($name) {  $name=(split(/\//,$url))[-1]; }             unless ($name) {  $name=(split(/\//,$url))[-1]; }
            unless ($name) { $idx++; next; }             unless ($name) { $idx++; next; }
            $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));             $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
Line 1430  sub entryline { Line 1453  sub entryline {
                 'ct' => 'Cut',                  'ct' => 'Cut',
  'rn' => 'Rename',   'rn' => 'Rename',
  'cp' => 'Copy');   'cp' => 'Copy');
    my $nocopy=0;
           if ($url=~/\.(page|sequence)$/) {
       foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {
    my ($title,$url,$ext,$type)=split(/\:/,$_);
    if (($url=~/\.(page|sequence)/) && ($type ne 'zombie')) {
       $nocopy=1;
       last;
    }
       }
    }
           my $copylink='&nbsp;';
         if ($env{'form.pagepath'}) {          if ($env{'form.pagepath'}) {
              unless ($nocopy) {
                  $copylink=(<<ENDCOPY);
   <a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'>
   <font size="-2" color="#000099">$lt{'cp'}</font></a></td>
   ENDCOPY
               }
             $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'}" />
Line 1454  sub entryline { Line 1494  sub entryline {
 <font size="-2" color="#550044">$lt{'ct'}</font></a>  <font size="-2" color="#550044">$lt{'ct'}</font></a>
 <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'>  <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'>
 <font size="-2" color="#009900">$lt{'rn'}</font></a>  <font size="-2" color="#009900">$lt{'rn'}</font></a>
 <a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'>  $copylink
 <font size="-2" color="#000099">$lt{'cp'}</font></a></td>  
 END  END
         } else {          } else {
              unless ($nocopy) {
                  $copylink=(<<ENDCOPY);
   <a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'>
   <font size="-2" color="#000099">$lt{'cp'}</font></a></td>
   ENDCOPY
               }
             $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="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
Line 1480  END Line 1525  END
 <font size="-2" color="#550044">$lt{'ct'}</font></a>  <font size="-2" color="#550044">$lt{'ct'}</font></a>
 <a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'>  <a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'>
 <font size="-2" color="#009900">$lt{'rn'}</font></a>  <font size="-2" color="#009900">$lt{'rn'}</font></a>
 <a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'>  $copylink
 <font size="-2" color="#000099">$lt{'cp'}</font></a></td>  
 END  END
         }          }
     }      }
Line 1578  END Line 1622  END
     }      }
     $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>'.
         "<td bgcolor='#FFFFBB'><a href='$url'>$title</a></td>";          "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
        'hd' => 'Hidden',         'hd' => 'Hidden',
Line 1698  sub checkonthis { Line 1742  sub checkonthis {
   
   
 #  #
   # ----------------------------------------------------------------- List Symbs
   # 
   sub list_symbs {
      my $r=shift; 
      my $html=&Apache::lonxml::xmlbegin();
      $r->print($html.'<head><title>Symb List</title></head>'.
                 &Apache::loncommon::bodytag('Symb List'));
      my $navmap = Apache::lonnavmaps::navmap->new();
      $r->print("<pre>\n");
      foreach my $res ($navmap->retrieveResources()) {
          $r->print($res->compTitle()."\t".$res->symb()."\n");
      }
      $r->print("\n</pre>\n");
      $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');
   }
   
   
   #
 # -------------------------------------------------------------- Verify Content  # -------------------------------------------------------------- Verify Content
 #   # 
 sub verifycontent {  sub verifycontent {
Line 2041  sub handler { Line 2103  sub handler {
     return OK if $r->header_only;      return OK if $r->header_only;
   
 # --------------------------------------------- Initialize help topics for this  # --------------------------------------------- Initialize help topics for this
   foreach ('Adding_Course_Doc','Main_Course_Documents',      foreach ('Adding_Course_Doc','Main_Course_Documents',
            'Adding_External_Resource','Navigate_Content',       'Adding_External_Resource','Navigate_Content',
            'Adding_Folders','Docs_Overview', 'Load_Map',       'Adding_Folders','Docs_Overview', 'Load_Map',
            'Supplemental','Score_Upload_Form','Adding_Pages',       'Supplemental','Score_Upload_Form','Adding_Pages',
            'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',       'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
    'Check_Resource_Versions','Verify_Content') {       'Check_Resource_Versions','Verify_Content') {
       $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);   $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
   }      }
     # Composite help files      # Composite help files
     $help{'Syllabus'} = &Apache::loncommon::help_open_topic(      $help{'Syllabus'} = &Apache::loncommon::help_open_topic(
     'Docs_About_Syllabus,Docs_Editing_Templated_Pages');      'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
Line 2062  sub handler { Line 2124  sub handler {
   'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');    'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
     $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');      $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
   
   if ($env{'form.verify'}) {  # does this user have privileges to modify docs
       my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
   
     if ($allowed && $env{'form.verify'}) {
       &verifycontent($r);        &verifycontent($r);
   } elsif ($env{'form.versions'}) {    } elsif ($allowed && $env{'form.listsymbs'}) {
         &list_symbs($r);
     } elsif ($allowed && $env{'form.versions'}) {
       &checkversions($r);        &checkversions($r);
   } elsif ($env{'form.dumpcourse'}) {    } elsif ($allowed && $env{'form.dumpcourse'}) {
       &dumpcourse($r);        &dumpcourse($r);
   } elsif ($env{'form.exportcourse'}) {    } elsif ($allowed && $env{'form.exportcourse'}) {
       &exportcourse($r);        &exportcourse($r);
   } else {    } else {
 # is this a standard course?  # is this a standard course?
Line 2077  sub handler { Line 2144  sub handler {
     my $forcestandard = 0;      my $forcestandard = 0;
     my $forcesupplement;      my $forcesupplement;
     my $script='';      my $script='';
     my $allowed;  
     my $events='';      my $events='';
     my $showdoc=0;      my $showdoc=0;
     my $containertag;      my $containertag;
Line 2103  sub handler { Line 2169  sub handler {
     }      }
     unless ($showdoc) { # got called from remote      unless ($showdoc) { # got called from remote
        if (($env{'form.folder'}=~/^default_/) ||          if (($env{'form.folder'}=~/^default_/) || 
           ($env{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) {            ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
            $forcestandard = 1;             $forcestandard = 1;
        }          } 
        $forcesupplement=($env{'form.folder'}=~/^supplemental_/);         $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
   
 # does this user have privileges to post, etc?  
        $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});  
        if ($allowed) {          if ($allowed) { 
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);           &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');            $script=&Apache::lonratedt::editscript('simple'); 
Line 2431  ENDNEWSCRIPT Line 2495  ENDNEWSCRIPT
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
  'vc' => 'Verify Content',   'vc' => 'Verify Content',
  'cv' => 'Check/Set Resource Versions',   'cv' => 'Check/Set Resource Versions',
    'ls' => 'List Symbs',
   );    );
   
        my $folderpath=$env{'form.folderpath'};         my $folderpath=$env{'form.folderpath'};
Line 2465  $uploadtag Line 2530  $uploadtag
     <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}      <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}
 $dumpbut  $dumpbut
 $exportbut  $exportbut
 </td></tr></table>  </td><!-- <td bgcolor="#DDDDCC">
       <input type="submit" name="listsymbs" value="$lt{'ls'}" />
   </td>--></tr></table>
 </form>  </form>
 ENDCOURSEVERIFY  ENDCOURSEVERIFY
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',         $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',

Removed from v.1.197  
changed lines
  Added in v.1.213


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