Samenvoegen 2 sites / 2 databases

Plaats reactie
ikrudolf
Berichten: 178
Lid geworden op: 30 okt 2008, 16:05
Locatie: Emmen
Contacteer:

Samenvoegen 2 sites / 2 databases

Bericht door ikrudolf » 11 aug 2016, 20:08

Ik wil graag 2 forums gaan samenvoegen als 1 hoofdforum en evt. nieuwe domein naam. Maar de huidige sites moet intact blijven en de huidige links naar de posts dat deze blijven werken (via htaccess/301?) Of is het makkelijker om de posts en users van forum 2 te importeren in forum 1? Hoe zou ik dit kunne doen? Enkele tips zijn welkom :-)

Gebruikersavatar
El torro
Berichten: 4177
Lid geworden op: 02 sep 2014, 21:28
Locatie: In het zonnige zuiden
Contacteer:

Re: Samenvoegen 2 sites / 2 databases

Bericht door El torro » 11 aug 2016, 23:13

Voor een leek is dat bijna onmogelijk.

Kun je er niet één als archief houden en de ander als actief forum instellen?

ikrudolf
Berichten: 178
Lid geworden op: 30 okt 2008, 16:05
Locatie: Emmen
Contacteer:

Re: Samenvoegen 2 sites / 2 databases

Bericht door ikrudolf » 12 aug 2016, 06:56

Ben niet echt een leek denk ik :-)
Wil graag wat tips of suggesties hoe jullie dit zouden aanpakken.

Gebruikersavatar
El torro
Berichten: 4177
Lid geworden op: 02 sep 2014, 21:28
Locatie: In het zonnige zuiden
Contacteer:

Re: Samenvoegen 2 sites / 2 databases

Bericht door El torro » 12 aug 2016, 08:01

Je moet veel tabellen in de database aanpassen zodat je geen dubbele users hebt en die importeren.
In het verleden zijn daar wel scripten voor gemaakt maar naar ik begrepen heb werken die nu niet meer.

Maar je kan hier eens lezen:
https://www.phpbb.com/community/viewtop ... &t=1917165
of/en
https://www.phpbb.com/community/viewtop ... #p13251640

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: Samenvoegen 2 sites / 2 databases

Bericht door Ger » 12 aug 2016, 08:50

Het is niet eenvoudig, laat dat duidelijk zijn. ;)
Sterker nog: het samenvoegen waarbij alles 100% intact blijft is eigenlijk schier-onmogelijk. Ieder topic, post, user, forum, etc. heeft een uniek ID binnen een phpBB installatie. Maar jouw user_id bij forum A, is het user_id van iemand anders bij forum B. En bij gelijksoortige forums krijg je ook ongetwijfeld dubbelingen bij users: persoon X die bij forum A geregistreerd is als JantjeA met user_id 40 en dezelfde persoon X die bij forum B geregistreerd is met gebruikersnaam JantjeB en user_id 50. Dat soort dingen.

Je moet je indenken dat alle zaken straks onder 1 database moeten gaan functioneren. En juist bij dit soort situaties loop je dan tegen conflicten aan.

Goede nieuws: er zijn wel mogelijkheden. Maar je moet dan wel concessies doen.
Allereerst is het handig dat beide forums zoveel mogelijk gelijk zijn onder de motorkap. Fortalezacorner draait op 3.0, Braziliëforum op 3.1. Stap 1 is dus zorgen dat ze op dezelfde forumversie draaien.

Daarna kijk je naar modificaties cq extensies die in de database ingrijpen. Geen idee of je die hebt, maar als er bijvoorbeeld informatie bij je users of topics wordt opgeslagen die niet standaard in phpBB zit, moet je zorgen dat daarvoor ruimte gereserveerd is (al zijn het maar NULL velden) in de database.
Dito met bijvoorbeeld aangepaste profielvelden: zorg dat dit in beide installaties gelijk is.
(overigens kun je dat laten zitten indien je die informatie niet belangrijk vind om te behouden)

