Ejemplo n.º 1
0
    /**
     * @param array $entry le tableau $entry généré par la fonction buildEntry()
     * 
     * Fonction d'import d'une notice formaté par la fonction buildEntry()
     * Ajoute les informations d'audit
     * Ajoute les champs personnalisés
     * Ajoute les tables annexes [responsability], [notices_categories] et [notices_langues]
     * Met à jours l'indexation de la notice
     */
    static function buildNotice(&$entry)
    {
        global $pmb_type_audit;
        global $webdav_current_user_name, $webdav_current_user_id;
        //la notice existe déjà ? si oui, on renvoi l'id trouvé
        if ($entry['niveau_biblio'] . $entry['niveau_hierar'] == 'a2') {
            $query = '
			SELECT n1.* FROM notices AS n1
			JOIN analysis ON n1.notice_id=analysis_notice
			JOIN bulletins ON bulletin_id=analysis_bulletin
			JOIN notices AS n2 ON n2.notice_id=bulletin_notice
			WHERE n1.tit1="' . addslashes($entry['tit1']) . '" 
			AND n1.niveau_biblio="' . addslashes($entry['niveau_biblio']) . '" 
			AND n1.niveau_hierar="' . addslashes($entry['niveau_hierar']) . '"
			AND bulletin_numero="' . addslashes($entry['bulletin']['bulletin_numero']) . '"
			AND mention_date="' . addslashes($entry['bulletin']['mention_date']) . '"
			AND date_date="' . addslashes($entry['bulletin']['date_date']) . '"
			AND n2.tit1="' . addslashes($entry['periodique']['tit1']) . '" 
			AND n2.niveau_biblio="' . addslashes($entry['periodique']['niveau_biblio']) . '" 
			AND n2.niveau_hierar="' . addslashes($entry['periodique']['niveau_hierar']) . '"
			';
            $result = mysql_query($query);
        } else {
            $query = 'SELECT * FROM notices WHERE tit1="' . addslashes($entry['tit1']) . '" AND niveau_biblio="' . addslashes($entry['niveau_biblio']) . '" AND niveau_hierar="' . addslashes($entry['niveau_hierar']) . '"';
            $result = mysql_query($query);
        }
        if (mysql_num_rows($result)) {
            // La notice existe
            $entry = array_merge(mysql_fetch_array($result, MYSQL_ASSOC), $entry);
            //TODO : A vérifier
            $first = true;
            $query = 'UPDATE notices SET ';
            foreach (array_keys($entry) as $fieldName) {
                if (!is_array($entry[$fieldName]) && $entry[$fieldName] != '' && $fieldName != 'ancien_num_name') {
                    if (!$first) {
                        $query .= ',';
                    }
                    $query .= $fieldName . '="' . addslashes($entry[$fieldName]) . '"';
                    $first = false;
                }
            }
            $query .= ' WHERE notice_id="' . addslashes($entry['notice_id']) . '"';
            mysql_query($query) or die('echec de la requete : ' . $query . '<br/>' . mysql_error() . "\n");
        } else {
            //les éditeurs
            if (sizeof($entry['publishers'])) {
                foreach ($entry['publishers'] as $id => $publisher) {
                    if ($id < 2) {
                        if ($id === 0) {
                            $entry['ed1_id'] = \editeur::import($publisher);
                        } elseif ($id === 1) {
                            $entry['ed2_id'] = \editeur::import($publisher);
                        }
                    }
                }
            }
            //la collection
            if (sizeof($entry['collections']) && $entry['ed1_id']) {
                $entry['collections']['parent'] = $entry['ed1_id'];
                $entry['coll_id'] = \collection::import($entry['collections']);
            }
            $first = true;
            $query = 'INSERT INTO notices SET ';
            foreach ($entry as $fieldName => $value) {
                if (!is_array($value) && $value != '') {
                    if (!$first) {
                        $query .= ',';
                    }
                    $query .= $fieldName . '="' . addslashes(trim($value)) . '"';
                    $first = false;
                }
            }
            mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
            $entry['notice_id'] = mysql_insert_id();
            if ($pmb_type_audit && ($webdav_current_user_id || $webdav_current_user_name) && $entry['create_date']) {
                //ajout des informations d'audit
                $query = 'INSERT INTO audit (type_obj,object_id,user_id,user_name,type_modif,quand) VALUES (1,' . $entry['notice_id'] . ',' . $webdav_current_user_id . ',"' . addslashes($webdav_current_user_name) . '",1,"' . $entry['create_date'] . '")';
                mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
            }
        }
        //les champs persos
        if (sizeof($entry['cp'])) {
            foreach ($entry['cp'] as $cp) {
                \parametres_perso::import($entry['notice_id'], $cp['field'], $cp['value'], 'notices');
            }
        }
        //ajout dans les tables annexes a la notice
        if (sizeof($entry['annexes'])) {
            foreach ($entry['annexes'] as $typeAnnexe => $annexes) {
                foreach ($annexes as $id => $annexe) {
                    switch ($typeAnnexe) {
                        case 'responsability':
                            //Import et récupération des identifiants auteurs
                            $entry['annexes'][$typeAnnexe][$id]['responsability_author'] = \auteur::import($entry['annexes'][$typeAnnexe][$id]['authors']);
                            $entry['annexes'][$typeAnnexe][$id]['responsability_notice'] = $entry['notice_id'];
                            break;
                        case 'notices_categories':
                            //Import et récupération des identifiants catégories
                            $query = 'SELECT num_noeud FROM categories WHERE libelle_categorie="' . addslashes(trim($entry['annexes'][$typeAnnexe][$id]['categories']['libelle_categorie'])) . '" AND num_thesaurus=' . $entry['annexes'][$typeAnnexe][$id]['categories']['num_thesaurus'] . ' AND langue="' . $entry['annexes'][$typeAnnexe][$id]['categories']['langue'] . '"';
                            $result = mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
                            if (mysql_num_rows($result)) {
                                //le noeud existe déjà
                                $entry['annexes'][$typeAnnexe][$id]['num_noeud'] = mysql_result($result, 0, 0);
                            } else {
                                //le noeud n'existe pas, on cherche le parent non classé
                                $query = 'SELECT id_noeud FROM noeuds WHERE autorite="NONCLASSES" AND num_thesaurus=' . $entry['annexes'][$typeAnnexe][$id]['categories']['num_thesaurus'];
                                $result = mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
                                if (mysql_num_rows($result)) {
                                    //on ajoute le noeud
                                    $query = 'INSERT INTO noeuds SET num_parent=' . mysql_result($result, 0, 0) . ', visible=1, num_thesaurus=' . $entry['annexes'][$typeAnnexe][$id]['categories']['num_thesaurus'];
                                    mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
                                    $entry['annexes']['notices_categories'][$id]['num_noeud'] = mysql_insert_id();
                                    //on ajoute la catégorie
                                    $categorie = new \categories($entry['annexes'][$typeAnnexe][$id]['num_noeud'], $entry['annexes'][$typeAnnexe][$id]['categories']['langue']);
                                    $categorie->libelle_categorie = trim($entry['annexes'][$typeAnnexe][$id]['categories']['libelle_categorie']);
                                    $categorie->save();
                                }
                            }
                            $entry['annexes'][$typeAnnexe][$id]['notcateg_notice'] = $entry['notice_id'];
                            break;
                        case 'notices_langues':
                            $entry['annexes'][$typeAnnexe][$id]['num_notice'] = $entry['notice_id'];
                            break;
                        case 'notices_authorities_sources':
                            $entry['annexes'][$typeAnnexe][$id]['num_notice'] = $entry['notice_id'];
                            break;
                        case 'notices_relations':
                            $entry['annexes'][$typeAnnexe][$id]['num_notice'] = $entry['notice_id'];
                            break;
                        case 'notices_titres_uniformes':
                            $entry['annexes'][$typeAnnexe][$id]['ntu_num_notice'] = $entry['notice_id'];
                            break;
                    }
                    $first = true;
                    $query = 'INSERT IGNORE INTO ' . $typeAnnexe . ' SET ';
                    foreach ($entry['annexes'][$typeAnnexe][$id] as $fieldName => $value) {
                        if (!is_array($value) && $value != '') {
                            if (!$first) {
                                $query .= ',';
                            }
                            $query .= $fieldName . '="' . addslashes(trim($value)) . '"';
                            $first = false;
                        }
                    }
                    mysql_query($query) or die('Echec d\'execution de la requete ' . $query . '  : ' . mysql_error());
                }
            }
        }
        \notice::majNoticesTotal($entry['notice_id']);
    }