--- a/mod_default_vcard/mod_default_vcard.lua Mon Mar 25 00:43:30 2013 +0100
+++ b/mod_default_vcard/mod_default_vcard.lua Mon Mar 25 00:44:54 2013 +0100
@@ -9,17 +9,27 @@
--module:log("debug", "Has account details: %s", data and "yes" or "no");
--module:log("debug", "Has vCard: %s", vcard and "yes" or "no");
if data and not vcard then
- -- MAYBE
- -- first .. " " .. last
- -- first, last = name:match("^(%w+) (%w+)$")
+ local name, first, last = data.name, data.first, data.last;
+ if not name and (first and last) then
+ name = first .. " " .. last;
+ elseif name and not (first and last) then
+ first, last = name:match("^(%w+)%s+(%w+)$")
+ end
local vcard = st.stanza("vCard", { xmlns = "vcard-temp" })
- :tag("VERSION"):text("3.0"):up()
- :tag("N")
- :tag("FAMILY"):text(data.last or ""):up()
- :tag("GIVEN"):text(data.first or ""):up()
+ :tag("VERSION"):text("3.0"):up();
+ if first or last then
+ vcard:tag("N")
+ :tag("FAMILY"):text(last or ""):up()
+ :tag("GIVEN"):text(first or ""):up()
:up()
- :tag("FN"):text(data.name or ""):up()
- :tag("NICKNAME"):text(data.nick or username):up();
+ end
+ if name then
+ vcard:tag("FN"):text(name or ""):up()
+ end
+ vcard:tag("NICKNAME"):text(data.nick or username):up();
+ if data.email then
+ vcard:tag("EMAIL"):tag("USERID"):text(data.email):up():up();
+ end
local ok, err = datamanager.store(username, host, "vcard", st.preserialize(vcard));
if not ok then
module:log("error", "Couldn't save vCard data, %s", err);