Diff for /loncom/publisher/lonpublisher.pm between versions 1.98 and 1.111

version 1.98, 2002/10/03 15:02:22 version 1.111, 2003/02/18 23:13:54
Line 33 Line 33
 # 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer  # 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer
 # 03/23 Guy Albertelli  # 03/23 Guy Albertelli
 # 03/24,03/29,04/03 Gerd Kortemeyer  # 03/24,03/29,04/03 Gerd Kortemeyer
 # 04/16/2001 Scott Harrison  
 # 05/03,05/05,05/07 Gerd Kortemeyer  # 05/03,05/05,05/07 Gerd Kortemeyer
 # 05/28/2001 Scott Harrison  
 # 06/23,08/07,08/11,8/13,8/17,8/18,8/24,9/26,10/16 Gerd Kortemeyer  # 06/23,08/07,08/11,8/13,8/17,8/18,8/24,9/26,10/16 Gerd Kortemeyer
 # 12/04,12/05 Guy Albertelli  # 12/04,12/05 Guy Albertelli
 # 12/05 Gerd Kortemeyer  # 12/05 Gerd Kortemeyer
 # 12/05 Guy Albertelli  # 12/05 Guy Albertelli
 # 12/06,12/07 Gerd Kortemeyer  # 12/06,12/07 Gerd Kortemeyer
 # 12/15,12/16 Scott Harrison  
 # 12/25 Gerd Kortemeyer  # 12/25 Gerd Kortemeyer
 # YEAR=2002  # YEAR=2002
 # 1/16,1/17 Scott Harrison  
 # 1/17 Gerd Kortemeyer  # 1/17 Gerd Kortemeyer
 #  #
 ###  ###
Line 121  use File::Copy; Line 117  use File::Copy;
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use HTML::LCParser;  use HTML::LCParser;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::lonhomework;  
 use Apache::loncacc;  use Apache::loncacc;
 use DBI;  use DBI;
 use Apache::lonnet();  use Apache::lonnet();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonmysql;  use Apache::lonmysql;
   use vars qw(%metadatafields %metadatakeys);
   
 my %addid;  my %addid;
 my %nokey;  my %nokey;
   
 my %metadatafields;  
 my %metadatakeys;  
   
 my $docroot;  my $docroot;
   
 my $cuname;  my $cuname;
 my $cudom;  my $cudom;
   
 #########################################  
 #########################################  
   
 =pod  =pod
   
 =item B<metaeval>  =item B<metaeval>
Line 267  sub metaread { Line 257  sub metaread {
 #########################################  #########################################
 #########################################  #########################################
   
 =pod  sub coursedependencies {
       my $url=&Apache::lonnet::declutter(shift);
 =item B<sqltime>      $url=~s/\.meta$//;
       my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);
 Convert 'time' format into a datetime sql format      my $regexp=$url;
       $regexp=~s/(\W)/\\$1/g;
 Parameters:      $regexp='___'.$regexp.'___course';
       my %evaldata=&Apache::lonnet::dump('nohist_resevaldata',$adomain,
 =over 4         $aauthor,$regexp);
       my %courses=();
 =item I<$timef>      foreach (keys %evaldata) {
    if ($_=~/^([a-zA-Z0-9]+_[a-zA-Z0-9]+)___.+___course$/) {
 Seconds since 00:00:00 UTC, January 1, 1970.      $courses{$1}=1;
           }
 =back      }
       return %courses;
 Returns:  
   
 =over 4  
   
 =item Scalar string  
   
 MySQL-compatible datetime string.  
   
 =back  
   
 =cut  
   
 #########################################  
 #########################################  
 sub sqltime {  
     my $timef=shift @_;  
     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =  
  localtime($timef);  
     $mon++; $year+=1900;  
     return "$year-$mon-$mday $hour:$min:$sec";  
 }  }
   
   
 #########################################  #########################################
 #########################################  #########################################
   
   
 =pod  =pod
   
 =item Form-field-generating subroutines.  =item Form-field-generating subroutines.
Line 492  sub get_subscribed_hosts { Line 461  sub get_subscribed_hosts {
     } else {      } else {
  &Apache::lonnet::logthis("Unable to open $target.subscription");   &Apache::lonnet::logthis("Unable to open $target.subscription");
     }      }
     &Apache::lonnet::logthis("Got list of ".join(':',@subscribed));  
     return @subscribed;      return @subscribed;
 }  }
   
