Exemplo n.º 1
0
function balise_SET__dist($p) {
	$champ = $p->nom_champ;
	preg_match(",^SET_([A-Z_]+)?$,i", $champ, $filtre);
	$filtre = strtolower($filtre[1]);
	$filtre2 = chercher_filtre($filtre);
	if (!$filtre2) {
		$err_b_s_a = array('zbug_erreur_filtre', array('filtre' => $filtre));
		erreur_squelette($err_b_s_a, $p);
	} else {
		$nom = interprete_argument_balise(1,$p);
		if (!$nom) {
			$err_b_s_a = array('zbug_balise_sans_argument', array('balise' => $champ));
			erreur_squelette($err_b_s_a, $p);
		} else {
			$i = 1; $args = array();
			while(($a = interprete_argument_balise(++$i,$p)) != NULL) $args[] = $a;
			$get = function_exists('balise_GET') ? 'balise_GET' : 'balise_GET_dist';
			$q = $p; $q->param[0] = array($q->param[0][0], $q->param[0][1]);
			$get = $get($q);
			$filtre2 .= '('.$get->code.','.join(",", $args).')';
			$p->code = "vide(\$Pile['vars'][$nom] = $filtre2)";
		}
	}
	$p->interdire_scripts = false; // la balise ne renvoie rien
	return $p;
}
Exemplo n.º 2
0
function balise_FOREACH($p) {
	$_tableau = interprete_argument_balise(1,$p);
	$_tableau = str_replace("'", "", strtoupper($_tableau));
	$_tableau = sinon($_tableau, 'ENV');
	$f = 'balise_'.$_tableau;
	$balise = function_exists($f) ? $f : (function_exists($g = $f.'_dist') ? $g : '');

	if($balise) {
		$_modele = interprete_argument_balise(2,$p);
		$_modele = str_replace("'", "", strtolower($_modele));
		$__modele = 'foreach_'.strtolower($_tableau);
		$_modele = (!$_modele AND find_in_path('modeles/'.$__modele.'.html')) ?
			$__modele : 
			($_modele ? $_modele : 'foreach');

		$p->param = @array_shift(@array_shift($p->param));
		$p = $balise($p);
		$filtre = chercher_filtre('foreach');
		$p->code = $filtre . "(unserialize(" . $p->code . "), '" . $_modele . "')";
	}
	//On a pas trouve la balise correspondant au tableau a traiter
	else {
		erreur_squelette(
			_L(/*zbug*/'erreur #FOREACH: la balise #'.$_tableau.' n\'existe pas'),
			$p->id_boucle
		);
		$p->code = "''";
	}
	return $p;
}
Exemplo n.º 3
0
 /**
  * #BOITE_FERMER
  * Racourci pour fermer une boite ouverte
  *
  * @param  <type> $p
  *
  * @return <type>
  */
 function balise_BOITE_FERMER_dist($p)
 {
     $f = chercher_filtre('boite_fermer');
     $p->code = "{$f}()";
     $p->interdire_scripts = false;
     return $p;
 }
Exemplo n.º 4
0
function base_restaurer_dist($titre = '', $reprise = false)
{
    $status_file = _DUMP_STATUS_FILE;
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
    } else {
        $redirect = parametre_url(generer_action_auteur('restaurer', _DUMP_STATUS_FILE), "step", intval(_request('step') + 1), '&');
        $timeout = ini_get('max_execution_time');
        // valeur conservatrice si on a pas reussi a lire le max_execution_time
        if (!$timeout) {
            $timeout = 30;
        }
        // parions sur une valeur tellement courante ...
        $max_time = time() + $timeout / 2;
        include_spip('inc/minipres');
        @ini_set("zlib.output_compression", "0");
        // pour permettre l'affichage au fur et a mesure
        $titre = _T('dump:restauration_en_cours') . " (" . count($status['tables']) . ") ";
        $balise_img = chercher_filtre('balise_img');
        $titre .= $balise_img(chemin_image('searching.gif'));
        echo install_debut_html($titre);
        // script de rechargement auto sur timeout
        echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")");
        echo "<div style='text-align: left'>\n";
        dump_serveur($status['connect']);
        spip_connect('dump');
        // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde
        if (_request('step')) {
            $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array(), 'desc_tables_dest' => array());
            if ($desc = sql_getfetsel('valeur', 'spip_meta', "nom='dump_structure_temp'", '', '', '', '', 'dump') and $desc = unserialize($desc)) {
                $options['desc_tables_dest'] = $desc;
            }
            #var_dump(sql_allfetsel('nom,valeur','spip_meta',"",'','','','','dump'));
            #die();
            $res = base_copier_tables($status_file, $status['tables'], 'dump', '', $options);
        } else {
            // mais on en profite pour reparer les version base pour etre sur de ne pas les perdre
            sql_updateq("spip_meta", array('impt' => 'oui'), "nom='version_installee'", '', 'dump');
            sql_updateq("spip_meta", array('impt' => 'oui'), "nom LIKE '%_base_version'", '', 'dump');
        }
        echo "</div>\n";
        if (!$res) {
            echo dump_relance($redirect);
        }
        echo install_fin_html();
        ob_end_flush();
        flush();
        if (!$res) {
            exit;
        }
        // quand on sort de $export avec true c'est qu'on a fini
        dump_end(_DUMP_STATUS_FILE, 'restaurer');
        include_spip('inc/headers');
        echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true));
    }
}
/**
 * Embarque en base64 les images png|gif|jpg présentes dans un fichier CSS
 *
 * Extrait les images décrites par 'url(...)' d'un fichier CSS pour
 * les faire embarquer directement dans le fichier
 *
 * @see filtre_embarque_fichier()
 *
 * @param string $contenu
 *     Contenu d'un fichier CSS
 * @param string $source
 *     URL Source de ce fichier CSS
 * @param string $source_file
 *     filename Source de ce fichier CSS, si connu
 * @return string
 *     Contenu du fichier CSS avec les images embarquées
 **/
