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');
        }
    }
}
/**
 * Trouver toutes les souscriptions qui sont restees en commande : processus abandonne avant paiement
 * (ce qui permet de donner une url directe vers la page de paiement sans refaire le processus)
 * et on relance en invitant a revenir souscrire
 *
 * @param null|int $now
 */
function genie_relancer_souscriptions_abandonnees($now = null)
{
    if (!$now) {
        $now = time();
    }
    $datemoins1w = date('Y-m-d H:i:s', strtotime('-1 week', $now));
    $notifications = charger_fonction('notifications', 'inc');
    // trouver toutes les souscriptions dont l'echeance est passee de plus de 1 semaine et notifier
    // ca laisse le temps de recevoir les cheques pour les reglements par cheque, sans relancer inutilement
    $rows = sql_allfetsel("S.id_souscription,S.courriel,S.date_souscription", "spip_souscriptions AS S JOIN spip_transactions AS T on T.id_transaction=S.id_transaction_echeance", "S.statut=" . sql_quote('prepa') . " AND S.date_souscription<" . sql_quote($datemoins1w) . " AND T.statut=" . sql_quote('commande') . "AND T.mode not in (" . sql_quote('cheque') . "," . sql_quote('virement') . ") ", '', 'date_souscription DESC', '0,5');
    foreach ($rows as $row) {
        // il faut verifier que la personne n'a pas reussi a faire une nouvelle souscription par la suite
        // si c'est le cas, on note en abandon cette souscription
        if (sql_countsel("spip_souscriptions", "statut=" . sql_quote('ok') . " AND courriel=" . sql_quote($row['courriel']) . " AND date_souscription>" . sql_quote($row['date_souscription']))) {
            sql_updateq("spip_souscriptions", array('statut' => 'abandon'), 'id_souscription=' . intval($row['id_souscription']));
        } elseif (sql_countsel("spip_souscriptions", "statut=" . sql_quote('relance') . " AND courriel=" . sql_quote($row['courriel']) . " AND date_souscription>" . sql_quote($row['date_souscription']))) {
            sql_updateq("spip_souscriptions", array('statut' => 'abandon'), 'id_souscription=' . intval($row['id_souscription']));
        } else {
            $notifications('inviterrecommencersouscription', $row['id_souscription']);
            spip_log("inviterrecommencersouscription id_souscription=" . $row['id_souscription'], 'souscriptions_surveillance');
            // noter qu'on a fait le rappel
            sql_updateq("spip_souscriptions", array('statut' => 'relance'), 'id_souscription=' . intval($row['id_souscription']));
        }
    }
}
function informer_auteur($bof)
{
    include_spip('inc/json');
    include_spip('formulaires/login');
    include_spip('inc/auth');
    $login = strval(_request('var_login'));
    $row = auth_informer_login($login);
    if ($row and is_array($row)) {
        unset($row['id_auteur']);
    } else {
        // permettre d'autoriser l'envoi de password non crypte lorsque
        // l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas
        // de premiere authentification via SPIP a une autre application.
        if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) {
            $row = array();
        } elseif ($n = sql_countsel('spip_auteurs', "login<>''")) {
            $n = abs(crc32($login)) % $n;
            $row = auth_informer_login(sql_getfetsel('login', 'spip_auteurs', "login<>''", '', '', "{$n},1"));
            if ($row and is_array($row)) {
                unset($row['id_auteur']);
                $row['login'] = $login;
            }
        } else {
            $row = array();
        }
    }
    return json_export($row);
}
Beispiel #4
0
function formulaires_editer_profil_verifier_dist($id_auteur)
{
    $erreurs = array();
    $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    $oblis = array('name', 'prenom', 'email');
    foreach ($oblis as $obli) {
        if (!strlen(_request($obli))) {
            $erreurs[$obli] = _T('editer_profil:erreur_' . $obli . '_obligatoire');
        }
    }
    // Verifier l'email
    if (!isset($erreurs['email'])) {
        $email = trim(_request('email'));
        if (!email_valide($email)) {
            $erreurs['email'] = _T('editer_profil:erreur_email_invalide');
        } elseif ($auteur['email'] == $auteur['login']) {
            if (sql_countsel("spip_auteurs", "(email=" . sql_quote($email) . " OR login="******") AND id_auteur!=" . intval($id_auteur))) {
                $erreurs['email'] = _T('editer_profil:erreur_email_doublon');
            }
        }
    }
    /* On ne permet pas aux redacteurs/admin de modifier leur pseudo ici
    	 si ils ont des articles publies car cela impacte leur signature */
    // 0minirezo ou 1comite
    if (intval($GLOBALS['visiteur_session']['statut']) <= 1) {
        $nb_articles = sql_countsel('spip_auteurs_liens AS L JOIN spip_articles as A ON (A.id_article=L.id_objet AND L.objet=' . sql_quote('article') . ')', 'L.id_auteur=' . intval($id_auteur) . " AND L.objet='article' AND A.statut=" . sql_quote('publie'));
        if ($nb_articles > 0) {
            if (_request('nom') and _request('nom') !== $auteur['nom']) {
                $erreurs['nom'] = _T('editer_profil:erreur_impossible_modifier_pseudo_auteur');
            }
        }
    }
    return $erreurs;
}
Beispiel #5
0
function action_referencer_traduction_dist() {
	
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	if (preg_match(",^(\d+)$,", $arg, $r)
	AND $trad = intval(_request('lier_trad'))) {
		include_spip('action/editer_article');
		if ($err = article_referent($r[1], array('lier_trad' => $trad)))
			redirige_par_entete(urldecode(_request('redirect')) . $err);
	} elseif (preg_match(",^(\d+)\D-(\d+)$,", $arg, $r))  {
	  // supprimer le lien de traduction
		sql_updateq("spip_articles", array("id_trad" => 0), "id_article=" . $r[1]);
		// Verifier si l'ancien groupe ne comporte plus qu'un seul article. Alors mettre a zero.
		$cpt = sql_countsel("spip_articles", "id_trad=" . $r[2]);

		if ($cpt == 1)
			sql_updateq("spip_articles", array("id_trad" => 0), "id_trad=" . $r[2]);
	} elseif (preg_match(",^(\d+)\D(\d+)\D(\d+)$,", $arg, $r)) {
	  // modifier le groupe de traduction de $r[1] (SQL le trouvera)
		sql_update('spip_articles', array("id_trad" => $r[3]), "id_trad=" . $r[2]);
	} elseif (preg_match(",^(\d+)\D(\d+)$,", $arg, $r)) {
		instituer_langue_article($r[1],$r[2]);
	} else {
		spip_log("action_referencer_traduction_dist $arg pas compris");
	}
}
/**
 * Autorisation d'ajout d'un evenement a un article
 *
 * @param string $faire
 * @param string $quoi
 * @param int $id
 * @param int $qui
 * @param array $options
 * @return bool
 */