Line 515  sub get_max_ids_indices { Line 483  sub get_max_ids_indices {
     my $maxindex=10;      my $maxindex=10;
     my $maxid=10;      my $maxid=10;
     my $needsfixup=0;      my $needsfixup=0;
       my $duplicateids=0;
   
       my %allids;
       my %duplicatedids;
   
     my $parser=HTML::LCParser->new($content);      my $parser=HTML::LCParser->new($content);
     my $token;      my $token;
Line 525  sub get_max_ids_indices { Line 497  sub get_max_ids_indices {
  if ($counter eq 'id') {   if ($counter eq 'id') {
     if (defined($token->[2]->{'id'})) {      if (defined($token->[2]->{'id'})) {
  $maxid=($token->[2]->{'id'}>$maxid)?$token->[2]->{'id'}:$maxid;   $maxid=($token->[2]->{'id'}>$maxid)?$token->[2]->{'id'}:$maxid;
    if (exists($allids{$token->[2]->{'id'}})) {
       $duplicateids=1;
       $duplicatedids{$token->[2]->{'id'}}=1;
    } else {
       $allids{$token->[2]->{'id'}}=1;
    }
     } else {      } else {
  $needsfixup=1;   $needsfixup=1;
     }      }
Line 538  sub get_max_ids_indices { Line 516  sub get_max_ids_indices {
     }      }
  }   }
     }      }
     return ($needsfixup,$maxid,$maxindex);      return ($needsfixup,$maxid,$maxindex,$duplicateids,
       (keys(%duplicatedids)));
 }  }
   
 #########################################  #########################################
