use IO::File;
use File::Basename;
use MediaWiki::API;
+use HTML::Parser;
use JSON;
my $fh = IO::File->new("$config_fn") ||
die "Please configure the mediawiki user/passswd in '$config_fn'\n";
-my $api_url = "http://localhost/mediawiki/api.php";
+my $api_url = "https://pve.proxmox.com/mediawiki/api.php";
my $config = <$fh>;
chomp $config;
|| die $mw->{error}->{code} . ': ' . $mw->{error}->{details};
sub update_page {
- my ($pagename, $include, $category) = @_;
+ my ($pagename, $filename, $category) = @_;
print "update mediawiki page: $pagename\n";
my $ref = $mw->get_page( { title => $pagename } );
my $page = $ref->{'*'} || '';
- if ($page !~ m/^\{\{#pvedocs:.*\}\}\s*$/m) {
- $page = "{{#pvedocs:$include}}\n$page";
- } else {
- $page =~ s/^\{\{#pvedocs:.*\}\}\s*$/\{\{#pvedocs:$include\}\}\n/m;
- }
+ my $pve_content = "<!-- Do not edit - this is autogenerated content -->\n";
+
+ $pve_content .= "{{#pvedocs:$filename}}\n";
+ $pve_content .= "[[Category:$category]]\n" if $category;
+
+ my $starttag = '<!--PVE_IMPORT_START_MARKER-->';
+ my $endtag = '<!--PVE_IMPORT_END_MARKER-->';
- if ($category) {
- my $catstr = "Category:$category";
+ $pve_content .= "<pvehide>\n";
- if ($page !~ m/^\[\[$catstr\]\]\s*$/m) {
- $page .= "\n[[$catstr]]\n";
- }
+ my $parser_opts = {
+ api_version => 3,
+ text_h => [ sub { $pve_content .= shift }, "text" ],
+ };
+ my $parser = HTML::Parser->new(%$parser_opts);
+ $parser->ignore_elements(qw(script style));
+
+ my $fh = IO::File->new("/usr/share/pve-docs/$filename", "r") or
+ die "unable to open file '$filename' - $!\n";
+ while (defined(my $line = <$fh>)) {
+ $parser->parse($line);
+ }
+ $pve_content .= "</pvehide>\n";
+
+ $pve_content =~ s/\s+$//gm;
+
+ chomp $pve_content;
+
+ if ($page =~ m/^(.*)$starttag\n.*\n$endtag\n?(.*)$/s) {
+ my ($top_content, $bottom_content) = ($1, $2);
+ $page = $top_content;
+ $page .= "$starttag\n";
+ $page .= $pve_content;
+ $page .= "\n$endtag\n";
+ $page .= $bottom_content;
+ } elsif ($page =~ m/(.*)\{\{#pvedocs:.*?\}\}(.*)$/) {
+ # old style
+ my ($top_content, $bottom_content) = ($1, $2);
+ chomp $top_content;
+ chomp $bottom_content;
+ $page = $top_content;
+ $page .= "$starttag\n";
+ $page .= $pve_content;
+ $page .= "\n$endtag\n";
+ $page .= $bottom_content;
+ } else {
+ $page = "$starttag\n$pve_content\n$endtag\n$page";
}
my $timestamp = $ref->{timestamp};