function autoriser_article_creerevenementdans_dist($faire, $quoi, $id, $qui, $options)
{
    if (!$id) {
        return false;
        // interdit de creer un evenement sur un article vide !
    }
    // si on a le droit de modifier l'article alors on a peut-etre le droit d'y creer un evenement
    $afficher = false;
    if (autoriser('modifier', 'article', $id, $qui)) {
        $afficher = true;
        // un article avec des evenements a toujours le droit
        if (!sql_countsel('spip_evenements', array('id_article=' . intval($id)), sql_in('statut', array('prop', 'publie')))) {
            // si au moins une rubrique a le flag agenda
            if (sql_countsel('spip_rubriques', 'agenda=1')) {
                // alors il faut le flag agenda dans cette branche !
                $afficher = false;
                include_spip('inc/rubriques');
                $id_rubrique = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id));
                if ($id_rubrique > 0) {
                    // Rubriques classiques de SPIP
                    $in = calcul_hierarchie_in($id_rubrique);
                    $afficher = sql_countsel('spip_rubriques', sql_in('id_rubrique', $in) . ' AND agenda=1');
                } else {
                    // Rubrique négative utilisee dans le plugin Page unique
                    $afficher = true;
                }
            }
        }
    }
    return $afficher;
}
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');
}
Beispiel #8
0
/**
 * Effacer une rubrique
 *
 * http://doc.spip.org/@action_supprimer_dist
 *
 * @param null $id_rubrique
 * @return void
 */
