* @copyright Tela-Botanica 1999-2010 * @link http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel * @licence GPL v3 & CeCILL v2 * @version $Id$ */ // +-------------------------------------------------------------------------------------------------------------------+ // TODO : lors de la génération de la version 2 de la BDTFX tester les diff! Il se peut que la mémoire soit dépassée. class Famille extends ScriptCommande { const SCRIPT_NOM = 'famille'; private $referentielDao = null; public $parametres = array( '-r' => array(true, true, 'referentiel')); public function executer() { $this->referentielDao = new ReferentielDao(); // Récupération du dernier traitement demandé $referentiel = $this->getParam('r'); $resultats = $this->referentielDao->preparerTablePrChpFamille($referentiel); $noms = array(); $introuvables = array(); $introuvablesSyno = array(); $i = 1; while(true) { printf("passe n°%d:\n", $i); $this->traiterResultatsFamille($resultats, $noms, $introuvables, $introuvablesSyno); echo "\n\n"; // printf("noms: %d, introuvables: %d, introuvablesSyno: %d\n", count($noms), count($introuvables), count($introuvablesSyno)); // XXX, au 22/07/2013, 3 passes sont suffisantes // TODO: MySQL procédure stockée ! if($i++ == 3) break; $resultats = array_merge($resultats, $introuvables, $introuvablesSyno); $introuvables = $introuvablesSyno = array(); } foreach ($introuvablesSyno as $id => $nom) { $nn = $nom['num_nom']; $nnr = $nom['num_nom_retenu']; if (isset($noms[$nnr])) { $noms[$nn] = $noms[$nnr]; } else { $introuvables[] = $nn; } unset($introuvablesSyno[$id]); } echo "\n"; /*$msg = 'Plusieurs familles sont introuvables'; $this->creerFichierLog($msg, $introuvables, 'famille_introuvable');*/ $this->referentielDao->remplirChpFamille($referentiel, $noms); } private function traiterResultatsFamille(&$resultats, &$noms, &$introuvables, &$introuvablesSyno) { foreach ($resultats as $id => $nom) { $nn = $nom['num_nom']; $nnr = $nom['num_nom_retenu']; $nts = $nom['num_tax_sup']; $rg = $nom['rang']; if ($nnr != '') { if ($rg == '180') { $noms[$nn] = $nom['nom_sci']; } else { if ($nn == $nnr) { // nom retenu if (isset($noms[$nts])) { // signifie que recupererTuplesPrChpFamille() devrait // récupérer ce record *avant* $noms[$nn] = $noms[$nts]; } else { $introuvables[] = $nn; } } else {// nom synonyme if (isset($noms[$nnr])) { // signifie que recupererTuplesPrChpFamille() devrait // récupérer ce record *avant* $noms[$nn] = $noms[$nnr]; } else { $introuvablesSyno[] = $nom; } } } } unset($resultats[$id]); } } } ?>