Notes de migration de Gallery 2 vers WordPress et NextGEN Gallery

Quelques notes rapides prises lors de la migration de mes albums Gallery 2 vers le plugin WordPress NextGEN Gallery

Attention : les manipulations de bases de données décrites ici sont dangereuses et il n’y a aucune garantie qu’elles fonctionnent pour vous!

La première différence est terminologique :

  • Gallery gère une “galerie” qui est la racine de votre collection de photos et est composée d’albums pouvant être imbriqués les uns dans les autres (les albums sont composés de photos et d’albums).
  • NextGEN Gallery gère des “galeries” photos qui sont des ensembles de photos ne pouvant pas être imbriquées les uns dans les autres mais peuvant être groupées dans des “albums” qui peuvent, eux, être imbriqués les uns dans les autres (les galeries sont uniquement composées de photos et les albums sont composés de galeries et d’albums).

Cette différence se retrouve au niveau de la structure des répertoires, puisque les albums de Gallery forment physiquement une structure arborescence sur le système de fichier alors que les galeries de NextGEN Gallery sont toutes aux même niveau et que ses albums ne sont pas matérialisés sur le système de fichier (ils sont virtuels et n’existent que dans la base de données).

Mes albums Gallery avaient tous, c’est une chance, des noms uniques. J’ai donc simplement “aplati” la structure de fichiers après transfert dans wp-content/gallery et utilisé l’interface d’administration de WordPress pour créer les galeries à partir des répertoires que je venais de transférer.

Le nombre d’albums étant limité, je n’ai pas cherché à migrer leur définition et les ai également recréé manuellement dans l’interface d’administration.

Je voulais par contre éviter de perdre les métadonnées associées aux photos et c’est à ce niveau qu’il m’a fallu faire preuve d’un peu de “geekerie”!

J’ai commencé par examiner la base de données Gallery 2 (qui dans mon cas était gérée par MySQL) pour exporter ces métadonnées en XML :

vdv@dedibox4:/var/lib/wordpress_vdv/wp-content/gallery$ mysql -uroot -pXXXX --default-character-set=utf8 -X gallery2_vdv > /tmp/images.xml <<EOF
select 
	e.g_id,
	i.g_description,
	i.g_keywords,
	i.g_summary,
	i.g_title,
	f.g_pathComponent,
	fp.g_pathComponent,
	iam.g_orderWeight
from 
	g2_Entity e,
	g2_Item i, 
	g2_FileSystemEntity f,
	g2_ChildEntity ce,
	g2_FileSystemEntity fp,
	g2_ItemAttributesMap iam
where 
	e.g_entityType = "GalleryPhotoItem"
	and e.g_id = i.g_id 
	and e.g_id = f.g_id
	and e.g_id = ce.g_id
	and e.g_id = iam.g_itemId
	and fp.g_id = ce.g_parentId
order by fp.g_pathComponent,  iam.g_orderWeight;
EOF

A noter :

  • L’option “-X” pour formatter les données en XML
  • L’option “–default-character-set=utf8” indispensable dans mon cas pour éviter que MySQL n’insère des caractères ISO-8859-1 dans un document XML sans déclaration d’encodage!

Le document XML obtenu est de la forme :

<?xml version="1.0"?>

