Migration vom EasyBook zum Phoca Guestbook für Joomla!

2010-03-11 23:55 (Kommentare: 54)

Icon Terminal

Schon seit Längerem scheint die Entwicklung der EasyJoomla-Projekte eher still zu stehen. Letzte Woche sorgte dann eine schon seit Monaten bekannte Sicherheitslücke im EasyBook für Aufruhr in der Community. In einem Gespräch mit Achim auf der CeBIT konnte ich mir dann einen Einblick in die Siutation im Easy-Joomla-Team verschaffen. Somit kam es für mich nicht überraschend, dass die Weiterentwicklung des EasyBooks heute mit einer kurzen Statusmeldung offiziell (vorübergehend?) eingestellt wurde. Ich finde das sehr schade, da auch einige Problemlösungen und Codefragmente von mir mit in das Projekt eingeflossen sind (ich habe damals extra darum gebeten nicht genannt zu werden). Leider sind auch bei mir keine Kapazitäten da um mal schnell das Projekt weiterzuführen, oder eine eigene Lösung zu schreiben. Also habe ich mich damit beschäftigt eine Konvertierung meiner EasyBook Installation zum Phoca Guestbook direkt per MySQL hinzubekommen und dabei eine Migrationsanleitung vom EasyBook zum Phoca Guestbook geschrieben.

Es gibt dazu auch im Forum von Joomla-Downloads.de eine Lösung, doch finde ich meine etwas eleganter.

Schritt 0: Backup und Update

Schritt 0.1: Backup

Ich gehe davon aus, dass meine geneigten Leser in der Lage sind mit Joomla! und phpMyAdmin umzugehen und vernünftig genug sind vor dem Herumspielen an der Datenbank Backups anzulegen oder noch besser das Ganze auf einer lokalen Kopie oder einem Spiegel durchführen und die einzelne Tabellen anschließend überspielen!

Schritt 0.2: Update Easybook 1.0 auf 2.0

Dieser Schritt ist noch ungetestet und nur dann durchzuführen, wenn man eine alte Easybook 1.0 Installation unter Joomla! 1.0 betreibt!

Ersatzdatumsfeld hinzufügen:
ALTER TABLE `jos_easybook`
ADD `gbdate2` datetime NOT NULL default '000-00-00 00:00:00' AFTER `gbdate`;
Timestamps in Datum konvertieren:
UPDATE `jos_easybook`
SET `gbdate2` = FROM_UNIXTIME(`gbdate`, '%Y-%m-%d %H:%i:%s');
Unnötige Felder löschen:
ALTER TABLE `jos_easybook` 
DROP `gbedit`,
DROP `gbeditdate`,
DROP `gbdate`;
Felder unbenennen:
ALTER TABLE `jos_easybook`
CHANGE `gbid` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
CHANGE `gbdate2` `gbdate` datetime NOT NULL default '000-00-00 00:00:00';

Schritt 1: Installation

Zuerst sollte das Phoca Guestbook in Joomla! installiert werden.

Schritt 2: Kopieren der Daten

Kopieren der Tabelle jos_easybook in phpMyAdmin

Zum Kopieren der Einträge vom EasyBook nutzen wir die Kopierfunktion von phpMyAdmin. Einfach die Tabelle jos_easybook auswählen, dann den Tab Operationen wählen und jos_phocaguestbook_items als Ziel der Kopie angeben.

Wichtig: es müssen Struktur und Daten kopiert werden. Außerdem sollten wir die Zieltabelle löschen lassen, bevor wir die neuen Daten rüberkopieren. Die entsprechenden Einstellungen sind in der Grafik rot markiert.

Hier noch einmal die erzeugten SQL-Befehle:

DROP TABLE IF EXISTS `jos_phocaguestbook_items`;

