Von der Next Generation Gallery zur Standardgallery

Wie in http://www.internetdienste-berlin.de/2010/11/die-next-generation-gallery-eine-falle/ angekündigt, veröffentliche ich jetzt das MYSQL-Programm zur Umwandlung der Next Generation Gallery in die Standardgalerie. Ich übernehme natürlich keine Verantwortung für die Fehlerfreiheit des Programms, insbesondere nicht für die Fehlerfreiheit unter mir nicht bekannten Bedingungen. Es muss außerdem angepasst werden. Dafür sind einige Kommentare gedacht. Wenn man die erläuternden Kommentare nicht immer voll versteht, dürfte das nicht so tragisch sein. Es kommt auf die Kommentare an, die eine Anpassung fordern. Das Programm ist für WP 3.01 getestet und sollte ab 3.0 laufen.

Wer dieses Programm nutzen möchte, um die Möglichkeit der Standardgalerie zur Verfügung zu haben, aber dennoch die nggallery weiter nutzen möchte, muss entsprechend die Aktionen, die den shortcode nggallery entfernt, löschen und auf das Einsetzen des shortcodes gallery verzichten.

Achtung: Bei dieser Umwandlung werden keine Metainformationen für die Bilder bzw. Bildattachments erzeugt, d. h. sie können in der Mediathek nicht mehr nachträglich bearbeitet werden.

Das Programm

/*Das Programm geht davon aus, dass es in phpMyAdmin (pma) ausgeführt wird. Wer sich mit der mysql-shell auskennt, hat sicher keine Problem bei der notwendigen Anpassung. Insbesondere muss man dort explizit sagen, welche Datenbank man bearbeitet, während bei pma ein Klick auf eine Tabelle oder der Datenbankname ausreicht*/

/*BESONDERS WICHTIG: SICHERN SIE IN PMA ÜBER operation PER COPY DIE TABELLE wp_posts UNTER DEM NAMEN wp_postsSave.

SO KANN MAN PROBLEMLOS MEHRERE TESTLÄUFE MACHEN UND EVTL. ANPASSUNGEN VORNEHMEN*/

DROP TABLE IF EXISTS wp_posts;

CREATE TABLE `wp_posts` SELECT * FROM `wp_postsSave`;

/*nicht nur aus Sicherheitsgründen wird die Arbeit aber in einer weiteren Kopie von wp_posts, nämlich wp_posts1 durchgeführt*/

DROP TABLE IF EXISTS wp_posts1;

CREATE TABLE `wp_posts1`

SELECT * FROM `wp_posts`;

/*Hier werden die attachments erzeugt, die Träger der Bildinformation (Pfad, Beschreibung,..) für die Standardgalerie sind*/

ALTER TABLE `wp_posts1` ADD `gid` bigint( 20) NOT NULL FIRST;/*Erweiterung um den Gallerienidentfikator von nggallery*/

UPDATE wp_posts1,wp_ngg_gallery SET wp_posts1.gid=SUBSTR(post_content,locate(‚id=‘,post_content)+3,locate(‚]‘,post_content)-(locate(‚id=‘,post_content)+3))

WHERE locate(CONCAT(‚id=‘,wp_ngg_gallery.gid),post_content)>0;/*für das Attribut gid wird nun der entsprechende Wert aus dem content selektiert, genauer wäre das Suchkriterium ‚[ nggallery id=‘, kann aber auch wegen möglicher Leerzeichen zu scharf sein. Es wäre eigentlich naheliegend hier den Suchwert wp_ngg_gallery.gid einzusetzen und nicht den mühselig extrahierten gesuchten Wert. Dies erzeugt aber einen Fehler, den ich bis heute nicht verstanden habe, deshalb dieser umständliche Weg. Jeder Artikel kennt nun explizit über gid seine Galerie*/

DROP TABLE IF EXISTS attachments;

/*nun werden so viel attachments erzeugt, wie bilder in der nggallery existieren*/

CREATE TABLE attachments (nid int NOT NULL AUTO_INCREMENT PRIMARY KEY) SELECT wp_ngg_pictures.pid,wp_posts1.*

FROM wp_posts1, wp_ngg_pictures WHERE

wp_ngg_pictures.galleryid=wp_posts1.gid;

UPDATE attachments,wp_ngg_gallery,wp_ngg_pictures,wp_options SET

post_parent=ID,/*durch die obige Selektion von wp_posts1 haben wir jetzt die Möglichkeit jedem Bild seinen zugehörigen Artikel

zuzuweisen*/

post_name=wp_ngg_gallery.name,

post_status=’inherit‘,

comment_status=’closed‘,

guid=CONCAT(wp_options.option_value,’/‘,wp_ngg_gallery.path,’/‘,wp_ngg_pictures.filename), /*wir verändern also nicht den Ort der Bilder, sondern legen den Pfad in den Attachments zum bisherigen Ort aus der nggallery*/

menu_order=wp_ngg_pictures.sortorder,

post_type=’attachment‘,

post_content=“,

post_mime_type=’image/jpeg‘

WHERE attachments.pid=wp_ngg_pictures.pid AND

attachments.gid=wp_ngg_gallery.gid AND

option_name=’siteurl‘;

UPDATE attachments set

nid=500000+nid, /*Diese Zahl musst du für deinen Fall anpassen, suche dein maximales ID in wp_posts und wähle eine Zahl die deutlich darüber liegt*/

id=nid;

UPDATE wp_posts1 SET post_content=REPLACE(post_content,

SUBSTR(post_content,locate(‚[ nggallery‘,post_content),locate(‚]‘,post_content)+1-locate(‚[ nggallery‘,post_content)),

“), /*Löschen der nggallery*/

post_content=CONCAT(‚[ gallery columns=1 size=“medium“]

‚,post_content) /*Korrekter wäre es die Standardgallery an die gleiche Stelle wie nggallery zu setzen, für meine Zwecke war das Setzen an den Anfang notwendig. Wer diese Anpassung nicht selbst vornehmen kann, dem Helfe ich gerne für ein kleines Entgeld, die Parameter der gallery oben sind natürlich beispielhaft und es kann natürlich jedes andere gallery-shortcode, das die standardgallery benutzt, genommen werden. Ich benutze [portfolio-slideshow]*/

WHERE locate(‚[ nggallery‘,post_content)>0;

/*Die jetzt nicht mehr notwendigen Spalten werden gelöscht*/

ALTER TABLE `attachments` DROP `nid` ,

DROP `pid` ,

DROP `gid` ;

ALTER TABLE `wp_posts1` DROP `gid`;

INSERT INTO wp_posts1 SELECT * FROM attachments;

DROP TABLE if EXISTS `wp_posts`;

/*Nun wird wieder die eigentlich wp_posts erzeugt, ein rename hätte auch gereicht, aber die Situation in meinem Fall

war etwas anders, so dass das create notwendig und so könnt ihr vielleicht auch besser an eure Verhältnisse anpassen*/

CREATE TABLE `wp_posts` SELECT * FROM wp_posts1;