/*
======================
REPLIES + CONTENT (OPTIMISĂ)
======================
*/
private function migrateReplies(){
global $wpdb;
// đč dernier topic WP traitĂ©
$last_topic_wp = (int) $this->getLast_Topic();
// ======================
// STEP 1 : batch topics WP
// ======================
$topic_rows = $wpdb->get_results($wpdb->prepare("
SELECT p.ID AS wp_topic_id, pm.meta_value AS xoops_topic_id
FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} pm
ON pm.post_id = p.ID
AND pm.meta_key = 'bbex_topic_id'
WHERE p.post_type = 'topic'
AND p.ID > %d
ORDER BY p.ID ASC
LIMIT 2000
", $last_topic_wp));
if(!$topic_rows){
$this->log('đ REPLIES DONE â plus aucun topic WP Ă traiter');
update_option('bbex_replies_done', 1, false);
return;
}
// ======================
// BUILD MAP
// ======================
$topic_map = [];
$xoops_topic_ids = [];
foreach($topic_rows as $t){
$topic_map[(int)$t->xoops_topic_id] = (int)$t->wp_topic_id;
$xoops_topic_ids[] = (int)$t->xoops_topic_id;
}
$ids_sql = implode(',', $xoops_topic_ids);
$this->log("đ REPLIES BATCH START");
$this->log("WP topics batch: " . count($topic_rows));
$this->log("XOOPS topics batch: " . count($xoops_topic_ids));
$this->log("XOOPS range: " . (min($xoops_topic_ids) ?? 0) . " â " . (max($xoops_topic_ids) ?? 0));
// ======================
// STEP 2 : GET POSTS
// ======================
$posts = $wpdb->get_results("
SELECT p.post_id, p.topic_id AS xoops_topic_id, p.uid, p.pid, p.post_time, pt.post_text
FROM {$this->getTable('posts')} p
JOIN {$this->getTable('posts_text')} pt ON pt.post_id = p.post_id
WHERE p.topic_id IN ($ids_sql)
ORDER BY p.post_id ASC
");
if(!$posts){
$max_wp_topic = max(array_column($topic_rows, 'wp_topic_id'));
$this->setLast_Topic($max_wp_topic);
$this->log("â ïž Aucun post trouvĂ©");
$this->log("âĄïž Skip batch â last_topic_wp=$max_wp_topic");
return;
}
// ======================
// STATS
// ======================
$inserted = 0;
$skipped = 0;
$updated = 0;
$total = count($posts);
$i = 0;
// ======================
// PROCESS
// ======================
foreach($posts as $p){
$i++;
// đč progression %
if($i % 200 === 0 || $i === $total){
$pct = round(($i / $total) * 100, 2);
$this->log("âł Progress replies: $i/$total ($pct%) | inserted=$inserted skipped=$skipped updated=$updated");
}
// user check
if(empty($this->user_map[$p->uid])){
$skipped++;
continue;
}
$wp_tid = $topic_map[(int)$p->xoops_topic_id] ?? 0;
if(!$wp_tid){
$skipped++;
continue;
}
// ======================
// MAIN TOPIC POST â CONTENT
// ======================
if($p->pid == 0){
$wpdb->query($wpdb->prepare("
UPDATE {$wpdb->posts}
SET post_content = IF(post_content = '', %s, post_content)
WHERE ID = %d
", $p->post_text, $wp_tid));
$updated++;
continue;
}
// ======================
// ANTI DOUBLON (IMPORTANT FIX)
// ======================
$exists = $wpdb->get_var($wpdb->prepare("
SELECT 1 FROM bbex_post_lookup
WHERE xoops_post_id = %d AND type = 'reply'
LIMIT 1
", $p->post_id));
if($exists){
$skipped++;
continue;
}
// ======================
// INSERT REPLY
// ======================
$wpdb->insert($wpdb->posts, [
'post_author' => $this->user_map[$p->uid],
'post_date' => date('Y-m-d H:i:s', $p->post_time),
'post_content' => $p->post_text,
'post_status' => 'publish',
'post_type' => 'reply',
'post_parent' => $wp_tid
]);
$rid = (int) $wpdb->insert_id;
if(!$rid){
$skipped++;
continue;
}
$inserted++;
// meta topic
$wpdb->insert($wpdb->postmeta,[
'post_id' => $rid,
'meta_key' => '_bbp_topic_id',
'meta_value' => $wp_tid
]);
// forum
$forum_id = $wpdb->get_var($wpdb->prepare("
SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d
", $wp_tid));
if($forum_id){
$wpdb->insert($wpdb->postmeta,[
'post_id' => $rid,
'meta_key' => '_bbp_forum_id',
'meta_value' => $forum_id
]);
}
// lookup
$wpdb->query($wpdb->prepare("
INSERT INTO bbex_post_lookup (xoops_post_id, wp_post_id, type)
VALUES (%d, %d, 'reply')
ON DUPLICATE KEY UPDATE wp_post_id = wp_post_id
", $p->post_id, $rid));
}
// ======================
// SAVE PROGRESSION
// ======================
$max_wp_topic = max(array_column($topic_rows, 'wp_topic_id'));
$this->setLast_Topic($max_wp_topic);
// ======================
// FINAL LOG
// ======================
$this->log("====================================");
$this->log("đ REPLIES BATCH FINISHED");
$this->log("đ total=$total | inserted=$inserted | updated=$updated | skipped=$skipped");
$this->log("âĄïž last_topic_wp=$max_wp_topic");
$this->log("====================================");
}
add_action('init', function(){
if(!isset($_GET['bbex_batch_sans_mirror'])) return;
if($_GET['bbex_batch_sans_mirror'] !== 'run') return;
if(!isset($_GET['key']) || $_GET['key'] !== 'oasis-cron'){
die('clé invalide');
}
$migration = new BBExBatchMigration();
$migration->setSource('live');
$migration->run();
echo "Batch LIVE exécuté";
exit;
});private function migrateReplies(){
global $wpdb;
// đč dernier topic WP traitĂ© pour les replies
$last_topic_wp = (int) $this->getLast_Topic();
// STEP 1 : batch topics WP
$topic_rows = $wpdb->get_results($wpdb->prepare("
SELECT p.ID AS wp_topic_id, pm.meta_value AS xoops_topic_id
FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} pm
ON pm.post_id = p.ID
AND pm.meta_key = 'bbex_topic_id'
WHERE p.post_type = 'topic'
AND p.ID > %d
ORDER BY p.ID ASC
LIMIT 2000
", $last_topic_wp));
if(!$topic_rows){
$this->log('đ REPLIES DONE â plus aucun topic WP Ă traiter');
update_option('bbex_replies_done', 1, false);
return;
}
// BUILD MAP
$topic_map = [];
$xoops_topic_ids = [];
foreach($topic_rows as $t){
$topic_map[(int)$t->xoops_topic_id] = (int)$t->wp_topic_id;
$xoops_topic_ids[] = (int)$t->xoops_topic_id;
}
$ids_sql = implode(',', $xoops_topic_ids);
$this->log("đ REPLIES BATCH START");
$this->log("WP topics batch: " . count($topic_rows));
$this->log("XOOPS topics batch: " . count($xoops_topic_ids));
$this->log("XOOPS range: " . (min($xoops_topic_ids) ?? 0) . " â " . (max($xoops_topic_ids) ?? 0));
// STEP 2 : GET POSTS (LIVE XOOPSEOL)
$posts = $wpdb->get_results("
SELECT p.post_id, p.topic_id AS xoops_topic_id, p.uid, p.pid, p.post_time, pt.post_text
FROM {$this->getTable('posts')} p
JOIN {$this->getTable('posts_text')} pt ON pt.post_id = p.post_id
WHERE p.topic_id IN ($ids_sql)
ORDER BY p.post_id ASC
");
if(!$posts){
$max_wp_topic = max(array_column($topic_rows, 'wp_topic_id'));
$this->setLast_Topic($max_wp_topic);
$this->log("â ïž Aucun post trouvĂ©");
$this->log("âĄïž Skip batch â last_topic_wp=$max_wp_topic");
return;
}
$inserted = 0;
$skipped = 0;
$updated = 0;
$total = count($posts);
$i = 0;
foreach($posts as $p){
$i++;
if($i % 200 === 0 || $i === $total){
$pct = round(($i / $total) * 100, 2);
$this->log("âł Progress replies: $i/$total ($pct%) | inserted=$inserted skipped=$skipped updated=$updated");
}
// user check
if(empty($this->user_map[$p->uid])){
$skipped++;
continue;
}
$wp_tid = $topic_map[(int)$p->xoops_topic_id] ?? 0;
if(!$wp_tid){
$skipped++;
continue;
}
// MAIN TOPIC POST â CONTENT
if($p->pid == 0){
$wpdb->query($wpdb->prepare("
UPDATE {$wpdb->posts}
SET post_content = IF(post_content = '', %s, post_content)
WHERE ID = %d
", $p->post_text, $wp_tid));
$updated++;
continue;
}
// ANTI DOUBLON
$exists = $wpdb->get_var($wpdb->prepare("
SELECT 1 FROM bbex_post_lookup
WHERE xoops_post_id = %d AND type = 'reply'
LIMIT 1
", $p->post_id));
if($exists){
$skipped++;
continue;
}
// INSERT REPLY
$wpdb->insert($wpdb->posts, [
'post_author' => $this->user_map[$p->uid],
'post_date' => date('Y-m-d H:i:s', $p->post_time),
'post_content' => $p->post_text,
'post_status' => 'publish',
'post_type' => 'reply',
'post_parent' => $wp_tid
]);
$rid = (int) $wpdb->insert_id;
if(!$rid){
$skipped++;
continue;
}
$inserted++;
// meta topic
$wpdb->insert($wpdb->postmeta,[
'post_id' => $rid,
'meta_key' => '_bbp_topic_id',
'meta_value' => $wp_tid
]);
// forum
$forum_id = $wpdb->get_var($wpdb->prepare("
SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d
", $wp_tid));
if($forum_id){
$wpdb->insert($wpdb->postmeta,[
'post_id' => $rid,
'meta_key' => '_bbp_forum_id',
'meta_value' => $forum_id
]);
}
// lookup
$wpdb->query($wpdb->prepare("
INSERT INTO bbex_post_lookup (xoops_post_id, wp_post_id, type)
VALUES (%d, %d, 'reply')
ON DUPLICATE KEY UPDATE wp_post_id = wp_post_id
", $p->post_id, $rid));
}
$max_wp_topic = max(array_column($topic_rows, 'wp_topic_id'));
$this->setLast_Topic($max_wp_topic);
$this->log("====================================");
$this->log("đ REPLIES BATCH FINISHED");
$this->log("đ total=$total | inserted=$inserted | updated=$updated | skipped=$skipped");
$this->log("âĄïž last_topic_wp=$max_wp_topic");
$this->log("====================================");
}
if(isset($_GET['source'])){
$migration->setSource($_GET['source']);
}
à Mamie Madeleine /baguette - Oasis des Artistes. Le plus beau site de poésie
Aller au contenu
Ce sujet contient 25 réponses, 20 participants et a Ă©tĂ© mis Ă jour pour la derniĂšre fois par Bonois , le 23-07-2025 18:13 .
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
Mamie Madeleine
Tu avais si grand coeur
Ame bienveillante
Dame charmante.
Tu aimais tant les fleurs
Les arbres vénérables
Pins parasols du midi.
Tu chantais, toujours ma mie.
Ta main effleurait le sable
Des plages de Juan.
Tu vivais passionnément
A l’autre bout de la terre
Avec ta fille et ton époux.
Tu as voyagé, un peu partout
Nagé dans toutes les mers.
A présent ta plume se repose
Elle n’Ă©crira plus de prose.
Ma douce Mamie Madeleine
Souffle mistral, vole mouette!
Bientot, fleuriront les violettes
Pour te dire : * Je t’Aime *
maryjo jo 21.Janvier 2O23..
*
j’Ă©tais en amitiĂ© avec elle, depuis ces longues annĂ©es
elle vient de nous quitter le 2O janvier 2O23..
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
dolores
Sujet: 5304 Réponses: 62885
Bel hommage chĂšre Maryjo
qu’elle repose en paix
Bon dimanche l’amie bises
Plume de platine â
â
â
â
â
â
jaspelia
Sujet: 2775 Réponses: 6799
Paix Ă son Ăąme
Pensées
Plume de diamant â
â
â
â
â
â
poetal
Sujet: 7608 Réponses: 17193
very sweet tribute
[email]domi.gondrand@laposte.net[/email]
Ancielo
Sujet: 2541 Réponses: 20308
Bonjour Cyrael
Un trĂšs bel et touchant hommage.
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci Ă tous
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Plume de platine â
â
â
â
â
â
Cristal
Sujet: 534 Réponses: 2389
Bonjour poétesse,
Un trĂšs bel hommage qui touche les cĆurs !
Bravo Ă vous !
Mes meilleurs vĆux Ă vous et vos proches !
Amitiés.
Cristal.
Un bel hommage pour une dame coeur
Paix à son ùme. Toutes mes Condoléances à sa famille et à ses proches. Merci pour elle Maryjo.
Amitié
luz
Les gens vivent comme s'ils n'allaient jamais mourir... Et meurent comme s'ils n'avaient jamais vécu. Le Dalai Lama . Nul ne peut atteindre l'aube sans passer par le chemin de la nuit? Khalil Gibran
Sybilla
Sujet: 17798 Réponses: 198089
Bonsoir ma chĂšre amie Maryjo,
Je me joins Ă ta douleur et ta tristesse.
Magnifique hommage Ă©mouvant pour notre chĂšre amie commune bien que je n’ai jamais eu le plaisir de la rencontrer.
Toutes mes condoléances les plus sincÚres à sa famille et ses proches.
Repose en paix chĂšre amie Madeleine.
Le r?ve est le poumon de ma vie (Citation de Sybilla)
Plume de diamant â
â
â
â
â
â
PENELOPE
Sujet: 981 Réponses: 9233
Les mamies s’en vont mais les souvenirs restent
On a tous le sang de la m?me couleur
Plume de diamant â
â
â
â
â
â
MICKAELLE
Sujet: 2353 Réponses: 32108
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci ….
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Plume d'or â
â
â
â
ââ
AMJO
Bel hommage en partage. Merci beaucoup.
La po?sie, c'est tout ce qu'il y a de plus beau..
Plume de diamant â
â
â
â
â
â
EvilFranck
Sujet: 903 Réponses: 126340
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci Ă tous
je vous remercie, pour vos condoléances
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
terry
Sujet: 2010 Réponses: 13996
bel hommage
pour cette grande dame
que vous avez eu l ‘ honneur de connaitre !
bisous
, et pai Ă son Ăąme !
terry
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci à tous pour vos condoléances pour cette grande Amie de la poésie
femme exceptionnelle !
j’ai gardĂ© sur mon rĂ©pondeur tĂ©lĂ©phonique
trois appels, que j’ai enregistrĂ©
elle m’avait offert son livre de PoĂšmes, que je peux lire chaque jour
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Il est des rencontres que l’on oublie pas !
Un trĂšs joli hommage !!
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci à tous pour vos condoléances pour cette grande Amie de la poésie
femme exceptionnelle !
—————————————————————————
voir dans partage oasien, mon message Ă l’annonce de sa disparition
https://www.oasisdesartistes.org/modules/newbbex/viewforum.php?forum=30
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Plume de diamant â
â
â
â
â
â
Ogr3
Sujet: 1425 Réponses: 13684
Un poĂšme que je dĂ©couvre et j’en suis Ă©patĂ©.
Ton écrit immortalise ton amie.
Reçois toute mon amitié Cyrael.
Qu’elle repose en paix.
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
merci Ă tous, on pense Ă elle
elle Ă©tait mon amie, j’ai eu la chance d’aller la voir
plusieurs fois, quel bonheur, je me souviens d’elle
comme si c’Ă©tait hier,
helas, j’ai Ă©tĂ© touchĂ©e
quand elle est partie..
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Plume de soie â
â
ââââ
Bonois
Paix Ă son Ăąme…
Les anciens de Jepoeme (Y compris Maryjo) gardent le souvenir de sa trĂšs grande gentillesse.
Merci Maryjo
Amitiés
Bonois
"La seule signature au bas de la vie blanche, c'est la po?sie qui la dessine." Ren? CHAR, "La parole en archipel" (1962)
Vous devez être connecté pour répondre à ce sujet.
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
LâaccĂšs ou le stockage technique est strictement nĂ©cessaire dans la finalitĂ© dâintĂ©rĂȘt lĂ©gitime de permettre lâutilisation dâun service spĂ©cifique explicitement demandĂ© par lâabonnĂ© ou lâutilisateur, ou dans le seul but dâeffectuer la transmission dâune communication sur un rĂ©seau de communications Ă©lectroniques.
LâaccĂšs ou le stockage technique est nĂ©cessaire dans la finalitĂ© dâintĂ©rĂȘt lĂ©gitime de stocker des prĂ©fĂ©rences qui ne sont pas demandĂ©es par lâabonnĂ© ou lâinternaute.
Le stockage ou lâaccĂšs technique qui est utilisĂ© exclusivement Ă des fins statistiques.
Le stockage ou lâaccĂšs technique qui est utilisĂ© exclusivement dans des finalitĂ©s statistiques anonymes. En lâabsence dâune assignation Ă comparaĂźtre, dâune conformitĂ© volontaire de la part de votre fournisseur dâaccĂšs Ă internet ou dâenregistrements supplĂ©mentaires provenant dâune tierce partie, les informations stockĂ©es ou extraites Ă cette seule fin ne peuvent gĂ©nĂ©ralement pas ĂȘtre utilisĂ©es pour vous identifier.
LâaccĂšs ou le stockage technique est nĂ©cessaire pour crĂ©er des profils dâinternautes afin dâenvoyer des publicitĂ©s, ou pour suivre lâutilisateur sur un site web ou sur plusieurs sites web ayant des finalitĂ©s marketing similaires.
Gérer le consentement