Пример #1
0
/**
 * Déterminer le squelette qui sera utilisé pour rendre la page ou le bloc
 * à partir de `$fond` et du `$contetxe`
 *
 * Actuellement tous les squelettes se terminent par `.html`
 * pour des raisons historiques, ce qui est trompeur
 *
 * @param string $fond
 * @param array $contexte
 * @param string $lang
 * @param string $connect
 * @return array
 */
function public_styliser_dist($fond, $contexte, $lang = '', $connect = '')
{
    static $styliser_par_z;
    // s'assurer que le fond est licite
    // car il peut etre construit a partir d'une variable d'environnement
    if (strpos($fond, "../") !== false or strncmp($fond, '/', 1) == 0) {
        $fond = "404";
    }
    // Choisir entre $fond-dist.html, $fond=7.html, etc?
    $id_rubrique = 0;
    // Chercher le fond qui va servir de squelette
    if ($r = quete_rubrique_fond($contexte)) {
        list($id_rubrique, $lang) = $r;
    }
    // trouver un squelette du nom demande
    // ne rien dire si on ne trouve pas,
    // c'est l'appelant qui sait comment gerer la situation
    // ou les plugins qui feront mieux dans le pipeline
    $squelette = trouver_fond($fond, "", true);
    $ext = $squelette['extension'];
    $flux = array('args' => array('id_rubrique' => $id_rubrique, 'ext' => $ext, 'fond' => $fond, 'lang' => $lang, 'contexte' => $contexte, 'connect' => $connect), 'data' => $squelette['fond']);
    if (test_espace_prive() or defined('_ZPIP')) {
        if (!$styliser_par_z) {
            $styliser_par_z = charger_fonction('styliser_par_z', 'public');
        }
        $flux = $styliser_par_z($flux);
    }
    $flux = styliser_par_objets($flux);
    // pipeline styliser
    $squelette = pipeline('styliser', $flux);
    return array($squelette, $ext, $ext, "{$squelette}.{$ext}");
}
/**
 * Envoyer les notifications consecutives a l'envoi d'un message
 * (ie passage en statut=publie)
 *
 * @param string $quoi
 * @param int $id_message
 * @param array $options
 */
function notifications_instituermessage_dist($quoi, $id_message, $options = array())
{
    // ne devrait jamais se produire
    if ($options['statut'] == $options['statut_ancien']) {
        spip_log("statut inchange", 'notifications');
        return;
    }
    if ($options['statut'] == 'publie') {
        include_spip('inc/messages');
        $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message));
        $vue = "notifications/message_{$type}_publie";
        if (trouver_fond($vue)) {
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            // pour nettoyer_titre_email
            $texte = recuperer_fond($vue, array('id_message' => $id_message));
            // recuperer tous les emails des auteurs qui ont recu le message dans leur boite
            // si c'est une annonce generale, on envoie a tout le monde
            include_spip('inc/messages');
            $where = array("email!=''", "statut!='5poubelle'", sql_in('statut', messagerie_statuts_destinataires_possibles()));
            // pour une annonce : tous ceux qui recoivent des messages
            if ($type !== 'affich') {
                $ids = sql_allfetsel('id_auteur', 'spip_auteurs_liens', "objet='message' AND id_objet=" . intval($id_message));
                $ids = array_map('reset', $ids);
                $where[] = sql_in('id_auteur', $ids);
            }
            $emails = sql_allfetsel('email', "spip_auteurs", $where);
            $emails = array_map('reset', $emails);
            include_spip('inc/notifications');
            notifications_envoyer_mails($emails, $texte);
        }
    }
}
function _trouver_modele_courriel_reglement($type, $id_souscription_campagne)
{
    $modele = "modeles/mail-souscription-{$type}";
    if (trouver_fond("{$modele}-{$id_souscription_campagne}")) {
        $modele = "{$modele}-{$id_souscription_campagne}";
    }
    return $modele;
}
Пример #4
0
function f_boite_infos($flux)
{
    $args = $flux['args'];
    $type = $args['type'];
    unset($args['row']);
    if (!trouver_fond($type, "prive/objets/infos/")) {
        $type = 'objet';
    }
    $flux['data'] .= recuperer_fond("prive/objets/infos/{$type}", $args);
    return $flux;
}
Пример #5
0
/**
 * Teste si un formulaire demandé possède un squelette pour l'afficher
 *
 * @see trouver_fond()
 * @param string $form
 *     Nom du formulaire
 * @return string|bool
 *     - string : chemin du squelette
 *     - false : pas de squelette trouvé
**/
function existe_formulaire($form)
{
    if (substr($form, 0, 11) == "FORMULAIRE_") {
        $form = strtolower(substr($form, 11));
    } else {
        $form = strtolower($form);
    }
    if (!$form) {
        return '';
    }
    // on ne sait pas, le nom du formulaire n'est pas fourni ici
    return trouver_fond($form, 'formulaires/') ? $form : false;
}
Пример #6
0
/**
 * Charger les données de #FORMULAIRE_TRADUIRE
 *
 * @param string $objet
 *     Type d'objet
 * @param int $id_objet
 *     Identifiant de l'objet
 * @param string $retour
 *     URL de retour
 * @param bool $traduire
 *     Permet de désactiver la gestion de traduction sur un objet ayant id_trad
 * @return array|bool
 *     False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue
 *     Contexte à transmettre au squelette du formulaire sinon
 */
