Diff for /loncom/imspackages/imsprocessor.pm between versions 1.51 and 1.52

version 1.51, 2012/12/18 18:54:11 version 1.52, 2013/07/27 22:04:49
Line 203  sub process_manifest { Line 203  sub process_manifest {
   
 sub parse_manifest {  sub parse_manifest {
     my ($cms,$phase,$tempdir,$xmlfile,$toc,$includedres,$includeditems,$items,      my ($cms,$phase,$tempdir,$xmlfile,$toc,$includedres,$includeditems,$items,
         $resources,$resinfo,$hrefs,$seq) = @_;          $resources,$resinfo,$hrefs,$seq,$requirer) = @_;
     my @state = ();      my @state = ();
     my $itm = '';      my $itm = '';
     my %contents = ();      my %contents = ();
     my $identifier = '';      my $identifier = '';
     my @allidentifiers = ();      my @allidentifiers = ();
     my $lastitem;      my $lastitem;
       my $neededby;
     my $p = HTML::Parser->new      my $p = HTML::Parser->new
     (      (
        xml_mode => 1,         xml_mode => 1,
Line 308  sub parse_manifest { Line 309  sub parse_manifest {
                     }                      }
                 } elsif ("@state" eq "manifest resources resource file") {                  } elsif ("@state" eq "manifest resources resource file") {
                     if ($$includedres{$identifier} || $phase ne 'build') {                      if ($$includedres{$identifier} || $phase ne 'build') {
                         if ($cms eq 'webctvista4') {  
                             $$resources{$identifier}{file} = $attr->{href};  
                         }  
                         if ($cms eq 'bb5' || $cms eq 'bb6' ||                           if ($cms eq 'bb5' || $cms eq 'bb6' || 
                             $cms eq 'webctce4' || $cms eq 'webctvista4') {                              $cms eq 'webctce4' || $cms eq 'webctvista4') {
                             push @{$$hrefs{$identifier}},$attr->{href};  
                             if ($$resources{$identifier}{type} eq                               if ($$resources{$identifier}{type} eq 
                                 'webct.manifest') {                                  'webct.manifest') {
                                 my $manifestfile = $tempdir.'/'.$attr->{href};                                  my $manifestfile = $tempdir.'/'.$attr->{href};
Line 325  sub parse_manifest { Line 322  sub parse_manifest {
                                 &parse_manifest($cms,$phase,$tempdir,$manifestfile,                                  &parse_manifest($cms,$phase,$tempdir,$manifestfile,
                                                 $toc,$includedres,$includeditems,                                                  $toc,$includedres,$includeditems,
                                                 $items,$resources,$resinfo,                                                  $items,$resources,$resinfo,
                                                 $hrefs,$currseqref);                                                  $hrefs,$currseqref,$neededby);
                               } else {
                                   if ($cms eq 'webctvista4') {
                                       if ($$resources{$identifier}{type} eq 'ims_qtiasiv1p2') {
                                           $neededby = $identifier;
                                       } elsif ($$resources{$identifier}{type} eq 'webcontent') {
                                           $$resources{$identifier}{usedby} = $requirer;
                                           push(@{$$hrefs{$identifier}},$attr->{href});
                                       }
                                       $$resources{$identifier}{file} = $attr->{href};
                                   } else {
                                       push(@{$$hrefs{$identifier}},$attr->{href});
                                   } 
                             }                              }
                         } elsif ($cms eq 'angel5') {                          } elsif ($cms eq 'angel5') {
                             if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) {                              if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) {
Line 333  sub parse_manifest { Line 342  sub parse_manifest {
                             } elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) {                              } elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) {
                                 $$resources{$identifier}{type} = $1;                                  $$resources{$identifier}{type} = $1;
                             }                              }
                         }                           }
                     }                      }
                 } elsif ("@state" eq "manifest webct:ContentObject") {                  } elsif ("@state" eq "manifest webct:ContentObject") {
                     foreach my $ident (@allidentifiers) {                      foreach my $ident (@allidentifiers) {
Line 360  sub parse_manifest { Line 369  sub parse_manifest {
                         }                          }
                     }                      }
                 }                  }
                   if ("@state" eq "manifest webct:ContentObject webct:Name") {
                       if ($cms eq 'webctvista4') {
                           $$resources{$identifier}{title} = (split(/,/,$text))[-1];
                       }
                   }
               }, "dtext"],                }, "dtext"],
         end_h =>          end_h =>
               [sub {                [sub {
Line 405  sub get_parents { Line 419  sub get_parents {
   
 sub target_resources {  sub target_resources {
     my ($resources,$oktypes,$targets) = @_;      my ($resources,$oktypes,$targets) = @_;
     foreach my $key (keys %{$resources}) {      foreach my $key (sort(keys(%{$resources}))) {
         if ( defined($$oktypes{$$resources{$key}{type}}) ) {          if ( defined($$oktypes{$$resources{$key}{type}}) ) {
             push @{$targets}, $key;              push(@{$targets},$key);
           } elsif (defined($$resources{$key}{usedby})) {
               if (defined($$oktypes{$$resources{$$resources{$key}{usedby}}{type}})) {
                   push(@{$targets},$key);
               }
         }          }
     }      }
     return;      return;
 }  }
   
 sub copy_resources {  sub copy_resources {
     my ($context,$cms,$hrefs,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow,$assessmentfiles,$total) = @_;      my ($context,$cms,$hrefs,$resources,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow,$assessmentfiles,$total) = @_;
     if ($context eq 'DOCS') {      if ($context eq 'DOCS') {
         foreach my $key (sort keys %{$hrefs}) {          foreach my $key (sort keys %{$hrefs}) {
             if (grep/^$key$/,@{$targets}) {              if (grep/^$key$/,@{$targets}) {
Line 438  sub copy_resources { Line 456  sub copy_resources {
                             $copyfile = $1;                              $copyfile = $1;
                         }                          }
                     }                      }
                       if ($cms eq 'webctvista4') {
                           if ($file =~ m{/\QX-WEBCT-VISTA-V0\E/.+([^.]+)$}) {
                               $copyfile = $1;
                           }
                           if ($$resources{$key}{usedby}) {
                               if ($$resources{$$resources{$key}{usedby}}{image} =~ /^\Q$copyfile\E/) {
                                   $copyfile = $$resources{$$resources{$key}{usedby}}{image};
                               }
                           }
                       }
                     unless ((($cms eq 'webctce4') && ($copyfile =~ m/questionDB\.xml$/ || $copyfile =~ m/quiz_QIZ_\d+\.xml$/ || $copyfile =~ m/properties_QIZ_\d+\.xml$/)) || (($cms eq 'webctvista4') && (grep/^$key$/,@{$assessmentfiles}) && $file =~ /\.xml$/))    {                      unless ((($cms eq 'webctce4') && ($copyfile =~ m/questionDB\.xml$/ || $copyfile =~ m/quiz_QIZ_\d+\.xml$/ || $copyfile =~ m/properties_QIZ_\d+\.xml$/)) || (($cms eq 'webctvista4') && (grep/^$key$/,@{$assessmentfiles}) && $file =~ /\.xml$/))    {
                         $copyfile = $fpath.$copyfile;                          $copyfile = $fpath.$copyfile;
                         my $fileresult;                          my $fileresult;
Line 452  sub copy_resources { Line 480  sub copy_resources {
         if (!-e "$destdir/resfiles") {          if (!-e "$destdir/resfiles") {
             mkdir("$destdir/resfiles",0770);              mkdir("$destdir/resfiles",0770);
         }          }
         foreach my $key (sort keys %{$hrefs}) {          foreach my $key (sort(keys(%{$hrefs}))) {
             if (grep/^$key$/,@{$targets}) {              if (grep/^$key$/,@{$targets}) {
                 foreach my $file (@{$$hrefs{$key}}) {                  foreach my $file (@{$$hrefs{$key}}) {
                     $file =~ s-\\-/-g;                      $file =~ s-\\-/-g;
Line 511  sub copy_resources { Line 539  sub copy_resources {
                         } elsif ($file !~ m-/data/(.+)$-) {                          } elsif ($file !~ m-/data/(.+)$-) {
                             &Apache::lonnet::logthis("IMS import error: WebCT4 - file $file is in unexpected location");                              &Apache::lonnet::logthis("IMS import error: WebCT4 - file $file is in unexpected location");
                         }                          }
                       } elsif ($cms eq 'webctvista4') {
                           if ($file =~ m{^\QX-WEBCT-VISTA-V0\E/(.+)$}) {
                               my $copyfile = $1;
                               if ($copyfile =~ m{^[^/]+/[^/]+}) {
                                   my @dirs = split/\//,$copyfile;
                                   my $path = "$destdir/resfiles";
                                   while (@dirs > 1) {
                                       $path .= '/'.$dirs[0];
                                       if (!-e "$path") {
                                           mkdir("$path",0755);
                                       }
                                       shift @dirs;
                                   }
                               } else {
                                   $copyfile =~ s/^[^.]+\.(\d+)_R/$1/;
                                   my ($filestem,$extension) = ($copyfile =~ /^(.+)\.(\w+)$/); 
                                   if ($$resources{$key}{usedby}) {
                                       if (ref($$resources{$$resources{$key}{usedby}}{image}) eq 'ARRAY') {
                                           for (my $i=0; $i<@{$$resources{$$resources{$key}{usedby}}{image}}; $i++) {
                                               my ($img,$imgtitle);
                                               $img = $$resources{$$resources{$key}{usedby}}{image}[$i];
                                               if (ref($$resources{$$resources{$key}{usedby}}{imagetitle}) eq 'ARRAY') {
                                                   $imgtitle = $$resources{$$resources{$key}{usedby}}{imagetitle}[$i]; 
                                               }
                                               if (($img =~ /^\Q$filestem\E/i) && ($imgtitle =~ /\Q$extension\E/i)) {
                                                   $copyfile = $img.'_'.$imgtitle;
                                                   last;
                                               } elsif ($img =~ /^\Q$filestem\E/i) {
                                                   $copyfile = $img.'.'.$extension;
                                                   last;
                                               }
                                           }
                                       }
                                   }
                               }
                               if (-e "$tempdir/$file") {
                                   my $renameres = rename("$tempdir/$file","$destdir/resfiles/$copyfile");
                                   if ($renameres) {
                                       if (ref($total) eq 'HASH') {
                                           $$total{'file'} ++;
                                       }
                                   } else {
                                       &Apache::lonnet::logthis("IMS import error: WebCTVista - renaming failed for file $file");
                                   }
                               }
                           }
                     }                      }
                 }                  }
             }              }
Line 2358  sub parse_webctvista4_question { Line 2432  sub parse_webctvista4_question {
             $$settings{$id}{text} .= '['.$attr->{'webct:name'}.']';              $$settings{$id}{text} .= '['.$attr->{'webct:name'}.']';
         }          }
         if ("@state" eq "questestinterop item presentation flow material matimage") {          if ("@state" eq "questestinterop item presentation flow material matimage") {
             $$settings{$id}{image} = $attr->{uri};              if ($attr->{uri} =~ /\QRelativeResourceManager?contentID=\E(\d+)$/) {
                   $$settings{$id}{image} = $1;
                   push(@{$$resources{$res}{image}},$$settings{$id}{image});
               } else {
                   $$settings{$id}{image} = $attr->{uri};
               }
         }          }
   
         if ("@state" eq "questestinterop item presentation flow material mattext")  {          if ("@state" eq "questestinterop item presentation flow material mattext")  {
Line 2566  sub parse_webctvista4_question { Line 2645  sub parse_webctvista4_question {
         if ($currtexttype eq '/text/html') {          if ($currtexttype eq '/text/html') {
             $text =~ s#(&lt;img\ssrc=")([^"]+)"&gt;#$1../resfiles/$2#g;              $text =~ s#(&lt;img\ssrc=")([^"]+)"&gt;#$1../resfiles/$2#g;
         }          }
           if ("@state" eq "questestinterop item presentation flow material matimage") {
               my $imagetitle = (split(/,/,$text))[-1];
               $$settings{$id}{imagetitle} = $imagetitle;
               push(@{$$resources{$res}{imagetitle}},$imagetitle);
           }
         if ("@state" eq "questestinterop item itemmetadata qtimetadata qtimetadatafield fieldlabel") {          if ("@state" eq "questestinterop item itemmetadata qtimetadata qtimetadatafield fieldlabel") {
             $fieldlabel = $text;              $fieldlabel = $text;
         }          }
Line 3909  sub write_webct4_questions { Line 3993  sub write_webct4_questions {
                 }                  }
             }              }
         }          }
           if (($cms eq 'webctvista4') && (defined($$settings{$id}{image}))) {
               my $imgsrc = '../../resfiles/'.$$settings{$id}{image};
               if (defined($$settings{$id}{imagetitle})) {
                   $imgsrc .= '_'.$$settings{$id}{imagetitle};
               }
               $questionimage = qq|<p><img src="$imgsrc" /></p>|;
           }
         if ($$settings{$id}{class} eq "paragraph") {          if ($$settings{$id}{class} eq "paragraph") {
             my $pre_fill_answer = $$settings{$id}{PARA}{PARA}{PRE_FILL_ANSWER};              my $pre_fill_answer = $$settings{$id}{PARA}{PARA}{PRE_FILL_ANSWER};
             if ($context eq 'CSTR') {              if ($context eq 'CSTR') {

Removed from v.1.51  
changed lines
  Added in v.1.52


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