function action_supprimer_rubrique_dist($id_rubrique = null)
{
    if (is_null($id_rubrique)) {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $id_rubrique = $securiser_action();
    }
    if (intval($id_rubrique)) {
        sql_delete("spip_rubriques", "id_rubrique=" . intval($id_rubrique));
        // Les admin restreints qui n'administraient que cette rubrique
        // deviennent redacteurs
        // (il y a sans doute moyen de faire ca avec un having)
        $q = sql_select("id_auteur", "spip_auteurs_liens", "objet='rubrique' AND id_objet=" . intval($id_rubrique));
        while ($r = sql_fetch($q)) {
            $id_auteur = $r['id_auteur'];
            // degrader avant de supprimer la restriction d'admin
            // section critique sur les droits
            $n = sql_countsel("spip_auteurs_liens", "objet='rubrique' AND id_objet!=" . intval($id_rubrique) . " AND id_auteur=" . intval($id_auteur));
            if (!$n) {
                include_spip('action/editer_auteur');
                auteurs_set($id_auteur, array("statut" => '1comite'));
            }
            sql_delete("spip_auteurs_liens", "objet='rubrique' AND id_objet=" . intval($id_rubrique) . " AND id_auteur=" . intval($id_auteur));
        }
        // menu_rubriques devra recalculer
        effacer_meta("date_calcul_rubriques");
        // Une rubrique supprimable n'avait pas le statut "publie"
        // donc rien de neuf pour la rubrique parente
        include_spip('inc/rubriques');
        calculer_langues_rubriques();
        // invalider les caches marques de cette rubrique
        include_spip('inc/invalideur');
        suivre_invalideur("id='rubrique/{$id_rubrique}'");
    }
}
Beispiel #9
0
function formulaires_participer_evenement_verifier_dist($id_evenement){
	$erreurs = array();
	$reponse = _request('reponse');
	// Le test de la ligne suivante sert a savoir si la reponse est vide, non?
	// On vient juste de la recuperer ci-dessus, pas la peine de la reaffecter...
	if (!($reponse) OR !in_array($reponse,array('oui','non','?')))
		$erreurs['reponse'] = _T('agenda:indiquez_votre_choix');
	elseif ($reponse!=='non') {
		$row = sql_fetsel('places','spip_evenements','id_evenement='.intval($id_evenement));
		$valeurs['reponse'] = sql_getfetsel('reponse','spip_evenements_participants','id_evenement='.intval($id_evenement).' AND id_auteur='.intval($GLOBALS['visiteur_session']['id_auteur']));
		if ($places = $row['places'] AND $valeurs['reponse']!==$reponse){
			$ok = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='oui'");
			$peutetre = sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement)." AND reponse='?'");
			// Les reponses PEUT-ETRE sont ponderees a 0,5 donc
			// on multiplie tout par 2 pour eviter les troncatures ($total ne sert de toute facon que dans les tests)
			$total = 2*$ok+$peutetre;
			if (
			    // Si on est au taquet, le seul cas autorise restant (la reponse NON et la reponse identique sont prises
			    // en compte dans les tests ci-dessus) est: transformation d'un OUI en PEUT-ETRE (-0,5)
			    ($total>=2*$places AND !($valeurs['reponse']=='oui' AND $reponse=='?'))
			    OR
			    // Si il reste un siege PEUT-ETRE, le seul cas interdit restant est: transformation d'un NON en OUI (+1)
			    ($total==2*$places-1 AND ($valeurs['reponse']=='non' AND $reponse=='oui'))
			    ){
				$erreurs['reponse'] = _T('agenda:plus_de_place');
			}
		}
	}
	return $erreurs;
}
function dump_afficher_tables_sauvegardees($status_file)
{
    $status = dump_lire_status($status_file);
    $tables = $status['tables_copiees'];
    // lister les tables sauvegardees et aller verifier dans le dump
    // qu'on a le bon nombre de donnees
    dump_serveur($status['connect']);
    spip_connect('dump');
    foreach ($tables as $t => $n) {
        $n = abs(intval($n));
        $n_dump = intval(sql_countsel($t, '', '', '', 'dump'));
        $res = "{$t} ";
        if ($n_dump == 0 and $n == 0) {
            $res .= "(" . _T('dump:aucune_donnee') . ")";
        } else {
            $res .= "({$n_dump}/{$n})";
        }
        if ($n !== $n_dump) {
            $res = "<strong>{$res}</strong>";
        }
        $tables[$t] = $res;
    }
    $n = floor(count($tables) / 2);
    $corps = "<div style='width:49%;float:left;'><ul class='spip'><li class='spip'>" . join("</li><li class='spip'>", array_slice($tables, 0, $n)) . "</li></ul></div>" . "<div style='width:49%;float:left;'><ul class='spip'><li>" . join("</li><li class='spip'>", array_slice($tables, $n)) . "</li></ul></div>" . "<div class='nettoyeur'></div>";
    return $corps;
}
Beispiel #11
0
function dump_afficher_tables_restaurees_erreurs($status_file)
{
    $status = dump_lire_status($status_file);
    $tables = $status['tables_copiees'];
    $corps = "";
    $erreurs = array();
    if (!$tables) {
        return "<p>" . _T("dump:erreur_aucune_donnee_restauree") . "</p>";
    }
    // lister les tables copiees aller verifier dans la base
    // qu'on a le bon nombre de donnees
    foreach ($tables as $t => $n) {
        if (!sql_showtable($t, true) or $n === 0) {
            $erreurs[$t] = _T('dump:erreur_table_absente', array('table' => "<strong>{$t}</strong>"));
        } else {
            $n = abs(intval($n));
            $n_dump = intval(sql_countsel($t));
            if ($n_dump < $n) {
                $erreurs[$t] = _T('dump:erreur_table_donnees_manquantes', array('table' => "<strong>{$t}</strong>"));
            }
        }
    }
    if (count($erreurs)) {
        $corps = "<ul class='spip'><li>" . implode("</li><li class='spip'>", $erreurs) . "</li></ul>";
    }
    return $corps;
}
Beispiel #12
0
function action_supprimer_rubrique($r)
{
	list(,,$id_rubrique) = $r;
	sql_delete("spip_rubriques", "id_rubrique=$id_rubrique");
	sql_delete("spip_mots_rubriques", "id_rubrique=$id_rubrique");
	// Les admin restreints qui n'administraient que cette rubrique
	// deviennent redacteurs
	// (il y a sans doute moyen de faire ca avec un having)

	$q = sql_select("id_auteur", "spip_auteurs_rubriques", "id_rubrique=$id_rubrique");

	while ($r = sql_fetch($q)) {
		$id_auteur = $r['id_auteur'];
		sql_delete("spip_auteurs_rubriques", "id_rubrique=$id_rubrique AND id_auteur=$id_auteur");
		$n = sql_countsel("spip_auteurs_rubriques", "id_auteur=$id_auteur");
		if (!$n)
			sql_updateq("spip_auteurs", array("statut" => '1comite'), "id_auteur=$id_auteur");
	}
	// menu_rubriques devra recalculer
	effacer_meta("date_calcul_rubriques");

	// Une rubrique supprimable n'avait pas le statut "publie"
	// donc rien de neuf pour la rubrique parente
	include_spip('inc/rubriques');
	calculer_langues_rubriques();

	// invalider les caches marques de cette rubrique
	include_spip('inc/invalideur');
	suivre_invalideur("id='id_rubrique/$id_rubrique'");
}
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));
		}
	}
}
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;
}
Beispiel #15
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();
}
function action_referer_spam_supprimer($p, $arg)
{
    include_spip('base/abstract_sql');
    $url = $_GET['url'];
    if (sql_countsel("spip_referer_spam", "referer LIKE '%{$url}%'")) {
        sql_delete("spip_referer_spam", "referer LIKE '%{$url}%'");
    }
}
/**
 * Ajoute dans le bloc d'info d'un objet un bouton permettant d'aller voir
 * l'historique de ses révisions
 *
 * @param array $flux Données du pipeline
 * @return array $flux  Données du pipeline
 */
