--
-- This script migrates jabberd14 xdb_sql postgresql data
-- to jabberd2 postgres storage
--

-- \i db-setup.pgsql

-- notatki:
-- wszystko pozostale skonwertowac konwerterem jajcusia
-- zmodyfikowac formularz modyfikacji danych usera
-- zmodyfikowac proces odzyskiwania hasla
ALTER TABLE recovery RENAME COLUMN mailaddress TO email;
ALTER TABLE recovery ADD COLUMN "collection-owner" text;
UPDATE recovery SET "collection-owner" = username || '@' || realm;
ALTER TABLE recovery ALTER COLUMN "collection-owner" SET not null;
ALTER TABLE recovery DROP COLUMN username;
ALTER TABLE recovery DROP COLUMN realm;

CREATE TABLE userdata (
 "collection-owner" text PRIMARY KEY,
 lastmodified timestamp not null default current_timestamp,
 name varchar(256),
 email varchar(512),
 wwwstatus boolean not null default false,
 profilesearch boolean not null default true );
INSERT INTO userdata ("collection-owner",lastmodified,name,email,wwwstatus,profilesearch) SELECT u.username || '@' || u.realm, COALESCE(lastmodified,now()), name, mailaddress, wwwstatus, profilesearch FROM useroptions AS u LEFT JOIN mailaddresses AS m ON (u.username = m.username AND u.realm = m.realm);
DROP TABLE mailaddresses;
DROP TABLE useroptions;

DROP VIEW managers_password;
CREATE VIEW managers_password AS SELECT managers.jid, authreg."password", managers.realm FROM managers, authreg WHERE managers.jid = (authreg.username || '@' || authreg.realm);

--
-- Drop unconvertable and unused tables first
--
DROP TABLE presence;
DROP TABLE roster; -- It's support is buggy in jabberd14 so I haven't used it.

--
-- Convert user data
--
ALTER TABLE authreg ADD COLUMN created timestamp DEFAULT current_timestamp;
INSERT INTO authreg (username,realm,password) SELECT username,realm,password FROM users;
DROP TABLE users;

--
-- Convert offline storage
--
ALTER TABLE queue ADD COLUMN storetime timestamp not null default current_timestamp;
INSERT INTO queue ("collection-owner",xml,storetime) SELECT username || '@' || realm, xml, storetime FROM messages WHERE xml != '';
DROP TABLE messages;

--
-- Convert vCard data
--
INSERT INTO vcard ("collection-owner",
"fn","nickname","url","tel","email","title","role",
"bday","tz",
"n-family","n-given","n-middle","n-prefix","n-suffix",
"adr-street","adr-extadd","adr-pobox","adr-locality","adr-region","adr-pcode","adr-country",
"geo-lat","geo-lon","org-orgname","org-orgunit","agent-extval","sort-string","desc","note",
"photo-type","photo-binval","photo-extval","logo-type","logo-binval","logo-extval",
"sound-phonetic","sound-binval","sound-extval","key-type","key-cred","rev"
) SELECT username || '@' || realm,
display_name,nickname,homepage,landline,email,job_title,org_role,
TRIM(TO_CHAR(birth_year,'0000'))||'-'||TRIM(TO_CHAR(birth_month,'00'))||'-'||TRIM(TO_CHAR(birth_dayofmonth,'00')),'',
family_name,given_name,middle_name,name_prefix,name_suffix,
street,building || ' / ' || room,postalbox,locality,region,postalcode,country,
lat,lon,org_name,org_unit,'','',description,'JEP-0054 vcard-temp',
photo_data_mime,photo_data,photo_url,'','','',
'','','','',pgpkey,timestamp FROM userprofile;

DROP TABLE userprofile;

--
-- Convert iq-last data
--
INSERT INTO logout ("collection-owner",time) SELECT username || '@' || realm, (substring(substring(xml from 'last=.[0-9]+') from '[0-9]+'))::integer FROM last;
DROP TABLE last;
