wiki-archive/twiki/tools/upgrade_emails.pl

64 lines
1.7 KiB
Prolog
Executable File

#!perl
#
# This script will iterate over the list of users in the TWiki users
# topic, recovering the email for each user (which will get the email
# from the user topic if it isn't found in the secret DB) and then
# setting the email in the secret DB. This will *not* modify the
# user topics.
#
# A default admin e-mail address will be used for users without an
# e-mail address currently in their user topic.
#
use strict;
my $admin_email = 'webmaster@example.com';
$/ = "\n";
print "Enter admin e-mail address to use as default, enter to confirm.\n";
while (1) {
print "Admin e-mail address ['$admin_email']: ";
my $n = <>;
chomp $n;
last if( !$n );
$admin_email = $n;
};
BEGIN {
require 'setlib.cfg';
};
use TWiki;
my $twiki = new TWiki();
my ($meta, $text) =
$twiki->{store}->readTopic(
undef, $TWiki::cfg{UsersWebName}, $TWiki::cfg{UsersTopicName} );
foreach my $line ( split( /\r?\n/, $text )) {
if( $line =~ /^\s*\* ($TWiki::regex{webNameRegex}\.)?(\w+)\s*(?:-\s*(\S+)\s*)?-\s*\d+ \w+ \d+\s*$/o ) {
my $web = $1 || $TWiki::cfg{UsersWebName};
my $wn = $2; # WikiName
my $un = $3 || $wn; # userid
my $uo = $twiki->{users}->findUser( $un, $wn, 1 );
if( $uo ) {
my @em = $uo->emails();
if( scalar( @em )) {
print "Secreting ",$uo->stringify()," ",join(';',@em),"\n";
$uo->setEmails( @em );
} else {
print "No email address found for user $un:$wn, using $admin_email\n";
$uo->setEmails( "$admin_email" );
}
} else {
print STDERR "$un:$wn is not a real user\n";
}
}
}