/** * 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; }
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; }
/** * 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; }
/** * 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; }
/** * 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; }
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 ""; } }
/** * 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 : ''; }
/** * 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 ""; }
/** * 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'); }