コード例 #1
0
ファイル: extraire_boutons.php プロジェクト: nursit/SPIP
/**
 * Analyser un arbre xml et extraire les infos concernant les boutons et onglets
 *
 * @param <type> $arbre
 * @return <type> 
 */
function plugins_extraire_boutons_dist($arbre)
{
    $ret = array('bouton' => array(), 'onglet' => array());
    // recuperer les boutons et onglets si necessaire
    spip_xml_match_nodes(",^(bouton|onglet)\\s,", $arbre, $les_boutons);
    if (is_array($les_boutons) && count($les_boutons)) {
        $ret['bouton'] = array();
        $ret['onglet'] = array();
        foreach ($les_boutons as $bouton => $val) {
            $bouton = spip_xml_decompose_tag($bouton);
            $type = reset($bouton);
            $bouton = end($bouton);
            if (isset($bouton['id'])) {
                $id = $bouton['id'];
                $val = reset($val);
                if (is_array($val)) {
                    $ret[$type][$id]['parent'] = isset($bouton['parent']) ? $bouton['parent'] : '';
                    $ret[$type][$id]['position'] = isset($bouton['position']) ? $bouton['position'] : '';
                    $ret[$type][$id]['titre'] = isset($val['titre']) ? trim(spip_xml_aplatit($val['titre'])) : '';
                    $ret[$type][$id]['icone'] = isset($val['icone']) ? trim(end($val['icone'])) : '';
                    $ret[$type][$id]['action'] = isset($val['url']) ? trim(end($val['url'])) : '';
                    $ret[$type][$id]['parametres'] = isset($val['args']) ? trim(end($val['args'])) : '';
                }
            }
        }
    }
    return $ret;
}
コード例 #2
0
ファイル: compositions.php プロジェクト: samszo/open-edition
/**
 * Charger les informations contenues dans le xml d'une composition
 *
 * @param string $nom
 * @param string $info
 * @return array|string
 */
