5 my $db = "Pg"; # Pg : PostgresSQL, mysql: MySQL...
8 my $dbname = "jabberd2";
12 ##########################
19 "NICKNAME" => "nickname",
21 "TEL/NUMBER" => "tel",
22 "EMAIL/USERID" => "email",
27 "N/FAMILY" => "n-family",
28 "N/GIVEN" => "n-given",
29 "N/MIDDLE" => "n-middle",
30 "N/PREFIX" => "n-prefix",
31 "N/SUFFIX" => "n-suffix",
32 "ADR/STREET" => "adr-street",
33 "ADR/POBOX" => "adr-pobox",
34 "ADR/EXTADD" => "adr-extadd",
35 "ADR/LOCALITY" => "adr-locality",
36 "ADR/REGION" => "adr-region",
37 "ADR/PCODE" => "adr-pcode",
38 "ADR/CTRY" => "adr-country",
39 "ORG/ORGNAME" => "org-orgname",
40 "ORG/ORGUNIT" => "org-orgunit",
43 "GEO/LAT" => "geo-lat",
44 "GEO/LON" => "geo-lon",
45 "AGENT/EXTVAL" => "agent-extval",
48 "SORT-STRING" => "sort-string",
50 "KEY/TYPE" => "key-type",
51 "KEY/CRED" => "key-cred",
53 "PHOTO/TYPE" => "photo-type",
54 "PHOTO/BINVAL" => "photo-binval",
55 "PHOTO/EXTVAL" => "photo-extval",
57 "LOGO/TYPE" => "logo-type",
58 "LOGO/BINVAL" => "logo-binval",
59 "LOGO/EXTVAL" => "logo-extval",
61 "SOUND/PHONETIC" => "sound-phonetic",
62 "SOUND/BINVAL" => "sound-binval",
63 "SOUND/EXTVAL" => "sound-extval"
66 my $option_populate = 0;
67 my $option_add_user = 0;
69 my ($ldap, $dbh, $vcard2ldap);
73 if ($ARGV[0] eq "-p" || $ARGV[0] eq "--populate") {
75 } elsif ($ARGV[0] =~ /^[\w\-_\.]+@.+/){
80 } elsif ($#ARGV > 0) {
84 $vcard2ldap = Vcard2Ldap
::vcard_get_map
();
85 $ldap = Vcard2Ldap
::ldap_open
();
89 add_user
($ARGV[0]) if $option_add_user;
90 populate_all_rosters
() if $option_populate;
97 print "usage: jabber2db [-p|--populate] [user\@$Vcard2Ldap::jabberd]\n";
104 db_delete_vcards
() if $option_populate;
106 foreach (Vcard2Ldap
::ldap_get_users
($ldap)) {
107 $query .= db_set_vcard
($_);
110 execute_query
($query);
115 my $user = Vcard2Ldap
::jabber_user
($jid);
120 foreach (Vcard2Ldap
::jabber_get_users
()) {
121 if ($user->{"jid"} ne $_->{"jid"} &&
122 $user->{"rostergroup"} eq $_->{"rostergroup"}) {
123 $query .= db_insert_user_to_roster
($user->{"jid"}, $_->{"jid"});
124 $query .= db_insert_user_to_roster
($_->{"jid"}, $user->{"jid"});
128 execute_query
($query);
131 sub populate_all_rosters
{
134 db_delete_rosters
();
136 foreach my $us1 (Vcard2Ldap
::jabber_get_users
()) {
137 foreach my $us2 (Vcard2Ldap
::jabber_get_users
()) {
138 if ($us1->{"jid"} ne $us2->{"jid"} &&
139 $us1->{"rostergroup"} eq $us2->{"rostergroup"}) {
140 $query .= db_insert_user_to_roster
($us1->{"jid"}, $us2->{"jid"}) . ";";
145 execute_query
($query);
149 my $dbh = DBI
->connect (
150 "DBI:$db:database=$dbname;host=localhost",
153 ) or die "jabberd2db: cannot connect to DB!";
162 print $query if ($DUMP_QUERY);
164 return $dbh->do ($query) || die "jabber2db: cannot execute query! ($!)";
167 sub db_delete_vcards
{
168 execute_query
("DELETE FROM \"vcard\";");
171 sub db_delete_rosters
{
172 execute_query
("DELETE FROM \"roster-items\";\n" .
173 "DELETE FROM \"roster-groups\";");
176 sub db_insert_vcard
{
183 $query = "INSERT INTO vcard (\"collection-owner\"";
185 while (my ($key, $value) = each (%$vcard2db)) {
186 if ($vcard2ldap->{$key} && $pers->get_value ($vcard2ldap->{$key})) {
187 $squery .= ", \"". $value . "\"";
188 $ssquery .= $dbh->quote ($pers->get_value ($vcard2ldap->{$key})) .
195 $query .= $squery . ") VALUES ('" .
196 Vcard2Ldap
::jabber_jid
($pers) . "', " .
202 sub db_update_vcard
{
209 $query = "UPDATE vcard SET ";
211 while (my ($key, $value) = each (%$vcard2db)) {
212 if ($vcard2ldap->{$key} && $pers->get_value ($vcard2ldap->{$key})) {
213 $query .= "\"". $value . "\" = " .
214 $dbh->quote ($pers->get_value ($vcard2ldap->{$key})) . ",";
220 $query .= " WHERE \"collection-owner\" = " .
221 $dbh->quote (Vcard2Ldap
::jabber_jid
($pers)) . ";\n";
226 sub db_vcard_exists
{
231 $query = "SELECT COUNT(*) FROM vcard WHERE \"collection-owner\" = " .
232 $dbh->quote (Vcard2Ldap
::jabber_jid
($pers));
234 return execute_query
($query) > 0;
243 if (!Vcard2Ldap
::jabber_jid
($pers) ||
244 !Vcard2Ldap
::jabber_group
($pers));
246 $is_update = db_vcard_exists
($pers) if (!$option_populate);
249 db_update_vcard
($pers);
251 db_insert_vcard
($pers);
255 sub db_insert_user_to_roster
{
260 $query = "INSERT INTO \"roster-items\" (\"collection-owner\", \"jid\", \"to\", \"from\", \"ask\") VALUES (" .
261 $dbh->quote ($ujid) . "," .
262 $dbh->quote ($rjid) . "," .
263 "TRUE, TRUE, 0 );\n";
265 $query .= "INSERT INTO \"roster-groups\" (\"collection-owner\", \"jid\", \"group\") VALUES (" .
266 $dbh->quote ($ujid) . "," .
267 $dbh->quote ($rjid) . "," .
268 $dbh->quote ($Vcard2Ldap::groupname
) . ");\n";