function revisions_boite_infos($flux)
{
    $type = $flux['args']['type'];
    if ($id = intval($flux['args']['id']) and $tables = unserialize($GLOBALS['meta']['objets_versions']) and in_array(table_objet_sql($type), $tables) and autoriser('voirrevisions', $type, $id) and sql_countsel('spip_versions', 'id_objet=' . intval($id) . ' AND objet = ' . sql_quote($type)) > 1) {
        include_spip('inc/presentation');
        $flux['data'] .= icone_horizontale(_T('revisions:info_historique_lien'), generer_url_ecrire('revision', "id_objet={$id}&objet={$type}"), "revision-24.png");
    }
    return $flux;
}
/**
 * Définition des messages de compagnon par défaut en fonction
 *
 * Retourne une liste de messages d'aides en fonction du pipeline
 * demandé
 *
 * @pipeline compagnon_messages
 *
 * @param array $flux
 *     Données du pipeline
 * @return array $flux
 *     Données du pipeline
 **/
function compagnon_compagnon_messages($flux)
{
    $exec = $flux['args']['exec'];
    $pipeline = $flux['args']['pipeline'];
    $vus = $flux['args']['deja_vus'];
    $aides =& $flux['data'];
    switch ($pipeline) {
        case 'affiche_milieu':
            switch ($exec) {
                case 'accueil':
                    $aides[] = array('id' => 'accueil', 'inclure' => 'compagnon/accueil', 'statuts' => array('1comite', '0minirezo', 'webmestre'));
                    $aides[] = array('id' => 'accueil_configurer', 'titre' => _T('compagnon:c_accueil_configurer_site'), 'texte' => _T('compagnon:c_accueil_configurer_site_texte', array('nom' => $GLOBALS['meta']['nom_site'])), 'statuts' => array('webmestre'), 'target' => '#bando_identite .nom_site_spip .nom');
                    $aides[] = array('id' => 'accueil_publication', 'titre' => _T('compagnon:c_accueil_publication'), 'texte' => _T('compagnon:c_accueil_publication_texte'), 'statuts' => array('webmestre'), 'target' => '#bando1_menu_edition');
                    break;
                case 'rubriques':
                    // eviter si possible une requete sql.
                    if (!isset($vus['rubriques']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'rubriques', 'titre' => _T('compagnon:c_rubriques_creer'), 'texte' => _T('compagnon:c_rubriques_creer_texte'), 'statuts' => array('webmestre'), 'target' => '#contenu .icone:first-of-type');
                    }
                    break;
                case 'rubrique':
                    // eviter si possible une requete sql.
                    if (!isset($vus['rubrique'])) {
                        $statut = sql_getfetsel('statut', 'spip_rubriques', 'id_rubrique=' . $flux['args']['id_rubrique']);
                        if ($statut != 'publie') {
                            $aides[] = array('id' => 'rubrique', 'titre' => _T('compagnon:c_rubrique_publier'), 'texte' => _T('compagnon:c_rubrique_publier_texte'), 'statuts' => array('webmestre'), 'target' => '#contenu .icone.article-new-24');
                        }
                    }
                    break;
                case 'articles':
                    // eviter si possible une requete sql.
                    if (!isset($vus['articles']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'articles', 'titre' => _T('compagnon:c_articles_creer'), 'texte' => _T('compagnon:c_articles_creer_texte'), 'statuts' => array('webmestre'));
                    }
                    break;
                case 'sites':
                    // eviter si possible une requete sql.
                    if (!isset($vus['sites']) and !sql_countsel('spip_rubriques')) {
                        $aides[] = array('id' => 'sites', 'titre' => _T('compagnon:c_sites_creer'), 'texte' => _T('compagnon:c_sites_creer_texte'), 'statuts' => array('webmestre'));
                    }
                    break;
                case 'article':
                    $aides[] = array('id' => 'article_redaction', 'inclure' => 'compagnon/article_redaction', 'statuts' => array('0minirezo', 'webmestre'));
                    $aides[] = array('id' => 'article_redaction_redacteur', 'inclure' => 'compagnon/article_redaction_redacteur', 'statuts' => array('1comite'));
                    break;
            }
            break;
        case 'affiche_gauche':
            switch ($exec) {
                case 'job_queue':
                    $aides[] = array('id' => 'job_queue', 'titre' => _T('compagnon:c_job'), 'texte' => _T('compagnon:c_job_texte'), 'statuts' => array('webmestre'));
                    break;
            }
            break;
    }
    return $flux;
}
/**
 * Inserer les infos d'agenda sur les articles et rubriques
 *
 * @param array $flux
 * @return array
 */
