/**
 * @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, "&");
        }
    }
}
예제 #2
0
파일: documenter.php 프로젝트: rhertzog/lcs
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);
}
예제 #3
0
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;
}
예제 #4
0
/**
 * 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);
    }
}
예제 #5
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}");
}
예제 #6
0
파일: bandeau.php 프로젝트: genma/spip_ynh
/**
 * 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);
}
예제 #7
0
/**
 * 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;
}
예제 #8
0
/**
 * 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);
}
예제 #9
0
/**
 * @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;
}
예제 #10
0
/**
 * 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;
}
예제 #11
0
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();
	}
}
예제 #12
0
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;
}
예제 #13
0
/**
 * 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;
}
예제 #15
0
파일: resilier.php 프로젝트: nursit/bank
/**
 * @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;
}
예제 #16
0
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();
	}
}
예제 #17
0
/**
 * 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;
}
예제 #18
0
/**
 * 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);
}
예제 #19
0
/**
 * 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&eacute;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();
    }
}
예제 #20
0
/**
 * 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;
}
예제 #21
0
/**
 * 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) : "";
}
예제 #22
0
/**
 * 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);
    }
}
예제 #24
0
파일: pipelines.php 프로젝트: rhertzog/lcs
/**
 * 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);
            }
        }
    }
}
예제 #26
0
/**
 * 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;
}
예제 #27
0
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();
}
예제 #28
0
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)
	));
}
예제 #29
0
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;
}
예제 #30
0
/**
 * 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;
    }
}