/*
======================
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']);
}
Dites-lui.... - Oasis des Artistes. Le plus beau site de poésie
Aller au contenu
Ce sujet contient 31 réponses, 26 participants et a Ă©tĂ© mis Ă jour pour la derniĂšre fois par moz-art , le 08-06-2024 19:41 .
Plume de platine â
â
â
â
â
â
nadouche
Sujet: 354 Réponses: 6034
Dites-lui qu’ici rien n’a changĂ© depuis
Ă part mes jours qui ressemblent Ă mes nuits,
Dites-lui que tout est froid aussi, tout est gris,
Que la solitude m’absorbe et m’engloutit …
Parlez-lui si vous le voyez de mes angoisses,
Des idées sombres et tristes qui me pourchassent ,
Dites-lui que pour oublier mes problĂšmes
Je cours me rĂ©fugier dans ses poĂšmes …
Parlez-lui de mes peurs quand vient la nuit,
Quand souffle le vent , quand tombe la pluie ,
Racontez-lui ces fois oĂč prĂšs de ma fenĂȘtre
J’espĂšrais voir son image apparaĂźtre …
Dites-lui que je l’aime, mille fois plus qu’avant
Qu’il me hante , qu’il me manque atrocement,
Dites-lui que je me sens mal, que je m’ennuie
Et que je ne sais pas ĂȘtre heureuse sans lui …
Dites-lui que je n’Ă©cris toujours que pour lui
Que ma plume et moi sommes seules aujourd’hui
Dites-lui que mes mots lui restent fidĂšles
Comme cet amour qu’ils dĂ©crivent et rĂ©vĂšlent…
Nady 12/01/2022
Ce n'est pas pour devenir ?crivain qu'on ?crit , c'est pour rejoindre en silence cet amour qui manque ? tout amour . Christian Bobin
Sybilla
Sujet: 17798 Réponses: 198089
Bonjour Nady,
Ta magnifique poĂ©sie d’amour est bouleversante d’Ă©motions fortes et mĂ©lancoliques !
Quelquefois, il est trĂšs difficile de tirer un trait…
Je te souhaite bon courage !
Douce nuit chÚre amie poétesse !
Toutes mes amitiés
Sybilla
Le r?ve est le poumon de ma vie (Citation de Sybilla)
Plume de diamant â
â
â
â
â
â
cyrael
Sujet: 14564 Réponses: 136022
dites lui
la plume se confie
le coeur supplie
dites lui
coup de coeur du jour
c’est triste, douloureux , mais l’amour demeure
le coeur aime encore, le coeur aime
bisous NADOUCHE
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo
Plume de diamant â
â
â
â
â
â
EvilFranck
Sujet: 903 Réponses: 126340
Plume de platine â
â
â
â
â
â
nadouche
Sujet: 354 Réponses: 6034
Merci Ă vous ,poĂštes et poĂ©tesse pour vos lectures et vos belles apprĂ©ciations….
Mes amitiés à tous
Ce n'est pas pour devenir ?crivain qu'on ?crit , c'est pour rejoindre en silence cet amour qui manque ? tout amour . Christian Bobin
Plume de diamant â
â
â
â
â
â
poetal
Sujet: 7608 Réponses: 17193
si bien écrit il aura entendu
[email]domi.gondrand@laposte.net[/email]
Plume d'or â
â
â
â
ââ
stef
C’est trĂšs beau, trĂšs puissant, on dirait une chanson, ça m’a fait penser Ă Barbara.
Sublime.!
Quel coeur! pour rester insensible.
Dites-lui que je l’aime….
Fort ressenti en tes tendres mots.
Une agrĂ©able lecture malgrĂ©… Ămu.
Poétesse merci.
Anonyme
un trĂšs beau poĂšme d’amour, touchante Ă©criture de votrecĆur aimant, poignant aussi cet appel,
les sentiments et les mots ne se perdent pas mais rejoignent dans l’invisible la personne aimĂ©e.
Jâai le plaisir de tâannoncer que toute lâĂ©quipe dâadministration dâOasis a Ă©lu ton poĂšme  »coup de coeur ».
Il sera mis sur la page d’accueil du site jusqu’au prochain  »coup de coeur ».
Il sera également mis dans le recueil  »poÚmes nominés » pour y rester définitivement !
Toutes nos félicitations
Plume de diamant â
â
â
â
â
â
MICKAELLE
Sujet: 2353 Réponses: 32108
Plume de platine â
â
â
â
â
â
nadouche
Sujet: 354 Réponses: 6034
Merci a tous mes amis qui se sont donnĂ©s la peine de me lire , merci Ă l’Ă©quipe des administrateurs pour cette nomination et un grand merci Ă Notre chĂšre Eolienne
Ce n'est pas pour devenir ?crivain qu'on ?crit , c'est pour rejoindre en silence cet amour qui manque ? tout amour . Christian Bobin
Plume de diamant â
â
â
â
â
â
Laesilia
Sujet: 2427 Réponses: 15969
Plume de diamant â
â
â
â
â
â
Sympatique
Sujet: 1846 Réponses: 29792
Plume de platine â
â
â
â
â
â
THAIEVA
Sujet: 249 Réponses: 6746
Bonjour,
Magnifique et bouleversante poĂ©sie que j’ai beaucoup aimĂ© lire. Merci.
Thaieva
Plume de platine â
â
â
â
â
â
nadouche
Sujet: 354 Réponses: 6034
Merci pour ces jolis commentaires chers amis poÚtes et poétesses
Vos agréables appréciations me touchent beaucoup
Amitiés et trÚs bonne soirée
Ce n'est pas pour devenir ?crivain qu'on ?crit , c'est pour rejoindre en silence cet amour qui manque ? tout amour . Christian Bobin
Plume de diamant â
â
â
â
â
â
PENELOPE
Sujet: 981 Réponses: 9233
Une nomination bien méritée
On a tous le sang de la m?me couleur
Bonjour ChĂšre Nadouche
Un fort poĂšme touchant, Ă la fois triste
Les mots me manquent, je comprends ce vide
Ecrire est une thérapie
Merci de ce partage mes amitiés
Quand la confiance perd ses dimensions
Alors tout s'éfface, puis s'évapore dans l'océan
Une de mes citations Ă tous
Plume de diamant â
â
â
â
â
â
Selenia
Sujet: 1828 Réponses: 14419
j’ai adorĂ© te lire car on sent vĂ©ritablement l’absence lancinante qui envahit ta poĂ©sie
c’est malheureusement dans l’absence qu’on ressent souvent le plus cette souffrance et cette angoisse profonde
merci pour ta belle poésie
Plume de platine â
â
â
â
â
â
alaplume
Sujet: 469 Réponses: 6576
Un lourd ressenti de lecture, c’est trĂšs bien transcrit; les images sont fortes et prenantes.
Ce matin, je lis des histoires de vie qui me donnent envie de serrer les gens dans les bras… juste pour consoler un peu les peines, elles me touchent aussi sans ĂȘtre miennes, mais elles me sont confiĂ©es Ă moi, lecteur et spectateur…
Amicalement.
c'est toujours quand il est parti qu'on se rend compte que le bonheur ?tait l?!
Plume de platine â
â
â
â
â
â
nadouche
Sujet: 354 Réponses: 6034
Plume de diamant â
â
â
â
â
â
Merdesiles
Sujet: 7659 Réponses: 17862
OUI il faudra lui dire magnifique lecture et partage
Merci Ă vous
Amitiés Aline
C’est beau quand la poĂ©sie dĂ©livre et s’en va chercher
tendresse au-delĂ des mots
Nady !
Maghfour
Ils ne diront pas les temps ?taient m?diocres , ils diront pourquoi les po?tes se sont tus ...................Brecht...........
Plume de platine â
â
â
â
â
â
alaplume
Sujet: 469 Réponses: 6576
Quand je te lis ici, je ne’peux m’empĂȘcher d’entendre la chanson de Nicole Croisille, « parlez moi de lui ». J’y ressens la mĂȘme Ă©motion dans le questionnement et le manque.
Amicalement..
c'est toujours quand il est parti qu'on se rend compte que le bonheur ?tait l?!
Plume d'or â
â
â
â
ââ
moz-art
Sujet: 705 Réponses: 1012
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