Vervolgens ga je saneren; kijk eens of je alles wel wilt behouden. Lege accounts zonder berichten en die al >1 jaar niet zijn ingelogd; moeten die wel mee? Zijn alle topics belangrijk? Ga daar eens in spitten. Verwijder wat weg kan, nu is is kans om schoon schip te maken.

Bepaal dan wat je bronforum en doelforum gaat worden. Het meest voor de hand liggende is dat je kleinste forum (kleine database) het bronforum is. Van daaruit loop je door alle content heen en dat kopieer je naar het doelforum. Hoe kleiner het bronforum, hoe sneller je klaar bent.

Dan is het zaak om een goede procedure uit te schetsen die je gaat programmeren. Ik zou zeggen, een loop die het volgende doet:
  1. Haal van een topic de eerste post op met alle topic informatie. Voor de aanpak hoe dit te doen haal je het beste inspiratie uit ./posting.php en ./viewtopic.php. Bij mijn weten is er niet één simpele call voor en het gaat een beetje ver om dat hier helemaal uit te diepen.
  2. Maak een user aan indien de user van de topicstarter niet bestaat met user_add(). Maak iedere user aan als standaard gebruiker, het handjevol teamleden kun je daarna sneller handmatig omzetten dan dat je dit gaat programmeren.
    Indien de gebruikersnaam al bestaat, voor zie die van een prefix of suffix om het proces niet te verstoren.
    Indien het emailadres al bestaat, kun je aannemen dat het dezelfde persoon is. Gebruik dan de bestaande gebruiker.
    Schrijf in de brondatabase in phpbb_users een veld weg met de nieuwe user_id zodat je die bij een volgende post van die user kunt gebruiken
  3. Maak een topic aan met submit_post(). Je kunt hierbij een parameter $data['post_time'] meegeven ,die staat niet in de documentatie. Daarmee bewaar je de originele datum/tijd van het bericht.
  4. Haal nu alle posts op die bij dat topic horen en herhaal daarvoor de vorige stappen. Zorg ervoor dat je de topic_id van het aangemaakte topic in de vorige stap meegeeft.
    Voor deze 2 stappen kun je wellicht ook een veld met de nieuwe ids in de brondatabase wegschrijven
Waarschijnlijk loopt je server krakend en piepend vast, dus je kunt het beste batchwise verwerken, bijvoorbeeld 100 posts per keer. Het ligt een beetje aan je servercapaciteit wat een handig aantal is.
Hierna kun je het beste de zoekindex opnieuw genereren.

Wat je nu NIET hebt zijn gebruikers zonder berichten. Die users hebben in de brondatabase nog geen nieuw ID toegewezen gekregen, dus die kun je dan eenvoudig achterhalen. Converteer die indien gewenst. Sluit eventueel uit op basis van aantal berichten, laatste inlog, en of ze een search bot zijn. Ook mis je de persoonlijke berichten. Eerlijk gezegd zou ik die laten vervallen als ik jou was, indien je dit op tijd laat weten aan de gebruikers hebben zij de kans om die te exporteren naar CSV voor hun eigen archief.

Verder mis je nu natuurlijk de doorverwijzingen, maar daarvoor heb je in stap 2 en 5 id's weggeschreven. Die zou je kunnen gebruiken om nadat alles geconverteerd is op de bronsite (die dan verder leeg is) een script te maken die de oude id opzoekt en een redirect maakt naar de doelsite met het nieuwe ID.

Oh ja, wellicht ten overvloede: doe dit op een lokale omgeving (WAMP/MAMP) en niet op je live server. En backups, backups, backups!

Pfff.. lang geleden dat ik zo'n bericht heb getypt. :)

Ik ben vast niet 100% compleet en test het vooral 10x voordat je hiermee aan de slag gaat.

ikrudolf
Berichten: 178
Lid geworden op: 30 okt 2008, 16:05
Locatie: Emmen
Contacteer:

Re: Samenvoegen 2 sites / 2 databases

Bericht door ikrudolf » 24 okt 2016, 14:17

Bedankt voor jullie reacties!
Stiekum had ik gehoopt dat het iets eenvoudiger zou zijn, wellicht een migratie script oid.
Hoop dat deze scripts in de (nabije) toekomst gemaakt gaan worden :D

Plaats reactie