function agenda_affiche_milieu($flux)
{
    $e = trouver_objet_exec($flux['args']['exec']);
    $out = "";
    if ($e['type'] == 'rubrique' and autoriser('configurer') and $e['edition'] == false and $id_rubrique = intval($flux['args']['id_rubrique']) and autoriser('modifier', 'rubrique', $id_rubrique)) {
        $activer = true;
        $res = "";
        $actif = sql_getfetsel('agenda', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
        $statut = "-32";
        $alt = "";
        $voir = "";
        if (!sql_countsel('spip_rubriques', 'agenda=1')) {
            $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />";
        } else {
            include_spip('inc/rubriques');
            if (sql_countsel('spip_rubriques', sql_in('id_rubrique', calcul_hierarchie_in($id_rubrique)) . " AND agenda=1 AND id_rubrique<>" . intval($id_rubrique))) {
                $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda');
                $activer = false;
                $statut = "-ok-32";
                $voir = _T('agenda:voir_evenements_rubrique');
            } elseif (!$actif) {
                $alt = _T('agenda:rubrique_sans_gestion_evenement') . '<br />';
                $statut = "-non-32";
            }
            if ($actif) {
                $alt = _T('agenda:rubrique_mode_agenda') . '<br />';
                $statut = "-ok-32";
                $voir = _T('agenda:voir_evenements_rubrique');
            }
        }
        if (!$actif) {
            if ($activer) {
                $res .= bouton_action(_T('agenda:rubrique_activer_agenda'), generer_action_auteur('activer_agenda_rubrique', $id_rubrique, self()), 'ajax');
            }
        } else {
            $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'), generer_action_auteur('activer_agenda_rubrique', "-{$id_rubrique}", self()), 'ajax');
        }
        if ($voir) {
            $res .= " | <a href='" . generer_url_ecrire('evenements', "id_rubrique={$id_rubrique}") . "'>{$voir}</a>";
        }
        if ($res) {
            $out .= boite_ouvrir(_T('agenda:agenda') . http_img_pack("agenda{$statut}.png", $alt, "class='statut'", $alt), 'simple agenda-statut') . $res . boite_fermer();
        }
    } elseif ($e['type'] == 'article' and $e['edition'] == false) {
        $id_article = $flux['args']['id_article'];
        $out .= recuperer_fond('prive/objets/contenu/article-evenements', $flux['args']);
    }
    if ($out) {
        if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
            $flux['data'] = substr_replace($flux['data'], $out, $p, 0);
        } else {
            $flux['data'] .= $out;
        }
    }
    return $flux;
}
/**
 * Autorisation de voir le menu révisions
 *
 * Il faut des révisions activées et présentes.
 *
 * @param  string $faire Action demandée
 * @param  string $type Type d'objet sur lequel appliquer l'action
 * @param  int $id Identifiant de l'objet
 * @param  array $qui Description de l'auteur demandant l'autorisation
 * @param  array $opt Options de cette autorisation
 * @return bool          true s'il a le droit, false sinon
 */