CREATE TABLE `jos_phocaguestbook_items` (
`id` int( 10 ) NOT NULL AUTO_INCREMENT ,
`gbip` varchar( 15 ) NOT NULL default '',
`gbname` varchar( 40 ) NOT NULL default '',
`gbmail` varchar( 60 ) default NULL ,
`gbmailshow` tinyint( 1 ) NOT NULL default '0',
`gbloca` varchar( 50 ) default NULL ,
`gbpage` varchar( 150 ) default NULL ,
`gbvote` int( 10 ) default NULL ,
`gbtext` text NOT NULL ,
`gbdate` datetime default NULL ,
`gbcomment` text,
`published` tinyint( 1 ) NOT NULL default '0',
`gbicq` varchar( 20 ) default NULL ,
`gbaim` varchar( 50 ) default NULL ,
`gbmsn` varchar( 50 ) default NULL ,
`gbyah` varchar( 50 ) default NULL ,
`gbskype` varchar( 50 ) default NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8;

INSERT INTO `jos_phocaguestbook_items` SELECT * FROM `jos_easybook`;

Schritt 3: Modifikation der Felder

Schritt 3.1: Modifikation

Das Phoca Guestbook hat andere Bezeichnungen und Eigenschaften für die Datenbankfelder. Die Änderungen sind in der folgenden SQL-Query zusammengefasst:

ALTER TABLE `jos_phocaguestbook_items`
CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
CHANGE `gbname` `username` VARCHAR( 100 ),
CHANGE `gbmail` `email` VARCHAR( 50 ) NOT NULL,
CHANGE `gbpage` `homesite` VARCHAR( 50 ) NOT NULL,
CHANGE `gbip` `ip` VARCHAR( 20 ) AFTER `homesite`,
CHANGE `gbtext` `content` text NOT NULL,
CHANGE `gbdate` `date` datetime NOT NULL default '000-00-00 00:00:00';

Hier könnte es Probleme mit dem Feld für die Homepage (gbpage bzw. homesite) geben. Das war im EasyBook 150 Zeichen lang und wird auf 50 Zeichen gekürzt. Da Joomla! afaik keinen Vergleich der Installationsdaten mit der Datenbank vornimmt, könnte man auf die Kürzung auch verzichten, aber andererseits… wer hat schon URLs mit mehr als 50 Zeichen?

Schritt 3.2: Hinzufügen von (X)HTML-Zeilenumbrüchen

Im Easybook wurden die Zeilenumbrüche '\n' direkt vor der Ausgabe in richtige (X)HTML-Zeilenumbrüche umgewandelt. Dies ist beim Phoca Guestbook nicht der Fall, da dort die Zeilenumbrüche direkt als (X)HTML-Code in der Datenbank gespeichert werden. Möchte man die '\n' also schon beim Konvertieren der Daten in „richtige” Zeilenumbrüche umwandeln, dann bietet sich folgende query an:

UPDATE `jos_phocaguestbook_items`
SET `content` = REPLACE(`content`,'\n','<br />\n');

Das Phoca Guestbook schreibt den Zeilenumbruch '\n' und den (X)HTML-Code in die Kommentare. Deshalb müssen eventuell neuere Kommentare vom Phoca Guestbook von dieser query ausgeschlossen werden. Dies geht über eine WHERE-Bedingunge in der query: WHERE `date`<'2010-03-30 23:00:00'.

Schritt 3.3: Zusammenführen der Adminkommentare mit den Kommentaren

In Schritt 4 werden die nicht mehr benötigten Felder gelöscht. Dazu gehören auch die Adminkommentare. Möchte man diese behalten, so kann man sie mit einer einfachen Query in die Originalkommentare einfügen:

UPDATE `jos_phocaguestbook_items`
SET `content` = CONCAT(`content`,'\n<div class="admincomment">',`gbcomment`,'</div>')
WHERE `gbcomment` != '';

Die Kommentare werden in einen div-Container mit der Klasse admincomment an das Kommentar des Users angehängt. Die Klasse kann natürlich auch unbenannt werden!

Schritt 4: Löschen von Feldern

Das EasyBook hatte einige Features, die vom Phoca Guestbook nicht unterstützt werden. Die entsprechend überflüssigen Felder werden mit der folgenden SQL-Query gelöscht:

ALTER TABLE `jos_phocaguestbook_items` 
DROP `gbmailshow`,
DROP `gbloca`,
DROP `gbvote`,
DROP `gbcomment`,
DROP `gbicq`,
DROP `gbaim`,
DROP `gbmsn`,
DROP `gbyah`,
DROP `gbskype`;

Also im Einzelnen wären das: die Angaben zu den Instant Messengern, die Adminkommentare zu den Einträgen, die Bewertungen, die Ortsangabe und die Angabe, ob der User möchte, dass seine Mailadresse öffentlicht angezeigt wird. Gerade wegen dem letzten Punkt sollte man daher vorsichtig sein und gegebenfalls darauf verzichten die Mailadressen zu den einzelnen Beiträgen plötzlich öffentlich anzuzeigen!

Schritt 5: Hinzufügen neuer Felder

Die folgende SQL-Query fügt die vom Phoca Guestbook zusätzlich benötigten Felder zur Tabelle hinzu:

ALTER TABLE `jos_phocaguestbook_items` 
ADD `catid` INT( 11 ) NOT NULL default '0' AFTER `id`,
ADD `sid` INT( 11 ) NOT NULL default '0' AFTER `catid`,
ADD `userid` INT( 11 ) NOT NULL default '0' AFTER `username`,
ADD `title` VARCHAR( 20 ) NOT NULL AFTER `ip`,
ADD `checked_out` INT( 11 ) NOT NULL default '0' AFTER `published`,
ADD `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00' AFTER `checked_out`,
ADD `ordering` INT( 11 ) NOT NULL default '0' AFTER `checked_out_time`,
ADD `params` text NOT NULL AFTER `ordering`;

Schritt 6: Nachbereitung

Das Phoca Guestbook unterstützt das Anlegen mehrere Gästebücher. Deshalb muss man den Einträgen noch die passende ID des Gästebuches zuordnen. Dafür habe ich im Joomla!-Backend ein Phoca Guestbook angelegt und die ID (hier die 1) als catid eingetragen. Außerdem wird die id der Einträge für die Sortierungsspalte übernommen.

UPDATE `jos_phocaguestbook_items`
SET `catid` = '1',
`ordering` = `id`;

Wer sich jetzt noch über den Powered by Eintrag ärgert, der bearbeitet die Datei ~/front/views/phocaguestbook/tmpl/default.php (Zipfile) oder ~/components/com_phocaguestbook/views/phocaguestbook/tmpl/default.php (Joomla!-Installation) und kopiert sie in den Ordner ~/templates/your_template/html/com_phocaguestbook/phocaguestbook/.

Der Powered by Teil steckt in der Templatevariable info:

//vorher
$form2 .= '</form></div>'.$this->tmpl['info'];
//nacher
$form2 .= '</form></div>';

Das Kopieren in den eigenen Templateordner ist nicht unbedingt notwendig, stellt aber eine saubere Möglichkeit dar die eigenen Änderungen bei einem Update nicht zu überschreiben.

PS: Selbstverständlich ist das Phoca Guestbook in den Credits der von mir verwalteten Joomla!-Installationen mit Logo und Backlink gelistet!

Zurück

Einen Kommentar schreiben

Kommentar von svdoldie | 2010-04-10

Ich hab Version 2.0rc4 und hab alle Schritte vorher durchgeführt.

Gruß svdoldie

Kommentar von b2m | 2010-04-10

Und du hast auch ganz sicher die jos_phocaguestbook_items vorher gelöscht? Es auch mal mit dem Kopieren per phpMyAdmin versucht und selbst mal nachgesehen, welches Feld zu viel sein könnte?

Kommentar von svdoldie | 2010-04-21

So jetzt hat es auch bei mir geklappt. Ich musste bei

ALTER TABLE `jos_easybook`
      DROP Column `gbedit`,
      DROP Column `gbeditime`,
      DROP Column `gbdate`;

'gbeditime' in 'gbeditdate' ändern, danach klappte alles. Nur das Datum ist nicht korrekt, alle Einträge haben das Datum Donnerstag, den 01. Januar 1970 um 03:33 Uhr
Hast du da auch noch ne Idee?

Gruß svdoldie

Kommentar von b2m | 2010-04-21

Vollkommen richtig! Da waren meine Finger schneller als mein Kopf (oder umgekehrt?). Habe das im Text korrigiert. Das mit dem Datum liegt daran, dass der Zeitstempel nicht in ein Datum umgewandelt wurde. Hast du die entsprechende Query (die mit FROM_UNIXTIME) korrekt ausgeführt? Wenn ja, dann muss ich das selbst nochmal durchspielen…

Kommentar von svdoldie | 2010-04-21

Jepp, da kam eine positive Meldung das 182 Einträge bearbeitet worden sind.

Kommentar von allon | 2010-07-17

DANKE!!!!!!!!!

Kommentar von Charly | 2010-07-21

Hallo,
eine derart reibungslose Anleitung zur Migration von einer altgedienten Komponente auf ihre Weiterentwicklung habe ich noch nirgends sonst gefunden!

Großen Respekt und vielen vielen Dank dafür!!!

lg charly

Kommentar von svennii | 2010-07-23

Vielen Dank! Bin erleichtert :-)

Kommentar von Dirk Petersen | 2010-08-10

Moin Benjamin,
so, nun nutze ich wieder das gute neue Easy Book Reloaded von Viktor Vogel.
Hast du eine Idee, wie man, wenn beides Installiert ist, die Einträge vom Phoca ins Easy bekommt. Das EasyBook ist leer, am wichtigsten ist mir eigentlich die email, der Name und der Text, sowie die Sortierung. Hast du da eine Idee oder einen Denkanstoß für mich?
Viele Grüße aus dem hohen Norden
deltapapa

Kommentar von b2m | 2010-08-11

Hi deltapapa,
ich habe mir das Easy Book Reloaded noch nicht angesehen, aber vermutlich ähnlich wie hier beschrieben durch eine Manipulation der DB-Einträge =)

Ich komme frühestens in einer Woche dazu, mir das mal genauer anzusehen.

Gruß b2m


Mein aktuelles Projekt: ein Gemeinschaftsblog auf www.aduoscriptum.de.