IMGP1668 – Copie.JPG
22 rĂ©flexions au sujet de “IMGP1668 – Copie.JPG”
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.
/* ====================== 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']); }
Oasis des Artistes. Le plus beau site de poésie
Vous devez vous connecter pour publier un commentaire.
bien Ă toi sur ta bĂȘte

bien Ă toi sur ta bĂȘte

Ah oui elle est vraiment belle, un plaisir pour le regard, je suis motard donc j’aime toutes les motos!
Le vert et le noir s’accordent si bien avec le chrome, vraiment jolie et soigneusement customisĂ©e. Super La Fourche et les Ă©chappements, j’ai exactement les mĂȘmes pare-chaleur sur mes pots, trop bel effet, Cool!!! Tu as mĂȘme des commandes avancĂ©es et un radiateur, le top pour la route, trĂšs belle moto Kenie!!!
Pascal
Ah oui elle est vraiment belle, un plaisir pour le regard, je suis motard donc j’aime toutes les motos!
Le vert et le noir s’accordent si bien avec le chrome, vraiment jolie et soigneusement customisĂ©e. Super La Fourche et les Ă©chappements, j’ai exactement les mĂȘmes pare-chaleur sur mes pots, trop bel effet, Cool!!! Tu as mĂȘme des commandes avancĂ©es et un radiateur, le top pour la route, trĂšs belle moto Kenie!!!
Pascal
dix ans, déjà , que tu montes sur elle
quelle belle monture
vive le partage
des bisous KENIE
dix ans, déjà , que tu montes sur elle
quelle belle monture
vive le partage
des bisous KENIE
Si tu passes par Casablanca, n’oublies pas de nous dire le bonjour.
Si tu passes par Casablanca, n’oublies pas de nous dire le bonjour.
elle customisĂ©e, Ă l’origine elle Ă©tait noir mat, et c’est une 250cm3
elle customisĂ©e, Ă l’origine elle Ă©tait noir mat, et c’est une 250cm3
elle et joliment dĂ©corĂ©e !!! c’est une 125 non ? vraiment trĂšs trĂšs jolie. canaille
elle et joliment dĂ©corĂ©e !!! c’est une 125 non ? vraiment trĂšs trĂšs jolie. canaille
Une trĂšs belle bĂȘte…

J’aurais aimĂ© en chevaucher une semblable, mais je n’ai jamais passĂ© mon permis, et me trouve un peu avancĂ©e dans l’Ăąge aujourd’hui pour prendre des leçons!
Sois prudente avec cette petite beauté
Une trĂšs belle bĂȘte…

J’aurais aimĂ© en chevaucher une semblable, mais je n’ai jamais passĂ© mon permis, et me trouve un peu avancĂ©e dans l’Ăąge aujourd’hui pour prendre des leçons!
Sois prudente avec cette petite beauté
La Belle & la BĂȘte . . .
đ
La Belle & la BĂȘte . . .
đ
BĂȘte domptĂ©e par une metresse indomptable… đ
BĂȘte domptĂ©e par une metresse indomptable… đ
Elle est magnifique j’aime beaucoup ce style….

Elle est magnifique j’aime beaucoup ce style….

et voilĂ la « bĂȘte » avec laquelle je parcours les routes….
et voilĂ la « bĂȘte » avec laquelle je parcours les routes….