function compresseur_embarquer_images_css($contenu, $source, $source_file = null)
{
    #$path = suivre_lien(url_absolue($source),'./');
    $base = $source_file ? $source_file : $source;
    $base = substr($base, -1) == '/' ? $base : dirname($base) . '/';
    $filtre_embarque_fichier = chercher_filtre("filtre_embarque_fichier");
    if (!defined("_CSS_EMBARQUE_FICHIER_MAX_SIZE")) {
        define('_CSS_EMBARQUE_FICHIER_MAX_SIZE', 4 * 1024);
    }
    return preg_replace_callback(",url\\s*\\(\\s*['\"]?([^'\"/][^:]*[.](png|gif|jpg))['\"]?\\s*\\),Uims", create_function('$x', 'return "url(\\"".' . $filtre_embarque_fichier . '($x[1],"' . $base . '",_CSS_EMBARQUE_FICHIER_MAX_SIZE)."\\")";'), $contenu);
}
Exemplo n.º 6
0
function calcul_version_squelette()
{
    $version = NULL;
    $informer = chercher_filtre('info_plugin');
    $version = $informer('sarkaspip', 'version');
    $revision = version_svn_courante(_DIR_PLUGIN_SARKASPIP);
    if ($revision > 0) {
        $version .= ' [' . strval($revision) . ']';
    } else {
        if ($revision < 0) {
            $version .= ' SVN&nbsp;[' . strval(abs($revision)) . ']';
        }
    }
    return $version;
}
Exemplo n.º 7
0
function filtre_nuage_dist($id_mot, $titre = '', $url = '', $poids = -1, $expose = array())
{
    static $nuage = array();
    if ($titre and $url) {
        $nuage['titre'][$id_mot] = supprimer_tags($titre);
        $nuage['url'][$id_mot] = $url;
        if ($poids >= 0) {
            $nuage['poids'][$id_mot] = $poids;
        }
    } elseif ($poids >= 0) {
        $nuage['poids'][$id_mot] += $poids;
    } else {
        $calcul = chercher_filtre('calculer_nuage');
        $retour = $calcul($nuage['titre'], $nuage['url'], $nuage['poids'], $expose);
        $nuage = array();
    }
    return !empty($retour) ? $retour : '';
}
function box_choisir_skin($skins, $selected, $name = 'skin')
{
    $out = "";
    if (!is_array($skins) or !count($skins)) {
        return $out;
    }
    foreach ($skins as $k => $skin) {
        $id = "{$name}_" . preg_replace(",[^a-z0-9_],i", "_", $k);
        $sel = $selected == "{$k}" ? " checked='checked'" : '';
        $balise_img = chercher_filtre('balise_img');
        $label = isset($skin['img']) ? '<a href="' . $skin['img'] . '" class="mediabox" rel="habillage">' . $balise_img($skin['img'], $skin['nom']) . "</a>" : $skin['nom'];
        $out .= "<div class='choix'>";
        $out .= "<input type='radio' name='{$name}' id='{$id}' value='{$k}'{$sel} />";
        $out .= "<label for='{$id}'>{$label}</label>";
        $out .= "</div>\n";
    }
    return $out;
}
Exemplo n.º 9
0
function inc_sauvegarder_dist($status_file, $redirect = '')
{
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
    } else {
        $timeout = ini_get('max_execution_time');
        // valeur conservatrice si on a pas reussi a lire le max_execution_time
        if (!$timeout) {
            $timeout = 30;
        }
        // parions sur une valeur tellement courante ...
        $max_time = time() + $timeout / 2;
        include_spip('inc/minipres');
        @ini_set("zlib.output_compression", "0");
        // pour permettre l'affichage au fur et a mesure
        $titre = _T('dump:sauvegarde_en_cours') . " (" . count($status['tables']) . ") ";
        $balise_img = chercher_filtre('balise_img');
        $titre .= $balise_img(chemin_image('searching.gif'));
        echo install_debut_html($titre);
        // script de rechargement auto sur timeout
        echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")");
        echo "<div style='text-align: left'>\n";
        dump_serveur($status['connect']);
        spip_connect('dump');
        // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde
        $res = false;
        if (_request('step')) {
            $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array());
            $res = base_copier_tables($status_file, $status['tables'], '', 'dump', $options);
        }
        echo "</div>\n";
        if (!$res and $redirect) {
            echo dump_relance($redirect);
        }
        echo install_fin_html();
        ob_end_flush();
        flush();
        return $res;
    }
}
Exemplo n.º 10
0
/**
 * Chargement du formulaire d'édition de logo
 *
 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
 * @param int $id_objet Identifiant de l'objet
 * @param string $retour Url de redirection apres traitement
 * @param array $options Tableau d'option (exemple : image_reduire => 50)
 * @return array               Variables d'environnement pour le fond
 */