function compositions_charger_infos($nom,$info=""){
		// on peut appeller avec le nom du squelette
		$nom = preg_replace(',[.]html$,i','',$nom).".xml";
		include_spip('inc/xml');
		$composition = array();
		if ($xml = spip_xml_load($nom,false)){
			if (count($xml['composition'])){
				$xml = reset($xml['composition']);
				$composition['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom']));
				$composition['description'] = isset($xml['description'])?_T_ou_typo(spip_xml_aplatit($xml['description'])):'';
				if (isset($xml['icon'])) {
					$icon = chemin_image(reset($xml['icon']));
					if (!$icon) {
						$icon = find_in_path(reset($xml['icon']));
					}
				} else {
					$icon = '';
				}
				$composition['image_exemple'] = isset($xml['image_exemple']) ? find_in_path(reset($xml['image_exemple'])) : '';
				$composition['icon'] = $icon;
				$composition['class'] = isset($xml['class']) ? trim(reset($xml['class'])) : '';
				$composition['configuration'] = isset($xml['configuration']) ? spip_xml_aplatit($xml['configuration']) : '';
				$composition['branche'] = array();
				if (spip_xml_match_nodes(',^branche,', $xml, $branches)){
					foreach (array_keys($branches) as $branche){
						list($balise, $attributs) = spip_xml_decompose_tag($branche);
						$composition['branche'][$attributs['type']] = $attributs['composition'];
					}
				}
			}
		}
		if (!$info)
			return $composition;
		else 
			return isset($composition[$info])?$composition[$info]:"";
}
コード例 #3
0
ファイル: infos_plugin.php プロジェクト: genma/spip_ynh
function plugins_infos_plugin($desc, $plug = '', $dir_plugins = _DIR_PLUGINS)
{
    include_spip('inc/xml');
    $arbre = spip_xml_parse($desc);
    $verifie_conformite = charger_fonction('verifie_conformite', 'plugins');
    $verifie_conformite($plug, $arbre, $dir_plugins);
    include_spip('inc/charsets');
    // On renvoie la DTD utilisee
    $ret['dtd'] = "plugin";
    if (isset($arbre['categorie'])) {
        $ret['categorie'] = trim(spip_xml_aplatit($arbre['categorie']));
    }
    if (isset($arbre['nom'])) {
        $ret['nom'] = charset2unicode(spip_xml_aplatit($arbre['nom']));
    }
    if (isset($arbre['icon'])) {
        $ret['logo'] = trim(spip_xml_aplatit($arbre['icon']));
    }
    if (isset($arbre['auteur'])) {
        $ret['auteur'][] = trim(spip_xml_aplatit($arbre['auteur']));
    }
    // garder le 1er niveau en tableau mais traiter le multi possible
    if (isset($arbre['licence'])) {
        $ret['licence'][] = trim(spip_xml_aplatit($arbre['licence']));
    }
    if (isset($arbre['version'])) {
        $ret['version'] = trim(spip_xml_aplatit($arbre['version']));
    }
    if (isset($arbre['version_base'])) {
        $ret['schema'] = trim(spip_xml_aplatit($arbre['version_base']));
    }
    if (isset($arbre['etat'])) {
        $ret['etat'] = trim(spip_xml_aplatit($arbre['etat']));
    }
    $ret['description'] = $ret['slogan'] = "";
    if (isset($arbre['slogan'])) {
        $ret['slogan'] = trim(spip_xml_aplatit($arbre['slogan']));
    }
    if (isset($arbre['description'])) {
        $ret['description'] = trim(spip_xml_aplatit($arbre['description']));
    }
    if (isset($arbre['lien'])) {
        $ret['documentation'] = trim(join(' ', $arbre['lien']));
        if ($ret['documentation']) {
            // le lien de doc doit etre une url et c'est tout
            if (!preg_match(',^https?://,iS', $ret['documentation'])) {
                $ret['documentation'] = "";
            }
        }
    }
    if (isset($arbre['options'])) {
        $ret['options'] = $arbre['options'];
    }
    if (isset($arbre['fonctions'])) {
        $ret['fonctions'] = $arbre['fonctions'];
    }
    if (isset($arbre['prefix'][0])) {
        $ret['prefix'] = trim(array_pop($arbre['prefix']));
    }
    if (isset($arbre['install'])) {
        $ret['install'] = $arbre['install'];
    }
    if (isset($arbre['meta'])) {
        $ret['meta'] = trim(spip_xml_aplatit($arbre['meta']));
    }
    $necessite = info_plugin_normalise_necessite($arbre['necessite']);
    $ret['compatibilite'] = isset($necessite['compatible']) ? $necessite['compatible'] : '';
    $ret['necessite'] = $necessite['necessite'];
    $ret['lib'] = $necessite['lib'];
    $ret['utilise'] = info_plugin_normalise_utilise($arbre['utilise']);
    $ret['procure'] = info_plugin_normalise_procure($arbre['procure']);
    $ret['chemin'] = info_plugin_normalise_chemin($arbre['path']);
    if (isset($arbre['pipeline'])) {
        $ret['pipeline'] = $arbre['pipeline'];
    }
    $extraire_boutons = charger_fonction('extraire_boutons', 'plugins');
    $les_boutons = $extraire_boutons($arbre);
    $ret['menu'] = $les_boutons['bouton'];
    $ret['onglet'] = $les_boutons['onglet'];
    $ret['traduire'] = $arbre['traduire'];
    if (isset($arbre['config'])) {
        $ret['config'] = spip_xml_aplatit($arbre['config']);
    }
    if (isset($arbre['noisette'])) {
        $ret['noisette'] = $arbre['noisette'];
    }
    if (isset($arbre['erreur'])) {
        $ret['erreur'] = $arbre['erreur'];
        if ($plug) {
            spip_log("infos_plugin {$plug} " . @join(' ', $arbre['erreur']));
        }
    }
    return $ret;
}
コード例 #4
0
ファイル: xml.php プロジェクト: xablen/Semaine14_SPIP_test
function spip_xml_aplatit($arbre, $separateur = " ")
{
    $s = "";
    if (is_array($arbre)) {
        foreach ($arbre as $tag => $feuille) {
            if (is_array($feuille)) {
                if ($tag !== intval($tag)) {
                    $f = spip_xml_aplatit($feuille, $separateur);
                    if (strlen($f)) {
                        $tagf = explode(" ", $tag);
                        $tagf = $tagf[0];
                        $s .= "<{$tag}>{$f}</{$tagf}>";
                    } else {
                        $s .= "<{$tag} />";
                    }
                } else {
                    $s .= spip_xml_aplatit($feuille);
                }
                $s .= $separateur;
            } else {
                $s .= "{$feuille}{$separateur}";
            }
        }
    }
    return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
}
コード例 #5
0
ファイル: xml.php プロジェクト: rhertzog/lcs
function spip_xml_aplatit($arbre,$separateur = " "){
	$s = "";
	if (is_array($arbre))
		foreach($arbre as $tag=>$feuille){
			if (is_array($feuille)){
				if ($tag!==intval($tag)){
					$f = spip_xml_aplatit($feuille, $separateur);
					if (strlen($f)) {
						$tagf = explode(" ",$tag);
						$tagf = $tagf[0];
						$s.="<$tag>$f</$tagf>";
					}
					else $s.="<$tag />";
				}
				else
					$s.=spip_xml_aplatit($feuille);
				$s .= $separateur;
			}
			else
				$s.="$feuille$separateur";
		}
	return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s;
}
コード例 #6
0
ファイル: svp_phraser.php プロジェクト: genma/spip_ynh
/**
 * Aplatit plusieurs clés d'un arbre xml dans un tableau
 * 
 * Effectue un trim() de la valeur trouvée dans l'arbre
 *
 * @param array $balises
 *     Liste de noms de balises XML.
 *     Peut aussi être un tableau indiquant un renommage d'une balise
 *     au passage tel que 'x' => 'y' qui cherchera x dans l'arbre XML et
 *     l'applatira dans y.
 * @param array $arbre_xml
 *     Un arbre issu de spip_xml_parse()
 * @param string $mode
 *     Mode d'affectation des valeurs trouvées
 *     - 'vide_et_nonvide' : Affecte une chaine vide si la balise n'est
 *       pas trouvée dans l'arbre et affecte la valeur de la balise sinon.
 *     - 'nonvide' : Si la balise n'est pas trouvée dans l'arbre ou si son
 *       contenu est vide, affecte la valeur du tableau initial concernant
 *       cette balise si elle est connue.
 * @param array
 *     Tableau initial pouvant contenir des valeurs par défaut à affecter
 *     à chaque balise avec 'x' => 'valeur'
 */
