コード例 #1
0
/**
 * Action de mise à jour des descriptions d'un dépot
 *
 * @return array
 *     Liste identifiant du dépot, texte d'erreur éventuel
 **/
function action_editer_depot_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    // Verification des autorisations
    if (!autoriser('webmestre')) {
        include_spip('inc/minipres');
        echo minipres();
        exit;
    }
    // Le depot n'est jamais cree par une edition mais via le formulaire ajouter_depot
    // On est toujours en presence d'une mise a jour pour cette action, l'id_depot
    // doit donc etre renseigne sinon c'est une erreur
    if ($id_depot = intval($arg)) {
        // On teste si l'auteur est connecte. Si non on renvoie sur le formulaire login
        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
        if (!$id_auteur) {
            include_spip('inc/headers');
            redirige_url_ecrire();
        }
        // On met a jour le depot avec les saisies
        if (sql_updateq('spip_depots', array('titre' => _request('titre'), 'descriptif' => _request('descriptif'), 'type' => _request('type')), 'id_depot=' . sql_quote($id_depot))) {
        }
        // Enregistre l'envoi dans la BD
        // Dans le cas du depot rien n'est fait actuellement, on garde cette fonction
        // par souci de coherence avec les autres editions d'objet et pour usage futur
        $err = depots_set($id_depot);
        if (!$err) {
            spip_log("ACTION MODIFIER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO);
        }
    }
    return array($id_depot, $err);
}
コード例 #2
0
function action_factures_export_csv_mensuel_dist()
{
    $securiser_action = charger_fonction("securiser_action", "inc");
    $date = $securiser_action();
    $t = strtotime($date);
    $date_debut = date('Y-m-01 00:00:00', $t);
    $t = strtotime('+1 month', strtotime($date_debut));
    $t = strtotime('+5 day', $t);
    $date_fin = date('Y-m-01 00:00:00', $t);
    $entetes = array('ID', 'Date', 'No', 'Client', 'HT', 'TTC', 'Paye', 'Date paiement', 'Commande');
    $factures = sql_allfetsel("id_facture,date,no_comptable,id_auteur,montant_ht,montant,montant_regle,date_paiement", "spip_factures", "date>=" . sql_quote($date_debut) . " AND date<" . sql_quote($date_fin), '', 'id_facture');
    foreach ($factures as $k => $facture) {
        $factures[$k]['date'] = date('d/m/Y', strtotime($facture['date']));
        $factures[$k]['date_paiement'] = date('d/m/Y', strtotime($facture['date_paiement']));
        $nom = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur=' . intval($facture['id_auteur']));
        $factures[$k]['id_auteur'] = trim($nom . " #" . $facture['id_auteur']);
        $factures[$k]['commande'] = '';
        if ($trans = sql_fetsel("*", "spip_transactions", "id_facture=" . intval($facture['id_facture'])) and $id_commande = intval($trans['id_commande'])) {
            $reference = sql_getfetsel('reference', 'spip_commandes', 'id_commande=' . intval($id_commande));
            $factures[$k]['commande'] = trim($reference . " #" . $trans['id_commande']);
        }
    }
    $factures = array_map('array_values', $factures);
    $nom = $GLOBALS['meta']['nom_site'] . ' Factures ' . date('Y-m');
    $exporter_csv = charger_fonction('exporter_csv', 'inc');
    $exporter_csv($nom, $factures, ',', $entetes, true);
}
コード例 #3
0
/**
 * Fonction de désinstallation du plugin.
**/
function roles_auteurs_vider_tables($nom_meta_base_version) {

	// tant qu'il existe des doublons, on supprime une ligne doublonnée
	// sinon on ne pourra pas modifier la cle primaire ensuite
	// cet algo est certainement a optimiser
	while ($doublons = sql_allfetsel(
				array('id_auteur', 'id_objet', 'objet', 'role'),
				array('spip_auteurs_liens'),
				'', 'id_auteur,id_objet,objet', '', '', 'COUNT(*) > 1'))
	{
		foreach ($doublons as $d) {
			$where = array();
			foreach ($d as $cle=>$valeur) {
				$where[] = "$cle=".sql_quote($valeur);
			}
			sql_delete('spip_auteurs_liens', $where);
		}
	}

	// supprimer la clé primaire, la colonne rôle, et remettre l'ancienne clé primaire
	sql_alter("TABLE spip_auteurs_liens DROP PRIMARY KEY");
	sql_alter("TABLE spip_auteurs_liens DROP COLUMN role");
	sql_alter("TABLE spip_auteurs_liens ADD PRIMARY KEY (id_auteur,id_objet,objet)");

	effacer_meta($nom_meta_base_version);
}
コード例 #4
0
function action_clevermail_list_subscriber_remove_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    $lsr_id = $arg;
    if (sql_countsel("spip_cm_lists_subscribers", "lsr_id=" . sql_quote($lsr_id)) == 1) {
        include_spip('inc/autoriser');
        if (autoriser('supprimer', 'cm_list_subscriber', sql_quote($lsr_id))) {
            $abonnement = sql_fetsel("sub_id, lst_id", "spip_cm_lists_subscribers", "lsr_id=" . sql_quote($lsr_id));
            $abonne = sql_getfetsel("sub_email", "spip_cm_subscribers", "sub_id=" . intval($abonnement['sub_id']));
            $liste = sql_fetsel("lst_moderator_email, lst_name", "spip_cm_lists", "lst_id=" . intval($abonnement['lst_id']));
            sql_delete("spip_cm_lists_subscribers", "lsr_id = " . sql_quote($lsr_id));
            sql_delete("spip_cm_posts_queued", "sub_id = " . intval($abonnement['sub_id']));
            if (sql_countsel("spip_cm_lists_subscribers", "sub_id=" . intval($abonnement['sub_id'])) == 0) {
                // No more subscription, subscriber address is removed
                sql_delete("spip_cm_pending", "sub_id = " . intval($abonnement['sub_id']));
                sql_updateq("spip_cm_subscribers", array('sub_email' => md5($abonne) . '@example.com'), "sub_id = " . intval($abonnement['sub_id']));
            }
            $destinataire = $liste['lst_moderator_email'];
            $sujet = '[' . $liste['lst_name'] . '] Désinscription de ' . addslashes($abonne);
            $corps = _T('clevermail:mail_info_desinscription_corps', array('nom_site' => $GLOBALS['meta']['nom_site'], 'url_site' => $GLOBALS['meta']['adresse_site'], 'sub_email' => addslashes($abonne), 'lst_name' => $liste['lst_name']));
            $expediteur = sql_getfetsel("set_value", "spip_cm_settings", "set_name='CM_MAIL_FROM'");
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            if ($envoyer_mail($destinataire, $sujet, $corps, $expediteur)) {
                spip_log('Envoie du mail OK', 'clevermail');
            } else {
                spip_log('Envoie du mail KO', 'clevermail');
            }
            spip_log('Suppression de l\'abonnement de « ' . $abonne . ' » à la liste « ' . $liste['lst_name'] . ' » (id=' . $abonnement['lst_id'] . ')', 'clevermail');
        }
    }
}
コード例 #5
0
function action_spiplistes_liste_des_abonnes_dist () {

	include_spip('inc/autoriser');
	include_spip('inc/spiplistes_api');
	
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	if(!preg_match(",^(\d+) (\d+) (\S+)$,", $arg, $r)) {
		spiplistes_log("action_spiplistes_liste_des_abonnes_dist $arg pas compris");
		return;
	}
	$id_liste = intval($r[1]);
	$debut = intval($r[2]);
	$tri = $r[3];
	$redirect = rawurldecode(_request('redirect'));
	
	$statut_liste = ($id_liste > 0)
		? sql_getfetsel('statut', 'spip_listes', "id_liste=".sql_quote($id_liste), '', '', 1)
		: false
		;
	echo(spiplistes_listes_boite_abonnes ($id_liste, $statut_liste, $tri, $debut, $redirect));
	
	exit(0);

} //
コード例 #6
0
ファイル: ldap.php プロジェクト: genma/spip_ynh
function auth_ldap_dist($login, $pass, $serveur = '', $phpauth = false)
{
    #spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent"));
    // Utilisateur connu ?
    // si http auth, inutile de reauthentifier: cela
    // ne marchera pas avec auth http autre que basic.
    $checkpass = isset($_SERVER["REMOTE_USER"]) ? false : true;
    if (!($dn = auth_ldap_search($login, $pass, $checkpass, $serveur))) {
        return array();
    }
    $credentials_ldap = array('ldap_dn' => $dn, 'ldap_password' => $pass);
    // Si l'utilisateur figure deja dans la base, y recuperer les infos
    $r = sql_fetsel("*", "spip_auteurs", "login="******" AND source='ldap'", '', '', '', '', $serveur);
    if ($r) {
        return array_merge($r, $credentials_ldap);
    }
    // sinon importer les infos depuis LDAP,
    if ($GLOBALS['meta']["ldap_statut_import"] and $desc = auth_ldap_retrouver($dn, array(), $serveur)) {
        // rajouter le statut indique  a l'install
        $desc['statut'] = $GLOBALS['meta']["ldap_statut_import"];
        $desc['login'] = $login;
        $desc['source'] = 'ldap';
        $desc['pass'] = '';
        $r = sql_insertq('spip_auteurs', $desc, '', $serveur);
    }
    if ($r) {
        return array_merge($credentials_ldap, sql_fetsel("*", "spip_auteurs", "id_auteur=" . intval($r), '', '', '', '', $serveur));
    }
    // sinon echec
    spip_log("Creation de l'auteur '{$login}' impossible");
    return array();
}
コード例 #7
0
function action_clevermail_list_subscriber_clear_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    if (sql_countsel("spip_cm_lists_subscribers AS list, spip_cm_subscribers AS sub", "list.sub_id = sub.sub_id AND sub.sub_email LIKE '*****@*****.**'")) {
        $subscribers = sql_select("sub.sub_id", "spip_cm_lists_subscribers AS list, spip_cm_subscribers AS sub", "list.sub_id = sub.sub_id AND sub.sub_email LIKE '*****@*****.**'", "list.sub_id", "", "");
        $sub_deleted = "";
        while ($subscriber = sql_fetch($subscribers)) {
            sql_delete("spip_cm_lists_subscribers", "sub_id = " . intval($subscriber['sub_id']));
            sql_delete("spip_cm_pending", "sub_id = " . intval($subscriber['sub_id']));
            $sub_deleted = $sub_deleted . ' ' . intval($subscriber['sub_id']);
        }
        spip_log('Suppression des abonnements ' . $sub_deleted, 'clevermail');
    } else {
        spip_log('Il n\'y a pas d\'abonnement à supprimer', 'clevermail');
    }
    if (sql_countsel("spip_cm_lists_subscribers", "", "lsr_id", "count(lsr_id) > 1") > 1) {
        $doublons = sql_select("lsr_id", "spip_cm_lists_subscribers", "", "lsr_id", "", "", "count(lsr_id) > 1");
        while ($doublon = sql_fetch($doublons)) {
            $lists = sql_select("lst_id, sub_id", "spip_cm_lists_subscribers", "lsr_id ='" . $doublon['lsr_id'] . "'");
            while ($list = sql_fetch($lists)) {
                sql_updateq("spip_cm_lists_subscribers", array('lsr_id' => md5('subscribe#' . intval($list['lst_id']) . '#' . intval($list['sub_id']) . '#' . time())), "lst_id=" . sql_quote($list['lst_id']) . " AND sub_id=" . sql_quote($list['sub_id']));
            }
        }
    }
    //Récupération du timestamp du mois dernier
    $today = time();
    $date_today = date("d:m:Y", $today);
    $today_exploded = explode(":", $date_today);
    $mois = (int) $today_exploded[1];
    $mois = --$mois;
    $valid_date = mktime(0, 0, 0, $mois, $today_exploded[0], $today_exploded[2]);
    sql_delete("spip_cm_pending", "pnd_action_date <" . $valid_date);
    spip_log('Suppression des abonnements en attente depuis plus d\'un mois', 'clevermail');
}
コード例 #8
0
function action_instituer_forum_sujet_dist()
{
    static $statuts_sujet = array('verrou_on' => 'verrouille', 'verrou_off' => 'verrouille', 'resolu_on' => 'resolu', 'resolu_off' => 'resolu');
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $args = $securiser_action();
    list($objet, $id_forum, $action) = explode('/', $args);
    if (!$action or !array_key_exists($action, $statuts_sujet)) {
        return;
    }
    if ($id_forum = intval($id_forum)) {
        $titre = sql_getfetsel('titre', 'spip_forum', 'id_forum=' . sql_quote($id_forum));
        $pattern = '_' . $statuts_sujet[$action] . '_';
        // On supprime systematique le statut demande. Ainsi si l'action demandee est d'enlever un
        // statut c'est fait sinon on evite de rajouter le meme statut
        $titre_modifie = trim(preg_replace(",{$pattern},UimsS", '', $titre));
        // Si l'action demandee est de positionner un nouveau statut on le rajoute au titre
        if ($action == 'verrou_on' or $action == 'resolu_on') {
            $titre_modifie .= $pattern;
        }
        sql_updateq('spip_forum', array('titre' => $titre_modifie), 'id_forum =' . sql_quote($id_forum));
        // Invalider les pages comportant ce forum
        include_spip('inc/invalideur');
        suivre_invalideur("id='id_forum/{$id_forum}'");
    }
}
コード例 #9
0
ファイル: instituer_article.php プロジェクト: rhertzog/lcs
function action_instituer_article_dist() {

	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	list($id_article, $statut) = preg_split('/\W/', $arg);
	if (!$statut) $statut = _request('statut_nouv'); // cas POST
	if (!$statut) return; // impossible mais sait-on jamais

	$id_article = intval($id_article);

	// si on passe un statut_old, le controler
	// http://trac.rezo.net/trac/spip/ticket/1932
	if ($old = _request('statut_old')
	AND $s = sql_fetsel('statut', 'spip_articles', 'id_article='.sql_quote($id_article))
	AND $s['statut'] != $old)
		return;

	include_spip('action/editer_article');

	$c = array('statut' => $statut);

	// si on a envoye une 'date_posterieure', l'enregistrer
	if ($d = _request('date_posterieure'))
		$c['date'] = $d;

	instituer_article($id_article, $c);

}
コード例 #10
0
ファイル: editer_mots.php プロジェクト: rhertzog/lcs
function exec_editer_mots_args($id_objet, $objet)
{
	$base="";
	if (!$id_objet OR !$objet)
		$droit = false;
	elseif ($GLOBALS['connect_toutes_rubriques']) // pour eviter SQL
		$droit = true;
	elseif ($objet == 'article')
		$droit = autoriser('modifier','article',$id_objet);
	elseif ($objet == 'rubrique')
		$droit = autoriser('publierdans','rubrique',$id_objet);
	else {
		if ($objet == 'breve')
			$droit = sql_select("id_rubrique", "spip_breves", "id_breve=".sql_quote($id_objet));
		else
			$droit = sql_select("id_rubrique", "spip_syndic", "id_syndic=".sql_quote($id_objet));
		$droit = autoriser('publierdans','rubrique',$droit['id_rubrique']);
	}
	$bases = array('article'=>'articles','breve'=>'breves_voir','rubrique'=>'naviguer','syndic'=>'sites');
	if (isset($bases[$objet]))
		$base = $bases[$objet];

	if (!$droit) {
		include_spip('inc/minipres');
		echo minipres();
	} else {

		$ch = _request('cherche_mot');
		$id_groupe = _request('select_groupe');
		$editer_mots = charger_fonction('editer_mots', 'inc');
		ajax_retour($editer_mots($objet, $id_objet, $ch, $id_groupe, 'ajax',false,$base)); 
	}
}
コード例 #11
0
function formulaires_editer_json_article_traiter_dist($id_article = 'new', $retour = '')
{
    $message = array('editable' => true, 'message_ok' => '');
    $vhplab_json = _request('vhplab_json');
    $vhplab_json_num = intval($vhplab_json);
    if ($vhplab_json_num > 0) {
        // comprobamos si el articulo ya ha sido relacionado con un id
        $result = sql_select('*', 'spip_vhplab_json_liens', 'id_objet=' . intval($id_article) . ' AND objet=' . sql_quote("article"));
        if ($row = sql_fetch($result)) {
            // si el articulo ya ha sido relacionado con un id actualizamos el enlace
            sql_updateq('spip_vhplab_json', array('id_json' => $vhplab_json_num), 'id_vhplab_json=' . intval($row['id_vhplab_json']));
            $message['message_ok'] = _T('vhplab:json_update_ok');
        } else {
            // si el articulo no ha sido relacionado con ningún id creamos un enlace
            $id_vhplab = sql_insertq("spip_vhplab_json", array('id_json' => $vhplab_json_num));
            sql_insertq('spip_vhplab_json_liens', array('id_vhplab_json' => intval($id_vhplab), 'id_objet' => intval($id_article), 'objet' => 'article'));
            $message['message_ok'] = _T('vhplab:json_insert_ok');
        }
    }
    if ($retour) {
        include_spip('inc/headers');
        $message['message_ok'] .= redirige_formulaire($retour);
    }
    return $message;
}
コード例 #12
0
/**
 * Renseigner les informations de taille et dimension d'un document
 * 
 * Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document
 * Utilise pour cela les fonctions du répertoire metadatas/*
 * 
 * Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis
 * comme editable dans la déclaration de la table spip_documents
 * 
 * TODO Renommer cette fonction sans "_image"
 *
 * @param string $fichier 
 * 		Le fichier à examiner 
 * @param string $ext
 * 		L'extension du fichier à examiner
 * @return array|string $infos
 * 		Si c'est une chaine, c'est une erreur
 * 		Si c'est un tableau, l'ensemble des informations récupérées du fichier
 */