function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array())
{
    // pas dans une boucle ? formulaire pour le logo du site
    // dans ce cas, il faut chercher un 'siteon0.ext'
    if (!$objet) {
        $objet = 'site';
    }
    $objet = objet_type($objet);
    $_id_objet = id_table_objet($objet);
    if (!is_array($options)) {
        $options = unserialize($options);
    }
    if (!isset($options['titre'])) {
        $balise_img = chercher_filtre('balise_img');
        $img = $balise_img(chemin_image('image-24.png'), "", 'cadre-icone');
        $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
        $libelle = ($id_objet or $objet != 'rubrique') ? $objet : 'racine';
        if (isset($libelles[$libelle])) {
            $libelle = $libelles[$libelle];
        } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
            $libelle = _T($libelle);
        } else {
            $libelle = _L('Logo');
        }
        switch ($objet) {
            case 'article':
                $libelle .= " " . aide("logoart");
                break;
            case 'breve':
                $libelle .= " " . aide("breveslogo");
                break;
            case 'rubrique':
                $libelle .= " " . aide("rublogo");
                break;
            default:
                break;
        }
        $options['titre'] = $img . $libelle;
    }
    if (!isset($options['editable'])) {
        include_spip('inc/autoriser');
        $options['editable'] = autoriser('iconifier', $objet, $id_objet);
    }
    $res = array('editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), 'logo_survol' => $GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : '', 'objet' => $objet, 'id_objet' => $id_objet, '_options' => $options, '_show_upload_off' => '');
    // rechercher le logo de l'objet
    // la fonction prend un parametre '_id_objet' etrange :
    // le nom de la cle primaire (et non le nom de la table)
    // ou directement le nom du raccourcis a chercher
    $chercher_logo = charger_fonction('chercher_logo', 'inc');
    $etats = $res['logo_survol'] ? array('on', 'off') : array('on');
    foreach ($etats as $etat) {
        $logo = $chercher_logo($id_objet, $_id_objet, $etat);
        if ($logo) {
            $res['logo_' . $etat] = $logo[0];
        }
    }
    // pas de logo_on -> pas de formulaire pour le survol
    if (!isset($res['logo_on'])) {
        $res['logo_survol'] = '';
    } elseif (!isset($res['logo_off']) and _request('logo_up')) {
        $res['_show_upload_off'] = ' ';
    }
    // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire
    if (!$res['editable'] and !isset($res['logo_off']) and !isset($res['logo_on'])) {
        return false;
    }
    return $res;
}
Exemplo n.º 11
0
/**
 * Compile la balise `#BOUTON_ACTION` qui génère un bouton d'action en post, ajaxable
 *
 * Cette balise s'utilise à la place des liens `action_auteur`, sous la forme
 *
 * - `#BOUTON_ACTION{libelle,url}`
 * - ou `#BOUTON_ACTION{libelle,url,ajax}` pour que l'action soit ajax comme un lien `class='ajax'`
 * - ou `#BOUTON_ACTION{libelle,url,ajax,message_confirmation}` pour utiliser un message de confirmation
 * - ou encore `#BOUTON_ACTION{libelle[,url[,ajax[,message_confirmation[,title[,callback]]]]]}`
 *
 * @balise
 * @link http://www.spip.net/4583
 * @example
 *     ```
 *     [(#AUTORISER{reparer,base})
 *        [(#BOUTON_ACTION{<:bouton_tenter_recuperation:>,#URL_ECRIRE{base_repair}})]
 *     ]
 *     ```
 *
 * @param Champ $p
 *     Pile au niveau de la balise
 * @return Champ
 *     Pile complétée par le code à générer
 */
function balise_BOUTON_ACTION_dist($p)
{
    $args = array();
    for ($k = 1; $k <= 6; $k++) {
        $_a = interprete_argument_balise($k, $p);
        if (!$_a) {
            $_a = "''";
        }
        $args[] = $_a;
    }
    // supprimer les args vides
    while (end($args) == "''" and count($args) > 2) {
        array_pop($args);
    }
    $args = implode(",", $args);
    $bouton_action = chercher_filtre("bouton_action");
    $p->code = "{$bouton_action}({$args})";
    $p->interdire_scripts = false;
    return $p;
}
Exemplo n.º 12
0
/**
 * Préparer du contenu CSS inline avant minification
 *
 * @param string $contenu
 *   contenu de la CSS
 * @param string $url_base
 *   url de la CSS ou de la page si c'est un style inline
 * @param string $filename
 *   nom du fichier de la CSS (ou vide si c'est un style inline)
 * @param array $fonctions
 *   liste des fonctions appliquees a la CSS
 * @return string
 */