function svp_aplatir_balises($balises, $arbre_xml, $mode = 'vide_et_nonvide', $tableau_initial = array())
{
    $tableau_aplati = array();
    if (!$balises) {
        return $tableau_initial;
    }
    foreach ($balises as $_cle => $_valeur) {
        $tag = is_string($_cle) ? $_cle : $_valeur;
        $valeur_aplatie = '';
        if (isset($arbre_xml[$tag])) {
            $valeur_aplatie = trim(spip_xml_aplatit($arbre_xml[$tag]));
        }
        if ($mode == 'vide_et_nonvide' or $mode == 'nonvide' and $valeur_aplatie) {
            $tableau_aplati[$_valeur] = $valeur_aplatie;
        } else {
            $tableau_aplati[$_valeur] = isset($tableau_initial[$_valeur]) ? $tableau_initial[$_valeur] : '';
        }
    }
    return $tableau_aplati;
}
コード例 #7
0
ファイル: importer.php プロジェクト: rhertzog/lcs
function snippets_articles_importer($id_target,$arbre,$contexte){
	include_spip('base/serial');
	include_spip('base/abstract_sql');
	include_spip('inc/snippets');
	
	$table_prefix = $GLOBALS['table_prefix'] ;

	$champs_non_importables = array("id_article","id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
	$champs_non_ajoutables = array('titre','date','date_redac','lang');
	$champs_jointures = array('auteur','mot');
	$champs_defaut_values = array('statut'=>'lememe');
	$table = 'spip_articles';
	$primary = 'id_article';
	$fields = $GLOBALS['tables_principales']['spip_articles']['field'];
	$tag_objets="articles";
	$tag_objet="article";
	$translations = array();
	
	$forcer_id = false ; // mettre true pour garder les meme id que dans le XML
	$forcer_maj = false ; // mettre true pour mettre a jour un lot d'articles de meme titre que dans le spip cible
	
	
	if ($arbre && isset($arbre[$tag_objets]))
		foreach($arbre[$tag_objets] as $objets){
			foreach($objets[$tag_objet] as $objet){
			spip_log($objet['titre'],"snippets");
				$creation = false;
				$auteur_connu = false ;
				
				// mettre a jour des articles deja en bdd avec le xml fournit
				if($forcer_maj){
				$id_target = '';
				$id_article_trouve = sql_fetsel("id_article","spip_articles","titre=".sql_quote($objet['titre'][0])); // ajouter la rub courrante
				$id_target = $id_article_trouve['id_article'] ;
				if(!intval($id_target))
					spip_log($objet['titre'][0].$id_target,"snippets_titres_erreur");
				}
				
				include_spip('action/editer_article');
				// si c'est une creation, creer le formulaire avec les infos d'entete
				if (!($id_objet=intval($id_target))){
					if (preg_match(",id_rubrique=([0-9]*),i",$contexte,$regs))
						$id_rubrique=intval($regs[1]);
					$id_objet = insert_article($id_rubrique);
					
					// forcer l'id
					if($forcer_id){
					$champs_non_importables = array("id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
					$sql = "UPDATE ".$table_prefix."_articles SET id_article = '".$objet['id_article'][0]."' WHERE id_article = '$id_objet'";
        			spip_query($sql); 
        			$id_objet = $objet['id_article'][0] ;
					}
					
					$creation = true;
				}
				// sinon on ajoute chaque champ, sauf le titre
				$row = spip_fetch_array(spip_query("SELECT * FROM $table WHERE $primary="._q($id_objet)));
				foreach (array_keys($row) as $key)
					if ( 	!in_array($key,$champs_non_importables) 
						AND !in_array($key,$champs_jointures) 
						AND ($creation OR !in_array($key,$champs_non_ajoutables) OR !$row[$key])
						AND isset($objet[$key])){
						$v=trim(spip_xml_aplatit($objet[$key]));
						$row[$key] = ($creation or $forcer_maj)?$v:($row[$key].$v);
					}
								
				revisions_articles($id_objet , $row);
				$translations[] = array($table,$objet[$primary],$id_objet);
				// gerer l'import de liens eventuels
				if ($id AND isset($objet['liens'])){
					foreach($objet['liens'] as $liens){
						// A FAIRE
					}
				}
				
				$id_article = $id_objet ; 
				
				if ( $objet['auteur'] AND ($creation OR $forcer_maj)){
					$auteur_connu = true ;
					sql_delete("spip_auteurs_articles","id_article=".sql_quote($id_article));
					foreach($objet['auteur'] as $nom){
					// ajouter l'auteur
						spip_log($nom,"snippets");
						$id_auteur = get_id_auteur($nom);
  				         if ($id_auteur) {  
  				         spip_log($nom.$id_auteur,"snippets");
        				 $sql="INSERT INTO ".$table_prefix."_auteurs_articles (id_auteur, id_article) VALUES ($id_auteur, $id_article)";
        				 spip_query($sql);                              				              	
        				}                   							
					}
				}	
				
				if($auteur_connu){
				// se virer soi-meme
        		$connect_id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ;
        		$sql = "DELETE FROM ".$table_prefix."_auteurs_articles WHERE id_auteur = '$connect_id_auteur' AND id_article = '$id_article'";
        		spip_query($sql); 
        		}
        		
        		// statut de l'article
        		if($champs_defaut_values['statut'] != 'prepa'){
        		$sql = "UPDATE ".$table_prefix."_articles SET statut = '".$objet['statut'][0]."' WHERE id_article = '$id_article'";
        		spip_query($sql); 
        		}
        		
        		
        		if ( $objet['mot'] AND ($creation OR $forcer_maj)){
			
					sql_delete("spip_mots_articles","id_article=".sql_quote($id_article));
					foreach($objet['mot'] as $mot){
					spip_log($mot,"snippets");
					// ajouter le mot cle
					$id_article = $id_objet ;
					$table_prefix = $GLOBALS['table_prefix'] ;
						$id_mot  = get_id_mot($mot);
  				         if ($id_mot) {  				                
        				 $sql="INSERT INTO ".$table_prefix."_mots_articles (id_mot, id_article) VALUES ($id_mot, $id_article)";
        				 spip_query($sql);                              				              	
        				}                   							
					}
				}	
        		
        		
        		
        		if ( $objet['document'] AND ($creation OR $forcer_maj)){
			
					sql_delete("spip_documents_liens","id_objet=".sql_quote($id_article)." and objet='article'");
					foreach($objet['document'] as $doc){
					spip_log("--> ".$doc,"snippets");
					// ajouter le doc
					list($id,$fichier,$extension,$titre,$descriptif) = explode('|',$doc) ;
					spip_log("--- $id,$fichier,$extension,$titre","snippets");
					spip_log("hop ".$fichier,"snippets");
					$table_prefix = $GLOBALS['table_prefix'] ;
						 $id_doc  = get_id_doc($fichier);
  				         if ($id_doc) {  				                
        				 spip_log("hop doc".$fichier."trouve".$id_doc,"snippets");
        				 $sql="INSERT INTO ".$table_prefix."_documents_liens (id_document, id_objet, objet) VALUES ($id_doc, $id_article,'article')";
        				 spip_query($sql);                              				              	
        				 }else{
        				 // au cas ou, on creer un doc, mais il vaut mieux transferer les doc avec toutes les infos avant de snippet
        				 $a =  array(
							'date' => 'NOW()',
							'distant' => 'non',
							'mode' => 'image',
							'titre'=> $titre,
							'descriptif'=> $descriptif,
							'extension'=> $extension,
							'fichier' => $fichier );
							
							//'largeur' => $largeur,
							//'hauteur' => $hauteur,
							//'taille' => $taille,
							
						if($forcer_id) $a['id_document'] = $id ;	
			 	    	
			 	    	$id = sql_insertq("spip_documents", $a);
        				spip_log ("ajout du document $fichier $titre  (M 'image' T 'article' L '$id_article' D '$id')","snippets");
        				
        				sql_insertq("spip_documents_articles",
   	                    	array('id_document' => $id,
    	                    'id_article' => $id_article));
        				 
        				 }
        				
					}
				}
        	
        		
        		
			}
		}
	return $translations;
}
コード例 #8
0
ファイル: importer.php プロジェクト: rhertzog/lcs
function snippets_rubriques_importer($id_target,$arbre,$contexte){
	include_spip('base/serial');
	include_spip('base/abstract_sql');
	include_spip('inc/snippets');
	include_spip('snippets/articles/importer');
	
	$table_prefix = $GLOBALS['table_prefix'] ;

	$champs_non_importables = array('id_article',"id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
	$champs_non_ajoutables = array('titre',"statut",'date','date_redac','lang');
	$champs_jointures = array('auteur','mot');
	$champs_defaut_values = array('statut'=>'prop');
	$table = 'spip_rubriques';
	$primary = 'id_rubrique';
	$fields = $GLOBALS['tables_principales']['spip_rubriques']['field'];
	$tag_objets="rubriques";
	$tag_objet="rubrique";
	$translations = array();
	
	if ($arbre && isset($arbre[$tag_objets]))
		foreach($arbre[$tag_objets] as $objets){
			foreach($objets[$tag_objet] as $objet){
				include_spip('action/editer_rubrique');
				// si c'est une creation, creer le formulaire avec les infos d'entete
				if (!($id_objet=intval($id_target))){
					if (preg_match(",id_rubrique=([0-9]*),i",$contexte,$regs))
						$id_rubrique=intval($regs[1]);
					$id_objet = insert_rubrique($id_rubrique);
					$creation = true;
				}
				// sinon on ajoute chaque champ, sauf le titre
				$row = spip_fetch_array(spip_query("SELECT * FROM $table WHERE $primary="._q($id_objet)));
				foreach (array_keys($row) as $key)
					if ( 	!in_array($key,$champs_non_importables) 
						AND !in_array($key,$champs_jointures) 
						AND ($creation OR !in_array($key,$champs_non_ajoutables) OR !$row[$key])
						AND isset($objet[$key])){
						$v=trim(spip_xml_aplatit($objet[$key]));
						$row[$key] = $creation?$v:($row[$key].$v);
					}
								
				revisions_rubriques($id_objet , $row);
				//$translations[] = array($table,$objet[$primary],$id_objet);
				// gerer l'import de liens eventuels
				
				if ( $objet['liste_articles']){
					snippets_articles_importer("",$objet['liste_articles'][0],"id_rubrique=$id_objet") ;              							
				}
				
				
				if ($objet['liste_rubriques']){
				snippets_rubriques_importer("",$objet['liste_rubriques'][0],"id_rubrique=$id_objet");
				}
				
        		
        		
        		
			}
		}
	return "";
}