function renseigner_taille_dimension_image($fichier, $ext)
{
    $infos = array('largeur' => 0, 'hauteur' => 0, 'type_image' => '', 'taille' => 0);
    // Quelques infos sur le fichier
    if (!$fichier or !@file_exists($fichier) or !($infos['taille'] = @intval(filesize($fichier)))) {
        spip_log("Echec copie du fichier {$fichier}");
        return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
    }
    // chercher une fonction de description
    $meta = array();
    if ($metadata = charger_fonction($ext, "metadata", true)) {
        $meta = $metadata($fichier);
    } else {
        $media = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($ext));
        if ($metadata = charger_fonction($media, "metadata", true)) {
            $meta = $metadata($fichier);
        }
    }
    $meta = pipeline('renseigner_document', array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta));
    include_spip('inc/filtres');
    # pour objet_info()
    $editables = objet_info('document', 'champs_editables');
    foreach ($meta as $m => $v) {
        if (isset($infos[$m]) or in_array($m, $editables)) {
            $infos[$m] = $v;
        }
    }
    return $infos;
}
コード例 #13
0
ファイル: resilier.php プロジェクト: nursit/bank
/**
 * Appeler le presta bancaire si celui-ci dispose d'une methode dans son API pour resilier un abonnement
 * @param string $abonne_uid
 * @param string $mode_paiement
 * @return bool
 *   renvoie false si le presta bancaire indique un echec, true dans tous les autres cas
 */
