get_subfield_array_array($value["field"],$value["subfield"]); } } } /*Si $tabl_categ_lib est un tableau alors les catégories ne seront pas crées mais elles seront enregistrées dans ce tableau Retourne un tableau de la forme suivante quelque soit les paramètres à l'import : Array( [0] => Array( [wording] => libellé de la catégorie // Vide dans le cas de la reprise hiérarchisée sinon toujours renseigné [id_authority] => numéro d'autorité // Présent si dans le fichier import_category.xml on a définit le paramère authority_number pour le tag field et que l'on a autant de authority_number dans le champ unimarc que de catégorie reliée à la notice dans PMB Dans le cas d'une reprise d'un champ de façon hiérarchique authority_number sera associé au terme de plus bas niveau [id_pmb] => id_noeud de PMB // Présent si le noeud a été créé dans la base (si fonction appelée sans paramètre) ) ) Dans le cas d'une reprise hiérarchique sans créatation direct (Z-3950) la gestion des autorités n'est pas encore réalisée */ public static function save_info_categ(&$tabl_categ_lib=""){ global $tabl_categ_recovery,$tabl_categ_recovered; $tabl_link_authority=array(); /*echo "
";
    	print_r($tabl_categ_recovered);
    	echo "
";*/ if(count($tabl_categ_recovered)){ global $incr_categ; $incr_categ=-1; foreach ( $tabl_categ_recovery as $root ) { foreach ( $root as $thes ) { $obj_thes= new thesaurus($thes["ID"]); if($obj_thes ->num_noeud_racine){//Test pour savoir si le thésaurus existe foreach ( $thes["CATEGORY"] as $field_root ) { $root_node_object=""; switch ($field_root["ID"]) { case "TOP": $root_node_object=new noeuds($obj_thes ->num_noeud_racine); break; case "ORPHELINS": $root_node_object=new noeuds($obj_thes->num_noeud_orphelins); break; case "NONCLASSES": $root_node_object=new noeuds($obj_thes->num_noeud_nonclasses); break; default: $root_node_object=new noeuds($field_root["ID"]); if($root_node_object->num_thesaurus != $obj_thes ->id_thesaurus){ $root_node_object=""; } break; } if($root_node_object){ $root_node_number=$root_node_object->id_noeud; }else{ $root_node_number=0; } foreach ( $field_root["FIELD"] as $field_val ) { $name_field=$field_val["CODE"]; if($field_val["ORDER"] == "import"){ //on reprends la liste des sous champs dans l'ordre du fichier de notice $subfield=array(); foreach ( $field_val["SUBFIELD"] as $subfield_root ) { $subfield[$subfield_root["CODE"]]=$subfield_root; } for ($_1=0; $_1id_thesaurus,$root_node_number); }else{ $tmp_build=array(); $tmp_build["wording"]=$wording; $tmp_build["id_thes"]=$obj_thes ->id_thesaurus; $tmp_build["id_parent"]=$root_node_number; $tabl_categ_lib[]=$tmp_build; } $tabl_link_authority[]=$tabl_autho_temp; } }else{ //on reprend la liste des sous champs $subfield=array(); $subfield=$field_val["SUBFIELD"]; //On parcours les champs de la notice pour créer les catégories for ($_1=0; $_1id_thesaurus,$root_node_number); }else{ $tmp_build=array(); $tmp_build["wording"]=$wording; $tmp_build["id_thes"]=$obj_thes ->id_thesaurus; $tmp_build["id_parent"]=$root_node_number; $tabl_categ_lib[]=$tmp_build; } $tabl_link_authority[]=$tabl_autho_temp; } } }else{ $wording=""; if(!$subfield[0]["REPEAT"]){ //Pas de répétion $wording=trim($tabl_categ_recovered[$name_field.$subfield[0]["CODE"]][$_1][0]); }elseif($subfield[0]["REPEAT"] == "2"){ //On répette le premier sous champs dans le libellé for ($_2=0; $_2id_thesaurus,$root_node_number); }else{ $tmp_build=array(); $tmp_build["wording"]=$wording; $tmp_build["id_thes"]=$obj_thes ->id_thesaurus; $tmp_build["id_parent"]=$root_node_number; $tabl_categ_lib[]=$tmp_build; } $tabl_link_authority[]=$tabl_autho_temp; }else{ //Si fils $create_node=true; if(!$root_node_number){ $create_node=false; } if(!is_array($tabl_categ_lib)){ global $tabl_id_categ_link; $tabl_id_categ_link=array(); $id_field_parent=category_auto::build_categ($wording,$obj_thes ->id_thesaurus,$root_node_number,false,$create_node); category_auto::browse_category($subfield[0]["SUBFIELD"],$tabl_categ_recovered,$name_field,$_1,$obj_thes ->id_thesaurus,$id_field_parent,$tabl_categ_lib,$create_node); if($field_val["AUTHORITY_NUMBER"] && (count($tabl_categ_recovered[$name_field.$field_val["AUTHORITY_NUMBER"]][$_1]) == count($tabl_id_categ_link))){ foreach ( $tabl_categ_recovered[$name_field.$field_val["AUTHORITY_NUMBER"]][$_1] as $key => $value ) { $tabl_autho_temp=array(); $tabl_autho_temp["id_authority"]=$value; $tabl_autho_temp["id_pmb"]=$tabl_id_categ_link[$key]; $tabl_link_authority[]=$tabl_autho_temp; } } }else{ $tmp_build=array(); $tmp_build["wording"]=$wording; $tmp_build["id_thes"]=$obj_thes ->id_thesaurus; $tmp_build["id_parent"]=$root_node_number; $tmp_build["link"]=0; $tabl_categ_lib[]=$tmp_build; category_auto::browse_category($subfield[0]["SUBFIELD"],$tabl_categ_recovered,$name_field,$_1,$obj_thes ->id_thesaurus,$wording,$tabl_categ_lib,$create_node); } } } } } } } } } } } /*echo "
";
    	print_r($tabl_link_authority);
    	echo "
";*/ return $tabl_link_authority; } public static function browse_subfields($tab_ss_champ,$name_field,&$tabl_categ_has_recovered){ foreach ( $tab_ss_champ as $key => $subfield_root ) { $tmp=array(); $tmp["field"]=$name_field; $tmp["subfield"]=$subfield_root["CODE"]; $tabl_categ_has_recovered[]=$tmp; if(!empty($subfield_root["SUBFIELD"])) { category_auto::browse_subfields($subfield_root["SUBFIELD"],$name_field,$tabl_categ_has_recovered); } } } public static function browse_category($subfield,$tabl_categ_recovered,$name_field,$counter_field,$id_thes,$root_node_number,&$tabl_categ_lib,$create_node){ global $incr_categ,$notice_id,$tabl_id_categ_link; $creation=0; $id_noeud=$root_node_number; foreach ( $subfield as $key => $subfield_root ) { //Je parcours les sous-champs for ($_2=0; $_2num_parent=$id_parent; $n->num_thesaurus=$id_thes; $n->save(); $resultat=$id_n=$n->id_noeud; $c=new categories($id_n, $lang); $c->libelle_categorie=$tab_categ; $c->save(); } // ajout de l'indexation à la notice dans la table notices_categories if($do_lien && $resultat && $notice_id){ $incr_categ++; $rqt_ajout = "insert IGNORE into notices_categories set notcateg_notice='".$notice_id."', num_noeud='".$resultat."', ordre_categorie='".$incr_categ."' " ; pmb_mysql_query($rqt_ajout); } return $resultat; } return 0; } } ?>