function &compresseur_callback_prepare_css_inline(&$contenu, $url_base, $filename = '', $fonctions = null)
{
    if (!$fonctions) {
        $fonctions = compresseur_liste_fonctions_prepare_css();
    } elseif (is_string($fonctions)) {
        $fonctions = array($fonctions);
    }
    // retirer le protocole de $url_base
    $url_base = protocole_implicite(url_absolue($url_base));
    foreach ($fonctions as $f) {
        if (!function_exists($f)) {
            $f = chercher_filtre($f);
        }
        if ($f and function_exists($f)) {
            $contenu = $f($contenu, $url_base, $filename);
        }
    }
    return $contenu;
}
Exemplo n.º 13
0
function compose_filtres(&$p, $code) {

	$image_miette = false;
	foreach($p->param as $filtre) {
		$fonc = array_shift($filtre);
		if (!$fonc) continue; // normalement qu'au premier tour.
		$is_filtre_image = ((substr($fonc,0,6)=='image_') AND $fonc!='image_graver');
		if ($image_miette AND !$is_filtre_image){
	// il faut graver maintenant car apres le filtre en cours
	// on est pas sur d'avoir encore le nom du fichier dans le pipe
			$code = "filtrer('image_graver', $code)";
			$image_miette = false;
		}
		// recuperer les arguments du filtre, 
		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
		if ($fonc !== '?') {
			$sep = ',';
		} else {$sep = ':';
			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
			if (count($filtre) != 2)
				$filtre = array(isset($filtre[0])?$filtre[0]:"", isset($filtre[1])?$filtre[1]:"");
		}
		$arglist = compose_filtres_args($p, $filtre, $sep);
		$logique = filtre_logique($fonc, $code, substr($arglist,1));
		if ($logique)
			$code = $logique;
		else {
			if (isset($GLOBALS['spip_matrice'][$fonc])) {
				$code = "filtrer('$fonc',$code$arglist)";
				if ($is_filtre_image) $image_miette = true;
			}

			// le filtre est defini sous forme de fonction ou de methode
			// par ex. dans inc_texte, inc_filtres ou mes_fonctions
			elseif ($f = chercher_filtre($fonc)) {
				$code = "$f($code$arglist)";
			}
			// le filtre n'existe pas,
			// on le notifie
			else erreur_squelette(array('zbug_erreur_filtre', array('filtre'=>  texte_script($fonc))), $p);
		}
	}
	// ramasser les images intermediaires inutiles et graver l'image finale
	if ($image_miette)
		$code = "filtrer('image_graver',$code)";

	return $code;
}
Exemplo n.º 14
0
/**
 * une fonction pour generer une balise img a partir d'un nom de fichier
 *
 * @param string $img
 * @param string $alt
 * @param string $class
 * @return string
 */
