コード例 #1
0
ファイル: data.php プロジェクト: genma/spip_ynh
/**
 * plugins -> tableau
 * @return unknown
 */
function inc_plugins_to_array_dist()
{
    include_spip('inc/plugin');
    return liste_chemin_plugin_actifs();
}
コード例 #2
0
ファイル: plugin.php プロジェクト: spip/SPIP
/**
 * Calcule ou modifie la liste des plugins actifs et recompile les fichiers caches
 * qui leurs sont relatifs
 *
 * @note
 *   Les  ecrire_meta() doivent en principe aussi initialiser la valeur a vide
 *   si elle n'existe pas risque de pb en php5 a cause du typage ou de null
 *   (verifier dans la doc php)
 *
 * @param string|string[] $plugin
 *     Plugin ou plugins concernés (leur chemin depuis le répertoire plugins)
 * @param bool $pipe_recherche
 *     ?
 * @param string $operation
 *     - raz : recalcule tout
 *     - ajoute : ajoute le plugin indiqué à la liste des plugins actifs
 *     - enleve : enleve le plugin indiqué de la liste des plugins actifs
 *     - force  : ?
 * @return bool
 *     true si il y a eu des modifications sur la liste des plugins actifs, false sinon
 **/
function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'raz')
{
    // creer le repertoire cache/ si necessaire ! (installation notamment)
    $cache = sous_repertoire(_DIR_CACHE, '', false, true);
    // Si on n'a ni cache accessible, ni connexion SQL, on ne peut pas faire grand chose encore.
    if (!$cache and !spip_connect()) {
        return false;
    }
    if ($operation != 'raz') {
        $plugin_valides = liste_chemin_plugin_actifs();
        $plugin_valides = is_plugin_dir($plugin_valides);
        if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) {
            $plugin_valides_supp = liste_chemin_plugin_actifs(_DIR_PLUGINS_SUPPL);
            $plugin_valides_supp = is_plugin_dir($plugin_valides_supp, _DIR_PLUGINS_SUPPL);
            $plugin_valides = array_merge($plugin_valides, $plugin_valides_supp);
        }
        // si des plugins sont en attentes (coches mais impossible a activer)
        // on les reinjecte ici
        if (isset($GLOBALS['meta']['plugin_attente']) and $a = unserialize($GLOBALS['meta']['plugin_attente'])) {
            $plugin_valides = $plugin_valides + liste_chemin_plugin($a);
        }
        if ($operation == 'ajoute') {
            $plugin = array_merge($plugin_valides, $plugin);
        } elseif ($operation == 'enleve') {
            $plugin = array_diff($plugin_valides, $plugin);
        } else {
            $plugin = $plugin_valides;
        }
    }
    $actifs_avant = isset($GLOBALS['meta']['plugin']) ? $GLOBALS['meta']['plugin'] : '';
    // si une fonction de gestion de dependances existe, l'appeler ici
    if ($ajouter_dependances = charger_fonction("ajouter_dependances", "plugins", true)) {
        $plugin = $ajouter_dependances($plugin);
    }
    // recharger le xml des plugins a activer
    // on forcer le reload ici, meme si le fichier xml n'a pas change
    // pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations
    // pourra etre evite quand on ne supportera plus les plugin.xml
    // en deplacant la detection de ces fichiers dans la compilation ci dessous
    list($infos, $liste) = liste_plugin_valides($plugin, true);
    // trouver l'ordre d'activation
    list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste);
    if ($reste) {
        plugins_erreurs($reste, $liste, $infos);
    }
    // Ignorer les plugins necessitant une lib absente
    // et preparer la meta d'entete Http
    $err = $msg = $header = array();
    foreach ($plugin_valides as $p => $resume) {
        $header[] = $p . ($resume['version'] ? "(" . $resume['version'] . ")" : "");
        if ($resume['dir']) {
            foreach ($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) {
                if (!find_in_path($l['nom'], 'lib/')) {
                    $err[$p] = $resume;
                    $msg[$p][] = $l;
                    unset($plugin_valides[$p]);
                }
            }
        }
    }
    if ($err) {
        plugins_erreurs($err, '', $infos, $msg);
    }
    if (isset($GLOBALS['meta']['message_crash_plugins'])) {
        effacer_meta('message_crash_plugins');
    }
    ecrire_meta('plugin', serialize($plugin_valides));
    $liste = array_diff_key($liste, $plugin_valides);
    ecrire_meta('plugin_attente', serialize($liste));
    $header = strtolower(implode(",", $header));
    ecrire_meta('plugin_header', substr($header, 0, 900));
    if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) {
        ecrire_fichier(_DIR_VAR . "config.txt", (defined('_HEADER_COMPOSED_BY') ? _HEADER_COMPOSED_BY : "Composed-By: SPIP") . ' ' . $GLOBALS['spip_version_affichee'] . " @ www.spip.net + " . $header);
    } else {
        @unlink(_DIR_VAR . "config.txt");
    }
    // generer charger_plugins_chemin.php
    plugins_precompile_chemin($plugin_valides, $ordre);
    // generer les fichiers
    // 	charger_plugins_options.php
    // 	charger_plugins_fonctions.php
    // et retourner les fichiers a verifier
    plugins_precompile_xxxtions($plugin_valides, $ordre);
    // mise a jour de la matrice des pipelines
    $prepend_code = pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche);
    // generer le fichier _CACHE_PIPELINE
    pipeline_precompile($prepend_code);
    // attendre eventuellement l'invalidation du cache opcode
    spip_attend_invalidation_opcode_cache();
    if (spip_connect()) {
        // lancer et initialiser les nouveaux crons !
        include_spip('inc/genie');
        genie_queue_watch_dist();
    }
    return $GLOBALS['meta']['plugin'] != $actifs_avant;
}
コード例 #3
0
ファイル: plugin.php プロジェクト: rhertzog/lcs
function actualise_plugins_actifs($pipe_recherche = false){
	if (!spip_connect()) return false;
	$plugin_actifs = liste_chemin_plugin_actifs();
	$plugin_liste = liste_plugin_files();
	$plugin_new = array_intersect($plugin_actifs,$plugin_liste);
	$actifs_avant = $GLOBALS['meta']['plugin'];
	ecrire_plugin_actifs($plugin_new,$pipe_recherche);
	// retourner -1 si la liste des plugins actifs a change
	return (strcmp($GLOBALS['meta']['plugin'],$actifs_avant)==0) ? 1 : -1;
}
コード例 #4
0
ファイル: plugin.php プロジェクト: nursit/SPIP
function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'raz')
{
    // creer le repertoire cache/ si necessaire ! (installation notamment)
    sous_repertoire(_DIR_CACHE, '', false, true);
    if (!spip_connect()) {
        return false;
    }
    if ($operation != 'raz') {
        $plugin_valides = liste_chemin_plugin_actifs();
        // si des plugins sont en attentes (coches mais impossible a activer)
        // on les reinjecte ici
        if (isset($GLOBALS['meta']['plugin_attente']) and $a = unserialize($GLOBALS['meta']['plugin_attente'])) {
            $plugin_valides = $plugin_valides + liste_chemin_plugin($a);
        }
        $plugin_valides = is_plugin_dir($plugin_valides);
        if ($operation == 'ajoute') {
            $plugin = array_merge($plugin_valides, $plugin);
        } elseif ($operation == 'enleve') {
            $plugin = array_diff($plugin_valides, $plugin);
        } else {
            $plugin = $plugin_valides;
        }
    }
    $actifs_avant = $GLOBALS['meta']['plugin'];
    // recharger le xml des plugins a activer
    // on forcer le reload ici, meme si le fichier xml n'a pas change
    // pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations
    // pourra etre evite quand on ne supportera plus les plugin.xml
    // en deplacant la detection de ces fichiers dans la compilation ci dessous
    list($infos, $liste) = liste_plugin_valides($plugin, true);
    // trouver l'ordre d'activation
    list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste);
    if ($reste) {
        plugins_erreurs($reste, $liste, $infos);
    }
    // Ignorer les plugins necessitant une lib absente
    // et preparer la meta d'entete Http
    $err = $msg = $header = array();
    foreach ($plugin_valides as $p => $resume) {
        $header[] = $p . ($resume['version'] ? "(" . $resume['version'] . ")" : "");
        if ($resume['dir']) {
            foreach ($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) {
                if (!find_in_path($l['nom'], 'lib/')) {
                    $err[$p] = $resume;
                    $msg[$p][] = $l;
                    unset($plugin_valides[$p]);
                }
            }
        }
    }
    if ($err) {
        plugins_erreurs($err, '', $infos, $msg);
    }
    if (isset($GLOBALS['meta']['message_crash_plugins'])) {
        effacer_meta('message_crash_plugins');
    }
    ecrire_meta('plugin', serialize($plugin_valides));
    $liste = array_diff_key($liste, $plugin_valides);
    ecrire_meta('plugin_attente', serialize($liste));
    ecrire_meta('plugin_header', substr(strtolower(implode(",", $header)), 0, 900));
    // generer charger_plugins_chemin.php
    plugins_precompile_chemin($plugin_valides, $ordre);
    // generer les fichiers
    // 	charger_plugins_options.php
    // 	charger_plugins_fonctions.php
    // et retourner les fichiers a verifier
    plugins_precompile_xxxtions($plugin_valides, $ordre);
    // mise a jour de la matrice des pipelines
    pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche);
    // generer le fichier _CACHE_PIPELINE
    pipeline_precompile();
    // lancer et initialiser les nouveaux crons !
    include_spip('inc/genie');
    genie_queue_watch_dist();
    return $GLOBALS['meta']['plugin'] != $actifs_avant;
}
コード例 #5
0
function maj_auto_action_rapide() {
	global $spip_version_affichee, $spip_version_base;
	$arg_chargeur = $spip_version_base>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2
	$time = time();
	$timeout = ini_get('max_execution_time');
	$timeout = $timeout?min(30,floor($timeout/2)):10;
	$style = 'style="padding:0.4em;"';
	// verification des mises a jour de SPIP>=2.1
	include_spip('inc/presentation');
	list($m1,$m2) = preg_split('/\D+/', $GLOBALS['spip_version_branche']);
	$html1 = (function_exists('info_maj_spip') && ($html1=info_maj_spip()))
		?"<fieldset><legend $style>"._T('couteauprive:help2', array('version'=>'SPIP '.$spip_version_affichee)).'</legend>'.propre("\n|{{{$html1}}}|")
			.(preg_match(",$m1\.$m2\.\d+,",$html1)?'<p>'._T('couteau:maj_spip').'</p>':'').'</fieldset>'
		:'';
	// verification de l'ecran de securite
	if(defined('_ECRAN_SECURITE')) {
		$maj = maj_auto_rev_distante(_MAJ_ECRAN_SECU,false,",(\d+\.\d+(\.\d+)?),",0,true);
		if($maj{0}!="-" && _ECRAN_SECURITE!=$maj) {
			include_spip('inc/description_outil');
			$html1 .= "\n<fieldset><legend $style>"._T('couteauprive:help2', array('version'=>_T('couteauprive:ecran_securite:nom').' '._ECRAN_SECURITE)).'</legend>'
				. description_outil_liens(_T("couteauprive:ecran_maj_ko2", array("n"=>"<span style=\"color:red; font-weight:bold;\">$maj</span>"))).'</fieldset>';
		}
	}
	// verification des plugins
	include_spip('inc/plugin');
	$plugins_actifs = array_values(liste_chemin_plugin_actifs());
	// tous, mais les actifs d'abord...
	$plugins = array_unique(array_merge($plugins_actifs, liste_plugin_files()));
	$html_actifs = $html_inactifs = array();
	foreach ($plugins as $p) /*if(preg_match(',^auto/,', $p))*/ {
		$actif = in_array($p, $plugins_actifs, true);
		$auto = preg_match(',^auto/,', $p);
		$infos = plugin_get_infos_maj($p, $stop=time()-$time>$timeout);
		$maj_lib = $checked = '';
		if($stop)
			$maj_lib = '<span class="cs_relancer">'.'Temps serveur &eacute;coul&eacute; : [poursuivre->#].'.'</span>';
		elseif($infos['maj_dispo']) { 
			$maj_lib = _T('couteau:maj_rev_ok', 
				array('revision' => $infos['rev_rss'], 'url'=>$infos['url_origine'], 'zip'=>$infos['zip_trac']));
			$checked = " class='maj_checked'"; }
		elseif($infos['rev_rss']>0 && $infos['rev_local'])
			$maj_lib = _T('couteau:maj'.($infos['svn']?'_svn':'_ok'),
				array('zip'=>$infos['zip_trac'], 'url'=>$infos['url_origine']));
		elseif($auto) {
			$maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine']));
			$checked = " class='maj_checked'"; }
		elseif($infos['rev_local'] && $infos['rev_rss']<=0)
			$maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine']));
		// eventuels liens morts
		$maj_lib = preg_replace(',\[([^[]+)->\],', '$1', $maj_lib);
		$nom = preg_replace(",[\n\r]+,",' ',$infos['nom']). '&nbsp;(v' .$infos['version'] . ')' . ($maj_lib?"\n_ {{".$maj_lib.'}}':'');
		$rev = $infos['rev_local']?_T('couteau:maj_rev', array('revision' => $infos['rev_local'])):'';
		if(strlen($infos['commit'])) $rev .= (strlen($rev)?'<br/>':'') . cs_date_court($infos['commit']);
		if($infos['svn']) $rev .= '<br/>SVN';		
		if(!strlen($rev)) $rev = '&nbsp;';
		$zip_log = (strlen($infos['zip_log']) && $infos['zip_log']!=$infos['zip_trac'])
			?"<label><input type='radio' value='$infos[zip_log]'$checked name='$arg_chargeur'/>[->$infos[zip_log]]</label>":'';
		$bouton = '&nbsp;';
		if($auto && !$stop) $bouton = strlen($infos['zip_trac'])
			?"<input type='radio' value='$infos[zip_trac]'$checked name='$arg_chargeur'/>"
			:'<center style="margin-top:0.6em;font-weight:bold;"><acronym title="'._T('couteau:maj_zip_ko').'">&#63;</acronym></center>';
		if(strlen($zip_log)) {
			if (!$stop)
				$nom .= "\n_ "._T('couteau:maj_verif') . "\n_ $zip_log\n_ {$bouton}[->$infos[zip_trac]]<label>";
			$bouton = '&nbsp;';
		}
		${$actif?'html_actifs':'html_inactifs'}[] = "|$bouton|$nom|$rev|";
	}
	
	$html1 = "\n<div $style id='maj_auto_div'>$html1<fieldset><legend $style>"
		. _T('couteau:maj_liste').'</legend>'
		. propre(
			(count($html_actifs)? "\n|{{" . _T('couteau:plug_actifs') . "}}|<|<|\n" . join("\n",$html_actifs) . "\n" : '')
			. (count($html_inactifs)? "\n|{{" . _T('couteau:plug_inactifs') . "}}|<|<|\n" . join("\n",$html_inactifs) . "\n" : '')
		  )
		. "<div style='text-align: right;'><input class='fondo' type='submit' value=\""
		. attribut_html(_T('couteau:maj_maj'))
		. '" /><p><i>'._T('couteau:maj_verif2').'</i></p></div></fieldset></div>'
		. http_script("
jQuery(document).ready(function() {
	var ch = jQuery('#maj_auto_div .maj_checked');
	var re = jQuery('.cs_relancer a');
	if(ch.length) ch[0].checked = true;
	else if(!re.length){
		jQuery('#maj_auto_div :submit').parent().remove();
		jQuery('#maj_auto_div :radio').attr('disabled','disabled');
	}
	if(!jQuery('#maj_auto_div :radio:checked').length)
		jQuery('#maj_auto_div :radio:first')[0].checked = true;
	re.click(function() {
		cs_href_click(jQuery('#maj_auto')[0], true);
		return false;
	});
});");
	$html2 = "\n<div class='cs_sobre'><input class='cs_sobre' type='submit' value=\"["
		. attribut_html(_T('couteau:maj_actu'))	. ']" /></div>';

// premier formulaire non ajax, lancant directement charger_plugin
	return redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', "cmd=descrip&outil=maj_auto#cs_infos", $html1)
// second formulaire ajax : lien d'actualisation forcee
		. ajax_action_auteur('action_rapide', 'maj_auto_forcer', 'admin_couteau_suisse', "arg=maj_auto|description_outil&cmd=descrip#cs_action_rapide", $html2);
}
コード例 #6
0
ファイル: admin_plugin.php プロジェクト: rhertzog/lcs
function exec_admin_plugin_dist($retour='') {

	if (!autoriser('configurer', 'plugins')) {
		include_spip('inc/minipres');
		echo minipres();
	} else {
	// on fait la verif du path avant tout,
	// et l'installation des qu'on est dans la colonne principale
	// si jamais la liste des plugins actifs change, il faut faire un refresh du hit
	// pour etre sur que les bons fichiers seront charges lors de l'install
	if (actualise_plugins_actifs()==-1 AND _request('actualise')<2){
		include_spip('inc/headers');
		redirige_par_entete(parametre_url(self(),'actualise',_request('actualise')+1,'&'));
	}

	if ($erreur_activation = isset($GLOBALS['meta']['plugin_erreur_activation'])){
		$erreur_activation = $GLOBALS['meta']['plugin_erreur_activation'];
		// l'effacement reel de la meta se fera au moment de l'affichage
		// mais on la vide pour ne pas l'afficher dans le bandeau haut
		unset($GLOBALS['meta']['plugin_erreur_activation']);
	}

	$format = '';
	if (_request('format')!==NULL)
		$format = _request('format'); // liste ou repertoires

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
	echo "<br />\n";
	echo "<br />\n";

	$quoi = _request('voir');
	$quoi = $quoi ? $quoi : 'actifs';

	echo gros_titre(_T('icone_admin_plugin'),'',false);
	echo barre_onglets("plugins", $quoi=='actifs'?"plugins_actifs":"admin_plugin");

	echo debut_gauche('plugin',true);
	echo debut_boite_info(true);
	$s = "";
	$s .= _T('info_gauche_admin_tech');
	echo $s;
	echo fin_boite_info(true);

	// la valeur de retour de la fonction ci-dessus n'est pas compatible
	// avec ce que fait actualise_plugins_actifs, il faut recalculer. A revoir.
	$lcpa = liste_chemin_plugin_actifs();

	echo pipeline('affiche_gauche',
		array(
		'args'=>array('exec'=>'admin_plugin'),
		'data'=>afficher_librairies()
		)
	);

	echo debut_droite('plugin', true);

	// message d'erreur au retour d'un operation
	if (_request('erreur')){
		echo "<div class='erreur_message-plugins'>" . _T(_request('erreur')) . "</div>";
	}
	if ($erreur_activation){
		echo "<div class='erreur_message-plugins'>" . $erreur_activation . "</div>";
		effacer_meta('plugin_erreur_activation');
	}


	// on fait l'installation ici,
	// cela permet aux scripts d'install de faire des affichages (moches...)
	installe_plugins();

	$lpf = liste_plugin_files();
	$plugins_interessants = @array_keys(unserialize($GLOBALS['meta']['plugins_interessants']));
	if (!is_array($plugins_interessants))
		$plugins_interessants = array();

	echo "<div class='liste-plugins formulaire_spip'>";

	echo debut_cadre_trait_couleur('plugin-24.gif',true,'',_T('plugins_liste'),
	'plugins');

	if ($quoi!=='actifs'){
		if ($lpf)
			echo "<p>"._T('texte_presente_plugin')."</p>";
		else {
			if (!@is_dir(_DIR_PLUGINS))
				echo  "<p>"._T('plugin_info_automatique_ftp',array('rep'=>joli_repertoire(_DIR_PLUGINS)))
							. " &mdash; "._T('plugin_info_automatique_creer')."</p>";
		}
	}

	if ($quoi=='actifs' OR $lpf)
		echo "<h3>".sinon(
						singulier_ou_pluriel(count($lcpa), 'plugins_actif_un', 'plugins_actifs', 'count'),
						_T('plugins_actif_aucun')
						)."</h3>";

	$sub = "\n<div class='boutons'>"
	.  "<input type='submit' class='submit save' value='"._T('bouton_enregistrer')
	."' />"
	. "</div>";

	$no_button = false;

	// la liste
	if ($quoi=='actifs'){
		$aff = affiche_les_plugins($lcpa, $lcpa, $format);
		$no_button = !strlen($aff);
		$corps = $aff;
	}
	elseif ($quoi=='tous')
		$corps = affiche_les_plugins($lpf, $lcpa, $format);
	else {
		$dir_auto = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS));
		$lcpaffiche = array();
		foreach ($lpf as $f)
			if (!strpos($f, '/')
			OR ($dir_auto AND substr($f, 0, strlen($dir_auto)) == $dir_auto)
			OR in_array($f, $lcpa)
			OR in_array($f, $plugins_interessants))
				$lcpaffiche[] = $f;

		$corps = affiche_les_plugins($lcpaffiche, $lcpa, $format);
	}

	if (!$no_button)
		$corps .= "\n<br />" . $sub;

	echo redirige_action_post('activer_plugins','activer','admin_plugin','', $corps);

	echo fin_cadre_trait_couleur(true);

	if ($quoi=='actifs')
		echo affiche_les_extensions(liste_chemin_plugin_actifs(_DIR_EXTENSIONS));
	echo "</div>";
	
	echo 	http_script("
	jQuery(function(){
		jQuery('#plugins .boutons').hide();
		jQuery('.plugins li.item a[rel=info]').click(function(){
			var li = jQuery(this).parents('li').eq(0);
			var prefix = li.find('input.checkbox').attr('name');
			if (!jQuery('div.details',li).html()) {
				jQuery('div.details',li).prepend(ajax_image_searching).load(
					jQuery(this).attr('href').replace(/admin_plugin|plugins/, 'info_plugin'), function(){
						li.addClass('on');
					}
				);
			}
			else {
				if (jQuery('div.details',li).toggle().is(':visible'))
					li.addClass('on');
				else
					li.removeClass('on');
			}
			return false;
		});
		jQuery('.plugins li.item input.checkbox').change(function(){
			jQuery(this).parents('form').eq(0).find('.boutons').slideDown();
		});
	});
	");

	echo pipeline('affiche_milieu',
		array(
		'args'=>array('exec'=>'admin_plugin'),
		'data'=>''
		)
	);

	echo fin_gauche(), fin_page();
	}
}