function abos_resilier_notify_bank($abonne_uid, $mode_paiement = null)
{
    if (!$mode_paiement) {
        $mode_paiement = sql_getfetsel("mode", "spip_transactions", "abo_uid=" . sql_quote($abonne_uid, '', 'text'), "", "id_transaction DESC");
    }
    spip_log("abos/resilier_notify_bank abonne_uid={$abonne_uid} mode={$mode_paiement}", "abos_resil");
    $ok = true;
    // notifier au presta bancaire si besoin
    if ($mode_paiement and $abonne_uid) {
        include_spip("inc/bank");
        if (!($config = bank_config($mode_paiement, true)) or !isset($config['presta']) or !($presta = $config['presta'])) {
            spip_log("abos/resilier_notify_bank presta inconnu pour mode={$mode_paiement}", "abos_resil" . _LOG_ERREUR);
        }
        if ($presta and $presta_resilier = charger_fonction('resilier_abonnement', "presta/{$presta}/call", true)) {
            $ok = $presta_resilier($abonne_uid);
            if (!$ok) {
                spip_log("Resiliation abo " . $abonne_uid . " refuse par le prestataire", 'abos_resil' . _LOG_ERREUR);
            }
        } else {
            spip_log("abos/resilier_notify_bank : pas de methode resilier_abonnement pour le presta {$presta}", "abos_resil" . _LOG_INFO_IMPORTANTE);
        }
        if (!$ok) {
            bank_simple_call_resilier_abonnement($abonne_uid, $mode_paiement);
            // TODO ajouter un message a l'abonnement pour le feedback user
            spip_log("Envoi email de desabo " . $abonne_uid . " au webmestre", 'abos_resil' . _LOG_INFO_IMPORTANTE);
            // neanmoins, si plus d'echeance prevue, on peut finir
            // (cas d'un abos deja resilie fin de mois qu'on veut forcer a resilier immediatement)
            // TODO eventuel
        }
    }
    return $ok;
}
コード例 #14
0
function action_supprimer_url_dist($arg = null)
{
    if (is_null($arg)) {
        // Rien a faire ici pour le moment
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $arg = $securiser_action();
    }
    if (strncmp($arg, "-1-", 3) == 0) {
        $id_parent = -1;
        $url = substr($arg, 3);
    } else {
        $arg = explode('-', $arg);
        $id_parent = array_shift($arg);
        $url = implode('-', $arg);
    }
    $where = 'id_parent=' . intval($id_parent) . " AND url=" . sql_quote($url);
    if ($row = sql_fetsel('*', 'spip_urls', $where)) {
        if (autoriser('modifierurl', $row['type'], $row['id_objet'])) {
            sql_delete('spip_urls', $where);
        } else {
            spip_log('supprimer sans autorisation l\'URL ' . $id_parent . "://" . $url, "urls." . _LOG_ERREUR);
        }
    } else {
        spip_log('Impossible de supprimer une URL inconnue ' . $id_parent . "://" . $url, "urls." . _LOG_INFO_IMPORTANTE);
    }
}
コード例 #15
0
ファイル: documenter.php プロジェクト: rhertzog/lcs
function action_documenter_post($r)
{
	// - sign indique le portfolio image ou document, dans le cas de
	// la page exec=articles
	// - id est l'id_objet (id_article ou id_rubrique etc)
	// - type est 'article' (ou 'rubrique')
	// - id_document le doc a supprimer ou a delier de l'objet
	//   SI VIDE, on supprime tous les documents du type SIGN
	//   (bouton "supprimer tous les documents")
	list(, $sign, $id, $type, ,$id_document) = $r;

	if ($id_document) {
		supprimer_lien_document($id_document, $type, $id);
	}
	else {
		$obj = "id_objet=".intval($id)." AND objet=".sql_quote($type);
		$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $sign  ? '' : 'NOT');

		$s = sql_select('docs.id_document AS id_doc', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "$obj AND docs.mode='document' AND $typdoc");
		while ($t = sql_fetch($s)) {
			supprimer_lien_document($t['id_doc'], $type, $id);
		}
	}

	if ($type == 'rubrique') {
		include_spip('inc/rubriques');
		depublier_branche_rubrique_if($id);
	}
}
コード例 #16
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);
}
コード例 #17
0
ファイル: response.php プロジェクト: rougerose/bank
/**
 * il faut avoir un id_transaction et un transaction_hash coherents
 * pour se premunir d'une tentative d'appel exterieur
 *
 * 
 * @return array
 */
