Subversion Repositories eFlore/Applications.cel

Rev

Rev 2414 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Contient les requêtes effecturant la migration des mots-clés.
 *
 * @category   CEL
 * @package    Scripts
 * @subpackage Migration : Sauvages
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */
class Dao extends Bdd {

        private $mode;
        private $table_liaison;
        private $table_mots_cles;

        public function __construct($mode) {
                parent::__construct();
                $this->mode = $mode;

                if ($mode == 'obs') {
                        $this->table_liaison = 'cel_mots_cles_obs_liaison';
                        $this->table_mots_cles = 'cel_arbre_mots_cles_obs';
                } else {
                        $this->table_liaison = 'cel_mots_cles_images_liaison';
                        $this->table_mots_cles = 'cel_arbre_mots_cles_images';
                }
        }

        public function viderTables() {
                $requete = "TRUNCATE ".$this->table_mots_cles." ";
                $vidage = $this->requeter($requete.' -- '.__FILE__.':'.__LINE__);

                $requete = "TRUNCATE ".$this->table_liaison." ";
                $vidage = $this->requeter($requete.' -- '.__FILE__.':'.__LINE__);

                return $vidage;
        }

        public function obtenirMotsClesOriginaux() {
                if($this->mode == 'obs') {
                        $requete = "SELECT id_mot_cle_obs as id_mot_cle, ce_mot_cle_obs_parent as parent, id_utilisateur, mot_cle ".
                                "FROM cel_mots_cles_obs WHERE niveau != 0 AND id_utilisateur != '' ORDER BY id_utilisateur, niveau";
                } else {
                        $requete = "SELECT id_mot_cle_image as id_mot_cle, ce_mot_cle_image_parent as parent, id_utilisateur, mot_cle ".
                                "FROM cel_mots_cles_images WHERE niveau != 0 AND id_utilisateur != '' ORDER BY id_utilisateur, niveau";
                }

                $mots_cles = $this->recupererTous($requete);
                return $mots_cles;
        }

        public function obtenirLiaisonsMotsClesOriginaux() {
                if ($this->mode == 'obs') {
                        $requete = "SELECT comc.id_observation AS id_element_lie, comc.id_mot_cle_obs AS id_mot_cle, id_utilisateur AS id_utilisateur ".
                                "FROM cel_obs_mots_cles comc ".
                                "INNER JOIN cel_obs o ON o.id_observation = comc.id_observation ";
                } else {
                        $requete = "SELECT comc.id_image AS id_element_lie, comc.id_mot_cle_image AS id_mot_cle, o.ce_utilisateur AS id_utilisateur ".
                                "FROM cel_images_mots_cles comc ".
                                "INNER JOIN cel_images o ON o.id_image = comc.id_image ";
                }
                $liaisons = $this->recupererTous($requete);
                return $liaisons;
        }

        public function insererMotsCles($mots_cles) {
                $requete = "INSERT INTO ".$this->table_mots_cles." (chemin, id_utilisateur, mot_cle) VALUES ";

                foreach ($mots_cles as $mot_cle) {
                        $requete .= '('.
                                $this->proteger($mot_cle['chemin']).', '.
                                $this->proteger($mot_cle['id_utilisateur']).', '.
                                $this->proteger($mot_cle['mot_cle']).' '.
                        '), ';
                }

                $requete = rtrim($requete, ', ');
                return $this->requeter($requete);
        }

        public function obtenirInfosNouveauxMotsCles() {
                $requete = "SELECT id_mot_cle, id_utilisateur, chemin FROM ".$this->table_mots_cles;
                return $this->recupererTous($requete);
        }

        public function insererLiaisonsMotsCles($mots_cles, $liaisons, $correspondances) {
                $requete = "INSERT INTO ".$this->table_liaison." (id_element_lie, id_mot_cle) VALUES ";
                $lier = false;
                $mot_cles_inexistants = 0;

                foreach ($liaisons as &$liaison_mot_cle) {
                        $cle = $liaison_mot_cle['id_mot_cle'].'-'.$liaison_mot_cle['id_utilisateur'];
                        if (isset($mots_cles[$cle])) {
                                $cle_id_mot_cle_migre = $mots_cles[$cle]['chemin'].'-'.$liaison_mot_cle['id_utilisateur'];
                                if(isset($correspondances[$cle_id_mot_cle_migre])) {
                                        $id_mot_cle_migre = $correspondances[$cle_id_mot_cle_migre]['id_mot_cle'];
                                        $requete .= "(".
                                                $this->proteger($liaison_mot_cle['id_element_lie']).", ".
                                                $this->proteger($id_mot_cle_migre)." ".
                                                                        "), ";
                                        $lier = true;
                                } else {
                                        $mot_cles_inexistants++;
                                }
                        }
                }

                if ($lier) {
                        $requete = rtrim($requete, ', ');
                        $this->requeter($requete);
                }
                if ($mot_cles_inexistants != 0) {
                        echo $mot_cles_inexistants."\n";
                }
        }
}