Sufriendo la migración de elgg 0.9 a la 1.5

Después de mirar los dos plugins que hay, empecé con uno que es el oddbdo, que al final no me llevó a nada: conseguía exportar en formato xml pero el importar era un cautiverio.

Así que ya cansado y viendo que mi compañero Diego, (http://community.elgg.org/mod/profile/icondirect.php?lastcache=1223404035&username=dramirez&size=small) al cual le mando un saludo desde acá, hiciera otro plugin. Me sentí desanimado y me tiré al agua de cabeza para hacerlo por mi mismo.

Estuve documentando parte de la migración y la verdad que no me está pareciendo tan dificil de lo que pensaba....por si alguien le viniera bien os lo paso y por favor acepto mejoras y lo que querais. Aun no he migrado todo pero poco a poco voy haciendolo.

Lo tenía en un wiki de redmine....y la red social que estoy migrando es redes.epesca.org (la primera que hice ahora ya hará unos 3 añitos...empezó desde la version 0.4!).

 

Espero que os valga....Saludos C.

Diseño 0.9

Detalle tablas elgg 0.9

Diseño 1.5

Detalle tablas elgg 1.5

Migrando!

Paso1: migrar usuarios

Proceso1

insert into redes1_5.elggusers_entity (guid,username, name, email, password, code, salt, language)
select ident, username, name, email, password, code, null, 'es' from redes.elggusers where (user_type='person');

Incorporar en elggentities

Para habilitar al usuario. El 1 está reservado para el site, así que debe empezar desde el 2.
De momento paso la propiedad gid de la tabla a no autonumérica. le asigno al admin un valor 500 por ejemplo para que los otros den su incorporación.

insert into redes1_5.elggentities (guid,type, subtype, owner_guid, site_guid, container_guid, access_id, time_created, time_updated, enabled)
select guid, 2, 0, 0, 1, 0, 2, 1242664181, 1242664181 , 1 from elggusers_entity where (guid<>1)

Paso3: Incorporar en elggmetadata

insert into redes1_5.elggmetadata (entity_guid, name_id, value_id, value_type, owner_guid, access_id, time_created, enabled
select guid, 10, 11, 2, 0, 2, 1242680208, 1 from elggusers_entity;

Paso2: migrar comunidades

En la tabla 0.9 tenemos las comunidades embebidas en la tabla elggusers con el valor del campo user_type='community';

En la tabla 1.5 tenemos las comunidades en la tabla elgggroups_entities están separadas: guid, name, description

Correspondencia

elgg 0.9 elgg 1.5 ident guid name name description name

elgggroups_entities

insert into redes1_5.elgggroups_entity (guid, name, description)
select ident, name, name from redes.elggusers where (user_type='community');

Con esto ya tendriamos las comunidades creadas.....ufff!

elggentities

Al igual que con los usuarios hay que repetir el proceso con esta tabla que alberga la información también de las comunidades.

tabla: .elggentities guid type subtype owner_guid site_guid container_guid access_id time_created time_updated enabled tabla: .elgggroups_entities guid 3 0 12 1 12 2 1242685527 1242685527 1

insert into redes1_5.elggentities (guid, type, subtype, owner_guid, site_guid, container_guid, access_id, time_created, time_updated, enabled)
select guid, 3, 0, 12,1, 12, 2, 1242685527, 1242685527, 1 from elgggroups_entity;

Paso3: migrar relaciones

tabla 0.9: elggfriends ident owner friend status tabla 1.5: elggentity_relantionships guid_one relationships guid_two

Acá es donde está algo mas jodido porque hay que hacer dos selects

  • Uno para indicar los 'friends' de usuarios.

insert into redes1_5.elggentity_relationships (guid_one, relationship, guid_two)
select f.owner, 'friend', f.friend from redes.elggfriends f where f.owner not in (select ident from redes.elggusers where user_type='community') or f.owner not in (select ident from redes.elggusers where user_type='community')

  • Otro para indicar los 'members' de comunidades.

insert into redes1_5.elggentity_relationships (guid_one, relationship, guid_two)
select f.owner, 'member', f.friend from redes.elggfriends f where f.owner not in (select ident from redes.elggusers where user_type='person') or f.owner not in (select ident from redes.elggusers where user_type='person')

Esta consulta la hice mal!, realmente no haria una migración de miembros la mejoro

insert into redes1_5.elggentity_relationships (guid_one, relationship, guid_two)
select f.owner, 'member', f.friend from redes.elggfriends f where f.friend not in (select ident from redes.elggusers where user_type='person')

Paso5: migrar ficheros

Esto se podrá ir haciendo poco a poco....pero hay que hacer las carpetas y después los ficheros....así que paso!....lo enlacen a la versión 'antigua'.

elggentitied tiene el valor de type= 'object' = 1.

insert into redes1_5.elggentity (guid, type, subtype, owner_guid, site_guid, container_guid, access_id, time_created, time_updated, enabled)
select ident, 1, owner, 12, 1, 12, 1, 1242687969, 1242687969, 1

  • Al final los ficheros, como eran no muchos lo haré a mano, y falta como bug corregir los propietarios de las comunidades....

     

    Saludetes.

  • Me agoté solo de leer los títulos! Ojalá nunca tenga q hacer una migración como ésta =)

  • He añadido una corrección al procedimiento...oju como se atraganta y sí es cansino esto de no tener una migración, pero para eso estamos en la comunidad. Entre todos seguro que hacemos algo.