Diff for /loncom/interface/londocs.pm between versions 1.453 and 1.454

version 1.453, 2011/05/27 19:02:16 version 1.454, 2011/07/04 13:01:53
Line 280  sub exportcourse { Line 280  sub exportcourse {
     my %discussiontime = &Apache::lonnet::dump('discussiontimes',      my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                                $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});                                                 $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
     my $numdisc = keys(%discussiontime);      my $numdisc = keys(%discussiontime);
       my $numprobs = 0;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').          $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').
Line 310  sub exportcourse { Line 311  sub exportcourse {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['archive','discussion']);                                              ['archive','discussion']);
   
           my $format = $env{'form.format'};
         my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');          my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');
         my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');          my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');
         if (@exportitems == 0 && @discussions == 0) {          if (@exportitems == 0 && @discussions == 0) {
Line 331  sub exportcourse { Line 333  sub exportcourse {
             my $imsresources;              my $imsresources;
             my $tempexport;              my $tempexport;
             my $copyresult;              my $copyresult;
             my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);              my $testbank;
               my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport,$format,\$testbank);
             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,$format,$testbank);
                 close($ims_manifest);                  close($ims_manifest);
   
 #Create zip file in prtspool  #Create zip file in prtspool
Line 435  sub exportcourse { Line 438  sub exportcourse {
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {                  if (($curRes->is_sequence()) || ($curRes->is_page())) {
                     $lastcontainer = $currelem;                      $lastcontainer = $currelem;
                     $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';                      $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';
                   } elsif ($curRes->is_problem()) {
                       $numprobs ++; 
                 }                  }
                 $display .= ' />'."\n";                  $display .= ' />'."\n";
                 for (my $i=0; $i<$depth; $i++) {                  for (my $i=0; $i<$depth; $i++) {
Line 519  function containerCheck(item) { Line 524  function containerCheck(item) {
  $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',   $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',
  $scripttag));   $scripttag));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
           if ($numprobs > 0) {
               $display .= '<p><span class="LC_nobreak">'.
                           &mt('Export format for LON-CAPA problems:').
                           '<label><input type="radio" name="format" value="xml" checked="checked" />'.
                           '&nbsp;'.&mt('XML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="html" />'.
                           '&nbsp;'.&mt('HTML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="plaintext" />'.
                           '&nbsp;'.&mt('Text').'</label></span></p>';
           }
  $r->print($display.   $r->print($display.
                   '<p><input type="hidden" name="finishexport" value="1" />'.                    '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.                    '<input type="submit" name="exportcourse" value="'.
Line 527  function containerCheck(item) { Line 542  function containerCheck(item) {
 }  }
   
 sub create_ims_store {  sub create_ims_store {
     my ($now,$manifestok,$outcome,$tempexport) = @_;      my ($now,$manifestok,$outcome,$tempexport,$format,$testbank) = @_;
     $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';      $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';
     my $ims_manifest;      my $ims_manifest;
     if (!-e $$tempexport) {      if (!-e $$tempexport) {
Line 571  sub create_ims_store { Line 586  sub create_ims_store {
 '  <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{'course.'.$env{'request.course.id'}.'.description'}.'</title>'  '      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>';
           if ($format eq 'plaintext') {
               my $testbankfilename = $$tempexport.'/testbank.txt';
               $$testbank = Apache::File->new('>'.$testbankfilename);
           }
     } else {      } else {
         $$outcome .= 'An error occurred opening the IMS manifest file.<br />'          $$outcome .= 'An error occurred opening the IMS manifest file.<br />'
 ;  ;
Line 580  sub create_ims_store { Line 599  sub create_ims_store {
 }  }
   
 sub build_package {  sub build_package {
     my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,$ims_manifest) = @_;      my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,
           $ims_manifest,$format,$testbank) = @_;
 # first iterator to look for dependencies  # first iterator to look for dependencies
     my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);      my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
     my $curRes;      my $curRes;
Line 619  sub build_package { Line 639  sub build_package {
     $count = 0;      $count = 0;
     my $imsresources;      my $imsresources;
     my $pkgdepth;      my $pkgdepth;
       my $currdirpath = 'Top';
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if ($curRes == $it->BEGIN_MAP()) {          if ($curRes == $it->BEGIN_MAP()) {
             $prevdepth = $depth;              $prevdepth = $depth;
Line 656  sub build_package { Line 677  sub build_package {
               '<title>'.$curRes->title().'</title>';                '<title>'.$curRes->title().'</title>';
                 print $ims_manifest "\n".$itementry;                  print $ims_manifest "\n".$itementry;
   
                 unless ($curRes->is_sequence()) {                  if ($curRes->is_sequence()) {
                       $currdirpath = 'Top';
                       my $pcslist = $curRes->map_hierarchy();
                       if ($pcslist ne '') {
                           foreach my $pc (split(/,/,$pcslist)) {
                               my $res = $navmap->getByMapPc($pc);
                               if (ref($res)) {
                                   my $encloser = $res->title();
                                   if ($encloser) {
                                       if ($currdirpath) {
                                           $currdirpath .= ' -> ';
                                       }
                                       $currdirpath .= $encloser;
                                   }
                               }
                           }
                       }
                   } else {
                     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,$format,$currdirpath,$testbank);
                     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.
Line 720  sub get_dependencies { Line 758  sub get_dependencies {
 }  }
   
 sub process_content {  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,$format,$currdirpath,$testbank) = @_;
     my $content_type;      my $content_type;
     my $message;      my $message;
     my @uploads = ();      my @uploads = ();
Line 777  sub process_content { Line 815  sub process_content {
             $canedit= 1;              $canedit= 1;
         }          }
 # only include problem code where current user is author  # only include problem code where current user is author
         if ($canedit) {          if (($format eq 'html') || ($format eq 'plaintext')) {
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');              my $title = $curRes->title;
         } else {              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,$format,$currdirpath,$title,$testbank);
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');          } elsif ($format eq 'xml') {
               if ($canedit) {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
               } else {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
               }
         }          }
     } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {      } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
         $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');          $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
Line 800  sub process_content { Line 843  sub process_content {
 }  }
   
 sub replicate_content {  sub replicate_content {
     my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;      my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller,$currdirpath,
           $title,$testbank) = @_;
     my ($map,$ind,$url);      my ($map,$ind,$url);
     if ($caller eq 'templateupload') {      if ($caller eq 'templateupload') {
         $url = $symb;          $url = $symb;
Line 844  sub replicate_content { Line 888  sub replicate_content {
                 } else {                  } else {
                     $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";                      $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";
                 }                  }
             } elsif ($caller eq 'noedit') {              } elsif (($caller eq 'noedit') || ($caller eq 'html') || 
                        ($caller eq 'plaintext')) {
 # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.  # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
                   my %form = (
                                grade_symb     => $symb,
                                grade_courseid => $cdom.'_'.$cnum,
                                grade_domain   => $env{'user.domain'},
                                grade_username => $env{'user.name'},
                                grade_imsexport => 1, 
                              );
                   my $feedurl=&Apache::lonnet::clutter($url);
                   my ($userview,$response)=&Apache::lonnet::ssi_body($feedurl,%form);
                   if (ref($response)) {
                       if ($response->is_success) {
                           $content = $userview;
                           $content =~ s/\Qonchange="javascript:setSubmittedPart('\E[^\']+\Q');"\E//g;
                           $content =~ s/^\s*[\n\r]+$//;
                           if ($caller eq 'plaintext') {
                               my @lines = split(/[\n\r]+/,$content);
                               my @tosave;
                               my $foilcounter = 0;
                               my @alphabet = ('a'..'z');
                               my $mc_answer;
                               foreach my $line (@lines) {
                                   next if ($line =~ /^\s*$/);
                                   if ($line =~ m{(|\Q<\label>\E)\Q<br />Incorrect:<label>\E}) {
                                       $foilcounter ++;
                                   } elsif ($line =~ m{(|\Q</label>\E)\Q<br />Correct:<b><label>\E}) {
                                       $foilcounter ++;
                                       $mc_answer = $alphabet[$foilcounter];
                                   } elsif ($line !~ m{</label><br />}) {
                                       $line =~ s/^(\s+|\s+)$//g;
                                       $line =~ s{^\Q<b>\E([^<]+)\Q</b>\E$}{1};
                                       push(@tosave,$line);
                                   }
                                   $content = join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer."\n";
                                   }
                               }
                               if (@tosave) {
                                   $content = $currdirpath."\t".$title."\t".join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer."\n";
                                   }
                               }
                           } else {
                               $content = '<html><body>'.$content.'</body></html>';
                           }
                           if (($caller eq 'plaintext') && ($testbank)) {
                               print $testbank $content;
                           }
                       } else {
                           $content = 'Not the owner of this resource';
                       }
                   } else {
                       $content = 'Not the owner of this resource';
                   }
                 $repstatus = 'ok';                  $repstatus = 'ok';
                 $content = 'Not the owner of this resource';  
             }              }
             if ($repstatus eq 'ok') {              if ($repstatus eq 'ok') {
                 print $copiedfile $content;                  print $copiedfile $content;
Line 905  sub extract_media { Line 1004  sub extract_media {
                 $repstatus = 'ok';                  $repstatus = 'ok';
             }              }
         } elsif ($caller eq 'uploaded') {          } elsif ($caller eq 'uploaded') {
   
             $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);              $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);
         }          }
         if ($repstatus eq 'ok') {          if ($repstatus eq 'ok') {

Removed from v.1.453  
changed lines
  Added in v.1.454


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