/*
======================
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']);
}
Sachons ĂȘtre bienveillant envers les autres ! (Duo Tolpac et Sybilla) - Oasis des Artistes. Le plus beau site de poĂ©sie
Aller au contenu
- Ce sujet contient 10 réponses, 4 participants et a Ă©tĂ© mis Ă jour pour la derniĂšre fois par
douceur3, le 06-06-2021 18:08.
-
dolores
- Sujet: 5304
- Réponses: 62885
Coup de coeur pour le Duo de Sybilla et Tolpac
Sachons ĂȘtre bienveillant envers les autres ! (Duo Tolpac et Sybilla)
[url=https://www.oasisdesartistes.org/modules/newbbex/viewtopic.php?viewmode=thread&topic_id=282493&forum=2]https://www.oasisdesartistes.org/modules/newbbex/viewtopic.php?viewmode=thread&topic_id=282493&forum=2[/url]
[url=https://zupimages.net/viewer.php?id=21/21/gq3z.jpg]
[/url]
Merci bisous
-
-
-
-
je ne suis pas d’accord car les duo doivent ĂȘtre sur les poĂšmes a plusieurs
pour ĂȘtre juste avec tout le monde, si moi je dĂ©poserais un duo dans poĂ©sie on me l’enlĂšverais tout suite
Je comprend pas le pourquoi que c’est bon pour un et non pour les autres alors faudrait possiblement penser qu’ici c’est un site de poĂ©sie et non celui de rencontre.
Je ne suis nullement jalouse mais je crois qu’il faut ĂȘtre juste envers tout le monde et je n’en veux aucunement a Tolpac et Sybilla que j’apprĂ©cie au plus haut point!
Pour les nominĂ©s aussi c’est la mĂȘme chose, le site de poĂ©sie se doit ĂȘtre cordial et juste envers tous,
ce qui est personnelle a leur amour ca ne nous regarde pas mais on peut les lire et commenter comme chacun a part!
Assez c’est assez sinon moi je n’ai plus rien a faire ici !

Lire, c?est rencontrer du monde, au plus profond de soi.
-
les duos maintenant se postent dans vos poĂšmes, il faut donner le lien Ă felinelove :
https://www.oasisdesartistes.org/modules/newbbex/viewtopic.php?topic_id=234681&forum=4
-
alors merci et il faudrait le dire a tous les poetes

Lire, c?est rencontrer du monde, au plus profond de soi.
-
ce que je lis c’est que 5 jours plus tard ils sont transfĂ©rĂ©s par FĂ©linelove
5 jours plus tard ?
Merci

Lire, c?est rencontrer du monde, au plus profond de soi.
-
tolpac
- Sujet: 3652
- Réponses: 28714
Bonjour Ă tous
merci Ă Dolores pour sa gentille intention, qui me touche beaucoup.
Ce texte a été écrit dans le seul but de ramener et de maintenir si possible une parfaite convivialité sur le site.
Par ailleurs en nos lignes ( contrairement Ă ce que j’ai pu lire dans un commentaire ) il n ‘est nullement question dans nos propos d’amour ni mĂȘme de simple amitiĂ©.
A l’avenir afin de ne plus risquer de crĂ©er des jalousies ou animositĂ©s, je demande Ă ce que plus aucune de mes pages d’Ă©critures ne soient nominĂ©es.
Pour ce qui est du positionnement des duos sur la page des poÚmes, puis de leur transfert sur celle des poÚmes à plusieurs, cette rÚgle du site est en vigueur depuis janvier 2018, des dizaines de duos de membres divers ayant déjà suivi cette procédure.
Donc le fait d’avoir dĂ©posĂ© notre duo en cette place ne fait que respecter le rĂšglement d’Oasis en vigueur.
Et d’ailleurs, hier soir, Sybilla a transfĂ©rĂ© notre duo dans les poĂ©sies Ă plusieurs, puisque c’Ă©tait le cinquiĂšme jour.
Amitiés
Christian
-
sache Christian et Sybilla ce n’est nullement de votre faute et je tiens a vous le mentionner
ce sont ceux ou celles qui confirme le tout,
il faut laisser aussi l’espace a d’autres poĂštes et j’en conviens que nullement j’ai laissĂ© ce commentaire dĂ©sobligeant
a vous faire du mal!
Je ne veux pas a cause de moi que tu refuses d’ĂȘtre nominĂ©
cela ne serait pas juste, et si tu as le mĂ©rites c’est que ta poĂ©sie est merveilleuse!
J’ai fait une montĂ©e de lait ici car il y a beaucoup de copinage et tu es nullement responsable de ceci!
Ceci dit je me retire pour laisser la place a d’autres !
Je reviendrai quand mon coeur sera plus serein et veille me pardonner mon écart de conduite en tant que mascotte mais il fallait que je le dise!

Lire, c?est rencontrer du monde, au plus profond de soi.
-
tolpac
- Sujet: 3652
- Réponses: 28714
Bonjour Douceur3
comme tu as sans doute pu le constater depuis une douzaine d’annĂ©es de ma prĂ©sence sur Oasis, je ne suis pas quelqu’un qui court crocs en avant vers les honneurs, sachant n’avoir qu’un piĂštre talent d’Ă©criture, n’ayant absolument rien Ă voir avec celui des grands poĂštes du site.
En consĂ©quence j’Ă©cris pour mon plaisir et pour celui d’Ă©ventuels lecteurs qui peuvent trouver Ă©galement le leur en lisant mes textes aux orientations diverses.
Je ne pense pas monopoliser la premiĂšre page des poĂšmes avec mes pages d’Ă©criture que je dĂ©pose seulement de temps en temps, ni par la remontĂ©e de mes anciens poĂšmes dont de nombreux n’ont mĂȘme pas Ă©tĂ© remerciĂ©s par un de mes commentaires, justement pour ne pas risquer qu’un trop grand nombre de mes  » productions » revenues en page premiĂšre, puisse ĂȘtre mal perçu par d’autres membres.
Donc je ne pense pas faire de l’ombre aux auteurs ni occuper une trop grande place par mes diffĂ©rents Ă©crits sur le site.
Pour ma part, je ne suis pas du tout des critĂšres de copinages dont tu fais mention, je commente qui je veux, quand je veux et comme cela me chante, sans faire usage de particularitĂ©s d’amitiĂ©s ou inimitiĂ©s dans mes choix de lectures et dĂ©pĂŽts d’apprĂ©ciations.
Tu n’as pas du tout Ă te retirer pour laisser ta place Ă d’autres, sachant qu’ici tout le monde qui le souhaite a sa place, mĂȘme si certains ( es ) ont plus de « succĂšs » avec leurs compositions littĂ©raires, ceci pour des raisons complexes et diverses, n’ayant pas toujours un rapport direct avec la qualitĂ© d’Ă©criture.
Amitiés
Christian
-
merci Tolpac sur ce que tu mentionnes tu as tout a fait raison et ma rage n’Ătait pas de vous viser
mais que la modĂ©ration et nous les mascottes qu’on fassent de notre mieux pour diriger les mentionnĂ©s en honneurs
a plus de partage car on le sait bien qu’ici il y en a du copinage et j’envoie rĂ©guliĂšrement et ce n’est pas de toi et en toi ceci!
Mon crie est simplement de partager le plus possible avec d’autres membres qui apprĂ©cieraient aussi d’ĂȘtre nomminĂ©!
Merci mon ami!
Je sais que tu comprend ce que je veux dire!

Lire, c?est rencontrer du monde, au plus profond de soi.
- 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.