Package: libwww-mediawiki-client-perl
Version: 0.31-2+wuth3
Severity: normal
Tags: patch

Dear Maintainer,

Mediawiki allows a page to be deleted and subsequently recreated.  In
order to make changes to such pages, the server provides and requires
the client to keep track of the "start date" of the page.  mvs does
not do this, so cannot edit these pages.

The attached patch resolves this problem.

-- System Information:
Debian Release: 7.0
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 3.2.0-0.bpo.2-686-pae (SMP w/2 CPU cores)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages libwww-mediawiki-client-perl depends on:
ii  libexception-class-perl  1.32-1
ii  libvcs-lite-perl         0.09-1
ii  libwww-perl              6.04-1
ii  libxml-libxml-perl       2.0001+dfsg-1
ii  perl                     5.14.2-21

libwww-mediawiki-client-perl recommends no packages.

libwww-mediawiki-client-perl suggests no packages.

-- no debconf information
Index: libwww-mediawiki-client-perl-0.31/lib/WWW/Mediawiki/Client.pm
===================================================================
--- libwww-mediawiki-client-perl-0.31.orig/lib/WWW/Mediawiki/Client.pm	2012-09-09 03:35:48.000000000 -0600
+++ libwww-mediawiki-client-perl-0.31/lib/WWW/Mediawiki/Client.pm	2012-09-09 03:35:57.000000000 -0600
@@ -258,6 +258,7 @@
 use constant EDIT_SUBMIT_VALUE  => 'Save Page';
 use constant EDIT_PREVIEW_NAME  => 'wpPreview';
 use constant EDIT_PREVIEW_VALUE => 'Show preview';
+use constant EDIT_START_NAME    => 'wpStarttime';
 use constant EDIT_TIME_NAME     => 'wpEdittime';
 use constant EDIT_TOKEN_NAME    => 'wpEditToken';
 use constant EDIT_WATCH_NAME    => 'wpWatchthis';
@@ -1242,6 +1243,7 @@
         ) unless $res->is_success;
     my $doc = $res->decoded_content;
     my $text = $self->_get_wiki_text($doc);
+    $self->{edit}->{start} = $self->_get_start_date($doc);
     $self->{edit}->{date} = $self->_get_edit_date($doc);
     $self->{edit}->{token} = $self->_get_edit_token($doc);
     $self->{edit}->{watch_now} = $self->_get_edit_is_watching($doc);
@@ -1505,6 +1507,18 @@
     return $text;
 }
 
+sub _get_start_date {
+    my ($self, $doc) = @_;
+    my $p = HTML::TokeParser->new(\$doc);
+    my $date;
+    while (my $tag = $p->get_tag('input')) {
+        next unless exists $tag->[1]->{type} and $tag->[1]->{type} eq 'hidden';
+        next unless $tag->[1]->{name} eq EDIT_START_NAME;
+        $date = $tag->[1]->{value};
+    }
+    return $date;
+}
+
 sub _get_edit_date {
     my ($self, $doc) = @_;
     my $p = HTML::TokeParser->new(\$doc);
@@ -1723,6 +1737,7 @@
             $act_name           => $act_value,
             &TEXTAREA_NAME      => $text,
             &COMMENT_NAME       => $self->{commit_message},
+            &EDIT_START_NAME    => $self->{edit}->{start},
             &EDIT_TIME_NAME     => $self->{edit}->{date},
             &EDIT_TOKEN_NAME    => $self->{edit}->{token},
 	    @params,

Reply via email to