Use CSV for GECOS field

This commit is contained in:
Pragmatic Software 2016-02-10 07:10:37 -08:00
parent c97ba1de20
commit 110c9cc548
2 changed files with 16 additions and 3 deletions

View File

@ -21,6 +21,7 @@ use PBot::LagChecker;
use Time::HiRes qw(gettimeofday tv_interval);
use Time::Duration;
use POSIX qw/strftime/;
use Text::CSV;
use Carp ();
sub new {
@ -728,6 +729,8 @@ sub check_bans {
my ($nick) = $mask =~ m/^([^!]+)/;
my %aliases = $self->{pbot}->{messagehistory}->{database}->get_also_known_as($nick);
my $csv = Text::CSV->new;
my ($do_not_validate, $bans);
foreach my $alias (keys %aliases) {
next if $alias =~ /^Guest\d+(?:!.*)?$/;
@ -748,7 +751,8 @@ sub check_bans {
foreach my $nickserv (@nickservs) {
my @gecoses;
if (exists $aliases{$alias}->{gecos}) {
@gecoses = split /,/, $aliases{$alias}->{gecos};
$csv->parse($aliases{$alias}->{gecos});
@gecoses = $csv->fields;
} else {
@gecoses = (undef);
}

View File

@ -11,6 +11,7 @@ use strict;
use DBI;
use Carp qw(shortmess);
use Time::HiRes qw(gettimeofday);
use Text::CSV;
sub new {
if(ref($_[1]) eq 'HASH') {
@ -1168,6 +1169,8 @@ sub get_also_known_as {
my $nickserv_sth = $self->{dbh}->prepare('SELECT nickserv FROM Nickserv WHERE id = ?');
my $gecos_sth = $self->{dbh}->prepare('SELECT gecos FROM Gecos WHERE id = ?');
my $csv = Text::CSV->new;
foreach my $id (keys %ids) {
$hostmask_sth->bind_param(1, $id);
$hostmask_sth->execute();
@ -1202,9 +1205,15 @@ sub get_also_known_as {
foreach my $aka (keys %akas) {
if ($akas{$aka}->{id} == $id) {
if (exists $akas{$aka}->{gecos}) {
$akas{$aka}->{gecos} .= ",$row->{gecos}";
$csv->parse($akas{$aka}->{gecos});
my @gecos = $csv->fields;
push @gecos, $row->{gecos};
$csv->combine(@gecos);
$akas{$aka}->{gecos} = $csv->string;
} else {
$akas{$aka}->{gecos} = $row->{gecos};
my @gecos = ($row->{gecos});
$csv->combine(@gecos);
$akas{$aka}->{gecos} = $csv->string;
}
}
}