/*
======================
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']);
}
VOTRE ATTENTION ! à TOUTES LES MASCOTTES ! - 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 20-08-2024 19:06.
-
Sybilla
- Sujet: 17798
- Réponses: 198089
Bonjour ChÚres Amies poétesses et Chers Amis poÚtes,
Tant que je suis la seule modératrice sur le site, je vais verrouiller ou transférer sur le forum de la modération tous les posts qui font polémiques.
Je précise bien. TOUS !
Ce serait bien que chaque membres mettent un peu d’eau dans son vin quels que soient ces arguments ou opinions de part et d’autre tant que la tempĂ©rature n’aura pas baissĂ© entre vous tous…
Je suis navrĂ©e que vous vous dĂ©chiriez ainsi…
Cela me fait énormément de peine moi qui suis une pacifiste convaincue.
Je vous souhaite une trÚs douce journée !
Et j’espĂšre que le sourire reviendra sur vos lĂšvres.
Nous sommes sur un site de poĂ©sies, pas sur un ring de boxe, ni sur un lieu oĂč pleuvent des bombes engendrant des personnes dĂ©cĂ©dĂ©es…
Des gens meurent dans le monde.
Vous n’allez pas vous battre pour de telles choses…
RĂ©flĂ©chissez…
Merci de votre attention !
Gros bisous Ă vous toutes et tous sans distinction !
Sybilla
Le r?ve est le poumon de ma vie (Citation de Sybilla)
-
-
Sybilla
- Sujet: 17798
- Réponses: 198089
Bonjour ChĂšre Amie Laurence,
Oui. Tu as raison !
Et Adeline aurait été trÚs affectée de voir ses poÚtes entrer en conflits.
Tant de malheureux dans le monde !
Tentons de nous épanouir en partageant la Poésie qui est notre Passion commune !
Et que ces rixes cessent.
Dans la vie, il faut communiquer certes mais dans le plus grand respect fraternel.
Dieu nous voit, voit nos actes, respectons nous toutes et tous !
Je suis avec vous tous sans parti pris et n’appartient Ă aucun clan.
Ce qui me permet, je le souhaite le mieux possible de rester équitable.
Je vous aime toutes et tous en tant que PoĂštes bien entendu (lool) et amicalement.
Je te souhaite une excellente journée Laurence!
Ainsi qu’Ă tous les membres d’Oasis !
Toutes mes amitiés
Gros bisous
Sybilla
Le r?ve est le poumon de ma vie (Citation de Sybilla)
-
Sybilla
- Sujet: 17798
- Réponses: 198089
Bonsoir Marie,
Dans la journĂ©e oui j’Ă©tais toute seule.
J’ai passĂ© la journĂ©e Ă surveiller le site.
J’ai dĂ» faire appel Ă JoĂ«l.
Belle soirée !
Le r?ve est le poumon de ma vie (Citation de Sybilla)
-
Plume de diamantâ
â
â
â
â
â
cyrael
- Sujet: 14564
- Réponses: 136022
bonsoir
JE SUIS TRISTE DE VOIR
que certaines personnes , viennent dans le site
uniquement pour dĂ©truire le chef d’Oeuvre D’EOLIENNE
en s’opposant, Ă tout ce qui est Ă©crit, et
ne respectant pas la volonté de notre fondatrice
et son REGLEMENT ,
ainsi que le message
posté PAR _ son Epoux _ MONSIEUR _JOEL_
il me semble qu’il y a eu ce jour, quelques Ă©vĂ©nements
graves, suite Ă des actes inadmissibles, volontaires
et incontrolables..
ce qui a fait du tort
a
MARIE LUZ DEL SOL
NADINE EVELYNE
MISSI
Je me retire des —mascottes —-puisque , EOLIENNE voulait qu’on
signale les manquements , je l’ai fait, et on me traite de
rapporteuse.. on me demande de faire mon devoir de mascotte
qui est de veiller sur les dérapages..
je préfÚre___ vous laisser entre mascottes et modératrices
modérateurs,
je vous prie d’ accepter ma dĂ©mission des__ mascottes__
maryjo est triste pour toutes ses amies, Ă qui, cette personne
a laissé des__ messages déplacés.__
Bonsoir , mon coeur est bien lourd..
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo

-
joel
- Sujet: 198
- Réponses: 4013
Bonsoir
Heureusement que SYBILLA était la parce que il y a eu la pagaille toute la journée
Elle m a téléphonée en urgence et nous avons réglé les problÚmes tous les deux
Tous les posts ont étés vérouilliés provissoirement avec mon accord
Cordialement
JOEL
( j ai envoyé un MP à LEFEVRE??)
-
Plume de diamantâ
â
â
â
â
â
cyrael
- Sujet: 14564
- Réponses: 136022
MERCI MERCI A VOUS
MONSIEUR JOEL
en effet, j’ai signalĂ© Ă SYBILLA
les *mots déplacés sous les poÚmes
De trois de nos amies fidĂšles du site OASIS
Mais, une telle * attaque * qui vise le rĂšglement doit
etre sanctionnée
MERCI POUR AVOIR fait le nécessaire
pardon Ă tous, mais, je fais tout ce qui est possible
pour APPLIQUER a la lettre LE REGLEMENT
DE NOTRE AMIE FEUE EOLIENNE
merci MONSIEUR JOEL merci MONSIEUR STEVE
MERCI SYBILLA merci FRANIE et toutes les mascottes
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo

-
joel
- Sujet: 198
- Réponses: 4013
Bonsoir MARYJO
Ma femme vous aimait beaucoup . et pour ADELINE et pour moi je souhaite que vous restiez Mascotte
Cordialement
JOEL
Gros bisous
-
Plume de diamantâ
â
â
â
â
â
cyrael
- Sujet: 14564
- Réponses: 136022
merci MONSIEUR JOEL * JE RESTE * POUR EOLIENNE
POUR VOUS ET POUR VOTRE FAMILLE
____________________________________________
et je vous fais la promesse Ă toutes Ă tous
D’ etre mascotte qui toujours dĂ©fendra
*OASIS DES ARTISTES*
car__ j’aime *FEUE EOLIENNE * notre chĂšre ADELINE
COMME vous tous, j’ai du mal Ă ressentir ce vide sans elle
mais , puisqu’elle a voulu rejoindre Le PARADIS
laissons_____ L’ETOILE D ‘EOLIENNE
ce soir, ___ECLAIRER.. NOTRE OASIS ..____
le vent se fait plus doux, j’Ă©coute , le solo d’un rossignol
Comme pour apaiser nos coeurs lourds de chagrin
car EOLIENNE NOTRE ___BIEN AIMEE____
nous a tant aimé !
MERCI MONSIEUR JOEL je vous apporte mon soutien
car je sais , je devine combien votre coeur souffre en silence
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo

-
joel
- Sujet: 198
- Réponses: 4013
Bonjour
MERCI BEAUCOUP DE RESTER AVEC NOUS
ADELINE EGALEMENT
BON COURAGE
-
Plume de diamantâ
â
â
â
â
â
cyrael
- Sujet: 14564
- Réponses: 136022
Je vous REMERCIE Monsieur JOEL et madame FEUE ADELINE
bisous fraternels, respectueuses salutations
l'Amour rayonne quand l'Ame s'?l?ve, citation maryjo

-
- 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.