Example #1
0
/**
 * 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;
}
Example #2
0
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);
    }
}
Example #3
0
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;
}
Example #4
0
/**
 * 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;
}
Example #8
0
/**
 * 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">';
 }
Example #12
0
/**
 * 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);
}
Example #13
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;
}
Example #15
0
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;
}
Example #18
0
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' => ''));
    }
}
Example #20
0
/**
 * 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;
}
Example #22
0
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', '&nbsp;(...)');
	$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("&nbsp;[{$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;
}
Example #24
0
/**
 * 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;
}
Example #25
0
/**
 * 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();
}
Example #26
0
/**
 * 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;
}
Example #27
0
/**
 * 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);
    }
}
Example #28
0
/**
 * 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;
    }
}
Example #30
0
File: lang.php Project: JLuc/SPIP
/**
 * 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();
}