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; }
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; }
/** * #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; }
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); }
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 [' . strval(abs($revision)) . ']'; } } return $version; }
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; }
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; } }
/** * 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; }
/** * 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; }
/** * 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; }
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; }
/** * 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); }
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 ''; } }
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; }
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; }
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; }
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; }
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; }
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; }
/** * 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); }
/** * 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; }
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 ); }
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(); }