User:AnomieBOT/source/tasks/TemplateReplacer3.pm

parameter.

=end metadata

=cut

use utf8; use strict;

use AnomieBOT::Task; use vars qw/@ISA/; @ISA=qw/AnomieBOT::Task/;

sub new { my $class=shift; my $self=$class->SUPER::new; bless $self, $class; return $self; }

=pod

=for info Approved 2008-09-20, completed 2008-09-21 Bots/Requests for approval/AnomieBOT 5

=cut

sub approved { return -1; }

sub run { my ($self, $api)=@_; my $res;

$api->task('TemplateReplacer3'); $api->read_throttle(0); $api->edit_throttle(10);

# List of templates to replace in this task my @templates=('Female adult bio');

# Spend a max of 5 minutes on this task before restarting my $endtime=time+300;

# Get a list of templates redirecting to our targets my %templates=; foreach my $template (@templates){ $templates{"Template:$template"}=1; $res=$api->query([],           list          => 'backlinks',            bltitle       => "Template:$template",            blfilterredir => 'redirects',            bllimit       => 'max',        ); $templates{$_->{'title'}}=1 foreach (@{$res->{'query'}{'backlinks'}}); }

foreach my $template (@templates){ # Get the list of pages to check my %q=(           generator => 'embeddedin',            geititle  => "Template:$template",            geilimit  => 'max',            prop      => 'info',        ); do { $res=$api->query(%q); if($res->{'code'} ne 'success'){ $self->warn("Failed to retrieve transclusion list for $template: ".$res->{'error'}."\n"); return 60; }           if(exists($res->{'query-continue'})){ $q{'geicontinue'}=$res->{'query-continue'}{'embeddedin'}{'geicontinue'}; } else { delete $q{'geicontinue'}; }

# Process found pages foreach (values %{$res->{'query'}{'pages'}}){ my $title=$_->{'title'};

# Have we checked this page before? my $checked=$api->fetch($_->{'pageid'}); next if(defined($checked) && $$checked eq $_->{'lastrevid'});

$self->warn("Checking for $template in $title\n");

# WTF? if(exists($_->{'missing'})){ $self->warn("$title is missing? WTF?\n"); next; }

# Ok, check the page my $tok=$api->edittoken($title); if($tok->{'code'} eq 'shutoff'){ $self->warn("Task disabled: ".$tok->{'content'}."\n"); return 300; }               if($tok->{'code'} ne 'success'){ $self->warn("Failed to get edit token for $title: ".$tok->{'error'}."\n"); next; }               next if exists($tok->{'missing'});

# Get page text my $intxt=$tok->{'revisions'}[0]{'*'};

# Perform the replacement my $summary="Removing 'orientation' parameter from per request"; my $minor=1; my $outtxt=$self->process_templates($intxt, sub {                   my $name=$_[0];                    my @params=@{$_[1]};                    my $oname=$_[4];

return undef unless exists($templates{"Template:$name"});

# We have the template. Now, strip the obsolete param. my $l=@params; @params=grep(!/^\s*orientation\s*=/, @params); return undef if $l==@params;

# Ok, return the new template code now. return ""; });

# Need to edit? my $revid=$tok->{'lastrevid'}; if($outtxt ne $intxt){ $self->warn("$summary in $title\n"); my $r=$api->edit($tok, $outtxt, $summary, $minor, 1); if($r->{'code'} ne 'success'){ $self->warn("Write failed on $title: ".$r->{'error'}."\n"); next; }                   $revid=$r->{'edit'}{'newrevid'}; } else { $self->warn("Nothing to do in $title\n"); }

# Save checked revision $api->store($_->{'pageid'}, \$revid);

# If we've been at it long enough, let another task have a go. return 0 if time>=$endtime; }       } while(exists($q{'eicontinue'})); }

# No more pages to check, try again in 10 minutes or so in case of errors. return 600; }

1;