/** * @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); }
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; }
/** * 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); }
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('<','>','<','>', '"', "<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); }