<resultset statement="select 
    e.g_id,
    i.g_description,
    i.g_keywords,
    i.g_summary,
    i.g_title,
    f.g_pathComponent,
    fp.g_pathComponent,
    iam.g_orderWeight
    from 
    g2_Entity e,
    g2_Item i, 
    g2_FileSystemEntity f,
    g2_ChildEntity ce,
    g2_FileSystemEntity fp,
    g2_ItemAttributesMap iam
    where 
    e.g_entityType = &quot;GalleryPhotoItem&quot;
    and e.g_id = i.g_id 
    and e.g_id = f.g_id
    and e.g_id = ce.g_id
    and e.g_id = iam.g_itemId
    and fp.g_id = ce.g_parentId
    order by fp.g_pathComponent,  iam.g_orderWeight" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <row>
        <field name="g_id">22909</field>
        <field name="g_description" xsi:nil="true" />
        <field name="g_keywords" xsi:nil="true" />
        <field name="g_summary" xsi:nil="true" />
        <field name="g_title">dsc00001</field>
        <field name="g_pathComponent">aaa.jpg</field>
        <field name="g_pathComponent">011120-Forum-XML-2001</field>
        <field name="g_orderWeight">1000</field>
    </row>
    
    <row>
        <field name="g_id">22913</field>
        <field name="g_description" xsi:nil="true" />
        <field name="g_keywords" xsi:nil="true" />
        <field name="g_summary" xsi:nil="true" />
        <field name="g_title">dsc00002</field>
        <field name="g_pathComponent">aab.jpg</field>
        <field name="g_pathComponent">011120-Forum-XML-2001</field>
        <field name="g_orderWeight">2000</field>
    </row>
    
    ...
    
</resultset>

A partir de ce document XML, j’ai ensuite écrit une transformation XSLT 2.0 pour générer les instructions SQL insérant les données correspondantes dans la base de données WordPress / NextGEN Gallery.

Pour cela, il faut créer les tags en insérant des lignes dans les tables wp_terms et wp_term_taxonomy :

insert into wp_terms (name, slug) values ("albatros d'amsterdam", "albatros d'amsterdam");
insert into wp_term_taxonomy (term_id, taxonomy, parent, count) select term_id, 'ngg_tag', 0, 0 from wp_terms where name = "albatros d'amsterdam";                  

Associer les tags aux photos et incrémenter les compteurs adéquats :

insert into wp_term_relationships (object_id, term_taxonomy_id, term_order) 
    select pid, term_taxonomy_id, 1
        from 
            wp_ngg_gallery g,
            wp_ngg_pictures p,
            wp_terms t,
            wp_term_taxonomy taxo
        where
        	p.galleryid = g.gid
        	and t.term_id = taxo.term_id
        	and g.title = "amsterdam-vrac"
        	and p.filename = "crop0011.jpg"
        	and t.name="albatros d'amsterdam";
update wp_terms t, wp_term_taxonomy taxo set count = count + 1 where t.term_id = taxo.term_id and t.name="albatros d'amsterdam";               

Et enfin, mettre à jour les photos elles mêmes :

update
	wp_ngg_gallery g,
	wp_ngg_pictures p
set
	p.image_slug = "dsc00001",
	p.description = "dsc00001",
	p.alttext = "dsc00001",
	p.sortorder = 1
where
	p.galleryid = g.gid
	and g.title = "011120-Forum-XML-2001"
	and p.filename = "aaa.jpg";

A noter que je me suis appuyé, là aussi, sur le fait que mes galeries ont des noms uniques et que l’on peut donc identifier les photos à partir de leur nom de fichier et du nom de leur galerie.

La transformation utilise bien entendu le template nommé décrit dans mon billet précédent.

Vous pouvez la télécharger si vous voulez y jeter un coup d’œil.

Une fois la migration achevée, il faut encore veiller à gérer les redirections (cool uris don’t change…), ce que j’ai fait ç grand coups d’expressions régulières :

RedirectMatch	301	^/gallery/				http://eric.van-der-vlist.com/blog/gallery/?
RedirectMatch	301	^/gallery2/v(/[^/]*)*(/[^/]*/[^/]*\.(jpg|JPG|png))	http://eric.van-der-vlist.com/blog/wp-content/gallery$2?
RedirectMatch	301	^/gallery2/v/(.*)/(slideshow\.html)	http://eric.van-der-vlist.com/blog/gallery/$1/?
RedirectMatch	301	^/gallery2/v/(.*)			http://eric.van-der-vlist.com/blog/gallery/$1?
RedirectMatch	301	^/gallery2/				http://eric.van-der-vlist.com/blog/gallery/?
Share and Enjoy:
  • Identi.ca
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Add to favorites

