Exemple #1
0
/**
 * @return boolean
 */
function spiplistes_utiliser_facteur()
{
	static $utiliser;
	if($utiliser === null)
	{
		$utiliser =
			(_SPIPLISTES_UTILISER_FACTEUR == 'oui')
			&& function_exists('liste_plugin_actifs')
			&& ($p = liste_plugin_actifs())
			&& isset($p['FACTEUR'])
			&& spiplistes_log('plugin facteur');
	}
	return($utiliser);
}
Exemple #2
0
function filtre_info_plugin_dist($plugin, $type_info)
{
    include_spip('inc/plugin');
    $plugin = strtoupper($plugin);
    $plugins_actifs = liste_plugin_actifs();
    if (!$plugin) {
        return serialize(array_keys($plugins_actifs));
    } elseif (empty($plugins_actifs[$plugin])) {
        return '';
    } elseif ($type_info == 'est_actif') {
        return $plugins_actifs[$plugin] ? 1 : 0;
    } elseif (isset($plugins_actifs[$plugin][$type_info])) {
        return $plugins_actifs[$plugin][$type_info];
    } else {
        $get_infos = charger_fonction('get_infos', 'plugins');
        // On prend en compte les extensions
        if (!is_dir($plugins_actifs[$plugin]['dir_type'])) {
            $dir_plugins = constant($plugins_actifs[$plugin]['dir_type']);
        } else {
            $dir_plugins = $plugins_actifs[$plugin]['dir_type'];
        }
        if (!($infos = $get_infos($plugins_actifs[$plugin]['dir'], false, $dir_plugins))) {
            return '';
        }
        if ($type_info == 'tout') {
            return $infos;
        } else {
            return strval($infos[$type_info]);
        }
    }
}
/**
 * Récupère les identifiants des plugins déjà installés
 *
 * @uses  liste_plugin_actifs()
 * @return array
 *     Liste d'identifiants de plugins
 */
function svp_lister_plugins_installes()
{
    $ids = array();
    // On recupere la liste des plugins installes physiquement sur le site
    // Pour l'instant ce n'est pas possible avec les fonctions natives de SPIP
    // donc on se contente des plugins actifs
    // - liste des prefixes en lettres majuscules des plugins actifs
    $plugins = liste_plugin_actifs();
    // - liste des id de plugin correspondants
    //   Il se peut que certains plugins ne soient pas trouves dans la bdd car aucun zip n'est disponible
    //   (donc pas inclus dans archives.xml). C'est le cas des plugins_dist du core
    $ids = sql_allfetsel('id_plugin', 'spip_plugins', sql_in('prefixe', array_keys($plugins)));
    $ids = array_map('reset', $ids);
    $ids = array_map('intval', $ids);
    return $ids;
}
Exemple #4
0
/**
 * Liste les chemins vers les plugins actifs du dossier fourni en argument
 * a partir d'une liste d'elelements construits par plugin_valide_resume
 *
 * @param string $dir_plugins
 *     Chemin du répertoire de plugins
 * @return array
 */
