Diff for /loncom/publisher/lonpublisher.pm between versions 1.128 and 1.136

version 1.128, 2003/08/13 18:41:59 version 1.136, 2003/09/25 20:01:15
Line 142  use DBI; Line 142  use DBI;
 use Apache::lonnet();  use Apache::lonnet();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonmysql;  use Apache::lonmysql;
   use Apache::lonlocal;
 use vars qw(%metadatafields %metadatakeys);  use vars qw(%metadatafields %metadatakeys);
   
 my %addid;  my %addid;
Line 324  string which presents the form field (fo Line 325  string which presents the form field (fo
 #########################################  #########################################
 sub textfield {  sub textfield {
     my ($title,$name,$value)=@_;      my ($title,$name,$value)=@_;
       $title=&mt($title);
     my $uctitle=uc($title);      my $uctitle=uc($title);
     return "\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".      return "\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".
            "</b></font></p><br />".             "</b></font></p><br />".
Line 337  sub hiddenfield { Line 339  sub hiddenfield {
   
 sub selectbox {  sub selectbox {
     my ($title,$name,$value,$functionref,@idlist)=@_;      my ($title,$name,$value,$functionref,@idlist)=@_;
       $title=&mt($title);
     my $uctitle=uc($title);      my $uctitle=uc($title);
     $value=(split(/\s*,\s*/,$value))[-1];      $value=(split(/\s*,\s*/,$value))[-1];
     my $selout="\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".      my $selout="\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".
Line 667  sub fix_ids_and_indices { Line 670  sub fix_ids_and_indices {
     }      }
  }   }
  # probably a <randomlabel> image type <label>   # probably a <randomlabel> image type <label>
  if ($lctag eq 'label' && defined($parms{'description'})) {   # or a <image> tag inside <imageresponse>
    if (($lctag eq 'label' && defined($parms{'description'}))
       ||
       ($lctag eq 'image')) {
     my $next_token=$parser[-1]->get_token();      my $next_token=$parser[-1]->get_token();
     if ($next_token->[0] eq 'T') {      if ($next_token->[0] eq 'T') {
  $next_token->[1]=&set_allow(\%allow,$logfile,   $next_token->[1]=&set_allow(\%allow,$logfile,
Line 718  sub fix_ids_and_indices { Line 724  sub fix_ids_and_indices {
  }   }
  if (!$endtag) { if ($token->[4]=~m:/>$:) { $endtag=' /'; }; }   if (!$endtag) { if ($token->[4]=~m:/>$:) { $endtag=' /'; }; }
  $outstring.='<'.$tag.$newparmstring.$endtag.'>';   $outstring.='<'.$tag.$newparmstring.$endtag.'>';
  if ($lctag eq 'm') {   if ($lctag eq 'm' || $lctag eq 'script' 
     $outstring.=&get_all_text_unbalanced('/m',\@parser);                      || $lctag eq 'display' || $lctag eq 'tex') {
       $outstring.=&get_all_text_unbalanced('/'.$lctag,\@parser);
  }   }
     } elsif ($token->[0] eq 'E') {      } elsif ($token->[0] eq 'E') {
  if ($token->[2]) {   if ($token->[2]) {
Line 890  sub publish { Line 897  sub publish {
         }          }
         $outstring=~s/\n*(\<\/[^\>]+\>)\s*$/$allowstr\n$1\n/s;          $outstring=~s/\n*(\<\/[^\>]+\>)\s*$/$allowstr\n$1\n/s;
   
   ### FIXME: is this really what we want?
  #Encode any High ASCII characters   #Encode any High ASCII characters
  $outstring=&HTML::Entities::encode($outstring,"\200-\377");   $outstring=&HTML::Entities::encode($outstring,"\200-\377");
 # ------------------------------------------------------------- Write modified.  # ------------------------------------------------------------- Write modified.
Line 898  sub publish { Line 906  sub publish {
           my $org;            my $org;
           unless ($org=Apache::File->new('>'.$source)) {            unless ($org=Apache::File->new('>'.$source)) {
              print $logfile "No write permit to $source\n";               print $logfile "No write permit to $source\n";
              return ('<font color="red">No write permission to '.$source.               return ('<font color="red">'.&mt('No write permission to').
      ', FAIL</font>',1);       ' '.$source.
        ', '.&mt('FAIL').'</font>',1);
   }    }
           print($org $outstring);            print($org $outstring);
         }          }
Line 916  sub publish { Line 925  sub publish {
      my %oldparmstores=();       my %oldparmstores=();
             
     unless ($batch) {      unless ($batch) {
      $scrout.='<h3>Metadata Information ' .       $scrout.='<h3>'.&mt('Metadata Information').' ' .
        Apache::loncommon::help_open_topic("Metadata_Description")         Apache::loncommon::help_open_topic("Metadata_Description")
        . '</h3>';         . '</h3>';
     }      }
Line 973  sub publish { Line 982  sub publish {
   
 # -------------------------------------------------- Parse content for metadata  # -------------------------------------------------- Parse content for metadata
     if (($style eq 'ssi') || ($style eq 'prv')) {      if (($style eq 'ssi') || ($style eq 'prv')) {
         my $oldenv=$ENV{'request.uri'};   my $dir=$source;
    $dir=~s-/[^/]*$--;
         $ENV{'request.uri'}=$target;   my $file=$source;
         $allmeta=Apache::lonxml::xmlparse(undef,'meta',$content);   $file=(split('/',$file))[-1];
         $ENV{'request.uri'}=$oldenv;          $source=&Apache::lonnet::hreflocation($dir,$file);
    $allmeta=&Apache::lonnet::ssi_body($source,('grade_target' => 'meta'));
   
         &metaeval($allmeta);          &metaeval($allmeta);
     }      }
Line 995  sub publish { Line 1005  sub publish {
  }   }
     }      }
     if ($chparms) {      if ($chparms) {
  $scrout.='<p><b>New parameters or stored values:</b> '.$chparms.'</p>';   $scrout.='<p><b>'.&mt('New parameters or stored values').
       ':</b> '.$chparms.'</p>';
     }      }
   
     $chparms='';      $chparms='';
Line 1009  sub publish { Line 1020  sub publish {
  }   }
     }      }
     if ($chparms) {      if ($chparms) {
  $scrout.='<p><b>Obsolete parameters or stored values:</b> '.   $scrout.='<p><b>'.&mt('Obsolete parameters or stored values').':</b> '.
     $chparms.'</p>';      $chparms.'</p>';
     }      }
   
Line 1162  END Line 1173  END
     $scrout.=&textfield('Custom Distribution File','customdistributionfile',      $scrout.=&textfield('Custom Distribution File','customdistributionfile',
  $metadatafields{'customdistributionfile'}).   $metadatafields{'customdistributionfile'}).
     $copyright_help;      $copyright_help;
       my $uctitle=uc(&mt('Obsolete'));
               $scrout.=
    "\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".
    '</b></font> <input type="checkbox" name="obsolete" ';
       if ($metadatafields{'obsolete'}) {
    $scrout.=' checked="1" ';
       }
       $scrout.='/ ></p>'.
    &textfield('Suggested Replacement for Obsolete File',
       'obsoletereplacement',
       $metadatafields{'obsoletereplacement'});
  } else {   } else {
     $scrout.=&hiddenfield('copyright','private');      $scrout.=&hiddenfield('copyright','private');
  }   }
  return ($scrout.'<p><input type="submit" value="Finalize Publication" /></p></form>',0);   return ($scrout.'<p><input type="submit" value="'.
    &mt('Finalize Publication').'" /></p></form>',0);
 # =============================================================================  # =============================================================================
 # BATCH MODE  # BATCH MODE
 #  #
Line 1243  sub phasetwo { Line 1266  sub phasetwo {
   
     if ($target=~/\_\_\_/) {      if ($target=~/\_\_\_/) {
  $r->print(   $r->print(
  '<font color="red">Unsupported character combination "<tt>___</tt>" in filename, FAIL</font>');   '<font color="red">'.&mt('Unsupported character combination').
     ' "<tt>___</tt>" '.&mt('in filename, FAIL').'</font>');
         return 0;          return 0;
     }      }
     $distarget=~s/\/+/\//g;      $distarget=~s/\/+/\//g;
     my $logfile;      my $logfile;
     unless ($logfile=Apache::File->new('>>'.$source.'.log')) {      unless ($logfile=Apache::File->new('>>'.$source.'.log')) {
  $r->print(   $r->print(
         '<font color="red">No write permission to user directory, FAIL</font>');          '<font color="red">'.
    &mt('No write permission to user directory, FAIL').'</font>');
         return 0;          return 0;
     }      }
     print $logfile       print $logfile 
Line 1293  sub phasetwo { Line 1318  sub phasetwo {
         my $mfh;          my $mfh;
         unless ($mfh=Apache::File->new('>'.$source.'.meta')) {          unless ($mfh=Apache::File->new('>'.$source.'.meta')) {
             return               return 
                 '<font color="red">Could not write metadata, FAIL</font>';                  '<font color="red">'.&mt('Could not write metadata, FAIL').
    '</font>';
         }          }
         foreach (sort keys %metadatafields) {          foreach (sort keys %metadatafields) {
             unless ($_=~/\./) {              unless ($_=~/\./) {
Line 1312  sub phasetwo { Line 1338  sub phasetwo {
                         .'</'.$tag.'>';                          .'</'.$tag.'>';
             }              }
         }          }
         $r->print('<p>Wrote Metadata</p>');          $r->print('<p>'.&mt('Wrote Metadata').'</p>');
         print $logfile "\nWrote metadata";          print $logfile "\nWrote metadata";
     }      }
           
Line 1330  sub phasetwo { Line 1356  sub phasetwo {
             print $logfile "\n".$error;              print $logfile "\n".$error;
         }          }
     } else {      } else {
         $r->print('<p>Private Publication - did not synchronize database</p>');          $r->print('<p>'.
        &mt('Private Publication - did not synchronize database').'</p>');
         print $logfile "\nPrivate: Did not synchronize data into ".          print $logfile "\nPrivate: Did not synchronize data into ".
             "SQL metadata database";              "SQL metadata database";
     }      }
Line 1367  sub phasetwo { Line 1394  sub phasetwo {
                   
         if (copy($target,$copyfile)) {          if (copy($target,$copyfile)) {
     print $logfile "Copied old target to ".$copyfile."\n";      print $logfile "Copied old target to ".$copyfile."\n";
             $r->print('<p>Copied old target file</p>');              $r->print('<p>'.&mt('Copied old target file').'</p>');
         } else {          } else {
     print $logfile "Unable to write ".$copyfile.':'.$!."\n";      print $logfile "Unable to write ".$copyfile.':'.$!."\n";
             return "<font color=\"red\">Failed to copy old target, $!, FAIL</font>";              return "<font color=\"red\">".&mt('Failed to copy old target').
    ", $!, ".&mt('FAIL')."</font>";
         }          }
                   
 # --------------------------------------------------------------- Copy Metadata  # --------------------------------------------------------------- Copy Metadata
Line 1379  sub phasetwo { Line 1407  sub phasetwo {
                   
         if (copy($target.'.meta',$copyfile)) {          if (copy($target.'.meta',$copyfile)) {
     print $logfile "Copied old target metadata to ".$copyfile."\n";      print $logfile "Copied old target metadata to ".$copyfile."\n";
             $r->print('<p>Copied old metadata</p>')              $r->print('<p>'.&mt('Copied old metadata').'</p>')
         } else {          } else {
     print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n";      print $logfile "Unable to write metadata ".$copyfile.':'.$!."\n";
             if (-e $target.'.meta') {              if (-e $target.'.meta') {
                 return                   return 
                     "<font color=\"red\">Failed to write old metadata copy, $!, FAIL</font>";                      "<font color=\"red\">".
   &mt('Failed to write old metadata copy').", $!, ".&mt('FAIL')."</font>";
     }      }
         }          }
                   
Line 1405  sub phasetwo { Line 1434  sub phasetwo {
         $path.="/$parts[$count]";          $path.="/$parts[$count]";
         if ((-e $path)!=1) {          if ((-e $path)!=1) {
             print $logfile "\nCreating directory ".$path;              print $logfile "\nCreating directory ".$path;
             $r->print('<p>Created directory '.$parts[$count].'</p>');              $r->print('<p>'.&mt('Created directory').' '.$parts[$count].'</p>');
             mkdir($path,0777);              mkdir($path,0777);
         }          }
     }      }
           
     if (copy($source,$copyfile)) {      if (copy($source,$copyfile)) {
         print $logfile "\nCopied original source to ".$copyfile."\n";          print $logfile "\nCopied original source to ".$copyfile."\n";
         $r->print('<p>Copied source file</p>');          $r->print('<p>'.&mt('Copied source file').'</p>');
     } else {      } else {
         print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";          print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
         return "<font color=\"red\">Failed to copy source, $!, FAIL</font>";          return "<font color=\"red\">".
       &mt('Failed to copy source').", $!, ".&mt('FAIL')."</font>";
     }      }
           
 # --------------------------------------------------------------- Copy Metadata  # --------------------------------------------------------------- Copy Metadata
Line 1424  sub phasetwo { Line 1454  sub phasetwo {
           
     if (copy($source.'.meta',$copyfile)) {      if (copy($source.'.meta',$copyfile)) {
         print $logfile "\nCopied original metadata to ".$copyfile."\n";          print $logfile "\nCopied original metadata to ".$copyfile."\n";
         $r->print('<p>Copied metadata</p>');          $r->print('<p>'.&mt('Copied metadata').'</p>');
     } else {      } else {
         print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n";          print $logfile "\nUnable to write metadata ".$copyfile.':'.$!."\n";
         return           return 
             "<font color=\"red\">Failed to write metadata copy, $!, FAIL</font>";              "<font color=\"red\">".&mt('Failed to write metadata copy').", $!, ".&mt('FAIL')."</font>";
     }      }
     $r->rflush;      $r->rflush;
 # --------------------------------------------------- Send update notifications  # --------------------------------------------------- Send update notifications
   
     my @subscribed=&get_subscribed_hosts($target);      my @subscribed=&get_subscribed_hosts($target);
     foreach my $subhost (@subscribed) {      foreach my $subhost (@subscribed) {
  $r->print('<p>Notifying host '.$subhost.':');$r->rflush;   $r->print('<p>'.&mt('Notifying host').' '.$subhost.':');$r->rflush;
  print $logfile "\nNotifying host ".$subhost.':';   print $logfile "\nNotifying host ".$subhost.':';
  my $reply=&Apache::lonnet::critical('update:'.$target,$subhost);   my $reply=&Apache::lonnet::critical('update:'.$target,$subhost);
  $r->print($reply.'</p><br />');$r->rflush;   $r->print($reply.'</p><br />');$r->rflush;
Line 1446  sub phasetwo { Line 1476  sub phasetwo {
   
     my @subscribedmeta=&get_subscribed_hosts("$target.meta");      my @subscribedmeta=&get_subscribed_hosts("$target.meta");
     foreach my $subhost (@subscribedmeta) {      foreach my $subhost (@subscribedmeta) {
  $r->print('<p>Notifying host for metadata only '.$subhost.':');$r->rflush;   $r->print('<p>'.
   &mt('Notifying host for metadata only').' '.$subhost.':');$r->rflush;
  print $logfile "\nNotifying host for metadata only ".$subhost.':';   print $logfile "\nNotifying host for metadata only ".$subhost.':';
  my $reply=&Apache::lonnet::critical('update:'.$target.'.meta',   my $reply=&Apache::lonnet::critical('update:'.$target.'.meta',
     $subhost);      $subhost);
Line 1458  sub phasetwo { Line 1489  sub phasetwo {
     my %courses=&coursedependencies($target);      my %courses=&coursedependencies($target);
     my $now=time;      my $now=time;
     foreach (keys %courses) {      foreach (keys %courses) {
  $r->print('<p>Notifying course '.$_.':');$r->rflush;   $r->print('<p>'.&mt('Notifying course').' '.$_.':');$r->rflush;
  print $logfile "\nNotifying host ".$_.':';   print $logfile "\nNotifying host ".$_.':';
         my ($cdom,$cname)=split(/\_/,$_);          my ($cdom,$cname)=split(/\_/,$_);
  my $reply=&Apache::lonnet::cput   my $reply=&Apache::lonnet::cput
Line 1491  sub phasetwo { Line 1522  sub phasetwo {
   
 sub batchpublish {  sub batchpublish {
     my ($r,$srcfile,$targetfile)=@_;      my ($r,$srcfile,$targetfile)=@_;
       #publication pollutes %ENV with form.* values
       my %oldENV=%ENV;
     $srcfile=~s/\/+/\//g;      $srcfile=~s/\/+/\//g;
     $targetfile=~s/\/+/\//g;      $targetfile=~s/\/+/\//g;
     my $thisdisfn=$srcfile;      my $thisdisfn=$srcfile;
Line 1526  sub batchpublish { Line 1559  sub batchpublish {
  &phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);   &phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);
  $r->print('</p>');   $r->print('</p>');
     }      }
       %ENV=%oldENV;
     return '';      return '';
 }  }
   
Line 1628  sub handler { Line 1662  sub handler {
   my $r=shift;    my $r=shift;
   
   if ($r->header_only) {    if ($r->header_only) {
      $r->content_type('text/html');       &Apache::loncommon::content_type($r,'text/html');
      $r->send_http_header;       $r->send_http_header;
      return OK;       return OK;
   }    }
Line 1721  unless ($ENV{'form.phase'} eq 'two') { Line 1755  unless ($ENV{'form.phase'} eq 'two') {
   
 # ---------------------------------------------------------- Start page output.  # ---------------------------------------------------------- Start page output.
   
   $r->content_type('text/html');    &Apache::loncommon::content_type($r,'text/html');
   $r->send_http_header;    $r->send_http_header;
   
   $r->print('<html><head><title>LON-CAPA Publishing</title></head>');    $r->print('<html><head><title>LON-CAPA Publishing</title></head>');
Line 1744  unless ($ENV{'form.phase'} eq 'two') { Line 1778  unless ($ENV{'form.phase'} eq 'two') {
   if ($fn=~/\/$/) {    if ($fn=~/\/$/) {
 # -------------------------------------------------------- This is a directory  # -------------------------------------------------------- This is a directory
       &publishdirectory($r,$fn,$thisdisfn);        &publishdirectory($r,$fn,$thisdisfn);
       $r->print('<hr><font size="+2">Done</font><br><a href="/priv/'        $r->print('<hr><font size="+2">'.&mt('Done').'</font><br><a href="/priv/'
  .$cuname.'/'.$thisdisfn   .$cuname.'/'.$thisdisfn
  .'">Return to Directory</a>');   .'">'.&mt('Return to Directory').'</a>');
   
   
   } else {    } else {
Line 1754  unless ($ENV{'form.phase'} eq 'two') { Line 1788  unless ($ENV{'form.phase'} eq 'two') {
       $thisfn=~/\.(\w+)$/;        $thisfn=~/\.(\w+)$/;
       my $thistype=$1;        my $thistype=$1;
       my $thisembstyle=&Apache::loncommon::fileembstyle($thistype);        my $thisembstyle=&Apache::loncommon::fileembstyle($thistype);
         $r->print('<h2>'.&mt('Publishing').' '.
    &Apache::loncommon::filedescription($thistype).' <tt>');
   
       $r->print('<h2>Publishing '.        $r->print(<<ENDCAPTION);
         &Apache::loncommon::filedescription($thistype).' <tt>'.  <a href='javascript:void(window.open("/~$cuname/$thisdisfn","cat","height=300,width=500,scrollbars=1,resizable=1,menubar=0,location=1"))'>
         '<a href="/~'.$cuname.'/'.$thisdisfn.'" target="cat">'.$thisdisfn.  $thisdisfn</a>
         '</a></tt></h2><b>Target:</b> <tt>'.$thisdistarget.'</tt><br />');  ENDCAPTION
         $r->print(
           '</tt></h2><b>'.&mt('Target').':</b> <tt>'.$thisdistarget.'</tt><br />');
         
       if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) {        if (($cuname ne $ENV{'user.name'}) || ($cudom ne $ENV{'user.domain'})) {
           $r->print('<h3><font color="red">Co-Author: '.$cuname.' at '.$cudom.            $r->print('<h3><font color="red">'.&mt('Co-Author').': '.$cuname.&mt(' at ').$cudom.
     '</font></h3>');      '</font></h3>');
       }        }
   
       if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') {        if (&Apache::loncommon::fileembstyle($thistype) eq 'ssi') {
           $r->print('<br /><a href="/adm/diff?filename=/~'.$cuname.'/'.            $r->print(<<ENDDIFF);
                     $thisdisfn.  <br />
    '&versiontwo=priv" target="cat">Diffs with Current Version</a><br />');  <a href='javascript:void(window.open("/adm/diff?filename=/~$cuname/$thisdisfn&versiontwo=priv","cat","height=300,width=500,scrollbars=1,resizable=1,menubar=0,location=1"))'>
   ENDDIFF
             $r->print(&mt('Diffs with Current Version').'</a><br />');
       }        }
       
 # ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.  # ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.

Removed from v.1.128  
changed lines
  Added in v.1.136


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