...........
duck;Иванов Иван Иванович;0_ФУ_Ейский
muck;Петров Петр Петрович;0_ФУ_Ейский
nud;Никифорова Юлия Дмитриевна;0_ФУ_Ейский
............
и формирует ростер (контакт лист) для каждого пользователя из файла дополняя или корректируя данные о всех пользователях из этого же файла.
Код: Выделить всё
# val, 15.06.2009
# формирует ростер юзеров jabberа на основе txt файла
system 'cp1251';
use strict;
#use diagnostics;
use DBI();
my $serv = "\@62.183.67.155";
my $dbh = DBI->connect("DBI:mysql:database=ejabberd;host=192.168.22.251","root", "password", {'RaiseError' => 1});
$dbh->do("SET NAMES 'cp1251'");
#проверка наличия jid в ростере юзера username -------------------------------------------------------------------------------
sub check_user_in_roster {
my $username = shift;
my $jid = shift;
my $query = sprintf("select * from rosterusers where username = \"%s\" and jid = \"%s$serv\"",$username,$jid);
#print $query . "\n";
my $sth = $dbh->prepare($query);
$sth->execute();
my $numRows = $sth->rows;
while (my $ref = $sth->fetchrow_hashref()) {
print "Found a row: username = $ref->{'username'}, jid = $ref->{'jid'}, nick = $ref->{'nick'}\n";
}
$sth->finish();
return $numRows;
};
#проверка наличия jid в группах юзера username -------------------------------------------------------------------------------
sub check_user_in_group {
my $username = shift;
my $jid = shift;
my $group = shift;
my $query = sprintf("select * from rostergroups where username = \"%s\" and jid = \"%s$serv\"",$username,$jid);
print $query . "\n";
my $sth = $dbh->prepare($query);
$sth->execute();
my $numRows = $sth->rows;
while (my $ref = $sth->fetchrow_hashref()) {
print "Found a row: username = $ref->{'username'}, jid = $ref->{'jid'}, group = $ref->{'grp'}\n";
}
$sth->finish();
return $numRows;
};
#обновление nick или вставка jid в ростер юзера username -------------------------------------------------------------------------------
sub insert_user_in_roster {
my $query;
my $username = shift;
my $jid = shift;
my $nick = shift;
if (check_user_in_roster($username,$jid)) { $query = sprintf("update rosterusers set nick = \"%s\" where username = \"%s\" and jid = \"%s$serv\"",$nick,$username,$jid) }
else { $query = sprintf("insert into rosterusers values (\"%s\",\"%s$serv\",\"%s\",\"B\",\"N\",\"\",\"N\",\"\",\"item\")",$username,$jid,$nick) };
print $query . "\n";
$dbh->do($query) || die "Error on INSERT!";
return 0;
};
#обновление group или вставка jid в группы юзера username -------------------------------------------------------------------------------
sub insert_user_in_group {
my $query;
my $username = shift;
my $jid = shift;
my $group = shift;
if (check_user_in_group($username,$jid,$group)) { $query = sprintf("update rostergroups set grp = \"%s\" where username = \"%s\" and jid = \"%s$serv\"",$group,$username,$jid) }
else { $query = sprintf("insert into rostergroups values (\"%s\",\"%s$serv\",\"%s\")",$username,$jid,$group) };
print $query . "\n";
$dbh->do($query) || die "Error on INSERT!";
return 0;
};
my $fname_in = shift @ARGV; # первый аргумент - имя файла для обработки
$fname_in = "roster.txt";
#print $fname_in . "\n";
#-------------------------------------------------------------------------------
open FF,$fname_in;
my @roster = <FF>;
chomp @roster;
my @roster_1 = @roster;
foreach my $name (@roster) {
foreach (@roster_1) {
print scalar((split(/;/,$_))[2]) . "\n";
#-------------------------------------------------------------------------------
insert_user_in_roster(scalar((split(/;/,$name))[0]),scalar((split(/;/,$_))[0]),scalar((split(/;/,$_))[1]));
insert_user_in_group(scalar((split(/;/,$name))[0]),scalar((split(/;/,$_))[0]),scalar((split(/;/,$_))[2]));
#-------------------------------------------------------------------------------
}
};
#-------------------------------------------------------------------------------
$dbh->disconnect();
close(FF);