function presta_gratuit_call_response_dist()
{
    // recuperer la reponse en post et la decoder
    $id_transaction = _request('id_transaction');
    $transaction_hash = _request('hash');
    if (!($row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction)))) {
        spip_log("id_transaction {$id_transaction} non trouve", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    if ($transaction_hash != $row['transaction_hash']) {
        spip_log("id_transaction {$id_transaction}, hash {$transaction_hash} non conforme", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    // verifier que la commande a bien un total nul, sinon ce mode de paiement n'est pas autorise
    if (intval($row['montant']) > 0 or floatval($row['montant']) > 0.0) {
        spip_log("id_transaction {$id_transaction}, montant " . $row['montant'] . ">0 interdit pour ce mode de paiement", 'gratuit.' . _LOG_CRITIQUE);
        return array($id_transaction, false);
    }
    // Ouf, le reglement a ete accepte
    sql_update("spip_transactions", array("mode" => sql_quote('gratuit'), "montant_regle" => 'montant', "date_paiement" => sql_quote(date('Y-m-d H:i:s')), "statut" => sql_quote('ok'), "reglee" => sql_quote('oui')), "id_transaction=" . intval($id_transaction));
    spip_log("gratuit_response : id_transaction {$id_transaction}, reglee", 'gratuit');
    $regler_transaction = charger_fonction('regler_transaction', 'bank');
    $regler_transaction($id_transaction, "", $row);
    return array($id_transaction, true);
}
コード例 #18
0
ファイル: response.php プロジェクト: rougerose/bank
/**
 * il faut avoir un id_transaction et un transaction_hash coherents
 * pour se premunir d'une tentative d'appel exterieur
 *
 * 
 * @return array
 */
function presta_cheque_call_response_dist()
{
    // recuperer la reponse en post et la decoder
    $id_transaction = _request('id_transaction');
    $transaction_hash = _request('hash');
    if (!($row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction)))) {
        spip_log("id_transaction {$id_transaction} non trouve", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    if ($transaction_hash != $row['transaction_hash']) {
        spip_log("id_transaction {$id_transaction}, hash {$transaction_hash} non conforme", 'gratuit.' . _LOG_ERREUR);
        return array($id_transaction, false);
    }
    // l'autorisation refere l'id_auteur et le nom de celui qui accepte le cheque
    $autorisation = $GLOBALS['visiteur_session']['id_auteur'] . "/" . $GLOBALS['visiteur_session']['nom'];
    include_spip("inc/autoriser");
    if (!autoriser('encaissercheque', 'transaction', $id_transaction)) {
        spip_log("id_transaction {$id_transaction}, tentative d'encaisser un cheque par auteur #{$autorisation} pas autorise", 'cheque.' . _LOG_CRITIQUE);
        return array($id_transaction, false);
    }
    // OK, on peut accepter le reglement
    sql_update("spip_transactions", array("mode" => sql_quote('cheque'), "autorisation_id" => sql_quote($autorisation), "montant_regle" => 'montant', "date_paiement" => sql_quote(date('Y-m-d H:i:s')), "statut" => sql_quote('ok'), "reglee" => sql_quote('oui')), "id_transaction=" . intval($id_transaction));
    spip_log("cheque_response : id_transaction {$id_transaction}, reglee", 'cheque');
    $regler_transaction = charger_fonction('regler_transaction', 'bank');
    $regler_transaction($id_transaction, "", $row);
    return array($id_transaction, true);
}
コード例 #19
0
/**
 * Supprimer les révisions des objets disparus
 */
function optimiser_base_revisions()
{
    /**
     * On commence par récupérer la liste des types d'objet ayant au moins une révision
     */
    $objets_revises = sql_select('objet', 'spip_versions', 'id_version=1', 'objet');
    /**
     * Pour chaque objet, on va contruire un tableau des identifiants disparus
     * On supprimera ensuite les occurences dans spip_versions et spip_versions_fragments
     */
    while ($objet = sql_fetch($objets_revises)) {
        $in = array();
        $table = table_objet_sql($objet['objet']);
        $id_table_objet = id_table_objet($objet['objet']);
        $res = sql_select("A.id_objet AS id_objet, A.objet AS objet", "spip_versions AS A LEFT JOIN {$table} AS R\n\t\t\t\t\t\t\tON R.{$id_table_objet}=A.id_objet AND A.objet=" . sql_quote($objet['objet']), "R.{$id_table_objet} IS NULL AND A.objet=" . sql_quote($objet['objet']) . " AND A.id_objet > 0", "A.id_objet", "A.id_objet");
        while ($row = sql_fetch($res)) {
            $in[$row['id_objet']] = true;
        }
        sql_free($res);
        /**
         * Si on a un array
         * On supprime toute occurence des objets disparus dans :
         * -* spip_versions
         * -* spip_versions_fragments
         */
        if ($in) {
            foreach (array('spip_versions', 'spip_versions_fragments') as $table) {
                sql_delete($table, sql_in('id_objet', array_keys($in)) . " AND objet=" . sql_quote($objet['objet']));
            }
        }
    }
}
コード例 #20
0
ファイル: comments.class.php プロジェクト: yunsite/demila
 public function add($replyTo = 0)
 {
     global $mysql, $item, $languageURL, $langArray;
     if (!isset($_POST['comment']) || trim($_POST['comment']) == '') {
         return false;
     }
     if (!isset($_POST['reply_notification'])) {
         $_POST['reply_notification'] = 'false';
     } else {
         $_POST['reply_notification'] = 'true';
     }
     $mysql->query("\n\t\t\tINSERT INTO `items_comments` (\n\t\t\t\t`owner_id`,\n\t\t\t\t`item_id`,\n\t\t\t\t`item_name`,\n\t\t\t\t`user_id`,\n\t\t\t\t`comment`,\n\t\t\t\t`datetime`,\n\t\t\t\t`notify`,\n\t\t\t\t`reply_to`\t\t\t\t\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\t'" . intval($item['user_id']) . "',\n\t\t\t\t'" . intval($item['id']) . "',\n\t\t\t\t'" . sql_quote($item['name']) . "',\n\t\t\t\t'" . intval($_SESSION['user']['user_id']) . "',\n\t\t\t\t'" . sql_quote($_POST['comment']) . "',\n\t\t\t\tNOW(),\n\t\t\t\t'" . sql_quote($_POST['reply_notification']) . "',\n\t\t\t\t'" . intval($replyTo) . "'\n\t\t\t)\n\t\t");
     if ($replyTo != 0) {
         $comment = $this->get($replyTo);
         if ($comment['notify'] == 'true') {
             require_once ROOT_PATH . '/apps/users/models/users.class.php';
             $usersClass = new users();
             $user = $usersClass->get($comment['user_id']);
             $emailClass = new email();
             $emailClass->to($user['email']);
             $emailClass->fromEmail = 'no-reply@' . DOMAIN;
             $emailClass->contentType = 'text/html';
             $emailClass->subject = "[" . DOMAIN . "] " . $langArray['email_new_reply_subject'];
             $emailClass->message = langMessageReplace($langArray['email_new_reply_text'], array('THEMENAME' => $item['name'], 'URL' => 'http://' . DOMAIN . '/' . $languageURL . 'items/comments/' . $item['id']));
             $emailClass->send();
             unset($emailClass);
         }
     } else {
         #评论
         $mysql->query("\n\t\t\t\tUPDATE `items`\n\t\t\t\tSET `comments` = `comments` + 1\n\t\t\t\tWHERE `id` = '" . intval($item['id']) . "'\n\t\t\t\tLIMIT 1\n\t\t\t");
     }
     return true;
 }
コード例 #21
0
ファイル: resilier_abonnement.php プロジェクト: nursit/bank
/**
 * Jamais appele directement dans le plugin bank/
 * mais par une eventuelle methode abos/resilier d'un plugin externe
 *
 * @param string $uid
 * @param array|string $config
 * @return bool
 */
function presta_stripe_call_resilier_abonnement_dist($uid, $config = 'stripe')
{
    include_spip('inc/bank');
    $trans = sql_fetsel("mode, pay_id", "spip_transactions", "abo_uid=" . sql_quote($uid) . " AND mode LIKE " . sql_quote($config . '%'), '', 'id_transaction', '0,1');
    if (!is_array($config)) {
        $config = bank_config($trans['mode']);
    }
    $mode = $config['presta'];
    // charger l'API Stripe avec la cle
    stripe_init_api($config);
    $erreur = $erreur_code = '';
    try {
        if ($sub = \Stripe\Subscription::retrieve($uid)) {
            $res = $sub->cancel();
            if ($res->status != 'canceled') {
                $erreur = 'cancel failed' . var_export((array) $res, true);
            }
        } else {
            $erreur = "unknown subscription";
        }
    } catch (Exception $e) {
        if ($body = $e->getJsonBody()) {
            $err = $body['error'];
            list($erreur_code, $erreur) = stripe_error_code($err);
        } else {
            $erreur = $e->getMessage();
            $erreur_code = 'error';
        }
    }
    if ($erreur or $erreur_code) {
        spip_log($s = "call_resilier_abonnement {$uid} : erreur {$erreur_code} - {$erreur}", $mode . _LOG_ERREUR);
        return false;
    }
    return true;
}
コード例 #22
0
function action_dereferencer_traduction_rubrique_dist() {
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	list($type, $id_objet) = explode('/', $arg);
	if (!$type = objet_type($type) or !$id_objet = intval($id_objet)) {
		if (!_AJAX) {
			include_spip('inc/minipres');
			minipres('Arguments incompris');
		}
		else {
			spip_log('Arguments incompris dans action dereferencer_traduction_rubrique');
			return false;
		}
	}

	$objet = table_objet($type);
	$_id_objet = id_table_objet($objet);
	$table = table_objet_sql($objet);

	$id_trad_old = sql_getfetsel('id_trad', $table, "$_id_objet = " . sql_quote($id_objet));

	if ($id_trad_old) {
		include_spip('inc/modifier');
		modifier_contenu($objet, $id_objet, array('invalideur' => "id='$objet/$id_objet'"), array('id_trad' => 0));

		// si la deliaison fait qu'il ne reste plus que la source
		// dans le groupe de traduction on lui remet l'id_trad a 0
		if (1 == $nb_dans_groupe = sql_countsel($table, array('id_trad = ' . sql_quote($id_trad_old)))) {
			modifier_contenu($objet, $id_trad_old, array('invalideur' => "id='$objet/$id_trad_old'"), array('id_trad' => 0));
		}
	}
}
コード例 #23
0
ファイル: bank_response.php プロジェクト: rougerose/bank
function action_bank_response_dist($cancel = null, $auto = null)
{
    if (isset($GLOBALS['meta']['bank_paiement']) and $prestas = unserialize($GLOBALS['meta']['bank_paiement']) and count($prestas = $prestas['presta'])) {
        $auto = $auto ? "auto" : "";
        $result = false;
        // intercepter les retours depuis un presta actif
        if ($p = _request('bankp') and (isset($prestas[$p]) and $prestas[$p] or $p == 'gratuit')) {
            $call_response = charger_fonction('response', "presta/{$p}/call");
            spip_log('call_' . $auto . 'response : ' . $_SERVER['REQUEST_URI'], "{$p}{$auto}");
            list($id_transaction, $result) = $call_response();
            spip_log('call_' . $auto . 'response : ' . "{$id_transaction}/{$result}", "{$p}{$auto}");
        } else {
            spip_log("Prestataire {$p} inconnu ou inactif", 'bank_response');
        }
        // fall back si le presta n'a rien renvoye de lisible
        // et qu'on a bien id=id_transaction;hash dans l'url
        if (!$result and !$id_transaction and $id = _request('id') and $id = explode(';', $id) and count($id) == 2 and $id_transaction = reset($id) and $hash = end($id)) {
            $id_transaction = sql_getfetsel("id_transaction", "spip_transactions", "id_transaction=" . intval($id_transaction) . " AND transaction_hash=" . sql_quote($hash));
            if ($id_transaction) {
                sql_updateq("spip_transactions", array('message' => 'Transaction annul&eacute;e', 'statut' => 'echec', 'mode' => $p), 'id_transaction=' . intval($id_transaction) . " AND statut='commande'");
            }
        }
        if (!$auto) {
            redirige_apres_retour_transaction($p, 'acte', $cancel ? false : $result, $id_transaction);
        }
        die;
        // mourir silencieusement
    } else {
        spip_log('Aucun prestataire de paiement configure', 'bank_response');
    }
    die;
}
コード例 #24
0
ファイル: delete.php プロジェクト: horaciogd/CGeomap
function formulaires_delete_traiter_dist($id_article = 'new', $retour = '', $ajaxload = 'oui')
{
    include_spip('base/abstract_sql');
    include_spip('inc/texte');
    include_spip('action/editer_article');
    include_spip('inc/autoriser');
    $article = _request('article');
    $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
    include_spip('inc/autoriser');
    if (!autoriser('modifier', 'article', $article)) {
        $id_article = false;
        $result = sql_select('*', 'spip_auteurs_liens', 'id_objet=' . intval($article) . ' AND objet=' . sql_quote("article"));
        if ($row = sql_fetch($result)) {
            if ($row['id_auteur'] == $id_auteur) {
                $id_article = $article;
            }
        }
    } else {
        $id_article = $article;
    }
    if ($id_article) {
        // 2 actualizampos los campos del articulo
        sql_updateq('spip_articles', array('statut' => 'poubelle'), 'id_article=' . intval($id_article));
        // message
        return array("editable" => true, "message_ok" => _T('cgeomap:message_delete') . ':' . $id_article);
    } else {
        // message
        return array("editable" => false, "message_erreur" => _T('cgeomap:not_allowed'));
    }
}
コード例 #25
0
function action_supprimer_tous_orphelins()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    //on recupere le contexte pour ne supprimer les orphelins que de ce dernier
    list($media, $distant, $statut, $sanstitre) = explode('/', $arg);
    //critere sur le media
    if ($media) {
        $select = "media=" . sql_quote($media);
    }
    //critere sur le distant
    if ($distant) {
        $where[] = "distant=" . sql_quote($distant);
    }
    //critere sur le statut
    if ($statut) {
        $where[] = "statut REGEXP " . sql_quote("({$statut})");
    }
    //critere sur le sanstitre
    if ($sanstitre) {
        $where[] = "titre=''";
    }
    //on isole les orphelins
    $select = sql_get_select("DISTINCT id_document", "spip_documents_liens as oooo");
    $cond = "spip_documents.id_document NOT IN ({$select})";
    $where[] = $cond;
    $ids_doc_orphelins = sql_select("id_document", "spip_documents", $where);
    $supprimer_document = charger_fonction('supprimer_document', 'action');
    while ($row = sql_fetch($ids_doc_orphelins)) {
        $supprimer_document($row['id_document']);
        // pour les orphelins du contexte, on traite avec la fonction existante
    }
}
コード例 #26
0
ファイル: resilier_abonnement.php プロジェクト: nursit/bank
/**
 * Jamais appele directement dans le plugin bank/
 * mais par une eventuelle methode abos/resilier d'un plugin externe
 *
 * @param string $uid
 * @param array|string $config
 * @return bool
 */
function presta_payzen_call_resilier_abonnement_dist($uid, $config = 'payzen')
{
    include_spip('presta/payzen/lib/ws-v5/classes');
    include_spip('presta/systempay/inc/systempay');
    include_spip('inc/bank');
    $trans = sql_fetsel("mode,pay_id", "spip_transactions", "abo_uid=" . sql_quote($uid) . " AND mode LIKE " . sql_quote($config . '%'), '', 'id_transaction', '0,1');
    if (!is_array($config)) {
        $config = bank_config($trans['mode']);
    }
    $mode = $config['presta'];
    $vads = new PayzenWSv5($config);
    $response = new cancelSubscriptionResponse();
    try {
        $response = $vads->cancelSubscription($trans['pay_id'], $uid);
    } catch (Exception $e) {
        spip_log($s = "call_resilier_abonnement : erreur " . $e->getMessage(), $mode . _LOG_ERREUR);
        return false;
    }
    if ($e = $response->cancelSubscriptionResult->commonResponse->responseCode) {
        spip_log($s = "call_resilier_abonnement {$uid} : erreur {$e} : " . $response->cancelSubscriptionResult->commonResponse->responseCodeDetail, $mode . _LOG_ERREUR);
        // 33 : Invalid Subscription => on est donc bien desabonne
        if ($e == 33) {
            return true;
        } else {
            return false;
        }
    }
    return true;
}
コード例 #27
0
function genie_depublier_dist($time)
{
    //va chercher les objets de spip_depublies avec une date_depublie pour aujourd'hui
    include_spip('base/abstract_sql');
    $today = date('Y-m-d H:i:s');
    if ($depublications = sql_allfetsel('*', 'spip_depublies', 'DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") <= ' . sql_quote($today) . ' AND DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") >0') and is_array($depublications)) {
        foreach ($depublications as $depublication) {
            $objet = $depublication['objet'];
            $id_objet = $depublication['id_objet'];
            $statut_depublication = $depublication['statut'];
            $date_depublie = $depublication['date_depublie'];
            spip_log("on veut depublier {$objet} {$id_objet} {$statut_depublication}", 'depublication');
            //on cherche la table de l'objet donné
            $_id_objet = id_table_objet($objet);
            //id_article
            $table = table_objet_sql($objet);
            //articles
            //si le statut est différent de celui demandé
            if ($a_depublier = sql_getfetsel($_id_objet, $table, "statut != " . sql_quote($statut_depublication) . " AND {$_id_objet} = " . intval($id_objet))) {
                //si les conditions sont remplies, on change le statut dans cette table
                sql_updateq($table, array("statut" => $statut_depublication), "{$_id_objet}= " . intval($id_objet));
                //et on supprime l'entrée
                sql_delete('spip_depublies', 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet));
            }
        }
    }
    return 1;
}
コード例 #28
0
function action_deplacer_objets_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('ecrire')) {
        return plan_json_erreur(_T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible"));
    }
    include_spip('base/objets');
    $objet = objet_type(_request('objet'));
    $table = table_objet_sql($objet);
    $_id_table = id_table_objet($table);
    $ids = _request('id_objet');
    $id_rubrique_old = _request('id_rubrique_source');
    $id_rubrique_new = _request('id_rubrique_destination');
    if (!is_array($ids) or !$objet) {
        return plan_json_erreur(_T("plan:erreur_aucun_identifiant") . " " . _T("plan:erreur_deplacement_impossible"));
    }
    if ($id_rubrique_old == $id_rubrique_new) {
        return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible"));
    }
    if ($objet != 'rubrique' and !$id_rubrique_new) {
        return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible"));
    }
    $ids = array_filter($ids);
    if ($objet == 'rubrique') {
        $champ = 'id_parent';
    } else {
        $champ = 'id_rubrique';
    }
    // ne modifier que si les emplacements n'ont pas déjà changé !
    $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old)));
    $ids = array_map('array_shift', $ids);
    include_spip('action/editer_objet');
    $errors = $success = array();
    $modifs = array('id_parent' => $id_rubrique_new);
    foreach ($ids as $id) {
        if (autoriser('modifier', $objet, $id)) {
            if ($err = objet_modifier($objet, $id, $modifs)) {
                $errors["{$objet}-{$id}"] = $err;
            } else {
                $success["{$objet}-{$id}"] = true;
            }
        } else {
            $errors["{$objet}-{$id}"] = _T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible");
        }
    }
    // dans certains cas… on ne reçoit pas d'erreur… et pourtant !
    if (!$errors) {
        // on verifie qu'il n'y a plus d'objets à l'ancien emplacement
        $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old)));
        $ids = array_map('array_shift', $ids);
        if ($ids) {
            foreach ($ids as $id) {
                $errors["{$objet}-{$id}"] = _T("plan:erreur_deplacement");
                unset($success["{$objet}-{$id}"]);
            }
        }
    }
    return plan_json_envoi(array('done' => true, 'success' => $success, 'errors' => $errors));
}
コード例 #29
0
function formulaires_clevermail_list_edit_verifier_dist($lst_id = -1)
{
    $erreurs = array();
    foreach (array('lst_name', 'lst_moderator_email', 'lst_url_html') as $obligatoire) {
        if (!_request($obligatoire)) {
            $erreurs[$obligatoire] = _T('clevermail:ce_champ_est_obligatoire');
        }
    }
    $nb = sql_countsel("spip_cm_lists", "lst_id != " . intval(_request('lst_id')) . " AND lst_name = " . sql_quote(_request('lst_name')));
    if ($nb > 0) {
        $erreurs['lst_name'] = _T('clevermail:lettre_meme_nom');
    }
    include_spip('inc/filtres');
    if (_request('lst_moderator_email') && !email_valide(_request('lst_moderator_email'))) {
        $erreurs['lst_moderator_email'] = _T('clevermail:cette_adresse_email_n_est_pas_valide');
    }
    if (_request('lst_auto_mode') && _request('lst_auto_mode') != 'none') {
        if (in_array(_request('lst_auto_mode'), array('day', 'week', 'month'))) {
            if (_request('lst_auto_hour') && (intval(_request('lst_auto_hour')) < 0 || intval(_request('lst_auto_hour')) > 23)) {
                $erreurs['lst_auto_hour'] = _T('clevermail:auto_erreur_cette_heure_existe_pas');
            }
            switch (_request('lst_auto_mode')) {
                case 'day':
                    break;
                case 'week':
                    if (!_request('lst_auto_week_days') || count(_request('lst_auto_week_days')) == 0) {
                        $erreurs['lst_auto_week_days'] = _T('clevermail:auto_erreur_choisir_un_jour_minimum');
                    } elseif (min(_request('lst_auto_week_days')) < 0 || max(_request('lst_auto_week_days')) > 6) {
                        $erreurs['lst_auto_week_days'] = _T('clevermail:auto_erreur_ce_jour_semaine_existe_pas');
                    }
                    break;
                case 'month':
                    if (_request('lst_auto_month_day') && (intval(_request('lst_auto_month_day')) < 0 || intval(_request('lst_auto_month_day')) > 31)) {
                        $erreurs['lst_auto_month_day'] = _T('clevermail:auto_erreur_ce_jour_mois_existe_pas');
                    } elseif (intval(_request('lst_auto_month_day')) > 28) {
                        $erreurs['lst_auto_month_day'] = _T('clevermail:auto_erreur_ce_jour_mois_pas_possible');
                    }
                    break;
            }
        } else {
            $erreurs['lst_auto_mode'] = _T('clevermail:auto_erreur_ce_mode_automatisation_existe_pas');
        }
    }
    if (_request('lst_auto_subscribers') != '') {
        include_spip('inc/distant');
        if ($adresses = recuperer_page(_request('lst_auto_subscribers'))) {
            include_spip('inc/clevermail_abonnes');
            if (!clevermail_verification_adresses_email($adresses)) {
                $erreurs['lst_auto_subscribers'] = _T('clevermail:le_format_des_adresses_email_ne_semble_pas_bon');
            }
        } else {
            $erreurs['lst_auto_subscribers'] = _T('clevermail:fichier_adresses_distant_impossible_telecharger');
        }
    }
    if (count($erreurs)) {
        $erreurs['message_erreur'] = _T('clevermail:veuillez_corriger_votre_saisie');
    }
    return $erreurs;
}
コード例 #30
0
ファイル: request.php プロジェクト: nursit/bank
/**
 * Generer le contexte pour le formulaire de requete de paiement
 * il faut avoir un id_transaction et un transaction_hash coherents
 * pour se premunir d'une tentative d'appel exterieur
 *
 * @param int $id_transaction
 * @param string $transaction_hash
 * @param $config
 *   configuration du module
 * @return array
 */