function autoriser_revisions_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null)
{
    // SI pas de revisions sur un objet quelconque.
    // ET pas de version... pas de bouton, c'est inutile...
    include_spip('inc/config');
    if (!lire_config('objets_versions/') and !sql_countsel('spip_versions')) {
        return false;
    }
    return true;
}
/**
 * Desinstallation du plugin
 *
 * Suppression de la colonne id_trad uniquement s'il ne reste
 * pas de traduction.
 * 
 * @param string $nom_meta_base_version
 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
 * @return void
 */
function tradrub_vider_tables($nom_meta_base_version) {
	// supprimer la colonne seulement s'il ne reste pas de traductions
	$il_en_reste = sql_countsel('spip_rubriques', array(
		'id_trad <> ' . sql_quote(0),
		'id_trad <> id_rubrique')
	);
	if (!$il_en_reste) {
		sql_alter("TABLE spip_rubriques DROP id_trad");
	}
	effacer_meta($nom_meta_base_version);
}
Beispiel #22
0
function action_supprimer_traduction_post($r)
{
	sql_updateq("spip_articles", array("id_trad" => 0), "id_article=" . $r[1]);
	// Si l'ancien groupe ne comporte plus qu'un seul article
	// mettre a zero.

	$cpt = sql_countsel("spip_articles", "id_trad=" . $r[2]);

	if ($cpt == 1)
		sql_updateq("spip_articles", array("id_trad" => 0), "id_trad=" . $r[2]);
}
Beispiel #23
0
function inc_informer_auteur_dist($id)
{
	global $spip_display,$spip_lang_right ;

	include_spip('inc/presentation');
	include_spip('inc/formater_auteur');

	$row = sql_fetsel("*", "spip_auteurs", "id_auteur = $id");
	if ($row) {
		$nom = typo($row["nom"]);
		$bio = propre($row["bio"]);
		$mail = formater_auteur_mail($row, $id);
		$nb = sql_countsel("spip_auteurs_articles", "id_auteur=$id");
		if ($nb > 1)
		  $nb = $nb . "&nbsp;" . _T('info_article_2');
		else if($nb == 1)
		  $nb = "1&nbsp;" . _T('info_article');
		else $nb = "&nbsp;";
	} else {
		$nom = "<span style='color:red'>"
			. _T('texte_vide')
			. '</span>';
		$bio = $mail = $nb = '';
	}
	$res = '';
	if ($spip_display != 1 AND $spip_display!=4 AND $GLOBALS['meta']['image_process'] != "non") {
		$chercher_logo = charger_fonction('chercher_logo', 'inc');
		if ($res = $chercher_logo($id, 'id_auteur', 'on'))  {
			list($fid, $dir, $n, $format) = $res;
			include_spip('inc/filtres_images_mini');
			$res = image_reduire("<img src='$fid' alt='' />", 100, 48);
			if ($res)
				$res =  "<div style='float: $spip_lang_right; margin-$spip_lang_right: -5px; margin-top: -5px;'>$res</div>";
		}
	}

	return "<div class='informer-auteur'>"
	. (!$res ? '' : $res)
	. "<div><a href='"
	. generer_url_ecrire('auteur_infos', "id_auteur=$id")
	. "'>"
	. bonhomme_statut($row)
	. "</a> "
	. $mail
	. " <b>"
	. $nom
	. "</b><br />"
	. $nb
	. "</div><br />"
	. "<div>$bio</div>"
	.  "</div>";
}
Beispiel #24
0
function formulaires_editer_mot_verifier_dist($id_mot = 'new', $id_groupe = 0, $retour = '', $associer_objet = '', $dummy1 = '', $dummy2 = '', $config_fonc = 'mots_edit_config', $row = array(), $hidden = '')
{
    $erreurs = formulaires_editer_objet_verifier('mot', $id_mot, array('titre'));
    // verifier qu'un mot du meme groupe n'existe pas avec le meme titre
    // la comparaison accepte un numero absent ou different
    // sinon avertir
    if (!count($erreurs) and !_request('confirm_titre_mot')) {
        if (sql_countsel("spip_mots", "titre REGEXP " . sql_quote("^([0-9]+[.] )?" . preg_quote(supprimer_numero(_request('titre'))) . "\$") . " AND id_mot<>" . intval($id_mot))) {
            $erreurs['titre'] = _T('mots:avis_doublon_mot_cle') . " <input type='hidden' name='confirm_titre_mot' value='1' />";
        }
    }
    return $erreurs;
}
Beispiel #25
0
function exec_grouper_mots_args($id_groupe)
{
	$cpt = sql_countsel("spip_mots", "id_groupe=$id_groupe");
	if (!$cpt) {
		if ($cpt === NULL) {
			include_spip('inc/minipres');
			echo minipres();
		} else ajax_retour('') ;
	} else {
	  	$grouper_mots = charger_fonction('grouper_mots', 'inc');
		ajax_retour($grouper_mots($id_groupe, $cpt));
	}
}
Beispiel #26
0
function inc_formater_auteur_dist($id_auteur, $row=NULL) {

  global $connect_id_auteur, $connect_statut;

	$id_auteur = intval($id_auteur);

	if ($row===NULL)
	  $row = sql_fetsel("*, (en_ligne<DATE_SUB(NOW(),INTERVAL 15 DAY)) AS parti", "spip_auteurs", "id_auteur=$id_auteur");

	$vals = array();
	$statut = $row['statut'];
	$href = generer_url_ecrire("auteurs","statut=$statut");
	$vals[] = "<a href='$href'>" . bonhomme_statut($row) . '</a>';

	if (($id_auteur == $connect_id_auteur) OR $row['parti'])
		$vals[]= '&nbsp;';
	else	$vals[]= formater_auteur_mail($row, $id_auteur);

	if (!$nom = typo($row['nom']))
		$nom = "<span style='color: red'>" . _T('texte_vide') . '</span>';

	$vals[] = "<a href='"
	. generer_url_ecrire('auteur_infos', "id_auteur=$id_auteur")
	. "'"
	. (!$row['bio'] ? '' : (" title=\"" . attribut_html(couper(textebrut($row["bio"]), 200)) ."\""))
	. ">$nom</a>";

	$url = traiter_lien_explicite($row["url_site"]);

	$vals[] =  !$url ? "&nbsp;"
	  :  "<a href='$url'>".couper(sinon(typo($row['nom_site']), $row["url_site"]),30)."</a>";

	$contributions = array();
	if (autoriser('modifier', 'auteur', $id_auteur, $row)) {
		$in = sql_in('statut', 
			($connect_statut == "0minirezo"
			? array('prepa', 'prop', 'publie', 'refuse')
			: array('prop', 'publie')));
		if ($cpt = sql_countsel("spip_auteurs_articles AS L LEFT JOIN spip_articles AS A ON A.id_article=L.id_article", "L.id_auteur=$id_auteur AND $in"))
			$contributions[] = ($cpt>1?$cpt.' '._T('info_article_2'):_T('info_1_article'));
	} else {
		if ($cpt = sql_countsel("spip_forum AS F", "F.id_auteur=$id_auteur"))
			$contributions[] = ($cpt>1?$cpt.' '._T('public:messages_forum'):('1 ' . _T('public:message')));
	}

	$contributions = pipeline('compter_contributions_auteur',array('args'=>array('id_auteur'=>$id_auteur,'row'=>$row),'data'=>$contributions));

	$vals[] =  count($contributions)?implode('<br />',$contributions):"&nbsp;";

	return $vals;
}
Beispiel #27
0
/**
 * Vérifie que la valeur correspond à un id_dcoument valide
 *
 * @param string $valeur
 *   La valeur à vérifier.
 * @param array $options
 * @return string
 *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
 */