function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true)
{
    if (!intval($id_objet)) {
        return false;
    }
    $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, '');
    // verifier que l'objet indique possede bien des champs id_trad et lang
    // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette
    if (!isset($valeurs['langue'])) {
        return false;
    }
    $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet);
    $valeurs['_langue'] = '';
    $langue_parent = '';
    $id_parent = '';
    if (isset($valeurs['id_rubrique'])) {
        $id_parent = $valeurs['id_rubrique'];
    }
    if (isset($valeurs['id_parent'])) {
        $id_parent = $valeurs['id_parent'];
    }
    if ($id_parent) {
        $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_parent));
    }
    if (!$langue_parent) {
        $langue_parent = $GLOBALS['meta']['langue_site'];
    }
    if ($valeurs['editable'] and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets']))) {
        $valeurs['_langue'] = $valeurs['langue'];
    }
    $valeurs['langue_parent'] = $langue_parent;
    $valeurs['_objet'] = $objet;
    $valeurs['_id_objet'] = $id_objet;
    $valeurs['changer_lang'] = '';
    $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet);
    $valeurs['_traduire'] = '';
    if (isset($valeurs['id_trad']) and $valeurs['_traduisible']) {
        $valeurs['_traduire'] = $traduire ? ' ' : '';
        $valeurs['_vue_traductions'] = "prive/objets/liste/" . (trouver_fond($f = table_objet($objet) . "-trad", "prive/objets/liste") ? $f : "objets-trad");
        // pour afficher la liste des trad sur la base de l'id_trad en base
        // independamment d'une saisie en cours sur id_trad
        $valeurs['_lister_id_trad'] = $valeurs['id_trad'];
        $valeurs['_id_parent'] = $id_parent;
    }
    $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null or _request('changer_id_trad') !== null));
    $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet));
    return $valeurs;
}
Пример #7
0
/**
 * Trouve les objets qui peuvent s'afficher dans le plan de page, dans une rubrique
 *
 * @return array [table -> chemin du squelette]
 **/
function plan_lister_objets_rubrique()
{
    static $liste = null;
    if (is_null($liste)) {
        $liste = array();
        $tables = lister_tables_objets_sql();
        unset($tables['spip_rubriques']);
        foreach ($tables as $cle => $desc) {
            if (isset($desc['field']['id_rubrique'])) {
                if (trouver_fond('prive/squelettes/inclure/plan-' . $desc['table_objet'])) {
                    $liste[$cle] = $desc['table_objet'];
                }
            }
        }
    }
    return $liste;
}
Пример #8
0
function action_plan_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('ecrire')) {
        return false;
    }
    include_spip('base/objets');
    include_spip('inc/utils');
    $objet = table_objet(_request('objet'));
    $env = array('id_rubrique' => intval(_request('id_rubrique')), 'lister' => $objet == 'rubriques' ? 'rubrique' : 'tout', 'conteneur' => 'non');
    if ($statut = _request('statut')) {
        $env['statut'] = $statut;
    }
    $fond = "prive/squelettes/inclure/plan-{$objet}";
    header("Content-Type: text/html; charset=" . $GLOBALS['meta']['charset']);
    if (trouver_fond($fond)) {
        echo recuperer_fond($fond, $env);
    } else {
        echo "";
    }
}
Пример #9
0
/**
 * Teste, pour un nom de page de l'espace privé, s'il est possible
 * de générer son contenu.
 *
 * Dans ce cas, on retourne la fonction d'exécution correspondante à utiliser
 * (du répertoire `ecrire/exec`). Deux cas particuliers et prioritaires :
 * `fond` ou `fond_monobloc` sont retournés si des squelettes existent.
 *
 * - `fond` : pour des squelettes de `prive/squelettes/contenu`
 *          ou pour des objets éditoriaux dont les suqelettes seront échaffaudés
 * - `fond_monobloc` (compatibilité avec SPIP 2.1) : pour des squelettes de `prive/exec`
 *
 * @param string $nom
 *     Nom de la page
 * @return string
 *     Nom de l'exec, sinon chaîne vide.
**/
function tester_url_ecrire($nom)
{
    static $exec = array();
    if (isset($exec[$nom])) {
        return $exec[$nom];
    }
    // tester si c'est une page en squelette
    if (trouver_fond($nom, 'prive/squelettes/contenu/')) {
        return $exec[$nom] = 'fond';
    } elseif (trouver_fond($nom, 'prive/exec/')) {
        return $exec[$nom] = 'fond_monobloc';
    } elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) {
        return $exec[$nom] = 'fond';
    }
    // attention, il ne faut pas inclure l'exec ici
    // car sinon #URL_ECRIRE provoque des inclusions
    // et des define intrusifs potentiels
    return $exec[$nom] = (find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : '';
}
Пример #10
0
/**
 * Afficher l'inclusion attente reglement si elle existe,
 * en fonction du presta
 * @param string $mode
 * @param int $id_transaction
 * @param string $transaction_hash
 * @return string
 */
