/** * Pre-charger les infos profils (nom, adresse, tel) dans le formulaire souscription * si le visiteur est loge * * @param array $flux * @return array */ function profils_formulaire_charger($flux) { if (!isset($GLOBALS['souscription_forms'])) { $GLOBALS['souscription_forms'] = array('souscription'); } if (in_array($flux['args']['form'], $GLOBALS['souscription_forms']) and !test_espace_prive() and isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur'] and is_array($flux['data'])) { $flux['data']['recu_fiscal'] = 'on'; if (isset($GLOBALS['visiteur_session']['name']) and $GLOBALS['visiteur_session']['name']) { $flux['data']['nom'] = $GLOBALS['visiteur_session']['name']; } if (isset($GLOBALS['visiteur_session']['prenom']) and $GLOBALS['visiteur_session']['prenom']) { $flux['data']['prenom'] = $GLOBALS['visiteur_session']['prenom']; } if (isset($GLOBALS['visiteur_session']['adresse']) and $GLOBALS['visiteur_session']['adresse']) { $flux['data']['adresse'] = $GLOBALS['visiteur_session']['adresse']; } if (isset($GLOBALS['visiteur_session']['adresse_cp']) and $GLOBALS['visiteur_session']['adresse_cp']) { $flux['data']['code_postal'] = $GLOBALS['visiteur_session']['adresse_cp']; } if (isset($GLOBALS['visiteur_session']['adresse_ville']) and $GLOBALS['visiteur_session']['adresse_ville']) { $flux['data']['ville'] = $GLOBALS['visiteur_session']['adresse_ville']; } if (isset($GLOBALS['visiteur_session']['adresse_pays']) and $GLOBALS['visiteur_session']['adresse_pays']) { $flux['data']['pays'] = $GLOBALS['visiteur_session']['adresse_pays']; } if (isset($GLOBALS['visiteur_session']['tel_fixe']) and $GLOBALS['visiteur_session']['tel_fixe']) { $flux['data']['telephone'] = $GLOBALS['visiteur_session']['tel_fixe']; } elseif (isset($GLOBALS['visiteur_session']['tel_mobile']) and $GLOBALS['visiteur_session']['tel_mobile']) { $flux['data']['telephone'] = $GLOBALS['visiteur_session']['tel_mobile']; } } return $flux; }
function inc_meta_dist($table = 'meta') { // Lire les meta, en cache si present, valide et lisible // en cas d'install ne pas faire confiance au meta_cache eventuel $cache = cache_meta($table); if ((_request('exec') !== 'install' or !test_espace_prive()) and $new = jeune_fichier($cache, _META_CACHE_TIME) and lire_fichier_securise($cache, $meta) and $meta = @unserialize($meta)) { $GLOBALS[$table] = $meta; } if (isset($GLOBALS[$table]['touch']) and $GLOBALS[$table]['touch'] < time() - _META_CACHE_TIME) { $GLOBALS[$table] = array(); } // sinon lire en base if (!$GLOBALS[$table]) { $new = !lire_metas($table); } // renouveller l'alea general si trop vieux ou sur demande explicite if (test_espace_prive() || isset($_GET['renouvelle_alea']) and $GLOBALS[$table] and time() > _RENOUVELLE_ALEA + $GLOBALS['meta']['alea_ephemere_date']) { // si on n'a pas l'acces en ecriture sur le cache, // ne pas renouveller l'alea sinon le cache devient faux if (supprimer_fichier($cache)) { include_spip('inc/acces'); renouvelle_alea(); $new = false; } else { spip_log("impossible d'ecrire dans " . $cache); } } // et refaire le cache si on a du lire en base if (!$new) { touch_meta(false, $table); } }
function pack_cQuery($chemin) { $flux = spip_file_get_contents($chemin); $flux = str_replace('jQuery', 'cQuery', $flux); // On ne compacte PAS deux fois (c'est inutile et en plus ca bugge) if (!strlen($flux) // mode debug des crayons OR _request('debug_crayons') // le vieil auto_compress_js OR ($GLOBALS['meta']['auto_compress_js'] == 'oui' AND @file_exists(_DIR_RESTREINT.'inc/compacte_js.php')) // ou l'espace prive OR !function_exists('test_espace_prive') OR test_espace_prive()) return $flux; include_spip('lib/JavaScriptPacker/class.JavaScriptPacker'); $packer = new JavaScriptPacker($flux, 0, true, false); // en cas d'echec (?) renvoyer l'original if (strlen($t = $packer->pack())) return $t; // erreur spip_log('erreur de pack_js'); return $flux; }
/** * il faut avoir un id_transaction et un transaction_hash coherents * pour se premunir d'une tentative d'appel exterieur * * * @return array */ function presta_virement_call_response() { // recuperer la reponse en post et la decoder $id_transaction = _request('id_transaction'); $transaction_hash = _request('hash'); $mode = 'virement'; if (!($row = sql_fetsel('*', 'spip_commandes_transactions', 'id_transaction=' . intval($id_transaction)))) { spip_log("id_transaction {$id_transaction} non trouve", 'gratuit.' . _LOG_ERREUR); return array($id_transaction, false); } if ($transaction_hash != $row['transaction_hash']) { spip_log("id_transaction {$id_transaction}, hash {$transaction_hash} non conforme", 'gratuit.' . _LOG_ERREUR); return array($id_transaction, false); } if ($row['statut'] == 'ok') { spip_log("Check:Transaction {$id_transaction} deja validee", "virement"); return array($id_transaction, true); } // si pages publiques, c'est le client qui demande à payer par virement if (!test_espace_prive()) { $bank_recoit_notification = charger_fonction('recoit_notification', 'bank'); return bank_recoit_notification($id_transaction, $transaction_hash, $mode); //retourne $id_transaction,true } return array($id_transaction, false); }
/** * filtre de test pour savoir si l'acces a une rubrique est restreinte * * @param int $id_rubrique * @return bool */ function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur=null){ include_spip('inc/acces_restreint'); return @in_array($id_rubrique, accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur) ); }
/** * Ajouter un brin de CSS * * @pipeline header_prive * @param array $flux Données du pipeline * @return array Données du pipeline */ function massicot_header_prive($flux) { if (test_espace_prive()) { $flux .= '<link rel="stylesheet" type="text/css" media="screen" href="' . find_in_path('css/massicot.css') . '" />'; $flux .= '<link rel="stylesheet" type="text/css" media="screen" href="' . find_in_path('lib/jquery.imgareaselect.js/distfiles/css/imgareaselect-default.css') . '" />'; } return $flux; }
/** * Insertion dans le pipeline formulaire_charger (SPIP) * * Surcharge du formulaire de gis dans l'espace public * * @param array $flux * @return array $flux */ function geol_balades_formulaire_charger($flux) { if ($flux['args']['form'] == 'editer_gis' and !test_espace_prive()) { $flux['data']['nodraw'] = 'oui'; $flux['data']['noimport'] = 'oui'; } return $flux; }
/** * Ajoute Chosen aux plugins JS chargés * * @param array $flux * Liste des js chargés * @return array * Liste complétée des js chargés **/ function chosen_jquery_plugins($flux) { include_spip('inc/config'); $config = lire_config('chosen/active','non'); if (test_espace_prive() || $config =='oui') { $flux[] = 'lib/chosen/chosen.jquery.js'; # lib originale $flux[] = 'javascript/spip_chosen.js'; # chargements SPIP automatiques } return $flux; }
/** * EcataloguE * * @author Aleksey Yaroshchuk (aleksey.yaroshchuk@gmail.com) * @license GNU/GPL * @package plugins * @subpackage ecatalogue * @copyright (c) Aleksey Yaroshchuk 2011-2012 * @link http://www.spip-contrib.net/EcataloguE */ function ecatalogue_insert_head($flux) { include_spip('inc/utils'); //Private space if (test_espace_prive()) { //$flux .= '<link rel="stylesheet" href="'.$GLOBALS['meta']['adresse_site'].'/?page=css/ecatalogue_prive" type="text/css"/>'; } return $flux; }
/** * Inserer systematiquement le JS dans la page * @param string $flux * @return string */ function player_insert_head($flux) { if (test_espace_prive() or defined('_PLAYER_AFFICHAGE_FINAL') and !_PLAYER_AFFICHAGE_FINAL) { $cfg = isset($GLOBALS['meta']['player']) ? unserialize($GLOBALS['meta']['player']) : array(); if (isset($cfg['insertion_auto']) and in_array('inline_mini', $cfg['insertion_auto'])) { $flux .= player_call_js(); } } return $flux; }
/** * Ouvrir une boite * peut etre surcharge par filtre_boite_ouvrir_dist, filtre_boite_ouvrir * * @param string $titre * @param string $class * * @return <type> */ function boite_ouvrir($titre, $class = '', $head_class = '', $id = "") { $class = "box {$class}"; $head_class = "hd {$head_class}"; /* dans l'espace prive, titrer en h3 si pas de balise <hn> */ if (test_espace_prive() and strlen($titre) and strpos($titre, '<h') === false) { $titre = "<h3>{$titre}</h3>"; } return '<div class="' . $class . ($id ? "\" id=\"{$id}" : "") . '">' . '<b class="top"><b class="tl"></b><b class="tr"></b></b>' . '<div class="inner">' . ($titre ? '<div class="' . $head_class . '">' . $titre . '<div class="nettoyeur"></div><!--/hd--></div>' : '') . '<div class="bd">'; }
/** * On charge la config de l'outil et les valeurs d'erreurs renvoyees */ function devdebug_charger_debug(){ // On renvoie direct si pas defini if(!defined('_DEVDEBUG_MODE')) return; // Sinon, on traite if(_DEVDEBUG_MODE==1){ $prive = function_exists('test_espace_prive') ?test_espace_prive() // compatibilite pour SPIP 1.92 :(defined('_DIR_RESTREINT') ? !_DIR_RESTREINT : false); // Les liens d'erreur generes par PHP renvoient ... en local ! dans le php.ini standard // On les definit du type 'http://fr.php.net/manual/en/ %s .php' (necessite une connexion) $devdebug_langues_phpdoc = array('en','fr','de','ja','pl','ro','fa','es','tr'); if(function_exists('utiliser_langue_visiteur')) utiliser_langue_visiteur(); $lang = (isset($GLOBALS['spip_lang']) && in_array($GLOBALS['spip_lang'], $devdebug_langues_phpdoc)) ? $GLOBALS['spip_lang'] : 'fr'; @ini_set('docref_root', "http://www.php.net/manual/".$lang."/"); @ini_set('docref_ext', '.php'); // On lance le php error tracking quoiqu'il arrive @ini_set('track_errors',1); // On evite d'afficher les erreurs repetees @ini_set('ignore_repeated_errors',1); // Compatibilite PHP (recup de 'inc_version', mais qui le definit trop tard) @define('E_DEPRECATED',8192); // PHP 5.3 // Et let's go $niveau = 'E_WARNING'; if(defined('_DEVDEBUG_NIVEAU')) switch(_DEVDEBUG_NIVEAU) { case 'warning' : $niveau = "E_ALL ^ E_NOTICE"; break; case 'error' : $niveau = "E_ALL ^ (E_NOTICE | E_WARNING)"; break; case 'strict' : $niveau = "-1"; break; case 'all' : $niveau = "E_ALL | E_DEPRECATED"; break; case 'user' : $niveau = "E_USER_NOTICE | E_USER_WARNING | E_USER_ERROR"; break; case 'notice' : default : $niveau = "E_ALL"; break; } if(defined('_DEVDEBUG_ESPACE')) switch(_DEVDEBUG_ESPACE) { case 'public' : if(!$prive) { @ini_set('display_errors',1); eval("error_reporting($niveau);"); } else @ini_set('display_errors',0); break; case 'prive' : if($prive) { @ini_set('display_errors',1); eval("error_reporting($niveau);"); } else @ini_set('display_errors',0); break; default : @ini_set('display_errors',1); eval("error_reporting($niveau);"); } } elseif(_DEVDEBUG_MODE==0) @ini_set('display_errors',0); }
function compacte_head($flux){ include_spip('inc/compresseur'); if (!defined('_INTERDIRE_COMPACTE_HEAD')){ // dans l'espace prive on compacte toujours, c'est concu pour if ($GLOBALS['meta']['auto_compress_css'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) $flux = compacte_head_css($flux); if ($GLOBALS['meta']['auto_compress_js'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) $flux = compacte_head_js($flux); } return $flux; }
/** * Inserer une nouvelle souscription en en base. * * @return bool */ function souscription_inserer() { $champs = array('date_souscription' => date('Y-m-d H:i:s'), 'statut' => 'prepa'); if (!test_espace_prive() and is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) { $champs['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur']; } // Envoyer aux plugins $champs = pipeline('pre_insertion', array('args' => array('table' => 'spip_souscriptions'), 'data' => $champs)); $id_souscription = sql_insertq("spip_souscriptions", $champs); pipeline('post_insertion', array('args' => array('table' => 'spip_souscriptions', 'id_objet' => $id_souscription), 'data' => $champs)); return $id_souscription; }
function mediabox_insert_head_css($flux) { $config = mediabox_config(); if ($config['active'] == 'oui' and $f = find_in_path((test_espace_prive() ? "prive/" : "") . "colorbox/" . $config['skin'] . '/colorbox.css')) { $flux .= '<link rel="stylesheet" href="' . direction_css($f) . '" type="text/css" media="all" />'; /** * Initialiser la config de la mediabox */ $flux = '<script type="text/javascript">/* <![CDATA[ */ var box_settings = {tt_img:' . ($config['traiter_toutes_images'] == 'oui' ? 'true' : 'false') . ',sel_g:"' . $config['selecteur_galerie'] . '",sel_c:"' . $config['selecteur_commun'] . '",trans:"' . $config['transition'] . '",speed:"' . $config['speed'] . '",ssSpeed:"' . $config['slideshow_speed'] . '",maxW:"' . $config['maxWidth'] . '",maxH:"' . $config['maxHeight'] . '",minW:"' . $config['minWidth'] . '",minH:"' . $config['minHeight'] . '",opa:"' . $config['opacite'] . '",str_ssStart:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStart'))) . '",str_ssStop:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStop'))) . '",str_cur:"' . _T('mediabox:boxstr_current', array('current' => '{current}', 'total' => '{total}')) . '",str_prev:"' . _T('mediabox:boxstr_previous') . '",str_next:"' . _T('mediabox:boxstr_next') . '",str_close:"' . _T('mediabox:boxstr_close') . '",splash_url:"' . $config['splash_url'] . '"}; /* ]]> */</script>' . "\n" . $flux; } return $flux; }
/** * Chargement du formulaire * * @param int|string $id_document * L'identidiant numérique du document s'il est à remplacer, sinon "new" * @param int $id_objet * L'identifiant numérique de l'objet sur lequel on ajoute le document * @param string $objet * Le type de l'objet sur lequel on ajoute le document * @param string $mode * Le mode du document (auto,choix,document,image,vignette...), par défaut auto * @param string $galerie * Passer optionnellement une galerie jointe au form, plus utilise nativement, * on prefere la mise a jour apres upload par ajaxReload('documents') * @param bool|string $proposer_media * Doit on afficher la médiathèque ? par défaut oui * Valeurs possibles si string : false,'non','no'. * @param bool|string $proposer_ftp * Doit on afficher le ftp ? par défaut oui * Valeurs possibles si string : false,'non','no'. * @return array $valeurs * Les valeurs chargées dans le formulaire */ function formulaires_joindre_document_charger_dist($id_document = 'new', $id_objet = 0, $objet = '', $mode = 'auto', $galerie = false, $proposer_media = true, $proposer_ftp = true) { $valeurs = array(); $mode = joindre_determiner_mode($mode, $id_document, $objet); $valeurs['id'] = $id_document; $valeurs['_mode'] = $mode; $valeurs['url'] = 'http://'; $valeurs['fichier_upload'] = $valeurs['_options_upload_ftp'] = $valeurs['_dir_upload_ftp'] = ''; $valeurs['joindre_upload'] = $valeurs['joindre_distant'] = $valeurs['joindre_ftp'] = $valeurs['joindre_mediatheque'] = ''; $valeurs['editable'] = ' '; if (intval($id_document)) { $valeurs['editable'] = autoriser('modifier', 'document', $id_document) ? ' ' : ''; } $valeurs['proposer_media'] = is_string($proposer_media) ? preg_match('/^(false|non|no)$/i', $proposer_media) ? false : true : $proposer_media; $valeurs['proposer_ftp'] = is_string($proposer_ftp) ? preg_match('/^(false|non|no)$/i', $proposer_ftp) ? false : true : $proposer_ftp; # regarder si un choix d'upload FTP est vraiment possible if ($valeurs['proposer_ftp'] and test_espace_prive() and $mode != 'image' and $mode != 'vignette' and $GLOBALS['flag_upload']) { include_spip('inc/documents'); if ($dir = determine_upload('documents')) { // quels sont les docs accessibles en ftp ? $valeurs['_options_upload_ftp'] = joindre_options_upload_ftp($dir, $mode); // s'il n'y en a pas, on affiche un message d'aide // en mode document, mais pas en mode image if ($valeurs['_options_upload_ftp'] or ($mode == 'document' or $mode == 'choix')) { $valeurs['_dir_upload_ftp'] = "<b>" . joli_repertoire($dir) . "</b>"; } } } // On ne propose le FTP que si on a des choses a afficher $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']); if ($galerie) { # passer optionnellement une galerie jointe au form # plus utilise nativement, on prefere la mise a jour # apres upload par ajaxReload('documents') $valeurs['_galerie'] = $galerie; } if ($objet and $id_objet) { $valeurs['id_objet'] = $id_objet; $valeurs['objet'] = $objet; $valeurs['refdoc_joindre'] = ''; if ($valeurs['editable']) { include_spip('inc/autoriser'); $valeurs['editable'] = autoriser('joindredocument', $objet, $id_objet) ? ' ' : ''; } } return $valeurs; }
/** * Ecrire la balise javascript pour insérer le fichier compressé * * C'est cette fonction qui décide où il est le plus pertinent * d'insérer le fichier, et dans quelle forme d'ecriture * * @param string $flux * Contenu du head nettoyé des fichiers qui ont été compressé * @param int $pos * Position initiale du premier fichier inclu dans le fichier compressé * @param string $src * Nom du fichier compressé * @param string $comments * Commentaires à insérer devant * @return string * Code HTML de la balise <script> */ function compresseur_ecrire_balise_js_dist(&$flux, $pos, $src, $comments = "") { $src = timestamp($src); // option chargement JS async par jQl if (defined('_JS_ASYNC_LOAD') and !test_espace_prive()) { lire_fichier(find_in_path("lib/jQl/jQl.min.js"), $jQl); if ($jQl) { $comments .= "<script type='text/javascript'>\n{$jQl}\njQl.loadjQ('{$src}')\n</script>"; } else { $comments .= "<script type='text/javascript' src='{$src}'></script>"; } } else { $comments .= "<script type='text/javascript' src='{$src}'></script>"; } $flux = substr_replace($flux, $comments, $pos, 0); return $flux; }
function definir_puce() { // Attention au sens, qui n'est pas defini de la meme facon dans // l'espace prive (spip_lang est la langue de l'interface, lang_dir // celle du texte) et public (spip_lang est la langue du texte) $dir = _DIR_RESTREINT ? lang_dir() : lang_dir($GLOBALS['spip_lang']); $p = 'puce' . (test_espace_prive() ? '_prive' : ''); if ($dir == 'rtl') { $p .= '_rtl'; } if (!isset($GLOBALS[$p])) { $img = find_in_path($p . '.gif'); list(, , , $size) = @getimagesize($img); $GLOBALS[$p] = '<img src="' . $img . '" ' . $size . ' class="puce" alt="-" />'; } return $GLOBALS[$p]; }
function bank_regler_transaction_dist($id_transaction, $message = "", $row_prec = null, $notifier = true) { if (!strlen($message)) { $bank_messager_reglement_enregistre = charger_fonction('bank_messager_reglement_enregistre', 'inc'); $message = $bank_messager_reglement_enregistre($id_transaction); } if (!$row_prec) { $row_prec = sql_fetsel("*", "spip_commandes_transactions", "id_transaction=" . intval($id_transaction)); } // on pose un flag dans la session pour permettre la pose eventuelle de tag // sur la prochaine page // si c'est un visiteur public if (!test_espace_prive()) { $_SESSION['id_transaction_achevee'] = $id_transaction; } // ne pas jouer 2 fois le traitement du reglement ! if (!$row_prec or $row_prec['reglee'] == 'oui' and $row_prec['finie']) { return; } $notifier = ($notifier and $row_prec['reglee'] != 'oui'); // d'abord un pipeline de facturation $message = pipeline('bank_facturer_reglement', array('args' => array('id_transaction' => $id_transaction, 'new' => $row_prec['reglee'] !== 'oui', 'confirm' => $row_prec['reglee'] == 'oui', 'notifier' => $notifier, 'avant' => $row_prec), 'data' => $message)); // ensuite un pipeline de traitement, notification etc... $message = pipeline('bank_traiter_reglement', array('args' => array('id_transaction' => $id_transaction, 'new' => $row_prec['reglee'] !== 'oui', 'confirm' => $row_prec['reglee'] == 'oui', 'notifier' => $notifier, 'avant' => $row_prec), 'data' => $message)); sql_updateq("spip_commandes_transactions", array('message' => $message, 'finie' => 1), "id_transaction=" . intval($id_transaction)); // mettre à jour le statut_abonnement de la table contacts_abonnements, si la commande comporte un ou des abonnements $id_commande = $row_prec['id_commande']; $id_commandes_detail = sql_allfetsel('id_commandes_detail', 'spip_commandes_details', 'id_commande=' . $id_commande . ' and objet="abonnement"'); if ($id_commandes_detail) { foreach ($id_commandes_detail as $k) { foreach ($k as $id) { sql_updateq("spip_contacts_abonnements", array('statut_abonnement' => 'paye'), 'id_commandes_detail=' . $id); } } } // notifier aux admins avec un ticket caisse if ($notifier) { //$bank_editer_ticket_admin = charger_fonction('bank_editer_ticket_admin','inc'); //$bank_editer_ticket_admin($id_transaction); // trigger la notification // le pipeline a le meme format que bank_redirige_apres_retour_transaction // cela permet de factoriser le code $row = sql_fetsel('*', 'spip_commandes_transactions', 'id_transaction=' . intval($id_transaction)); pipeline('trig_bank_notifier_reglement', array('args' => array('mode' => $row['mode'], 'type' => 'acte', 'succes' => true, 'id_transaction' => $id_transaction, 'row' => $row), 'data' => '')); } }
/** * Insertion dans le pipeline formulaire_charger (SPIP) * * Surcharge du sujet et le texte du message généré par le formulaire_ecrire_auteur * Surcharge du formulaire d'inscription pour ne pas afficher l'explication * * @param array $flux * @return array $flux */ function geol_formulaire_charger($flux) { // sujet perso pour formulaire_ecrire_auteur depuis une page article (erreur de localisation) if ($flux['args']['form'] == 'ecrire_auteur' and $flux['args']['args'][1] != '') { $flux['data']['sujet_message_auteur'] .= supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . " : " . _T('geol:sujet_erreur_localisation'); $flux['data']['texte_message_auteur'] .= _T('geol:depuis_page') . " : " . generer_url_entite_absolue($flux['args']['args'][1], 'article') . "\n\nMessage :\n\n"; } // pas d'explicaltion sur le form d'inscription if ($flux['args']['form'] == 'inscription' and $flux['args']['args'][0] == '1comite') { $flux['data']['_commentaire'] = ''; } // limiter le form de polyhierarchie sur la branche des categories (dans le public) // cf http://zone.spip.org/trac/spip-zone/changeset/41280 if ($flux['args']['form'] == 'editer_polyhierarchie' and !test_espace_prive()) { $flux['data']['limite_branche'] = lire_config('geol/secteur_categories', 2); } return $flux; }
function mediabox_insert_head_css($flux) { $config = mediabox_config(); if ($config['active'] == 'oui' and $f = find_in_path((test_espace_prive() ? "prive/" : "") . "colorbox/" . $config['skin'] . '/colorbox.css')) { $flux .= '<link rel="stylesheet" href="' . direction_css($f) . '" type="text/css" media="all" />'; /** * Initialiser la config de la mediabox */ $configmediabox = '<script type="text/javascript">/* <![CDATA[ */ var box_settings = {tt_img:' . ($config['traiter_toutes_images'] == 'oui' ? 'true' : 'false') . ',sel_g:"' . $config['selecteur_galerie'] . '",sel_c:"' . $config['selecteur_commun'] . '",trans:"' . $config['transition'] . '",speed:"' . $config['speed'] . '",ssSpeed:"' . $config['slideshow_speed'] . '",maxW:"' . $config['maxWidth'] . '",maxH:"' . $config['maxHeight'] . '",minW:"' . $config['minWidth'] . '",minH:"' . $config['minHeight'] . '",opa:"' . $config['opacite'] . '",str_ssStart:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStart'))) . '",str_ssStop:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStop'))) . '",str_cur:"' . _T('mediabox:boxstr_current', array('current' => '{current}', 'total' => '{total}')) . '",str_prev:"' . _T('mediabox:boxstr_previous') . '",str_next:"' . _T('mediabox:boxstr_next') . '",str_close:"' . _T('mediabox:boxstr_close') . '",splash_url:"' . $config['splash_url'] . '"};' . "\n"; // Si c'est une image, on la chargera avec une redimentionnement automatique // Sinon, chargement dans une iframe $extension = pathinfo($config['splash_url'], PATHINFO_EXTENSION); if (match($extension, 'gif|png|jpg|jpeg')) { $configmediabox .= 'var box_settings_iframe = false;' . "\n"; } else { $configmediabox .= 'var box_settings_splash_width = "' . $config['splash_width'] . '"; var box_settings_splash_height = "' . $config['splash_height'] . '";' . "\n"; $configmediabox .= 'var box_settings_iframe = true;' . "\n"; } $flux = $configmediabox . '/* ]]> */</script>' . "\n" . $flux; } return $flux; }
function remplace_points_de_suite($texte, $id, $racc) { if (strpos($texte, _INTRODUCTION_CODE) === false) return $texte; // precaution sur le tout paragrapher de SPIP >= 2.0 ! $mem = $GLOBALS['toujours_paragrapher']; $GLOBALS['toujours_paragrapher'] = false; // des points de suite bien propres @define('_INTRODUCTION_SUITE', ' (...)'); $intro_suite = propre(_INTRODUCTION_SUITE); // si les points de suite sont cliquables if ($id && _INTRODUCTION_LIEN == 1) { $url = (defined('_SPIP19300') && test_espace_prive()) ?generer_url_entite_absolue($id, $racc, '', '', true):"$racc$id"; if (substr($intro_suite, 0, 6) == '<br />') $intro_suite = propre("<br />[".substr($intro_suite, 6)."->$url]"); else $intro_suite = propre(" [{$intro_suite}->$url]"); $intro_suite = inserer_attribut($intro_suite, 'class', extraire_attribut($intro_suite,'class') . ' pts_suite'); } $GLOBALS['toujours_paragrapher'] = $mem; return str_replace(_INTRODUCTION_CODE, $intro_suite, $texte); }
/** * Chargement du formulaire d'édition de souscription * * Déclarer les champs postés et y intégrer les valeurs par défaut * * @uses formulaires_editer_objet_charger() * * @param int$id_souscription_campagne * Identifiant de la campagne de souscription * @return array * Environnement du formulaire */ function formulaires_souscription_charger_dist($id_souscription_campagne) { if (!verifier_campagne($id_souscription_campagne)) { return false; } /* Récupération des information à propos de la campagne */ $campagne = sql_fetsel("*", "spip_souscription_campagnes", "id_souscription_campagne=" . intval($id_souscription_campagne)); $type = $campagne['type_objectif']; $recu_fiscal = "off"; if ($type == "adhesion") { $recu_fiscal = "on"; } if ($campagne['configuration_specifique'] !== 'on') { $montant_type = lire_config("souscription/{$type}_type_saisie", 'input'); $montant_datas = lire_config("souscription/{$type}_montants", ''); $abo_montant_type = lire_config("souscription/{$type}_abo_type_saisie", 'none'); $abo_montant_datas = lire_config("souscription/{$type}_abo_montants", ''); } else { $montant_type = $campagne['type_saisie']; $montant_datas = $campagne['montants']; $abo_montant_type = $campagne['abo_type_saisie']; $abo_montant_datas = $campagne['abo_montants']; } $montant_label = lire_config("souscription/{$type}_montants_label", _T('souscription:label_montant')); $abo_montant_label = lire_config("souscription/{$type}_abo_montants_label", _T('souscription:label_montant')); $montant_explication = nl2br(lire_config("souscription/{$type}_montants_description")); $abo_montant_explication = nl2br(lire_config("souscription/{$type}_abo_montants_description")); $email = ''; // dans l'espace prive c'est une souscription pour autrui, pas de pre-remplissage if (!test_espace_prive()) { if (isset($GLOBALS['visiteur_session']['email']) and $GLOBALS['visiteur_session']['email']) { $email = $GLOBALS['visiteur_session']['email']; } elseif (isset($GLOBALS['visiteur_session']['session_email']) and $GLOBALS['visiteur_session']['session_email']) { $email = $GLOBALS['visiteur_session']['session_email']; } } $valeurs = array('montant' => '', 'montant_libre' => '', 'abo_montant' => '', 'abo_montant_libre' => '', 'courriel' => $email, 'recu_fiscal' => $recu_fiscal, 'envoyer_info' => 'off', 'informer_comite_local' => 'on', 'civilite' => '', 'prenom' => '', 'nom' => '', 'adresse' => '', 'code_postal' => '', 'ville' => '', 'pays' => 'FR', 'telephone' => '', 'id_souscription_campagne' => $id_souscription_campagne, 'type_souscription' => $type, '_montant_datas' => montants_str2array($montant_datas), '_montant_type' => $montant_type, '_montant_label' => $montant_label, '_montant_explication' => $montant_explication, '_abo_montant_datas' => montants_str2array($abo_montant_datas, "abo"), '_abo_montant_type' => $abo_montant_type, '_abo_montant_label' => $abo_montant_label, '_abo_montant_explication' => $abo_montant_explication, '_souscription_paiement' => isset($GLOBALS['formulaires_souscription_paiement']) ? $GLOBALS['formulaires_souscription_paiement'] : ''); return $valeurs; }
/** * Cherche à échafauder un squelette générique pour un objet éditorial si * aucun squelette approprié n'a été trouvé * * Échaffaude seulement pour des appels à `prive/objets/liste/` ou * `prive/objets/contenu/` pour lesquels aucun squelette n'a été trouvé, * et uniquement si l'on est dans l'espace privé. * * @see prive_echafauder_dist() * * @param array $flux * Données du pipeline styliser * @return array * Données du pipeline styliser **/ function styliser_par_objets($flux) { if (test_espace_prive() and !($squelette = $flux['data']) and strncmp($flux['args']['fond'], 'prive/objets/', 13) == 0 and $echafauder = charger_fonction('echafauder', 'prive', true)) { if (strncmp($flux['args']['fond'], 'prive/objets/liste/', 19) == 0) { $table = table_objet(substr($flux['args']['fond'], 19)); $table_sql = table_objet_sql($table); $objets = lister_tables_objets_sql(); if (isset($objets[$table_sql])) { $flux['data'] = $echafauder($table, $table, $table_sql, "prive/objets/liste/objets", $flux['args']['ext']); } } if (strncmp($flux['args']['fond'], 'prive/objets/contenu/', 21) == 0) { $type = substr($flux['args']['fond'], 21); $table = table_objet($type); $table_sql = table_objet_sql($table); $objets = lister_tables_objets_sql(); if (isset($objets[$table_sql])) { $flux['data'] = $echafauder($type, $table, $table_sql, "prive/objets/contenu/objet", $flux['args']['ext']); } } } return $flux; }
/** * Complements d'initialisation non critiques pouvant etre realises * par les plugins * */ function spip_initialisation_suite() { static $too_late = 0; if ($too_late++) { return; } // taille mini des login if (!defined('_LOGIN_TROP_COURT')) { define('_LOGIN_TROP_COURT', 4); } // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels if (!defined('_PASS_LONGUEUR_MINI')) { define('_PASS_LONGUEUR_MINI', 6); } // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite) if (!defined('_IMG_QUALITE')) { define('_IMG_QUALITE', 85); } # valeur par defaut if (!defined('_IMG_GD_QUALITE')) { define('_IMG_GD_QUALITE', _IMG_QUALITE); } # surcharge pour la lib GD if (!defined('_IMG_CONVERT_QUALITE')) { define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); } # surcharge pour imagick en ligne de commande // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE if (!defined('_IMG_IMAGICK_QUALITE')) { define('_IMG_IMAGICK_QUALITE', 75); } # surcharge pour imagick en PHP if (!defined('_COPIE_LOCALE_MAX_SIZE')) { define('_COPIE_LOCALE_MAX_SIZE', 33554432); } // poids en octet // qq chaines standard if (!defined('_ACCESS_FILE_NAME')) { define('_ACCESS_FILE_NAME', '.htaccess'); } if (!defined('_AUTH_USER_FILE')) { define('_AUTH_USER_FILE', '.htpasswd'); } if (!defined('_SPIP_DUMP')) { define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml'); } if (!defined('_CACHE_RUBRIQUES')) { /** Fichier cache pour le navigateur de rubrique du bandeau */ define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt'); } if (!defined('_CACHE_RUBRIQUES_MAX')) { /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */ define('_CACHE_RUBRIQUES_MAX', 500); } if (!defined('_EXTENSION_SQUELETTES')) { define('_EXTENSION_SQUELETTES', 'html'); } if (!defined('_DOCTYPE_ECRIRE')) { define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n"); } if (!defined('_DOCTYPE_AIDE')) { define('_DOCTYPE_AIDE', "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>"); } /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par * le script de l'espace public, alias index.php */ if (!defined('_SPIP_SCRIPT')) { define('_SPIP_SCRIPT', 'spip.php'); } /** Argument page, personalisable en cas de conflit avec un autre script */ if (!defined('_SPIP_PAGE')) { define('_SPIP_PAGE', 'page'); } // le script de l'espace prive // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes: // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419) // meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html if (!defined('_SPIP_ECRIRE_SCRIPT')) { define('_SPIP_ECRIRE_SCRIPT', empty($_SERVER['SERVER_SOFTWARE']) ? '' : preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE']) ? 'index.php' : ''); } if (!defined('_SPIP_AJAX')) { define('_SPIP_AJAX', !isset($_COOKIE['spip_accepte_ajax']) ? 1 : ($_COOKIE['spip_accepte_ajax'] != -1 ? 1 : 0)); } // La requete est-elle en ajax ? if (!defined('_AJAX')) { define('_AJAX', (isset($_SERVER['HTTP_X_REQUESTED_WITH']) or !empty($_REQUEST['var_ajax_redir']) or !empty($_REQUEST['var_ajaxcharset']) or !empty($_REQUEST['var_ajax'])) and empty($_REQUEST['var_noajax'])); } # nombre de pixels maxi pour calcul de la vignette avec gd # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation # les configurations limitees en memoire ont un seuil plutot vers 1MPixel if (!defined('_IMG_GD_MAX_PIXELS')) { define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes']) ? $GLOBALS['meta']['max_taille_vignettes'] : 0); } if (!defined('_MEMORY_LIMIT_MIN')) { define('_MEMORY_LIMIT_MIN', 16); } // en Mo // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard) // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) { if ($memory = trim(ini_get('memory_limit'))) { $unit = strtolower(substr($memory, strlen($memory / 1), 1)); switch ($unit) { // Le modifieur 'G' est disponible depuis PHP 5.1.0 case 'g': $memory *= 1024; case 'm': $memory *= 1024; case 'k': $memory *= 1024; } if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) { @ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M'); if (trim(ini_get('memory_limit')) != $m) { if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) { define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true); } // evite une page blanche car on ne saura pas calculer la css dans ce hit } } } else { if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) { define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true); } } // evite une page blanche car on ne saura pas calculer la css dans ce hit } // Protocoles a normaliser dans les chaines de langues if (!defined('_PROTOCOLES_STD')) { define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal'); } init_var_mode(); }
/** * Rediriger une page suivant une autorisation, * et ce, n'importe où dans un squelette, même dans les inclusions. * Exemple : * [(#AUTORISER{non}|sinon_interdire_acces)] * [(#AUTORISER{non}|sinon_interdire_acces{#URL_PAGE{login}, 401})] * * @param bool $ok Indique si l'on doit rediriger ou pas * @param string $url Adresse vers laquelle rediriger * @param int $statut Statut HTML avec lequel on redirigera * @return string */ function sinon_interdire_acces($ok = false, $url = '', $statut = 0) { if ($ok) { return ''; } // Vider tous les tampons $level = @ob_get_level(); while ($level--) { @ob_end_clean(); } include_spip('inc/headers'); $statut = intval($statut); // Si aucun argument on essaye de deviner quoi faire par défaut if (!$url and !$statut) { // Si on est dans l'espace privé, on génère du 403 Forbidden if (test_espace_prive()) { http_status(403); $echec = charger_fonction('403', 'exec'); $echec(); } else { $statut = 404; } } // On suit les directives indiquées dans les deux arguments // S'il y a un statut if ($statut) { // Dans tous les cas on modifie l'entité avec ce qui est demandé http_status($statut); // Si le statut est une erreur et qu'il n'y a pas de redirection on va chercher le squelette du même nom if ($statut >= 400 and !$url) { echo recuperer_fond("{$statut}"); } } // S'il y a une URL, on redirige (si pas de statut, la fonction mettra 302 par défaut) if ($url) { redirige_par_entete($url, '', $statut); } exit; }
/** * Autorisation l'échafaudage de squelettes en Z * * Il faut être dans l'espace privé (et authentifié), * sinon il faut être webmestre (pas de fuite d'informations publiées) * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_echafauder_dist($faire, $type, $id, $qui, $opt) { if (test_espace_prive()) { return intval($qui['id_auteur']) ? true : false; } else { return autoriser('webmestre', '', $id, $qui, $opt); } }
/** * Filtre a appliquer aux champs du type #TEXTE* * http://code.spip.net/@propre * * @param string $t * @param string $connect * @param array $env * @return string */ function propre($t, $connect = null, $env = array()) { // les appels directs a cette fonction depuis le php de l'espace // prive etant historiquement ecrits sans argment $connect // on utilise la presence de celui-ci pour distinguer les cas // ou il faut passer interdire_script explicitement // les appels dans les squelettes (de l'espace prive) fournissant un $connect // ne seront pas perturbes $interdire_script = false; if (is_null($connect) and test_espace_prive()) { $connect = ''; $interdire_script = true; } if (!$t) { return strval($t); } $t = pipeline('pre_echappe_html_propre', $t); $t = echappe_html($t); $t = expanser_liens($t, $connect, $env); $t = traiter_raccourcis($t, (isset($env['wysiwyg']) and $env['wysiwyg']) ? true : false); $t = echappe_retour_modeles($t, $interdire_script); return $t; }
/** * Réduit une image * * @uses extraire_attribut() * @uses inserer_attribut() * @uses _image_valeurs_trans() * @uses _image_ratio() * @uses _image_tag_changer_taille() * @uses _image_ecrire_tag() * @uses _image_creer_vignette() * * @param array $fonction * Un tableau à 2 éléments : * 1) string : indique le nom du filtre de traitement demandé (par exemple : `image_reduire`) ; * 2) array : tableau reprenant la valeur de `$img` et chacun des arguments passés au filtre utilisé. * @param string $img * Chemin de l'image ou texte contenant une balise img * @param int $taille * Largeur désirée * @param int $taille_y * Hauteur désirée * @param bool $force * @param bool $cherche_image * Inutilisé * @param string $process * Librairie graphique à utiliser (gd1, gd2, netpbm, convert, imagick). * AUTO utilise la librairie sélectionnée dans la configuration. * @return string * Code HTML de la balise img produite **/ function process_image_reduire($fonction, $img, $taille, $taille_y, $force, $cherche_image, $process = 'AUTO') { $image = false; if ($process == 'AUTO' and isset($GLOBALS['meta']['image_process'])) { $process = $GLOBALS['meta']['image_process']; } # determiner le format de sortie $format_sortie = false; // le choix par defaut sera bon if ($process == "netpbm") { $format_sortie = "jpg"; } elseif ($process == 'gd1' or $process == 'gd2') { $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction); // on verifie que l'extension choisie est bonne (en principe oui) $gd_formats = explode(',', $GLOBALS['meta']["gd_formats"]); if (is_array($image) and (!in_array($image['format_dest'], $gd_formats) or $image['format_dest'] == 'gif' and !function_exists('ImageGif'))) { if ($image['format_source'] == 'jpg') { $formats_sortie = array('jpg', 'png', 'gif'); } else { $formats_sortie = array('png', 'jpg', 'gif'); } // Choisir le format destination // - on sauve de preference en JPEG (meilleure compression) // - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire # bug : gd_formats contient la liste des fichiers qu'on sait *lire*, # pas *ecrire* $format_sortie = ""; foreach ($formats_sortie as $fmt) { if (in_array($fmt, $gd_formats)) { if ($fmt != "gif" or function_exists('ImageGif')) { $format_sortie = $fmt; } break; } } $image = false; } } if (!is_array($image)) { $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction); } if (!is_array($image) or !$image['largeur'] or !$image['hauteur']) { spip_log("image_reduire_src:pas de version locale de {$img}"); // on peut resizer en mode html si on dispose des elements if ($srcw = extraire_attribut($img, 'width') and $srch = extraire_attribut($img, 'height')) { list($w, $h) = _image_ratio($srcw, $srch, $taille, $taille_y); return _image_tag_changer_taille($img, $w, $h); } // la on n'a pas d'infos sur l'image source... on refile le truc a css // sous la forme style='max-width: NNpx;' return inserer_attribut($img, 'style', "max-width: {$taille}px; max-height: {$taille_y}px"); } // si l'image est plus petite que la cible retourner une copie cachee de l'image if ($image['largeur'] <= $taille && $image['hauteur'] <= $taille_y) { if ($image['creer']) { @copy($image['fichier'], $image['fichier_dest']); } return _image_ecrire_tag($image, array('src' => $image['fichier_dest'])); } if ($image['creer'] == false && !$force) { return _image_ecrire_tag($image, array('src' => $image['fichier_dest'], 'width' => $image['largeur_dest'], 'height' => $image['hauteur_dest'])); } if (in_array($image["format_source"], array('jpg', 'gif', 'png'))) { $destWidth = $image['largeur_dest']; $destHeight = $image['hauteur_dest']; $logo = $image['fichier']; $date = $image["date_src"]; $preview = _image_creer_vignette($image, $taille, $taille_y, $process, $force); if ($preview && $preview['fichier']) { $logo = $preview['fichier']; $destWidth = $preview['width']; $destHeight = $preview['height']; $date = $preview['date']; } // dans l'espace prive mettre un timestamp sur l'adresse // de l'image, de facon a tromper le cache du navigateur // quand on fait supprimer/reuploader un logo // (pas de filemtime si SAFE MODE) $date = test_espace_prive() ? '?' . $date : ''; return _image_ecrire_tag($image, array('src' => "{$logo}{$date}", 'width' => $destWidth, 'height' => $destHeight)); } else { return $img; } }
/** * Initialise la langue pour un visiteur du site * * La langue est choisie dans cet ordre : * - Dans le cookie 'spip_lang' ou 'spip_lang_ecrire' s'il existe (selon l'espace public ou privé). * - Sinon dans la session du visiteur. * - Sinon dans une des langues définie en préférence du navigateur * - Sinon la langue du site * * @return string * La langue utilisée **/ function utiliser_langue_visiteur() { $l = !test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire'; if (isset($_COOKIE[$l])) { if (changer_langue($l = $_COOKIE[$l])) { return $l; } } if (isset($GLOBALS['visiteur_session']['lang'])) { if (changer_langue($l = $GLOBALS['visiteur_session']['lang'])) { return $l; } } if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) { if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) { if (changer_langue($l = strtolower($r[1]))) { return $l; } } } } return utiliser_langue_site(); }