Coup de neuf pour mon blog

Mon blog était hébergé sur un vieux serveur qui commence à donner des signes de faiblesses et son déménagement sur un serveur plus récent a été l’occasion de lui donner un petit coup de neuf…

Mises à jour de la version de WordPress et de ses plugins bien entendu, mais aussi changement de thème : le thème dkert3 que j’utilisais jusqu’à présent s’est subitement mis à générer une erreur PHP après l’upgrade et en activant Twenty ten (le nouveau thème par défaut de WordPress) pour examiner ce qui se passait j’ai trouvé qu’il convenait bien à ce blog.

Le plus gros changement est sans doute l’intégration de mon ancien album photo au blog.

Pour le moment, cette intégration est faite “à périmètre constant” et reproduit l’ancien album mais j’essayerai de trouver le temps de l’enrichir et de l’améliorer!

C’est album photo était auparavant géré par Gallery, un logiciel de gestion d’albums photos que j’utilisais depuis sa première version.

Pourquoi l’abandonner?

Le positionnement de Gallery devient un peu délicat : c’est un logiciel de gestion d’albums photos destiné à publier des photos sur le web et à les partager des photos avec ses amis ou sa famille sans être un logiciel de gestion de photos ou un DAM.

J’apprécie beaucoup le logiciel Gallery, mais il me semble qu’il est pris en tenaille entre les extensions permettant de gérer des albums photos directement dans les blogs et les DAMs qui permettent également de publier des photos sur internet.

Ma décision d’intégrer l’album photos a finalement été motivée par deux raisons :

  • le souhait de pouvoir intégrer plus facilement les photos de l’album au blog,
  • la charge de travail lié au maintient de deux logiciels différents pour le blog et pour l’album photo.

Avant de prendre cette décision, j’ai migré mon ancien album photo sous la dernière version de Gallery (Gallery 3) et ai testé les plugins heiv Gallery3 et  Gallery3 Picker qui permettent d’intégrer respectivement des albums et des photos de Gallery3 dans WordPress. Le résultat était satisfaisant mais il m’a semblé moins convainquant que le plugin de gestion de photos NextGen Gallery que j’utilise déjà sur le site du Retour à la Terre.

Outre ce plugin, j’ai également installé :

  • Broken Link Checker qui vérifie les liens inséré dans le blog. J’ai du travail à faire à ce niveau : le plugin a détecté 72 liens “cassés’!
  • OpenID qui me permet, ainsi qu’à mes visiteurs de m’identifier en utilisant un OpenID.
  • Une version modifiée de Comment Form Notes qui affiche un message pour inciter mes visiteurs à utiliser OpenID pour poster leurs commentaires (ils évitent ainsi la phase de “modération”).
  • pageMash, bien utile pour gérer l’arborescence des pages du blog.
  • Raven’s Antispam dont j’espère qu’il facilitera la tâche de gestion des commentaires sur le site. Dites moi s’il bloque intempestivement vos commentaires!
  • Redirection qui permet de garder des URLs cools (qui ne changent pas) et d’analyser les erreurs 404.
  • Relevanssi qui améliore les fonctions de recherche.
  • Shutter Reloaded qui gère l’affichage des photos de manière spectaculaire.
  • XRDS-Simple nécessaire au plugin OpenID.

Un grand merci aux développeurs de WordPress et de ces plugins!

L’écosystème WordPress continue de m’impressionner par sa richesse. C’est une des raisons pour lesquelles j’ai adopté WordPress mais cette richesse comporte aussi des risques : lorsque l’on dépend de 10 plugins et d’un thème pour gérer un site, les risques que quelque chose ne se passe pas bien quand on met à jour la version du moteur WordPress ne sont pas négligeables et on a tendance à croiser les doigts avant chaque mise à jour!

Share and Enjoy:
  • Identi.ca
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Add to favorites