function presta_cmcic_call_request_dist($id_transaction, $transaction_hash, $config)
{
    if (!($row = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction) . " AND transaction_hash=" . sql_quote($transaction_hash)))) {
        return array();
    }
    include_spip('inc/filtres');
    $contexte = array();
    $oTpe = new CMCIC_Tpe($config, strtoupper($GLOBALS['spip_lang']));
    if (!$oTpe->isOK) {
        return false;
    }
    $oHmac = new CMCIC_Hmac($oTpe);
    // Control String for support
    $CtlHmac = sprintf(_CMCIC_CTLHMAC, $oTpe->sVersion, $oTpe->sNumero, $oHmac->computeHmac(sprintf(_CMCIC_CTLHMACSTR, $oTpe->sVersion, $oTpe->sNumero)));
    // Currency : ISO 4217 compliant
    $devise = "EUR";
    // Amount : format  "xxxxx.yy" (no spaces)
    $montant = $row['montant'];
    $contexte['version'] = $oTpe->sVersion;
    $contexte['TPE'] = $oTpe->sNumero;
    // transaction date : format d/m/y:h:m:s
    $contexte['date'] = date("d/m/Y:H:i:s");
    $contexte['montant'] = $montant . $devise;
    // Reference: unique, alphaNum (A-Z a-z 0-9), 12 characters max
    $contexte['reference'] = substr($transaction_hash, 0, 12);
    $contexte['lgue'] = $oTpe->sLangue;
    $contexte['societe'] = $oTpe->sCodeSociete;
    // on transmet dans le texte libre les données id_transaction & hash
    // pour les avoir dans le retour URL CGI2 qui est une url à donner à la banque
    // et qui n'a pas connaissance autrement de notre id_transaction et hash :(
    // URL CGI2 à donner à la banque :
    // http(s)://votresite.org/?action=bank_autoresponse&bankp=cmcic
    $contenu = array('id' => $id_transaction, 'hash' => $transaction_hash, 'lang' => $GLOBALS['spip_lang'], 'contenu' => $row['contenu']);
    // texte-libre doit etre protege car le formulaire est parfois reinjecte par Cmcic
    // dans une page de redirection pour les mobiles
    $contexte['texte-libre'] = urlencode(serialize($contenu));
    $contexte['mail'] = bank_porteur_email($row);
    // Data to certify
    $PHP1_FIELDS = sprintf(_CMCIC_CGI1_FIELDS, $contexte['TPE'], $contexte['date'], $montant, $devise, $contexte['reference'], $contexte['texte-libre'], $oTpe->sVersion, $oTpe->sLangue, $oTpe->sCodeSociete, $contexte['mail'], "", "", "", "", "", "", "", "", "", "");
    // MAC computation
    $contexte['MAC'] = $oHmac->computeHmac($PHP1_FIELDS);
    // Urls de retour.
    // La banque poste d'abord sur l'URL CGI2 (cf cmcic/config.php) qui doit traiter
    // le paiement positif et en attend une réponse (texte).
    // Puis, elle présente sur la banque au choix ces urls pour revenir sur le site
    // - retour OK si le paiement s'est bien déroulé
    $contexte['url_retour_ok'] = bank_url_api_retour($config, "response", "id={$id_transaction};{$transaction_hash}");
    // - retour err si le paiement a été refusé
    $contexte['url_retour_err'] = bank_url_api_retour($config, "cancel", "id={$id_transaction};{$transaction_hash}");
    // - retour (bouton Annuler) si le bonhomme décide d'abandonner le paiement
    $contexte['url_retour'] = $contexte['url_retour_ok'];
    $hidden = "";
    foreach ($contexte as $k => $v) {
        $hidden .= "<input type='hidden' name='{$k}' value='" . str_replace("'", "&#39;", $v) . "' />";
    }
    include_spip('inc/filtres_mini');
    $contexte = array('hidden' => $hidden, 'action' => cmcic_url_serveur($config), 'backurl' => url_absolue(self()), 'id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash);
    return $contexte;
}