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); }
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; }
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'); }
/** * 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}'"); } }
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; }
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; }
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; }
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); }
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]); }
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 . " " . _T('info_article_2'); else if($nb == 1) $nb = "1 " . _T('info_article'); else $nb = " "; } 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>"; }
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; }
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)); } }
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[]= ' '; 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 ? " " : "<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):" "; return $vals; }
/** * 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; }
/** * 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'); } } }
/** * 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); } }