function tag_img($img,$alt="",$class=""){
	$balise_img = chercher_filtre('balise_img');
	return $balise_img($img,$alt,$class);
}
Exemplo n.º 15
0
function filtrer($filtre) {
	include_spip('public/parametrer'); // charger les fichiers fonctions
	if (is_string($f = $GLOBALS['spip_matrice'][$filtre]))
		find_in_path($f,'', true);
	$tous = func_get_args();
	if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice'][$filtre])
		return image_filtrer($tous);
	elseif($f = chercher_filtre($filtre)) {
		array_shift($tous);
		return call_user_func_array($f, $tous);
	}
	else {
		// le filtre n'existe pas, on provoque une erreur
		$msg = array('zbug_erreur_filtre', array('filtre'=>texte_script($filtre)));
		erreur_squelette($msg);
		return '';
	}
}
Exemplo n.º 16
0
function plugins_afficher_plugin_distant_dist($url_page, $zip_file, $info, $expose=false, $class_li="item"){
	static $id_input=0;
	static $versions = array();
	static $charger_plugin = null;

	$erreur = false;
	$s = "";

	$titre = $info[0];
	$url_doc = $info[1];
	$info = $info[2]; // recuperer le tableau

	$titre = typo('<multi>'.$titre.'</multi>'); // recuperer les blocs multi du flux de la zone (temporaire?)
	$nick = strtolower(basename($zip_file, '.zip'));
	$info['prefix'] = $nick;
	$plug_file = $zip_file;
	
	// numerotons les occurences d'un meme prefix
	$versions[$info['prefix']] = isset($versions[$info['prefix']]) ? $versions[$info['prefix']] + 1 : '';
	$id = $info['prefix'] . $versions[$info['prefix']];
	
	$class = $class_li;
	$class .= $actif?" actif":"";
	$class .= $expose?" on":"";
	$erreur = isset($info['erreur']);
	if ($erreur)
		$class .= " erreur";
	$s .= "<li id='$id' class='$class'>";


	// checkbox pour activer ou desactiver
	// si $actif vaut -1, c'est actif, et ce n'est pas desactivable (extension)
	/*
	if (!$erreur AND $actif>=0){
		$id_input++;
		$check = "\n<input type='radio' name='url_zip_plugin' id='label_$id_input' value='O'";
		$check .= $actif?" checked='checked'":"";
		$check .= " class='checkbox' />";
		$check .= "<label for='label_$id_input'>".$titre."</label>";
		$s .= "<div class='check'>$check</div>";
	}*/

	if (!$erreur){
		// bouton de telechargement
		if (!$charger_plugin)
			$charger_plugin = generer_action_auteur('charger_plugin',"charger_zip","./");
		$balise_img = chercher_filtre('balise_img');
		$action = parametre_url($charger_plugin,'url_zip_plugin',$plug_file);
		$s .= "<div class='download'>".
		"<a href='$action' title='"._T('plugin_charger')."'>"
		. $balise_img(find_in_path("images/telecharger-16.png"),_T('plugin_charger'))
		."</a></div>"
		;
	}

	// Cartouche Resume
	$s .= "<div class='resume'>";

	$desc = $info['descriptif'];
	$url_stat = parametre_url($url_page, "plugin",$plug_file);

	$s .= "<h3 class='nom'><a href='$url_stat' rel='info'>".$titre."</a></h3>";
	$s .= "<div class='short'>".couper($desc,60)."</div>";
	if (isset($info['icon']) and $info['icon']) {
		include_spip("inc/filtres_images_mini");
		$s.= "<div class='icon'><a href='$url_stat' rel='info'><img src='".$info['icon']."' width='32' height='auto' /></a></div>";
	}
	$s .= "</div>";

	if ($erreur){
		$s .=  "<div class='erreur'>";
		foreach($info['erreur'] as $err)
			$s .= "$err <br/>";
		$s .=  "</div>";
	}

	// afficher les details d'un plug en secours ; la div sert pour l'ajax
	$s .= "<div class='details'>";
	if ($expose)
		$s .= affiche_bloc_plugin_distant($plug_file, $info);
	$s .= "</div>";

	$s .= "</li>";
	return $s;
}
Exemplo n.º 17
0
	function input($spec = 'ligne', $attrs = array()) {
		if ($this->controleur) {
			return $this->fond($spec);
		}
		include_spip('inc/filtres');
		$return = '';
		foreach ($this->texts as $champ => $val) {
			$type = is_array($spec) ? $spec[$champ]['type'] : $spec;
			switch ($type) {
				case 'texte':
					$id = uniqid('wid');
					$input = '<textarea style="width:100%;" class="crayon-active"'
					. ' name="content_'.$this->key.'_'.$champ.'" id="'.$id.'">'
					. "\n"
					. entites_html($val)
					. "</textarea>\n";
					break;
				case 'ligne':
				default:
					$input = '<input class="crayon-active text" type="text"'
					. ' name="content_'.$this->key.'_'.$champ.'"'
					. ' value="'
					. entites_html($val)
					. '" />'."\n";
			}
			if (is_array($spec) && isset($spec[$champ]['attrs'])) {
				foreach ($spec[$champ]['attrs'] as $attr=>$val) {
					$input = inserer_attribut($input, $attr, $val);
				}
			}

			foreach ($attrs as $attr=>$val) {
				$input = inserer_attribut($input, $attr, $val);
			}

			// petit truc crado pour mettre la barre typo si demandee
			// pour faire propre il faudra reprogrammer la bt en jquery
			$meta_crayon = unserialize($GLOBALS['meta']['crayons']);
			if ($meta_crayon['barretypo']
			AND $type == 'texte') {
				// Pas la peine de mettre cette barre si PortePlume est la
				if (function_exists('chercher_filtre')
				AND $f = chercher_filtre('info_plugin')
				AND !$f('PORTE_PLUME','est_actif')) {
					include_spip('inc/barre');
					$input = "<div style='width:".$this->largeur."px;height:23px;'>"
						. (function_exists('afficher_barre')
							? afficher_barre("document.getElementById('$id')")
							: '')
						. '</div>'
						. $input;
				}
			}

			$return .= $input;
		}
		return $return;
	}
Exemplo n.º 18
0
function balise_PLUGIN_dist($p) {
	$plugin = interprete_argument_balise(1,$p);
	$plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
	$type_info = interprete_argument_balise(2,$p);
	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';

	$f = chercher_filtre('info_plugin');
	$p->code = $f.'('.$plugin.', '.$type_info.')';
	return $p;
}
/**
 * Affiche la liste des rubriques enfants d'une rubrique
 * (Utilisé dans les pages du privé notamment ?exec=rubriques)
 *
 * Si plus de 500 rubriques enfants, on pagine par 500 les résultats
 *
 * @param int $id_rubrique
 *  L'identifiant numérique de la rubrique parente (0 par défaut, la racine)
 * @return string $res
 *  Le contenu textuel affiché, la liste des sous rubriques
 */
