/* ====================== 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']); } Quelques mots pour notre ami poĂšte Keraban - Oasis des Artistes. Le plus beau site de poĂ©sie

Oasis des Artistes. Le plus beau site de poésie

Oasis des artistes: PoĂ©sie en ligne, Concours de poĂšmes en ligne – membres !

Quelques mots pour notre ami poĂšte Keraban

  • Ce sujet contient 2 réponses, 2 participants et a Ă©tĂ© mis Ă  jour pour la derniĂšre fois par Avatar photoNoel-Opan, le 21-11-2022 10:26.
  • Créateur
    Sujet
  • #2697072
    Plume de platine
    ★★★★★☆
    Avatar photoRosaly
      • Sujet: 417
      • RĂ©ponses: 3893

      De passage parmi vous aprĂšs une longue absence, c’est le coeur serrĂ© que j’écris ces quelques mots…
      Cher Bruno, plusieurs mois dĂ©jĂ  que tu es parti , pour un ailleurs plus serein je l’espĂšre.
      Avoir croisĂ© ta route a Ă©tĂ© une grande joie pour moi, bien sĂ»r j’aurais voulu te connaĂźtre davantage, le destin en a dĂ©cidĂ© autrement !
      Il nous laisse toutes et tous dans un grand un désarroi.
      J’ai lu les nombreux messages de soutien, les hommages, tes propres mots qui m’ont appris les terribles Ă©preuves que tu as endurĂ©es.
      MalgrĂ© ton courage immense,le mauvais sort s’est montrĂ© tĂȘtu, sans pitiĂ©!
      Heureusement il n’a pas pu tout emportĂ© avec lui, tes ouvrages, tes poĂšmes demeurent , ils sont notre hĂ©ritage, notre consolation d’aujourd’hui.
      Ils sont nos précieux souvenirs de ta présence ici.
      Te lire c’est te retrouver un peu Ă  chaque ligne…(merci Ă  Eolienne pour le lien permettant d’accĂ©der facilement Ă  tes poĂšmes)
      Un grand Merci Ă  l’ ami Antoine, avec qui tu «croisais» si brillamment ta plume, il sait te faire vivre Ă  travers ses Ă©crits; ne t’arrive-t-il pas de sourire sous le chapeau en lui soufflant parfois quelques «rĂ©pliques» Ă  ta façon?… je l’imagine…
      Une amitié impérissable comme on en rencontre peu.
      Tu es de ceux qu’on n’oublie pas, les tĂ©moignages de tes ami(e)s d’Oasis le prouvent avec raison, ils mettent en relief tes qualitĂ©s de coeur et d’ñme.

      Je me joins à toutes et tous pour saluer bien bas, ton l’intelligence, ta culture,
      ton inventivitĂ© , ton humour,ta combativitĂ©, ton humilitĂ©… ton talent d’auteur et de poĂšte Ă©mĂ©rite.

      Je me joins Ă  toutes et tous pour t’applaudir aussi fort que tu nous manques, toi qui as su tisser des liens de sympathie et d’amitiĂ© autour de toi, dans le virtuel, comme dans le rĂ©el!

      Au revoir PoĂšte,
      oĂč que tu sois mes pensĂ©es Ă©mues volent vers toi.

      Rosaly 😆

    Vous lisez 1 fil de discussion
    • Auteur
      Réponses
      • #3412535
        Mascotte d'Oasis
        Avatar photoNoel-Opan
        Membre Oasis
          • Sujet: 5525
          • RĂ©ponses: 23822

          HĂ© oui, de temps en temps, sans excĂšs cependant, je replace des rĂ©pliques fictives…

          Merci pour ce mot

        • #3412700
          Mascotte d'Oasis
          Avatar photoNoel-Opan
          Membre Oasis
            • Sujet: 5525
            • RĂ©ponses: 23822

            C’est moi qui sors tes crus qui nous rendent tous ivres
            En parlant Ă  nos cƓurs avec dĂ©licatesse.
            Tes mots si bien choisis, Ă  trĂšs grande vitesse,
            Nous disent qu’en sincĂšre ici tu te dĂ©livres.

            De tes nombreux envois tu ferais bien des livres
            Et pourrais sublimer ce qu’est, las, la tristesse.
            Évitant à chacun l’idiote petitesse
            Tu sers sur vrai plateau d’inestimables vivres.

            Si nous te pardonnons ta sobre retenue
            Nous voulons nous montrer en plus chaude tenue.
            Les vers ne rongent plus ceux qui sont dans la voute.

            Et oui le ciel est voute et plait au Troubadour
            Qui eut un vrai TrouvĂšre en compagnon de route
            Pour chanter haut et fort si bien les jeux d’Amour.

        Vous lisez 1 fil de discussion
        • Vous devez être connecté pour répondre à ce sujet.