function liste_chemin_plugin_actifs($dir_plugins = _DIR_PLUGINS)
{
    include_spip('plugins/installer');
    return liste_chemin_plugin(liste_plugin_actifs(), $dir_plugins);
}
Exemple #5
0
function installe_plugins($test = false){
	$meta_plug_installes = array();

	// vider le cache des descriptions de tables avant installation
	$trouver_table = charger_fonction('trouver_table', 'base');
	$trouver_table('');

	$liste = liste_plugin_actifs();
	$get_infos = charger_fonction('get_infos','plugins');

	foreach ($liste as $prefix=>$resume) {
		$plug = $resume['dir'];
		$dir_type = $resume['dir_type'];		
		$infos = $get_infos($plug,false,constant($dir_type));
		if ($infos AND isset($infos['install'])){
			if ($test) return true; // il y a des installations a faire
			$ok = installe_un_plugin($plug,$infos,$dir_type);
			// on peut enregistrer le chemin ici car il est mis a jour juste avant l'affichage
			// du panneau -> cela suivra si le plugin demenage
			if ($ok)
				$meta_plug_installes[] = $plug;
			// vider le cache des descriptions de tables apres chaque installation
			$trouver_table('');
		}
	}
	ecrire_meta('plugin_installes',serialize($meta_plug_installes),'non');
	if ($test) return false; // il n'y a pas d'installations a faire
	return true; // succes
}
function inc_odt2spip_generer_sortie($id_auteur,$rep_dezip){
	// variables en dur pour xml en entree et xslt utilisee
	// $xml_entre = $rep_dezip.'content.xml';  // chemin du fichier xml a lire  !!! ce chemin absolu ne fonctionne pas pour PHP4 !!!
	$xml_entre = _DIR_TMP.'odt2spip/'.$id_auteur.'/content.xml';  // chemin du fichier xml a lire
	$xslt_texte = _DIR_PLUGIN_ODT2SPIP.'inc/odt2spip.xsl'; //'inc/odt2spip_texte.xsl';  // chemin de la xslt a utiliser pour le texte
    
	// fichier de sortie
	$fichier_sortie = $rep_dezip.'snippet_odt2spip.xml';

	// determiner si le plugin enluminure_typo ou intertitres_enrichis est present & actif
	include_spip('inc/plugin');
	$Tplugins = liste_plugin_actifs();
	$intertitres_riches = ((array_key_exists('TYPOENLUMINEE', $Tplugins) OR array_key_exists('INTERTITRESTDM', $Tplugins)) ? 'oui' : 'non'); 
   
  // si il n'existe pas de titre:h dans le doc, on parametre ici la longueur max du paragraphe utilise pour remplacer
  $nb_carateres_titre = 50;
  
	// appliquer la transformation XSLT sur le fichier content.xml
	// daterminer si on est en php 4 ou php 5 pour choisir les fonctions xslt a utiliser
	// on est php5: utiliser les fonctions de la classe XSLTProcessor
	// verifier que l'extension xslt est active
	if (!class_exists('XSLTProcessor')) die(_T('odtspip:err_extension_xslt'));
        $proc = new XSLTProcessor();

		// passage des parametres a la xslt
		$proc->setParameter(null, 'IntertitresRiches', $intertitres_riches);  
    $proc->setParameter(null, 'NombreCaracteresTitre', $nb_carateres_titre);
        
        $xml = new DOMDocument();
        $xml->load($xml_entre);
        $xsl = new DOMDocument();
        $xsl->load($xslt_texte);
        $proc->importStylesheet($xsl); // attachement des regles xsl
        
      // lancer le parseur
        if (!$xml_sortie = $proc->transformToXml($xml)) die(_T('odtspip:err_transformation_xslt'));

	// traitements complementaires du flux de sortie
    // remplacer les > et <
    $a_remplacer = array('&#60;','&#62;','&lt;','&gt;', '"', "<date/>");
    $remplace = array('<','>','<','>', "'", '<date>'.(date("Y-m-d H:i:s")).'</date>');
    $xml_sortie = str_replace($a_remplacer, $remplace, $xml_sortie);
    
    // gerer la conversion des <math>Object X</math> => on delegue a /inc/odt2spip_traiter_mathml.php
    if (preg_match_all('/<math>(.*?)<\/math>/', $xml_sortie, $match, PREG_PATTERN_ORDER) > 0) {
        include_spip('inc/odt2spip_traiter_mathml');
        foreach ($match[1] as $balise) {
            $fic_content = $rep_dezip.$balise.'/content.xml';
          // si le fichier /Object X/content.xml ne contient pas du mathML, virer la balise <math>
            if (substr_count(file_get_contents($fic_content), '<!DOCTYPE math:math') < 1) {
                $xml_sortie = str_replace('<math>'.$balise.'</math>', '', $xml_sortie);
                continue;
            }
          // sinon faire la transfo xsl du contenu du fichier pour obtenir le LateX qu'on place dans la balise
            $xml_sortie = str_replace($balise, odt2spip_traiter_mathml($fic_content), $xml_sortie);
        }
    }
    
    // virer les sauts de ligne multiples
    $xml_sortie = preg_replace('/([\r\n]{2})[ \r\n]*/m', "$1", $xml_sortie);
        
	// traiter les images: dans tous les cas il faut les integrer dans la table documents 
	// en 2.0 c'est mode image + les fonctions de snippets font la liaison => on bloque la liaison en filant un id_article vide
	  $rep_pictures = $rep_dezip."Pictures/";
    
	// parametres de conversion de taille des images : cm -> px (en 96 dpi puisque c'est ce que semble utiliser Writer)
    $conversion_image = 96/2.54;
    
	preg_match_all('/<img([;a-zA-Z0-9\.]*)/', $xml_sortie, $match, PREG_PATTERN_ORDER);

	if (@count($match) > 0) {
		if(!isset($odt2spip_retailler_img))
            $odt2spip_retailler_img = charger_fonction('odt2spip_retailler_img','inc');
		if(!isset($ajouter_documents))
			$ajouter_documents = charger_fonction('ajouter_documents','inc');
        $T_images = array();
        foreach($match[1] as $ch) {
            $Tdims = explode(';;;', $ch);
            $img = $Tdims[0];
            if (file_exists($rep_pictures.$img)) {
              // retailler l'image en fct des parametres ;;;largeur;;;hauteur;;;
                $largeur = round($Tdims[1]*$conversion_image);
                $hauteur = round($Tdims[2]*$conversion_image);
                $odt2spip_retailler_img($rep_pictures.$img, $largeur, $hauteur);
                $type = 'image';
                if ($id_document = $ajouter_documents($rep_pictures.$img, $img, "article", "", $type, 0,$toto="")) { 
                    $xml_sortie = str_replace($ch, $id_document, $xml_sortie);
                    $T_images[] = $id_document;
                }
            }
        }
    }
    
	//finalement enregistrer le contenu dans /tmp/odt2spip/id_auteur/snippet_odt2spip.xml
    if (!ecrire_fichier($fichier_sortie,$xml_sortie)) die(_T('odtspip:err_enregistrement_fichier_sortie').$fichier_sortie);
    
    return array($fichier_sortie,$xml_sortie);
}