function afficher_enfant_rub($id_rubrique = 0)
{
    $pagination = '';
    $debut = 0;
    $limite = 500;
    $nb = sql_countsel('spip_rubriques', "id_parent={$id_rubrique}");
    if ($nb > $limite) {
        $debut = _request('debut_rubrique' . $collection2) ? _request('debut_rubrique' . $collection2) : $debut;
        $pagination = chercher_filtre('pagination');
        $pagination = '<br class="nettoyeur"><p class="pagination">' . $pagination($nb, '_rubrique' . $collection2, $debut, $limite, true, 'prive') . '</p>';
    }
    $les_enfants = enfant_rub($id_rubrique, $debut, $limite);
    if (!($n = count($les_enfants))) {
        return "";
    }
    if ($n == 1) {
        $les_enfants = reset($les_enfants);
        $les_enfants2 = "";
    } else {
        $n = ceil($n / 2);
        $les_enfants2 = implode('', array_slice($les_enfants, $n));
        $les_enfants = implode('', array_slice($les_enfants, 0, $n));
    }
    $res = $pagination . "<div class='gauche'>" . $les_enfants . "</div>" . "<div class='droite'>" . $les_enfants2 . "</div>" . $pagination;
    return $res;
}
Exemplo n.º 20
0
function stats_boite_infos($flux)
{
    if ($GLOBALS['meta']["activer_statistiques"] == "oui") {
        if ($flux['args']['type'] == 'article' and $id_article = $flux['args']['id'] and autoriser('voirstats', 'article', $id_article)) {
            $visites = sql_getfetsel('visites', 'spip_articles', 'id_article=' . intval($id_article));
            if ($visites > 0) {
                $icone_horizontale = chercher_filtre('icone_horizontale');
                $flux['data'] .= $icone_horizontale(generer_url_ecrire("stats_visites", "id_article={$id_article}"), _T('statistiques:icone_evolution_visites', array('visites' => $visites)), "statistique-24.png");
            }
        }
    }
    return $flux;
}
Exemplo n.º 21
0
function filtrer($filtre)
{
    if (isset($GLOBALS['spip_matrice'][$filtre]) and is_string($f = $GLOBALS['spip_matrice'][$filtre])) {
        find_in_path($f, '', true);
        $GLOBALS['spip_matrice'][$filtre] = true;
    }
    $tous = func_get_args();
    if (substr($filtre, 0, 6) == 'image_' && $GLOBALS['spip_matrice'][$filtre]) {
        return image_filtrer($tous);
    } elseif ($f = chercher_filtre($filtre)) {
        array_shift($tous);
        return call_user_func_array($f, $tous);
    } else {
        // le filtre n'existe pas, on provoque une erreur
        $msg = array('zbug_erreur_filtre', array('filtre' => texte_script($filtre)));
        erreur_squelette($msg);
        return '';
    }
}
/**
 * Ajoute les scripts css et js nécessaires aux crayons dans le code HTML
 *
 * @uses crayons_var2js()
 *
 * @param string $page
 *     Code HTML de la page complète ou du header seulement
 * @param string $droits
 *     - Liste de css définissant les champs crayonnables
 *       (séparés par virgule) dont l'édition est autorisée
 *     - "*" si tous sont autorisés
 * @param array $wdgcfg
 *     Description de la configuration des crayons (attribut => valeur)
 * @param string $mode
 *     - page : toute la page est présente dans `$page`
 *     - head : seul le header est présent dans `$page`
 * @return
**/
function &Crayons_preparer_page(&$page, $droits, $wdgcfg = array(), $mode = 'page')
{
    /**
     * Si pas forcer_lang, on charge le contrôleur dans la langue que l'utilisateur a dans le privé
     */
    if (!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang'] or $GLOBALS['forcer_lang'] === 'non') {
        lang_select($GLOBALS['auteur_session']['lang']);
    }
    $jsFile = generer_url_public('crayons.js');
    if (_DEBUG_CRAYONS) {
        $jsFile = parametre_url($jsFile, 'debug_crayons', 1, '&');
    }
    include_spip('inc/filtres');
    // rien que pour direction_css() :(
    $cssFile = direction_css(find_in_path('crayons.css'));
    $config = crayons_var2js(array('imgPath' => dirname(find_in_path('images/crayon.png')), 'droits' => $droits, 'dir_racine' => _DIR_RACINE, 'self' => self('&'), 'txt' => array('error' => _U('crayons:svp_copier_coller'), 'sauvegarder' => $wdgcfg['msgAbandon'] ? _U('crayons:sauvegarder') : ''), 'img' => array('searching' => array('txt' => _U('crayons:veuillez_patienter')), 'crayon' => array('txt' => _U('crayons:editer')), 'edit' => array('txt' => _U('crayons:editer_tout')), 'img-changed' => array('txt' => _U('crayons:deja_modifie'))), 'cfg' => $wdgcfg));
    // Est-ce que PortePlume est la ?
    $meta_crayon = isset($GLOBALS['meta']['crayons']) ? unserialize($GLOBALS['meta']['crayons']) : array();
    $pp = '';
    if (isset($meta_crayon['barretypo']) && $meta_crayon['barretypo']) {
        if (function_exists('chercher_filtre') and $f = chercher_filtre('info_plugin') and $f('PORTE_PLUME', 'est_actif')) {
            $pp = <<<EOF
cQuery(function() {
\tif (typeof onAjaxLoad == 'function') {
\t\tfunction barrebouilles_crayons() {
\t\t\t\$('.formulaire_crayon textarea.crayon-active')
\t\t\t.barre_outils('edition');
\t\t}
\t\tonAjaxLoad(barrebouilles_crayons);
\t}
});
EOF;
        }
    }
    $incCSS = "<link rel=\"stylesheet\" href=\"{$cssFile}\" type=\"text/css\" media=\"all\" />";
    $incJS = <<<EOH
<script type="text/javascript">/* <![CDATA[ */
var configCrayons;
function startCrayons() {
\tconfigCrayons = new cQuery.prototype.cfgCrayons({$config});
\tcQuery.fn.crayonsstart();
{$pp}
}
var cr = document.createElement('script');
cr.type = 'text/javascript'; cr.async = true;
cr.src = '{$jsFile}&callback=startCrayons';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(cr, s);
/* ]]> */</script>

EOH;
    if ($mode == 'head') {
        //js inline avant les css, sinon ca bloque le chargement
        $page = $page . $incJS . $incCSS;
        return $page;
    }
    $pos_head = strpos($page, '</head>');
    if ($pos_head === false) {
        return $page;
    }
    // js inline avant la premiere css, ou sinon avant la fin du head
    $pos_link = strpos($page, '<link ');
    if (!$pos_link) {
        $pos_link = $pos_head;
    }
    $page = substr_replace($page, $incJS, $pos_link, 0);
    // css avant la fin du head
    $pos_head = strpos($page, '</head>');
    $page = substr_replace($page, $incCSS, $pos_head, 0);
    return $page;
}
Exemplo n.º 23
0
function abonnement_possible($plugin)
{
    $retour = false;
    static $statuts_spipliste = array('liste', 'pub_jour', 'pub_hebdo', 'pub_7jours', 'pub_mensul', 'pub_mois', 'pub_an');
    $informer = chercher_filtre('info_plugin');
    $plugin_actif = $informer($plugin, 'est_actif') == 1;
    if ($plugin_actif) {
        if (strtolower($plugin) == 'spiplistes') {
            $nb_listes = sql_countsel('spip_listes', array(sql_in('statut', $statuts_spipliste)));
            if ($nb_listes > 0) {
                $retour = true;
            }
        } else {
            if (strtolower($plugin) == 'abomailmans') {
                $nb_listes = sql_countsel('spip_abomailmans', array('desactive=' . sql_quote('0')));
                if ($nb_listes > 0) {
                    $retour = true;
                }
            } else {
                if (strtolower($plugin) == 'mailsubscribers') {
                    $retour = true;
                }
            }
        }
    }
    return $retour;
}
Exemplo n.º 24
0
/**
 * Appliquer des filtres sur un squelette complet
 *
 * La fonction accèpte plusieurs tableaux de filtres à partir du 3ème argument
 * qui seront appliqués dans l'ordre
 *
 * @uses echapper_php_callback()
 *
 * @param array $skel
 * @param string $corps
 * @param array $filtres
 *     Tableau de filtres à appliquer.
 * @return mixed|string
 */
