Ростер в джаббере

Обсуждение ПО используемого нами для решения тех или иных задач (Антивирусы, движки BD, файрволлы и т.п.)
Аватара пользователя
Val
зам. председателя совета директоров
зам. председателя совета директоров
Сообщения: 2029
Зарегистрирован: 09.06.2004 08:52
Откуда: Ейск
Контактная информация:

Ростер в джаббере

Сообщение Val » 15.06.2009 13:53

Скрипт берет текстовый файл формата "имя;ФИО;группа" :
...........
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);

Вернуться в «ПО для наших нужд»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей

cron