function bank_afficher_attente_reglement($mode, $id_transaction, $transaction_hash, $type)
{
    include_spip('inc/bank');
    $config = bank_config($mode);
    $presta = $config['presta'];
    if (trouver_fond("attente", "presta/{$presta}/payer/")) {
        return recuperer_fond("presta/{$presta}/payer/attente", array('id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash, 'config' => $config, 'type' => $type));
    }
    return "";
}
Пример #11
0
/**
 * Afficher le bouton pour gerer/interrompre un abonnement
 * @param array|string $config
 * @param string $abo_uid
 * @return array|string
 */
function bank_affiche_gerer_abonnement($config, $abo_uid)
{
    // $config de type string ?
    include_spip('inc/bank');
    if (is_string($config)) {
        $config = bank_config($config, true);
    }
    if ($trans = sql_fetsel("*", "spip_transactions", $w = "abo_uid=" . sql_quote($abo_uid) . ' AND mode LIKE ' . sql_quote($config['presta'] . '%') . " AND " . sql_in('statut', array('ok', 'attente')), '', 'id_transaction')) {
        $config = bank_config($trans['mode']);
        $fond = "modeles/gerer_abonnement";
        if (trouver_fond($f = "presta/" . $config['presta'] . "/payer/gerer_abonnement")) {
            $fond = $f;
        }
        return recuperer_fond($fond, array('presta' => $config['presta'], 'id_transaction' => $trans['id_transaction'], 'abo_uid' => $abo_uid));
    }
    return "";
}
/**
 * Faire un find_in_path en cherchant un fichier .less ou .css
 * et en prenant le plus prioritaire des deux
 * ce qui permet de surcharger un .css avec un .less ou le contraire
 * Si ils sont dans le meme repertoire, c'est le .css qui est prioritaire,
 * par soucis de rapidite
 *
 * @param string $less_file
 * @param string $css_file
 * @return string
 */
function lesscss_find_less_or_css_in_path($less_file, $css_file)
{
    $l = find_in_path($less_file);
    $c = $f = trouver_fond($css_file);
    if (!$c) {
        $c = find_in_path($css_file);
    }
    if (!$l) {
        // passer le host en contexte pour differencier les CSS en fonction du HOST car il est inscrit en url absolue
        // dans les chemins d'urls
        return $f ? produire_fond_statique($css_file, array('format' => 'css', 'host' => $_SERVER['HTTP_HOST'])) : $c;
    } elseif (!$c) {
        return $l;
    }
    // on a un less et un css en concurence
    // prioriser en fonction de leur position dans le path
    $path = creer_chemin();
    foreach ($path as $dir) {
        // css prioritaire
        if (strncmp($c, $dir . $css_file, strlen($dir . $css_file)) == 0) {
            // passer le host en contexte pour differencier les CSS en fonction du HOST car il est inscrit en url absolue
            // dans les chemins d'urls
            return $f ? produire_fond_statique($css_file, array('format' => 'css', 'host' => $_SERVER['HTTP_HOST'])) : $c;
        }
        if ($l == $dir . $less_file) {
            return $l;
        }
    }
    // on ne doit jamais arriver la !
    spip_log('Resolution chemin less/css impossible', _LOG_CRITIQUE);
    debug_print_backtrace();
    die('Erreur fatale, je suis perdu');
}