Line 570  sub get_all_text_unbalanced { Line 549  sub get_all_text_unbalanced {
  } elsif ($token->[0] eq 'E')  {   } elsif ($token->[0] eq 'E')  {
     $result.=$token->[2];      $result.=$token->[2];
  }   }
  if ($result =~ /(.*)$tag(.*)/) {   if ($result =~ /(.*)\Q$tag\E(.*)/s) {
     #&Apache::lonnet::logthis('Got a winner with leftovers ::'.$2);      #&Apache::lonnet::logthis('Got a winner with leftovers ::'.$2);
     #&Apache::lonnet::logthis('Result is :'.$1);      #&Apache::lonnet::logthis('Result is :'.$1);
     $result=$1;      $result=$1;
Line 607  sub fix_ids_and_indices { Line 586  sub fix_ids_and_indices {
  $content=join('',<$org>);   $content=join('',<$org>);
     }      }
   
     my ($needsfixup,$maxid,$maxindex)=&get_max_ids_indices(\$content);      my ($needsfixup,$maxid,$maxindex,$duplicateids,@duplicatedids)=
    &get_max_ids_indices(\$content);
   
       print $logfile ("Got $needsfixup,$maxid,$maxindex,$duplicateids--".
      join(', ',@duplicatedids));
       if ($duplicateids) {
    print $logfile "Duplicate ID(s) exist, ".join(', ',@duplicatedids)."\n";
    my $outstring='<font color="red">Unable to publish file, it contains duplicated ID(s), ID(s) need to be unique. The duplicated ID(s) are: '.join(', ',@duplicatedids).'</font>';
    return ($outstring,1);
       }
     if ($needsfixup) {      if ($needsfixup) {
  print $logfile "Needs ID and/or index fixup\n".   print $logfile "Needs ID and/or index fixup\n".
     "Max ID   : $maxid (min 10)\n".      "Max ID   : $maxid (min 10)\n".
Line 732  sub fix_ids_and_indices { Line 719  sub fix_ids_and_indices {
  print $logfile "Does not need ID and/or index fixup\n";   print $logfile "Does not need ID and/or index fixup\n";
     }      }
   
     return ($outstring,%allow);      return ($outstring,0,%allow);
 }  }
   
 #########################################  #########################################
Line 837  sub publish { Line 824  sub publish {
         }          }
 # ------------------------------------------------------------- IDs and indices  # ------------------------------------------------------------- IDs and indices
   
  my $outstring;   my ($outstring,$error);
  ($outstring,%allow)=&fix_ids_and_indices($logfile,$source,$target);   ($outstring,$error,%allow)=&fix_ids_and_indices($logfile,$source,
    $target);
    if ($error) { return $outstring; }
 # ------------------------------------------------------------ Construct Allows  # ------------------------------------------------------------ Construct Allows
           
  $scrout.='<h3>Dependencies</h3>';   $scrout.='<h3>Dependencies</h3>';
Line 959  sub publish { Line 948  sub publish {
         my $oldenv=$ENV{'request.uri'};          my $oldenv=$ENV{'request.uri'};
   
         $ENV{'request.uri'}=$target;          $ENV{'request.uri'}=$target;
    $Apache::lonxml::debug=1;
         $allmeta=Apache::lonxml::xmlparse(undef,'meta',$content);          $allmeta=Apache::lonxml::xmlparse(undef,'meta',$content);
    $Apache::lonxml::debug=0;
         $ENV{'request.uri'}=$oldenv;          $ENV{'request.uri'}=$oldenv;
   
         &metaeval($allmeta);          &metaeval($allmeta);
Line 1104  END Line 1095  END
         unless ($metadatafields{'creationdate'}) {          unless ($metadatafields{'creationdate'}) {
     $metadatafields{'creationdate'}=time;      $metadatafields{'creationdate'}=time;
         }          }
         $scrout.=&hiddenfield('creationdate',$metadatafields{'creationdate'});          $scrout.=&hiddenfield('creationdate',
                 &Apache::loncommon::unsqltime($metadatafields{'creationdate'}));
   
         $scrout.=&hiddenfield('lastrevisiondate',time);          $scrout.=&hiddenfield('lastrevisiondate',time);
   
Line 1196  Returns: Line 1188  Returns:
 =item Scalar string  =item Scalar string
   
 String contains status (errors and warnings) and information associated with  String contains status (errors and warnings) and information associated with
 the server's attempts at publication.  the server's attempts at publication.     
   
 =cut  =cut
   
   #'stupid emacs
 #########################################  #########################################
 #########################################  #########################################
 sub phasetwo {  sub phasetwo {
   
     my ($source,$target,$style,$distarget,$batch)=@_;      my ($r,$source,$target,$style,$distarget,$batch)=@_;
       $source=~s/\/+/\//g;
       $target=~s/\/+/\//g;
   
       if ($target=~/\_\_\_/) {
    $r->print(
    '<font color=red>Unsupported character combination "<tt>___</tt>" in filename, FAIL</font>');
           return 0;
       }
       $distarget=~s/\/+/\//g;
     my $logfile;      my $logfile;
     my $scrout='';  
     unless ($logfile=Apache::File->new('>>'.$source.'.log')) {      unless ($logfile=Apache::File->new('>>'.$source.'.log')) {
  return    $r->print(
          '<font color=red>No write permission to user directory, FAIL</font>';          '<font color=red>No write permission to user directory, FAIL</font>');
           return 0;
     }      }
     print $logfile       print $logfile 
 "\n================= Publish ".localtime()." Phase Two  ================\n";          "\n================= Publish ".localtime()." Phase Two  ================\n";
       
      %metadatafields=();      %metadatafields=();
      %metadatakeys=();      %metadatakeys=();
       
      &metaeval(&Apache::lonnet::unescape($ENV{'form.allmeta'}));      &metaeval(&Apache::lonnet::unescape($ENV{'form.allmeta'}));
       
      $metadatafields{'title'}=$ENV{'form.title'};      $metadatafields{'title'}=$ENV{'form.title'};
      $metadatafields{'author'}=$ENV{'form.author'};      $metadatafields{'author'}=$ENV{'form.author'};
      $metadatafields{'subject'}=$ENV{'form.subject'};      $metadatafields{'subject'}=$ENV{'form.subject'};
      $metadatafields{'notes'}=$ENV{'form.notes'};      $metadatafields{'notes'}=$ENV{'form.notes'};
      $metadatafields{'abstract'}=$ENV{'form.abstract'};      $metadatafields{'abstract'}=$ENV{'form.abstract'};
      $metadatafields{'mime'}=$ENV{'form.mime'};      $metadatafields{'mime'}=$ENV{'form.mime'};
      $metadatafields{'language'}=$ENV{'form.language'};      $metadatafields{'language'}=$ENV{'form.language'};
      $metadatafields{'creationdate'}=      $metadatafields{'creationdate'}=$ENV{'form.creationdate'};
          &sqltime($ENV{'form.creationdate'});      $metadatafields{'lastrevisiondate'}=$ENV{'form.lastrevisiondate'};
      $metadatafields{'lastrevisiondate'}=      $metadatafields{'owner'}=$ENV{'form.owner'};
          &sqltime($ENV{'form.lastrevisiondate'});      $metadatafields{'copyright'}=$ENV{'form.copyright'};
      $metadatafields{'owner'}=$ENV{'form.owner'};      $metadatafields{'dependencies'}=$ENV{'form.dependencies'};
      $metadatafields{'copyright'}=$ENV{'form.copyright'};      
      $metadatafields{'dependencies'}=$ENV{'form.dependencies'};      my $allkeywords=$ENV{'form.addkey'};
       if (exists($ENV{'form.keywords'})) {
      my $allkeywords=$ENV{'form.addkey'};          if (ref($ENV{'form.keywords'})) {
      if (exists($ENV{'form.keywords'})) {              $allkeywords .= ','.join(',',@{$ENV{'form.keywords'}});
          if (ref($ENV{'form.keywords'})) {          } else {
              $allkeywords .= ','.join(',',@{$ENV{'form.keywords'}});              $allkeywords .= ','.$ENV{'form.keywords'};
          } else {          }
              $allkeywords .= ','.$ENV{'form.keywords'};      }
          }      $allkeywords=~s/\W+/\,/;
      }      $allkeywords=~s/^\,//;
      $allkeywords=~s/\W+/\,/;      $metadatafields{'keywords'}=$allkeywords;
      $allkeywords=~s/^\,//;      
      $metadatafields{'keywords'}=$allkeywords;      {
            print $logfile "\nWrite metadata file for ".$source;
      {          my $mfh;
        print $logfile "\nWrite metadata file for ".$source;          unless ($mfh=Apache::File->new('>'.$source.'.meta')) {
        my $mfh;              return 
        unless ($mfh=Apache::File->new('>'.$source.'.meta')) {                  '<font color=red>Could not write metadata, FAIL</font>';
  return           }
          '<font color=red>Could not write metadata, FAIL</font>';          foreach (sort keys %metadatafields) {
        }              unless ($_=~/\./) {
        foreach (sort keys %metadatafields) {                  my $unikey=$_;
  unless ($_=~/\./) {                  $unikey=~/^([A-Za-z]+)/;
            my $unikey=$_;                  my $tag=$1;
            $unikey=~/^([A-Za-z]+)/;                  $tag=~tr/A-Z/a-z/;
            my $tag=$1;                  print $mfh "\n\<$tag";
            $tag=~tr/A-Z/a-z/;                  foreach (split(/\,/,$metadatakeys{$unikey})) {
            print $mfh "\n\<$tag";                      my $value=$metadatafields{$unikey.'.'.$_};
            foreach (split(/\,/,$metadatakeys{$unikey})) {                      $value=~s/\"/\'\'/g;
                my $value=$metadatafields{$unikey.'.'.$_};                      print $mfh ' '.$_.'="'.$value.'"';
                $value=~s/\"/\'\'/g;                  }
                print $mfh ' '.$_.'="'.$value.'"';                  print $mfh '>'.
            }                      &HTML::Entities::encode($metadatafields{$unikey})
    print $mfh '>'.                          .'</'.$tag.'>';
      &HTML::Entities::encode($metadatafields{$unikey})              }
        .'</'.$tag.'>';          }
          }          $r->print('<p>Wrote Metadata');
        }          print $logfile "\nWrote metadata";
        $scrout.='<p>Wrote Metadata';      }
        print $logfile "\nWrote metadata";      
      }  
   
 # -------------------------------- Synchronize entry with SQL metadata database  # -------------------------------- Synchronize entry with SQL metadata database
     my $warning;  
     $metadatafields{'url'} = $distarget;      $metadatafields{'url'} = $distarget;
     $metadatafields{'version'} = 'current';      $metadatafields{'version'} = 'current';
     unless ($metadatafields{'copyright'} eq 'priv') {      unless ($metadatafields{'copyright'} eq 'priv') {
         my ($error,$success) = &store_metadata(\%metadatafields);          my ($error,$success) = &store_metadata(\%metadatafields);
         if ($success) {          if ($success) {
             $scrout.='<p>Synchronized SQL metadata database';              $r->print('<p>Synchronized SQL metadata database');
             print $logfile "\nSynchronized SQL metadata database";              print $logfile "\nSynchronized SQL metadata database";
         } else {          } else {
             $warning.=$error;              $r->print($error);
             print $logfile "\n".$error;              print $logfile "\n".$error;
         }          }
     } else {      } else {
         $scrout.='<p>Private Publication - did not synchronize database';          $r->print('<p>Private Publication - did not synchronize database');
         print $logfile "\nPrivate: Did not synchronize data into ".          print $logfile "\nPrivate: Did not synchronize data into ".
             "SQL metadata database";              "SQL metadata database";
     }      }
 # ----------------------------------------------------------- Copy old versions  # ----------------------------------------------------------- Copy old versions
         
 if (-e $target) {      if (-e $target) {
     my $filename;          my $filename;
     my $maxversion=0;          my $maxversion=0;
     $target=~/(.*)\/([^\/]+)\.(\w+)$/;          $target=~/(.*)\/([^\/]+)\.(\w+)$/;
     my $srcf=$2;          my $srcf=$2;
     my $srct=$3;          my $srct=$3;
     my $srcd=$1;          my $srcd=$1;
     unless ($srcd=~/^\/home\/httpd\/html\/res/) {          unless ($srcd=~/^\/home\/httpd\/html\/res/) {
  print $logfile "\nPANIC: Target dir is ".$srcd;              print $logfile "\nPANIC: Target dir is ".$srcd;
         return "<font color=red>Invalid target directory, FAIL</font>";              return "<font color=red>Invalid target directory, FAIL</font>";
     }          }
     opendir(DIR,$srcd);          opendir(DIR,$srcd);
     while ($filename=readdir(DIR)) {          while ($filename=readdir(DIR)) {
       if (-l $srcd.'/'.$filename) {              if (-l $srcd.'/'.$filename) {
        unlink($srcd.'/'.$filename);                  unlink($srcd.'/'.$filename);
       } else {                  unlink($srcd.'/'.$filename.'.meta');
        if ($filename=~/$srcf\.(\d+)\.$srct$/) {              } else {
    $maxversion=($1>$maxversion)?$1:$maxversion;                  if ($filename=~/$srcf\.(\d+)\.$srct$/) {
        }                      $maxversion=($1>$maxversion)?$1:$maxversion;
       }                  }
     }              }
     closedir(DIR);          }
     $maxversion++;          closedir(DIR);
     $scrout.='<p>Creating old version '.$maxversion;          $maxversion++;
     print $logfile "\nCreating old version ".$maxversion;          $r->print('<p>Creating old version '.$maxversion);
           print $logfile "\nCreating old version ".$maxversion;
     my $copyfile=$srcd.'/'.$srcf.'.'.$maxversion.'.'.$srct;          
           my $copyfile=$srcd.'/'.$srcf.'.'.$maxversion.'.'.$srct;
           
         if (copy($target,$copyfile)) {          if (copy($target,$copyfile)) {
     print $logfile "Copied old target to ".$copyfile."\n";      print $logfile "Copied old target to ".$copyfile."\n";
             $scrout.='<p>Copied old target file';              $r->print('<p>Copied old target file');
         } 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>Failed to copy old target, $!, FAIL</font>";
         }          }
           
 # --------------------------------------------------------------- Copy Metadata  # --------------------------------------------------------------- Copy Metadata
   
  $copyfile=$copyfile.'.meta';   $copyfile=$copyfile.'.meta';
           
         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";
             $scrout.='<p>Copied old metadata';              $r->print('<p>Copied old metadata')
         } 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>Failed to write old metadata copy, $!, FAIL</font>";
     }      }
         }          }
           
           
 } else {      } else {
     $scrout.='<p>Initial version';          $r->print('<p>Initial version');
     print $logfile "\nInitial version";          print $logfile "\nInitial version";
 }      }
   
 # ---------------------------------------------------------------- Write Source  # ---------------------------------------------------------------- Write Source
  my $copyfile=$target;      my $copyfile=$target;
       
            my @parts=split(/\//,$copyfile);      my @parts=split(/\//,$copyfile);
            my $path="/$parts[1]/$parts[2]/$parts[3]/$parts[4]";      my $path="/$parts[1]/$parts[2]/$parts[3]/$parts[4]";
       
            my $count;      my $count;
            for ($count=5;$count<$#parts;$count++) {      for ($count=5;$count<$#parts;$count++) {
                $path.="/$parts[$count]";          $path.="/$parts[$count]";
                if ((-e $path)!=1) {          if ((-e $path)!=1) {
                    print $logfile "\nCreating directory ".$path;              print $logfile "\nCreating directory ".$path;
                    $scrout.='<p>Created directory '.$parts[$count];              $r->print('<p>Created directory '.$parts[$count]);
    mkdir($path,0777);              mkdir($path,0777);
                }  
            }  
   
         if (copy($source,$copyfile)) {  
     print $logfile "\nCopied original source to ".$copyfile."\n";  
             $scrout.='<p>Copied source file';  
         } else {  
     print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";  
             return "<font color=red>Failed to copy source, $!, FAIL</font>";  
         }          }
       }
       
       if (copy($source,$copyfile)) {
           print $logfile "\nCopied original source to ".$copyfile."\n";
           $r->print('<p>Copied source file');
       } else {
           print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
           return "<font color=red>Failed to copy source, $!, FAIL</font>";
       }
       
 # --------------------------------------------------------------- Copy Metadata  # --------------------------------------------------------------- Copy Metadata
   
         $copyfile=$copyfile.'.meta';      $copyfile=$copyfile.'.meta';
       
         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";
             $scrout.='<p>Copied metadata';          $r->print('<p>Copied metadata');
         } 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>Failed to write metadata copy, $!, FAIL</font>";
         }      }
       $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) {
  $scrout.='<p>Notifying host '.$subhost.':';   $r->print('<p>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);
  $scrout.=$reply;   $r->print($reply.'<br />');$r->rflush;
  print $logfile $reply;   print $logfile $reply;
     }      }
       
 # ---------------------------------------- Send update notifications, meta only  # ---------------------------------------- Send update notifications, meta only
   
     my @subscribedmeta=&get_subscribed_hosts("$target.meta");      my @subscribedmeta=&get_subscribed_hosts("$target.meta");
     foreach my $subhost (@subscribedmeta) {      foreach my $subhost (@subscribedmeta) {
  $scrout.='<p>Notifying host for metadata only '.$subhost.':';   $r->print('<p>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);
  $scrout.=$reply;   $r->print($reply.'<br />');$r->rflush;
    print $logfile $reply;
       }
       
   # --------------------------------------------------- Notify subscribed courses
       my %courses=&coursedependencies($target);
       my $now=time;
       foreach (keys %courses) {
    $r->print('<p>Notifying course '.$_.':');$r->rflush;
    print $logfile "\nNotifying host ".$_.':';
           my ($cdom,$cname)=split(/\_/,$_);
    my $reply=&Apache::lonnet::cput
                     ('versionupdate',{$target => $now},$cdom,$cname);
    $r->print($reply.'<br />');$r->rflush;
  print $logfile $reply;   print $logfile $reply;
     }      }
   
 # ------------------------------------------------ Provide link to new resource  # ------------------------------------------------ Provide link to new resource
   unless ($batch) {      unless ($batch) {
     my $thisdistarget=$target;          my $thisdistarget=$target;
     $thisdistarget=~s/^$docroot//;          $thisdistarget=~s/^$docroot//;
           
     my $thissrc=$source;          my $thissrc=$source;
     $thissrc=~s/^\/home\/(\w+)\/public_html/\/priv\/$1/;          $thissrc=~s/^\/home\/(\w+)\/public_html/\/priv\/$1/;
           
     my $thissrcdir=$thissrc;          my $thissrcdir=$thissrc;
     $thissrcdir=~s/\/[^\/]+$/\//;          $thissrcdir=~s/\/[^\/]+$/\//;
           
           
     return $warning.$scrout.          $r->print(
       '<hr><a href="'.$thisdistarget.'"><font size="+2">'.             '<hr><a href="'.$thisdistarget.'"><font size="+2">'.
       'View Published Version</font></a>'.             'View Published Version</font></a>'.
       '<p><a href="'.$thissrc.'"><font size=+2>Back to Source</font></a>'.             '<p><a href="'.$thissrc.'"><font size=+2>Back to Source</font></a>'.
       '<p><a href="'.$thissrcdir.             '<p><a href="'.$thissrcdir.
       '"><font size="+2">Back to Source Directory</font></a>';                     '"><font size="+2">Back to Source Directory</font></a>');
   } else {      }
     return $warning.$scrout;  
   }  
 }  }
   
 #########################################  #########################################
   
 sub batchpublish {  sub batchpublish {
     my ($r,$srcfile,$targetfile)=@_;      my ($r,$srcfile,$targetfile)=@_;
       $srcfile=~s/\/+/\//g;
       $targetfile=~s/\/+/\//g;
     my $thisdisfn=$srcfile;      my $thisdisfn=$srcfile;
     $thisdisfn=~s/\/home\/korte\/public_html\///;      $thisdisfn=~s/\/home\/korte\/public_html\///;
     $srcfile=~s/\/+/\//g;      $srcfile=~s/\/+/\//g;
Line 1465  sub batchpublish { Line 1478  sub batchpublish {
 # phase two takes  # phase two takes
 # my ($source,$target,$style,$distarget,batch)=@_;  # my ($source,$target,$style,$distarget,batch)=@_;
 # $ENV{'form.allmeta'},$ENV{'form.title'},$ENV{'form.author'},...  # $ENV{'form.allmeta'},$ENV{'form.title'},$ENV{'form.author'},...
     $r->print(      $r->print('<p>');
 '<p>'.&phasetwo($srcfile,$targetfile,$thisembstyle,$thisdistarget,1).'</p>');      &phasetwo($r,$srcfile,$targetfile,$thisembstyle,$thisdistarget,1);
       $r->print('</p>');
     return '';      return '';
 }  }
   
Line 1474  sub batchpublish { Line 1488  sub batchpublish {
   
 sub publishdirectory {  sub publishdirectory {
     my ($r,$fn,$thisdisfn)=@_;      my ($r,$fn,$thisdisfn)=@_;
       $fn=~s/\/+/\//g;
       $thisdisfn=~s/\/+/\//g;
     my $resdir=      my $resdir=
     $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$cudom.'/'.$cuname.      $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$cudom.'/'.$cuname.'/'.
       $thisdisfn;        $thisdisfn;
       $r->print('<h1>Directory <tt>'.$thisdisfn.'/</tt></h1>'.        $r->print('<h1>Directory <tt>'.$thisdisfn.'</tt></h1>'.
                 'Target: <tt>'.$resdir.'</tt><br />');                  'Target: <tt>'.$resdir.'</tt><br />');
   
       my $dirptr=16384; # Mask indicating a directory in stat.cmode.        my $dirptr=16384; # Mask indicating a directory in stat.cmode.
Line 1665  unless ($ENV{'form.phase'} eq 'two') { Line 1681  unless ($ENV{'form.phase'} eq 'two') {
   
   $r->print('<html><head><title>LON-CAPA Publishing</title></head>');    $r->print('<html><head><title>LON-CAPA Publishing</title></head>');
   $r->print(&Apache::loncommon::bodytag('Resource Publication'));    $r->print(&Apache::loncommon::bodytag('Resource Publication'));
   
   
   my $thisfn=$fn;    my $thisfn=$fn;
   
   my $thistarget=$thisfn;    my $thistarget=$thisfn;
Line 1701  unless ($ENV{'form.phase'} eq 'two') { Line 1719  unless ($ENV{'form.phase'} eq 'two') {
       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('<br /><a href="/adm/diff?filename=/~'.$cuname.'/'.
                     $thisdisfn.                      $thisdisfn.
    '&versionone=priv" target="cat">Diffs with Current Version</a><p>');     '&versiontwo=priv" target="cat">Diffs with Current Version</a><p>');
       }        }
       
 # ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.  # ------------------ Publishing from $thisfn to $thistarget with $thisembstyle.
Line 1710  unless ($ENV{'form.phase'} eq 'two') { Line 1728  unless ($ENV{'form.phase'} eq 'two') {
          $r->print(           $r->print(
           '<hr />'.&publish($thisfn,$thistarget,$thisembstyle));            '<hr />'.&publish($thisfn,$thistarget,$thisembstyle));
        } else {         } else {
          $r->print(             $r->print('<hr />');
           '<hr />'.&phasetwo($thisfn,$thistarget,             &phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget); 
      $thisembstyle,$thisdistarget));   
        }           }  
   
   }    }

Removed from v.1.98  
changed lines
  Added in v.1.111


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