function sandbox_filtrer_squelette($skel, $corps, $filtres)
{
    $series_filtres = func_get_args();
    array_shift($series_filtres);
    // skel
    array_shift($series_filtres);
    // corps
    // proteger les <INCLUDE> et tous les morceaux de php licites
    if ($skel['process_ins'] == 'php') {
        $corps = preg_replace_callback(',<[?](\\s|php|=).*[?]>,UimsS', 'echapper_php_callback', $corps);
    }
    // recuperer les couples de remplacement
    $replace = echapper_php_callback();
    foreach ($series_filtres as $filtres) {
        if (count($filtres)) {
            foreach ($filtres as $filtre) {
                if ($filtre and $f = chercher_filtre($filtre)) {
                    $corps = $f($corps);
                }
            }
        }
    }
    // restaurer les echappements
    return str_replace($replace[0], $replace[1], $corps);
}
Exemplo n.º 25
0
/**
 * Annoncer SPIP + plugin&version pour les logs de certains providers
 * @param string $format
 * @return string
 */
function bank_annonce_version_plugin($format = 'string')
{
    $infos = array('name' => 'SPIP ' . $GLOBALS['spip_version_branche'] . ' + Bank', 'url' => 'https://github.com/nursit/bank', 'version' => '');
    include_spip('inc/filtres');
    if ($info_plugin = chercher_filtre("info_plugin")) {
        $infos['version'] = 'v' . $info_plugin("bank", "version");
    }
    if ($format === 'string') {
        return $infos['name'] . $infos['version'] . '(' . $infos['url'] . ')';
    }
    return $infos;
}
Exemplo n.º 26
0
function analyse_resultat_skel($nom, $cache, $corps, $source='') {
	$headers = array();

	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
	// note: on essaie d'attrapper aussi certains de ces entetes codes
	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
	if (preg_match_all(
	'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
	$corps, $regs, PREG_SET_ORDER)){
		foreach ($regs as $r) {
			$corps = str_replace($r[0], '', $corps);
			# $j = Content-Type, et pas content-TYPE.
			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));

			if ($j=='X-Spip-Filtre' AND isset($headers[$j]))
				$headers[$j].="|".$r[3];
			else
				$headers[$j] = $r[3];
		}
	}
	// S'agit-il d'un resultat constant ou contenant du code php
	$process_ins = (
		strpos($corps,'<'.'?') === false
		OR strpos(str_replace('<'.'?xml', '', $corps),'<'.'?') === false
	)
		? 'html'
		: 'php';

	// traiter #FILTRE{} ?
	if (isset($headers['X-Spip-Filtre'])
	AND strlen($headers['X-Spip-Filtre'])) {
		// proteger les <INCLUDE> et tous les morceaux de php
		if ($process_ins == 'php')
			$corps = preg_replace_callback(',<[?](\s|php|=).*[?]>,UimsS',
				'echapper_php_callback', $corps);
		foreach (explode('|', $headers['X-Spip-Filtre']) as $filtre) {
			if ($f = chercher_filtre($filtre))
				$corps = $f($corps);
		}
		// restaurer les echappements
		$corps = echapper_php_callback($corps);
		unset($headers['X-Spip-Filtre']);
	}

	return array('texte' => $corps,
		'squelette' => $nom,
		'source' => $source,
		'process_ins' => $process_ins,
		'invalideurs' => $cache,
		'entetes' => $headers,
		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0 
	);
}
Exemplo n.º 27
0
function geol_installation()
{
    // activer l'inscription des visiteurs
    if (lire_config('accepter_inscriptions') == 'non') {
        ecrire_config('accepter_inscriptions', 'oui');
    }
    // taille des vignettes à 300px
    ecrire_config('taille_preview', '300');
    // thème bootstrap pour les box
    ecrire_config('mediabox/skin', 'bootstrap');
    // publication des articles post-datés
    ecrire_config('post_dates', 'oui');
    // forcer l'utilisation des mots clés
    if (lire_config('articles_mots') == 'non') {
        ecrire_config('articles_mots', 'oui');
    }
    // activer les docs sur les articles
    is_array($documents_objets = explode(',', lire_config('documents_objets'))) || ($documents_objets = array());
    if (!in_array('spip_articles', $documents_objets)) {
        ecrire_config('documents_objets', implode(',', array('spip_articles', '')));
    }
    // pas de titre, lien et barre typo dans les forums
    if (lire_config('forums_titre') == 'oui') {
        ecrire_config('forums_titre', 'non');
    }
    if (lire_config('forums_afficher_barre') == 'oui') {
        ecrire_config('forums_afficher_barre', 'non');
    }
    if (lire_config('forums_urlref') == 'oui') {
        ecrire_config('forums_urlref', 'non');
    }
    // configuration de GIS : activer le geocoder + geolocalisation sur les articles
    ecrire_config('gis/geocoder', 'on');
    ecrire_config('gis/gis_objets', array('spip_articles', 'spip_documents'));
    // configuration d'Emballe médias
    ecrire_config('emballe_medias/fichiers/chercher_article', 'on');
    ecrire_config('emballe_medias/fichiers/fichiers_images', array('gif', 'jpg', 'png'));
    ecrire_config('emballe_medias/fichiers/fichiers_audios', array('mp3'));
    ecrire_config('emballe_medias/fichiers/fichiers_videos', array('flv', 'mp4'));
    ecrire_config('emballe_medias/fichiers/fichiers_textes', array('kml'));
    // configuration de socialtags
    ecrire_config('socialtags/jsselector', '#socialtags');
    // création du groupe de mots clés echelle et de ses mots clés
    $Terreur = array();
    if (sql_countsel('spip_groupes_mots', "titre = 'echelle'") == 0) {
        $id_groupe = sql_insertq('spip_groupes_mots', array('titre' => 'echelle', 'descriptif' => '', 'tables_liees' => 'articles', 'unseul' => 'oui', 'obligatoire' => 'non', 'minirezo' => 'oui', 'comite' => 'oui', 'forum' => 'non'));
        if (sql_error() != '') {
            die(_T('geol:erreur_install_mots ') . sql_error());
        }
        $mots_echelle = array('10. 10 km', '20. 1 km', '30. 500 m', '40. 100 m', '50. 50 m', '60. 10 m', '70. 1 m', '80. 50 cm', '90. 10 cm', '100. 5 cm', '110. 1 cm', '120. 5 mm', '130. 1 mm', '140. 0,1 mm');
        foreach ($mots_echelle as $echelle) {
            sql_insertq('spip_mots', array('titre' => $echelle, 'id_groupe' => $id_groupe, 'type' => 'echelle'));
            if (sql_error() != '') {
                $Terreurs[] = _T('erreur_creation_mot_cle') . $echelle . ': ' . sql_error();
            }
        }
    }
    if (count($Terreurs) != 0) {
        echo implode('<br>', $Terreurs);
    }
    // creation des menus du squelette
    include_spip('inc/filtres');
    $plugin = chercher_filtre('info_plugin');
    if ($plugin('menus', 'est_actif')) {
        include_spip('action/editer_menu');
        $menus = array(array('titre' => 'A propos', 'identifiant' => 'pied_apropos', 'css' => ''), array('titre' => 'Explorer', 'identifiant' => 'pied_explorer', 'css' => ''), array('titre' => 'Univers', 'identifiant' => 'pied_univers', 'css' => ''), array('titre' => 'Univers', 'identifiant' => 'entete_univers', 'css' => 'univers'));
        foreach ($menus as $menu) {
            if (!sql_getfetsel('id_menu', 'spip_menus', 'identifiant=' . sql_quote($menu['identifiant']))) {
                $id_menu = insert_menu();
                $err = menu_set($id_menu, $menu);
            }
        }
    }
    // maj suivantes
    geol_upgrade_02();
    geol_upgrade_021();
    geol_upgrade_022();
}