/** * @deprecated * @param null|string $arg */ function action_bank_enregistrer_modereglement_dist($arg = null) { if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $arg = explode("-", $arg); $id_transaction = intval(array_pop($arg)); $presta = implode("-", $arg); if (isset($GLOBALS['meta']['bank_paiement']) and $config = unserialize($GLOBALS['meta']['bank_paiement'])) { $prestas = is_array($config['presta']) ? $config['presta'] : array(); $prestas = array_filter($prestas); if (is_array($config['presta_abo'])) { $prestas = array_merge($prestas, array_filter($config['presta_abo'])); } } if ((isset($prestas[$presta]) and $prestas[$presta] or $presta == 'gratuit') and $id_transaction and $transaction = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction))) { if ($transaction['statut'] == 'commande') { sql_updateq("spip_transactions", array('mode' => $presta, 'autorisation_id' => date('d/m/Y-H:i:s') . "/" . $GLOBALS['ip']), 'id_transaction=' . intval($id_transaction)); // trigger le regelement en attente // cela permet de factoriser le code $row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction)); pipeline('trig_bank_reglement_en_attente', array('args' => array('statut' => 'attente', 'mode' => $row['mode'], 'type' => $row['abo_uid'] ? 'abo' : 'acte', 'id_transaction' => $id_transaction, 'row' => $row), 'data' => '')); $GLOBALS['redirect'] = _request('redirect'); $GLOBALS['redirect'] = parametre_url($GLOBALS['redirect'], "attente_mode", $presta, "&"); } } }
function supprimer_lien_document($id_document, $objet, $id_objet) { if (!$id_document = intval($id_document)) return false; // D'abord on ne supprime pas, on dissocie sql_delete("spip_documents_liens", $z = "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND id_document=".$id_document); // Si c'est une vignette, l'eliminer du document auquel elle appartient sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document); pipeline('post_edition', array( 'args' => array( 'operation' => 'delier_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'objet' => $objet, 'id' => $id_objet ), 'data' => null ) ); // On supprime ensuite s'il est orphelin // (autorisation verifiee dans l'action) $supprimer_document = charger_fonction('supprimer_document','action'); return $supprimer_document($id_document); }
function insert_rubrique($id_parent) { $champs = array( 'titre' => _T('item_nouvelle_rubrique'), 'id_parent' => intval($id_parent), 'statut' => 'new'); // Envoyer aux plugins $champs = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_rubriques', ), 'data' => $champs ) ); $id_rubrique = sql_insertq("spip_rubriques", $champs); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_rubriques', 'id_objet' => $id_rubrique ), 'data' => $champs ) ); propager_les_secteurs(); calculer_langues_rubriques(); return $id_rubrique; }
/** * Supprimer un lien entre un document et un objet * * @param int $id_document * @param string $objet * @param int $id_objet * @param bool $supprime * si true, le document est supprime si plus lie a aucun objet * @param bool $check * si true, on verifie les documents references dans le texte de l'objet * et on les associe si pas deja fait * @return bool */ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) { if (!($id_document = intval($id_document))) { return false; } // D'abord on ne supprime pas, on dissocie include_spip('action/editer_liens'); objet_dissocier(array('document' => $id_document), array($objet => $id_objet)); // Si c'est une vignette, l'eliminer du document auquel elle appartient // cas tordu peu probable sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=" . $id_document); // verifier son statut apres une suppression de lien include_spip('action/editer_document'); document_instituer($id_document); pipeline('post_edition', array('args' => array('operation' => 'delier_document', 'action' => 'delier_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'objet' => $objet, 'id' => $id_objet), 'data' => null)); if ($check) { // si demande, on verifie que ses documents vus sont bien lies ! $spip_table_objet = table_objet_sql($objet); $table_objet = table_objet($objet); $id_table_objet = id_table_objet($objet, $serveur); $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . "=" . intval($id_objet)); $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc'); $marquer_doublons_doc($champs, $id_objet, $objet, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur); } // On supprime ensuite s'il est orphelin // et si demande // ici on ne bloque pas la suppression d'un document rattache a un autre if ($supprime and !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . $id_document)) { $supprimer_document = charger_fonction('supprimer_document', 'action'); return $supprimer_document($id_document); } }
/** * 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}"); }
/** * definir la liste des boutons du haut et de ses sous-menus * On defini les boutons a metrtre selon les droits de l'utilisateur * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins * puissent y mettre leur grain de sel * * @param array $contexte * @param bool $icones // rechercher les icones * @param bool $autorise // ne renvoyer que les boutons autorises * @return array */ function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true) { include_spip('inc/autoriser'); $boutons_admin = array(); // les boutons du core, issus de prive/navigation.xml $liste_boutons = array(); // ajouter les boutons issus des plugin via plugin.xml if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) { $liste_boutons =& $liste_boutons_plugins; } foreach ($liste_boutons as $id => $infos) { $parent = ""; // les boutons principaux ne sont pas soumis a autorisation if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, NULL, array('contexte' => $contexte))) { if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) { if (!is_array($boutons_admin[$parent]->sousmenu)) { $boutons_admin[$parent]->sousmenu = array(); } $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu); if ($position < 0) { $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position; } $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100); } if (!$parent and !in_array($id, array('forum', 'statistiques_visites'))) { $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin); $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100); } } } return pipeline('ajouter_menus', $boutons_admin); }
/** * Fonction appelee suite a notification par le presta (paybox/payzen) de paiement automatique de l'echeance * le presta fourni le numero d'abonne selon sa convention, * et on doit creer une transaction correspondant au paiement attendu de l'echeance * * @param string $id * numero d'abonnement : numero interne a l'implementation, ou uid fourni par le presta, prefixe par uid: dans ce cas * @return bool|int * false si on a pas pu renouveler * id_transaction du renouvellement si reussi */ function abos_preparer_echeance_dist($id) { spip_log("abos/preparer_echeance id={$id}", "bank"); /* if (strncmp($id,"uid:",4)==0){ $where = "abonne_uid=".sql_quote(substr($id,4)); } else { $where = "id_abonnement=".intval($id); } */ // recuperer les infos en fonction de l'implementation des abonnements $id_transaction = pipeline('bank_abos_preparer_echeance', array('args' => array('id' => $id), 'data' => false)); if ($id_transaction) { return $id_transaction; } // DEPRECIE, pour compat ascendante // sinon on essaye sur l'ancien pipeline // recuperer les infos en fonction de l'implementation des abonnements $id_transaction = pipeline('bank_abos_renouveler', array('args' => array('id' => $id), 'data' => false)); if ($id_transaction) { return $id_transaction; } // sinon on essaye d'appeler l'ancien abos/renouveler if ($renouveler = charger_fonction('renouveler', 'abos', true)) { return $renouveler($id); } return false; }
/** * Fournir une liste d'"evenements" entre deux dates start et end * au format json * utilise pour l'affichage du calendrier prive et public * * @return void */ function action_quete_calendrier_prive_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $securiser_action(); $start = _request('start'); $end = _request('end'); $quoi = _request('quoi'); include_spip('inc/quete_calendrier'); $evt = array(); // recuperer la liste des evenements au format ics $start = date('Y-m-d H:i:s', $start); $end = date('Y-m-d H:i:s', $end); $limites = array(sql_quote($start), sql_quote($end)); // on fonction de quoi on récupère : tout (rv + publication) ou l'un ou l'autre. $entier = $duree = array(); if (!$quoi or $quoi == 'rv') { $duree = quete_calendrier_interval_rv(reset($limites), end($limites)); $evt = convert_fullcalendar_quete_calendrier_interval_rv($duree, $evt); } if (!$quoi or $quoi == 'publication') { list($entier, ) = quete_calendrier_interval($limites); $evt = convert_fullcalendar_quete_calendrier_interval($entier, $evt); } // permettre aux plugins d'afficher leurs evenements dans ce calendrier $evt = pipeline('quete_calendrier_prive', array('args' => array('start' => $start, 'end' => $end, 'quoi' => $quoi), 'data' => $evt)); // format json include_spip('inc/json'); echo json_encode($evt); }
/** * @param int $id_transaction * @param bool $force_auto * true : l'echeance sera forcement prelevee automatiquement * false : on peut gerer le paiement echeance manuellement en renvoyant un montant nul * @return array|bool * montant : montant de l'echeance / si on renvoie 0 il n'y aura pas de paiement automatique mensuel, mais on recuperera les infos CB si possible (paybox) pour prendre en charge les paiements mensuels * montant_init : montant de l'echeance initiale (si differente de l'echeance principale) * int count_init : nombre d'echeances initiales (par defaut 0 si pas renseignee - autre valeur que 0 ou 1 supportee uniquement par PayZen/SystemPay) * int count : nombre d'echeances (sans compter l(es) echeance(s) initiale(s) - 0 si infini/pas de fin prevue supportee uniquement par PayBox/PayZen/SystemPay) * string freq : 'monthly' ou 'yearly' (tous les mois ou tous les 12 mois - yearly pas supporte par InternetPlus) * * string date_start : optionnel, date de debut d'abonnement Y-m-d H:i:s (support par SystemPay uniquement) * string wha_oid : optionnel, numero d'offre d'abonnement chez WHA/Internet+ * * false si pas d'abonnement qui correspond a cette transaction */ function abos_decrire_echeance_dist($id_transaction, $force_auto = true) { $desc = array('montant' => 0, 'montant_init' => 0, 'count_init' => 0, 'count' => 0, 'freq' => 'monthly', 'date_start' => '', 'wha_oid' => ''); // recuperer les infos en fonction de l'implementation des abonnements $desc = pipeline('bank_abos_decrire_echeance', array('args' => array('id_transaction' => $id_transaction, 'force_auto' => $force_auto), 'data' => $desc)); return $desc; }
/** * Chargement des valeurs par defaut des champs du formulaire * * @param string $type_objet[facultatif] objet editorial spip * @param int $id_objet[facultatif] identifiant de l'objet * @param boolean $adh_i3_rech_ok si au moins 1 critere de recherche saisis. * */ function formulaires_adhi3_recherche_charger_dist($type_objet, $id_objet) { // Recuperation des parametres transmis $datas['type_objet'] = $type_objet; $datas['id_objet'] = $id_objet; // Recuperation des champs du formulaire // ==> lies a adhclub : $datas['id_saison'] = _request('id_saison'); $datas['techbase'] = _request('techbase'); $datas['encadrant'] = _request('encadrant'); $datas['niveau'] = _request('niveau'); $datas['niv_rel'] = _request('niv_rel'); // ==> lies a i3 : $datas['ordre'] = _request('ordre'); $datas['desc'] = _request('desc'); $datas['case'] = _request('case'); $datas['valeur'] = _request('valeur'); $datas['exceptions'] = pipeline('i3_exceptions_des_champs_auteurs_elargis', array()); // Raz des criteres si demande affichage tous les adherents if (_request('afficher_tous')) { // ==> lies a adhclub : set_request('id_saison', ''); set_request('techbase', ''); set_request('encadrant', ''); set_request('niveau', ''); set_request('niv_rel', ''); // ==> lies a i3 : set_request('valeur', ''); set_request('case', ''); } return $datas; }
function exec_config_lang_dist() { if (!autoriser('configurer', 'lang')) { include_spip('inc/minipres'); echo minipres(); } else { $config = charger_fonction('config', 'inc'); $config(); pipeline('exec_init',array('args'=>array('exec'=>'config_lang'),'data'=>'')); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_page_config_contenu'), "configuration", "langues"); echo debut_gauche('', true); echo debut_droite('', true); echo "<br /><div style='text-align: center'>", gros_titre(_T('info_langues'), '', false), '</div><br />', barre_onglets("config_lang", "langues"), '<br />'; $langue = charger_fonction('langue', 'configuration'); echo $langue(); $transcodeur = charger_fonction('transcodeur', 'configuration'); echo $transcodeur(); echo fin_gauche(), fin_page(); } }
function cextras_objets_valides(){ $objets = array(); $objets_extensibles = pipeline("objets_extensibles", array( 'article' => _T('cextras:table_article'), 'auteur' => _T('cextras:table_auteur'), 'breve' => _T('cextras:table_breve'), 'groupes_mot' => _T('cextras:table_groupes_mot'), 'mot' => _T('cextras:table_mot'), 'rubrique' => _T('cextras:table_rubrique'), 'site' => _T('cextras:table_site') )); ksort($objets_extensibles); foreach ($objets_extensibles as $objet => $traduction) { $objets[$objet] = array( 'table' => table_objet_sql($objet), 'type' => objet_type(table_objet($objet)), 'nom' => $traduction, ); } return $objets; }
/** * Un parametre permet de forcer le statut (exemple: plugin antispam) * * http://code.spip.net/@inc_forum_insert_dist * * @param $objet * @param $id_objet * @param $id_forum * en reponse a * @param null $force_statut * @return bool */ function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = null) { if (!in_array($force_statut, array('privrac', 'privadm'))) { if (!strlen($objet) or !intval($id_objet)) { spip_log("Erreur insertion forum sur objet='{$objet}', id_objet={$id_objet}", 'forum.' . _LOG_ERREUR); return 0; } } spip_log("insertion de forum {$force_statut} sur {$objet} {$id_objet} (+{$id_forum})", 'forum'); include_spip('inc/filtres'); include_spip('inc/modifier'); include_spip('inc/session'); $champs = objet_info('forum', 'champs_editables'); $c = collecter_requests($champs, array()); $c['statut'] = 'off'; $c['objet'] = $objet; $c['id_objet'] = $id_objet; $c['auteur'] = sinon(session_get('nom'), session_get('session_nom')); $c['email_auteur'] = sinon(session_get('email'), session_get('session_email')); $c = pipeline('pre_edition', array('args' => array('table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer'), 'data' => forum_insert_statut($c, $force_statut))); $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot')); if (!$id_reponse) { spip_log("Echec insertion forum sur {$objet} {$id_objet} (+{$id_forum})", 'forum.' . _LOG_ERREUR); } else { spip_log("forum insere' {$id_reponse} sur {$objet} {$id_objet} (+{$id_forum})", 'forum'); } return $id_reponse; }
/** * Ajout des css de jQuery UI pour les pages publiques * * @param: $flux * @return: $flux */ function jqueryui_insert_head_css($flux) { /** * Doit on ne pas insérer les css (défini depuis un autre plugin) ? */ if (defined('_JQUERYUI_CSS_NON')) { return $flux; } // Modules demandés par le pipeline jqueryui_plugins is_array($jqueryui_plugins = pipeline('jqueryui_plugins', array())) || ($jqueryui_plugins = array()); // gestion des dépendances des modules demandés is_array($jqueryui_plugins = jqueryui_dependances($jqueryui_plugins)) || ($jqueryui_plugins = array()); // ajouter le thème si nécessaire if ($jqueryui_plugins and !in_array('jquery.ui.theme', $jqueryui_plugins)) { $jqueryui_plugins[] = 'theme'; } // les css correspondantes aux plugins $styles = array('accordion', 'autocomplete', 'button', 'core', 'datepicker', 'dialog', 'draggable', 'menus', 'progressbar', 'resizable', 'selectable', 'selectmenu', 'slider', 'sortable', 'spinner', 'tabs', 'tooltip', 'theme'); // insérer les css nécessaires foreach ($jqueryui_plugins as $plugin) { if (in_array($plugin, $styles)) { $flux .= "<link rel='stylesheet' type='text/css' media='all' href='" . find_in_path('css/ui/' . $plugin . '.css') . "' />\n"; } } return $flux; }
/** * @param $id * @param array $options * bool immediat : pour forcer la resiliation immediatement, sans attendre la prochaine echeance de paiement * string message : message stocke en base pour la resiliation * bool notify_bank : lancer un appel au presta bancaire pour resilier aupres de lui les paiements auto * @return bool */ function abos_resilier_dist($id, $options = array()) { spip_log("abos/resilier id={$id}", "abos_resil"); /* if (strncmp($id,"uid:",4)==0){ $where = "abonne_uid=".sql_quote(substr($id,4)); } else { $where = "id_abonnement=".intval($id); } */ if (!isset($options['message'])) { $options['message'] = ''; } if (!isset($options['immediat'])) { $options['immediat'] = false; } if (!isset($options['notify_bank'])) { $options['notify_bank'] = true; } $args = array('id' => $id, 'message' => $options['message'], 'notify_bank' => $options['notify_bank']); $now = date('Y-m-d H:i:s'); if ($options['immediat']) { $args['statut'] = 'resilie'; $args['date_fin'] = $now; $args['date_echeance'] = $now; } else { $args['date_fin'] = "date_echeance"; } // appel du pipeline, a charge pour lui d'appeler la fonction // abos_resilier_notify_bank($abonne_uid,$mode_paiement) // et de mettre a jour les infos de statut/date de fin d'abonnement $ok = pipeline('bank_abos_resilier', array('args' => $args, 'data' => true)); return $ok; }
function exec_admin_declarer_dist() { if (!autoriser('detruire')) { include_spip('inc/minipres'); echo minipres(); } else { $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_admin_tech'), "configuration", "base"); echo "\n<br /><br />"; echo gros_titre(_T('titre_admin_effacer'),'',false); echo barre_onglets("administration", "declarer"); echo debut_gauche('',true); echo debut_boite_info(true); echo _T('info_gauche_admin_effacer'); echo fin_boite_info(true); echo creer_colonne_droite('',true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'admin_effacer'),'data'=>'')); echo debut_droite('',true); echo autres_bases(); echo pipeline('affiche_milieu',array('args'=>array('exec'=>'admin_effacer'),'data'=>'')); echo fin_gauche(), fin_page(); } }
/** * Enregistrer le reglement effectif d'une transaction * On peut passer ici 2 fois pour une meme transaction : * - lors de la notification serveur a serveur * - lors du retour de l'internaute par redirection depuis le presta bancaire * * @param int $id_transaction * @param array $options * string message * array row_prec * bool notifier * @return bool */ function bank_rembourser_transaction_dist($id_transaction, $options = array()) { $message = isset($options['message']) ? $options['message'] : ""; $notifier = isset($options['notifier']) ? $options['notifier'] : true; if (!isset($options['row_prec'])) { $options['row_prec'] = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction)); } $row_prec = $options['row_prec']; // ne pas jouer 2 fois le traitement du remboursement if (!$row_prec or $row_prec['statut'] !== 'ok') { return false; } // et on le pose aussitot sql_updateq('spip_transactions', array('statut' => 'rembourse'), "id_transaction=" . intval($id_transaction)); $notifier = ($notifier and $row_prec['statut'] != 'rembourse'); $message = trim($row_prec['message'] . "\n" . trim($message)); // ensuite un pipeline de traitement, notification etc... $message = pipeline('bank_traiter_remboursement', array('args' => array('id_transaction' => $id_transaction, 'notifier' => $notifier, 'avant' => $row_prec, 'options' => $options), 'data' => $message)); sql_updateq("spip_transactions", array('message' => $message, 'finie' => 1), "id_transaction=" . intval($id_transaction)); // 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, "REMBOURSEMENT Transaction"); } return true; }
/** * Generer un ticket resume de la transaction * pour les admins indiques dans la configuration * * @param int $id_transaction * @param string $sujet */ function inc_bank_editer_ticket_admin_dist($id_transaction, $sujet = "Transaction OK") { // il faut avoir configure un ou des emails de notification $c = unserialize($GLOBALS['meta']['bank_paiement']); if (!isset($c['email_ticket_admin']) or !strlen($email = $c['email_ticket_admin'])) { spip_log(var_export($GLOBALS['meta']['bank_paiement'], true), 'bank_ticket'); return; } $ticket = ""; if ($row = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction))) { $montant = $row['montant_regle']; $ticket .= "<h2>Transaction {$id_transaction}</h2>\n<table border='1'>"; foreach ($row as $k => $v) { $ticket .= "<tr><td>{$k}</td><td>{$v}</td></tr>"; } $ticket .= "</table>"; } // ensuite un pipeline pour editer le ticket $ticket = pipeline('bank_editer_ticket_reglement', array('args' => array('id_transaction' => $id_transaction), 'data' => $ticket)); $ticket = "<html>{$ticket}</html>"; $header = "MIME-Version: 1.0\n" . "Content-Type: text/html; charset=" . $GLOBALS['meta']['charset'] . "\n" . "Content-Transfer-Encoding: 8bit\n"; $sujet = "{$sujet} #{$id_transaction} [" . affiche_monnaie($montant) . "]"; if (!isset($c['email_from_ticket_admin']) or !strlen($email_from = $c['email_from_ticket_admin'])) { $url = parse_url($GLOBALS['meta']['adresse_site']); $email_from = "reglements@" . ltrim($url['host'], 'w.'); } $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); $envoyer_mail($email, $sujet, $ticket, $email_from, $header); }
/** * Un exec d'acces interdit * * @param string $message */ function exec_403_dist($message = '') { $exec = _request('exec'); $titre = "exec_{$exec}"; $navigation = ""; $extra = ""; if (!$message) { $message = _L("Vous n'avez pas le droit d'accéder à la page <b>@exec@</b>.", array('exec' => _request('exec'))); } $contenu = "<h1 class='grostitre'>" . _T('info_acces_interdit') . "</h1>" . $message; if (_request('var_zajax')) { include_spip('inc/actions'); ajax_retour($contenu); } else { include_spip('inc/presentation'); // alleger les inclusions avec un inc/presentation_mini $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page($titre); echo debut_gauche("403_{$exec}", true); echo recuperer_fond('prive/squelettes/navigation/dist', array()); echo pipeline('affiche_gauche', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => '')); echo creer_colonne_droite("403", true); echo pipeline('affiche_droite', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => '')); echo debut_droite("403", true); echo pipeline('affiche_milieu', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => $contenu)); echo fin_gauche(), fin_page(); } }
/** * recuperer la transaction et son abonnement associe par id_transaction ou par abo_uid * et verifier que c'est bien le bon * noter dessus qu'on a eventuellement reussi le paiement, * passer l'abonnement en etat actif si besoin, et mettre a jour la date de fin si validite fournie * * Attention, avec certains prestataires ou modes de paiement (SEPA), on va arriver ici parce que l'abonnement a bien * ete cree, mais la premiere echeance n'est pas encore reglee (et ne le sera que dans 2 semaines) * C'est a l'abonnement de voir si il s'active temporairement en periode d'essai en attendant le vrai paiement * ou si il ne fait rien et attend le paiement de la premiere echeance * Dans ce cas de figure, on reviendra a nouveau ici une seconde fois, quand la premiere echeance sera reellement reglee * * * @param int $id_transaction * @param string $abo_uid * numero d'abonne chez le presta bancaire * @param string $mode_paiement * mode de paiement (presta bancaire) * @param string $validite * date de fin validite du moyen de paiement (expiration de la CB) * ou "echeance" pour dire que l'abonnement s'arrete automatiquement a la prochaine echeance * @param int $id_auteur * @return bool|int * false si pas reussi */ function abos_activer_abonnement_dist($id_transaction, $abo_uid, $mode_paiement, $validite = "", $id_auteur = 0) { $id_abonnement = 0; spip_log("abos/activer_abonnement id_transaction={$id_transaction} abo_uid={$abo_uid} mode={$mode_paiement} validite={$validite}", "bank"); $id_abonnement = pipeline('bank_abos_activer_abonnement', array('args' => array('id_transaction' => $id_transaction, 'abo_uid' => $abo_uid, 'mode_paiement' => $mode_paiement, 'validite' => $validite, 'id_auteur' => $id_auteur), 'data' => $id_abonnement)); return $id_abonnement; }
/** * Trouver le label d'un champ de révision * * Quelques champs ont un label dans dans les chaînes de langue de SPIP * Pour un champ particulier d'un objet particulier, le pipeline revisions_chercher_label * peut être utilisé * * @param string $champ * Le nom du champ révisionné * @param string $objet * Le type d'objet révisionné * @return string $label * Le label du champ */ function label_champ($champ, $objet = false) { $label = ""; // si jointure: renvoyer le nom des objets joints if (strncmp($champ, 'jointure_', 9) == 0) { return _T(objet_info(objet_type(substr($champ, 9)), 'texte_objets')); } switch ($champ) { case 'surtitre': $label = "texte_sur_titre"; break; case 'soustitre': $label = "texte_sous_titre"; break; case 'nom_site': $label = "lien_voir_en_ligne"; break; case 'email': $label = "entree_adresse_email_2"; break; case 'login': $label = "item_login"; break; case 'chapo': $champ = "chapeau"; default: $label = pipeline('revisions_chercher_label', array('args' => array('champ' => $champ, 'objet' => $objet), 'data' => $label ? $label : 'info_' . $champ)); break; } return $label ? _T($label) : ""; }
/** * Retourne la liste des saisies de champs extras concernant un objet donné * * @pipeline_appel declarer_champs_extras * @param string $table * Nom d'une table SQL éditoriale * @return array * Liste des saisies de champs extras de l'objet **/ function champs_extras_objet($table) { static $saisies_tables = array(); if (!$saisies_tables) { $saisies_tables = pipeline('declarer_champs_extras', array()); } return isset($saisies_tables[$table]) ? $saisies_tables[$table] : array(); }
function notifications_instituerarticle_dist($quoi, $id_article, $options) { // ne devrait jamais se produire if ($options['statut'] == $options['statut_ancien']) { spip_log("statut inchange", 'notifications'); return; } include_spip('inc/texte'); $modele = ""; if ($options['statut'] == 'publie') { if ($GLOBALS['meta']["post_dates"] == 'non' and strtotime($options['date']) > time()) { $modele = "notifications/article_valide"; } else { $modele = "notifications/article_publie"; } } if ($options['statut'] == 'prop' and $options['statut_ancien'] != 'publie') { $modele = "notifications/article_propose"; } if ($modele) { $destinataires = array(); if ($GLOBALS['meta']["suivi_edito"] == "oui") { $destinataires = explode(',', $GLOBALS['meta']["adresse_suivi"]); } $destinataires = pipeline('notifications_destinataires', array('args' => array('quoi' => $quoi, 'id' => $id_article, 'options' => $options), 'data' => $destinataires)); $texte = email_notification_article($id_article, $modele); notifications_envoyer_mails($destinataires, $texte); } }
/** * Proposer un traitement par defaut pour les #FORMULAIRE_CONFIGURER_XXX * * @param array $flux * @return array */ function spip_bonux_formulaire_traiter($flux){ if ($form = $flux['args']['form'] AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX AND !charger_fonction("traiter","formulaires/$form/",true) // sans fonction charger() ) { // charger les valeurs // ce qui permet de prendre en charge une fonction charger() existante // qui prend alors la main sur l'auto detection if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true)) $valeurs = call_user_func_array($charger_valeurs,$flux['args']['args']); $valeurs = pipeline( 'formulaire_charger', array( 'args'=>array('form'=>$form,'args'=>$flux['args']['args'],'je_suis_poste'=>false), 'data'=>$valeurs) ); // ne pas stocker editable ! unset($valeurs['editable']); // recuperer les valeurs postees $store = array(); foreach($valeurs as $k=>$v){ if (substr($k,0,1)!=='_') $store[$k] = _request($k); } $trace = spip_bonux_configurer_stocker($form,$valeurs,$store); $flux['data'] = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true); } return $flux; }
function action_zengarden_activer_theme_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (strncmp('defaut:', $arg, 7) == 0) { $dir_theme = _DIR_RACINE . substr($arg, 7); $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'effacer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); effacer_meta("zengarden_theme"); } } elseif (strncmp('apercu:', $arg, 7) == 0) { $theme = substr($arg, 7); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'apercevoir'), 'data' => true)); if ($flux) { include_spip('inc/cookie'); spip_setcookie('spip_zengarden_theme', $theme); } } } elseif (strncmp('activation:', $arg, 11) == 0) { $theme = substr($arg, 11); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'activer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); ecrire_meta("zengarden_theme", $theme); } } } }
/** * Fonction de base de l'API de vérification. * @param mixed $valeur La valeur a verifier. * @param string $type Le type de verification a appliquer. * @param array $options Un eventuel tableau d'options suivant le type. * @param array $valeur_normalisee * Si des options de verification modifient la valeur entrante (normalisent), * alors la valeur modifie sera stockee dans cette variable. * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. */ function inc_verifier_dist($valeur, $type, $options=null, &$valeur_normalisee=null){ // On vérifie que les options sont bien un tableau if (!is_array($options)) $options = array(); // Si la valeur est vide, il n'y a rien a verifier donc c'est bon if (is_null($valeur) or (is_string($valeur) and $valeur == '')) return ''; // Si c'est une date avec horaire c'est un tableau if (is_array($valeur) and isset($valeur['date']) and $valeur['date'] == '') return ''; // On cherche si une fonction correspondant au type existe if ($verifier = charger_fonction($type, 'verifier',true)){ $erreur = $verifier($valeur, $options, $valeur_normalisee); } // On passe le tout dans le pipeline du meme nom $erreur = pipeline( 'verifier', array( 'args' => array( 'valeur' => $valeur, 'type' => $type, 'options' => $options, ), 'data' => $erreur ) ); return $erreur; }
function exec_articles_page_dist() { global $connect_statut, $connect_id_auteur; pipeline('exec_init',array('args'=>array('exec'=>'articles_page'),'data'=>'')); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_page_articles_page'), "naviguer", "articles"); echo debut_gauche('', true); // // Afficher le bouton de creation d'article // echo pipeline('affiche_gauche',array('args'=>array('exec'=>'articles_page'),'data'=>'')); if (sql_countsel('spip_rubriques')) { echo bloc_des_raccourcis(icone_horizontale(_T('icone_ecrire_article'), generer_url_ecrire("articles_edit","new=oui"), "article-24.gif", "creer.gif", false)); } else { if (autoriser('creerrubriquedans', 'rubrique')) { echo _T('texte_creer_rubrique'); echo bloc_des_raccourcis(icone_horizontale (_T('icone_creer_rubrique'), generer_url_ecrire("rubriques_edit","new=oui&retour=nav"), "rubrique-24.gif", "creer.gif",false)); } } echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'articles_page'),'data'=>'')); echo debut_droite('', true); // // Vos articles en cours de redaction // echo afficher_objets('article',_T('info_en_cours_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", 'ORDER BY' => "articles.date DESC")); // // Vos articles soumis au vote // echo afficher_objets('article',_T('info_attente_validation'), array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prop'", "ORDER BY" => "articles.date")); // // Vos articles publies // echo afficher_objets('article',_T('info_publies'), array("FROM" =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='publie'", 'ORDER BY' => "articles.date DESC")); // // Vos articles refuses // echo afficher_objets('article',_T('info_refuses'), array('FROM' =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='refuse'", 'ORDER BY' => "articles.date DESC")); echo pipeline('affiche_milieu',array('args'=>array('exec'=>'articles_page'),'data'=>'')); echo fin_gauche(), fin_page(); }
function action_editer_message_post_supprimer($id_message) { sql_delete("spip_messages", "id_message=".sql_quote($id_message)); sql_delete("spip_auteurs_messages", "id_message=".sql_quote($id_message)); sql_delete("spip_forum", "id_message=".sql_quote($id_message)); pipeline('trig_supprimer_objets_lies',array( array('type'=>'message','id'=>$id_message) )); }
function expanser_liens($t, $connect = '', $env = array()) { $t = pipeline('pre_liens', $t); // on passe a traiter_modeles la liste des liens reperes pour lui permettre // de remettre le texte d'origine dans les parametres du modele $t = traiter_modeles($t, false, false, $connect); return $t; }
/** * Cherche la description des saisies d'un formulaire CVT dont on donne le nom * * @param string $form Nom du formulaire dont on cherche les saisies * @param array $args Tableau d'arguments du formulaire * @return array Retourne les saisies du formulaire sinon false */ function saisies_chercher_formulaire($form, $args) { if ($fonction_saisies = charger_fonction('saisies', 'formulaires/' . $form, true) and $saisies = call_user_func_array($fonction_saisies, $args) and is_array($saisies) and $saisies = pipeline('formulaire_saisies', array('args' => array('form' => $form, 'args' => $args), 'data' => $saisies)) and is_array($saisies)) { return $saisies; } else { return false; } }