function verifier_id_document_dist($valeur, $options=array()){
	$erreur = '';
	
	if ($valeur !== '') {
		// On vérifie déjà qu'il s'agit d'un nombre
		if(!is_numeric($valeur))
			$erreur = _T('verifier:erreur_id_document');
		// Puis qu'il y a au moins un document avec cet id
		elseif (!sql_countsel('spip_documents',"id_document=$valeur"))
			$erreur = _T('verifier:erreur_id_document');
	}
	
	return $erreur;
}
Beispiel #28
0
/**
 * Charger
 *
 * @param int $id_article
 * @return array
 */
function formulaires_activer_forums_objet_charger_dist($id_objet, $objet = 'article')
{
    if (!autoriser('modererforum', $objet, $id_objet)) {
        return false;
    }
    include_spip('inc/presentation');
    include_spip('base/abstract_sql');
    $nb_forums = sql_countsel("spip_forum", "objet=" . sql_quote($objet) . " AND id_objet=" . intval($id_objet) . " AND statut IN ('publie', 'off', 'prop', 'spam')");
    $editable = $objet == 'article' ? true : false;
    if (!$editable and !$nb_forums) {
        return false;
    }
    return array('editable' => $editable, 'objet' => $objet, 'id_objet' => $id_objet, 'accepter_forum' => get_forums_publics($id_objet, $objet), '_suivi_forums' => $nb_forums ? _T('forum:icone_suivi_forum', array('nb_forums' => $nb_forums)) : "");
}
function action_clevermail_list_remove_dist($lst_id = 0)
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    $lst_id = intval($arg);
    $lst_name = sql_getfetsel("lst_name", "spip_cm_lists", "lst_id=" . intval($lst_id));
    include_spip('inc/autoriser');
    if (autoriser('supprimer', 'cm_list', intval($lst_id))) {
        if (sql_countsel("spip_cm_lists_subscribers", "lst_id=" . intval($lst_id)) == 0 && sql_countsel("spip_cm_posts", "lst_id=" . intval($lst_id)) == 0) {
            sql_delete('spip_cm_lists', 'lst_id=' . intval($lst_id));
            spip_log('Suppression de la liste « ' . $lst_name . ' » (id = ' . intval($lst_id) . ')', 'clevermail');
        }
    }
}
Beispiel #30
0
/**
 * Sélecteur de rubriques pour l'espace privé
 *
 * @uses selecteur_rubrique_html()
 * @uses selecteur_rubrique_ajax()
 * 
 * @param int $id_rubrique
 *     Identifiant de rubrique courante (0 si NEW)
 * @param string $type
 *     Type de l'objet à placer.
 *
 *     Une rubrique peut aller à la racine mais pas dans elle-même,
 *     les articles et sites peuvent aller n'importe où (défaut),
 *     et les brèves dans les secteurs.
 * @param bool $restreint
 *     True pour indiquer qu'il faut limiter les rubriques affichées
 *     aux rubriques éditables par l'admin restreint
 * @param int $idem
 *     En mode rubrique, identifiant de soi-même
 * @param string $do
 *     Type d'action
 * @return string
 *     Code HTML du sélecteur
**/
function inc_chercher_rubrique_dist($id_rubrique, $type, $restreint, $idem = 0, $do = 'aff')
{
    if (sql_countsel('spip_rubriques') < 1) {
        return '';
    }
    // Mode sans Ajax :
    // - soit parce que le cookie ajax n'est pas la
    // - soit parce qu'il y a peu de rubriques
    if (_SPIP_AJAX < 1 or $type == 'breve' or sql_countsel('spip_rubriques') < _SPIP_SELECT_RUBRIQUES) {
        return selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem);
    } else {
        return selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem, $do);
    }
}