#CACHE{0}#PHP # # Ces fichiers sont a placer dans le repertoire base/ de votre plugin # /** * Gestion de l'importation de `#TABLE_DESTINATION` **/ /** * Fonction d'import de la table `#TABLE_DESTINATION` * à utiliser dans le fichier d'administration du plugin * * ``` * include_spip('base/importer_#TABLE_DESTINATION'); * $maj['create'][] = ['importer_#TABLE_DESTINATION']; * ``` * **/ function importer_#TABLE_DESTINATION() { ######## VERIFIEZ LE NOM DE LA TABLE D'INSERTION ########### $table = '#TABLE_DESTINATION'; // nom_du_champ_source => nom_du_champ_destination // mettre vide la destination ou supprimer la ligne permet de ne pas importer la colonne. $correspondances = \[ '#CLE' => '#CLE', \]; // transposer les donnees dans la nouvelle structure $inserts = \[\]; list($cles, $valeurs) = donnees_#TABLE_DESTINATION(); // on remet les noms des cles dans le tableau de valeur // en s'assurant de leur correspondance au passage if (is_array($valeurs)) { foreach ($valeurs as $v) { $i = []; foreach ($v as $k => $valeur) { $cle = $cles[$k]; if (isset($correspondances[$cle]) and $correspondances[$cle]) { $i[ $correspondances[$cle] ] = $valeur; } } $inserts[] = $i; } unset($valeurs); // inserer les donnees en base. $nb_inseres = 0; // ne pas reimporter ceux deja la (en cas de timeout) $nb_deja_la = sql_countsel($table); $inserts = array_slice($inserts, $nb_deja_la); $nb_a_inserer = count($inserts); // on decoupe en petit bout (pour reprise sur timeout) $inserts = array_chunk($inserts, 100); foreach ($inserts as $i) { sql_insertq_multi($table, $i); $nb_inseres += count($i); // serie_alter() relancera la fonction jusqu'a ce que l'on sorte sans timeout. if (time() >= _TIME_OUT) { // on ecrit un gentil message pour suivre l'avancement. echo "
Insertion dans $table relancée : "; echo "
- $nb_deja_la étaient déjà là"; echo "
- $nb_inseres ont été insérés."; $a_faire = $nb_a_inserer - $nb_inseres; echo "
- $a_faire à faire."; return; } } } } /** * Donnees de la table #TABLE_DESTINATION **/ function donnees_#TABLE_DESTINATION() { [(#SET{data,[(#TABLE|fabrique_extraire_les_donnees_table{#CONNECTEUR})]})] $cles = [(#GET{data/cles}|ecrire_tableau)]; $valeurs = \[ [(#VALEUR**|ecrire_tableau)], \]; [ (#REM) ecrire_fichier compresse automatiquement les .gz ][(#CHEMIN_COMPRESSION|ecrire_fichier{[(#GET{data/valeurs}|serialize)]}|non)] lire_fichier(find_in_path('base/[(#DONNEES_COMPRESSEES)]'), $valeurs); $valeurs = unserialize($valeurs); return [$cles, $valeurs]; }