laposte.net , http://bloog.net */
/* */
/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
/* de la Licence Publique Générale GNU publiée par la Free Software Foundation */
/* (version 2). */
/* */
/* Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, */
/* ni explicite ni implicite, y compris les garanties de commercialisation ou */
/* d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU */
/* pour plus de détails. */
/* */
/* Vous devez avoir reçu une copie de la Licence Publique Générale GNU */
/* en même temps que ce programme ; si ce n'est pas le cas, écrivez à la */
/* Free Software Foundation, */
/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. */
/******************************************************************************************/
include_spip('inc/spiplistes_api');
function spip_listes_onglets($rubrique, $onglet){
global $id_auteur, $connect_id_auteur, $connect_statut, $statut_auteur, $options;
echo debut_onglet();
if ($rubrique == "messagerie"){
echo onglet(_T('spiplistes:Historique_des_envois'), generer_url_ecrire("spip_listes"), "messagerie", $onglet, _DIR_PLUGIN_SPIPLISTES."img_pack/stock_hyperlink-mail-and-news-24.gif");
echo onglet(_T('spiplistes:Listes_de_diffusion'), generer_url_ecrire("listes_toutes"), "messagerie", $onglet, _DIR_PLUGIN_SPIPLISTES."img_pack/reply-to-all-24.gif");
echo onglet(_T('spiplistes:Suivi_des_abonnements'), generer_url_ecrire("abonnes_tous"), "messagerie", $onglet, _DIR_PLUGIN_SPIPLISTES."img_pack/addressbook-24.gif");
}
echo fin_onglet();
}
function boite_autocron(){
@define('_SPIP_LISTE_SEND_THREADS',1);
include_spip('inc/spiplistes_cron');
if (cron_spiplistes_cron(0)) return; // rien a faire
$res = spip_query("SELECT COUNT(a.id_auteur) AS n FROM spip_auteurs_courriers AS a JOIN spip_courriers AS c ON c.id_courrier=a.id_courrier WHERE c.statut='encour'");
$n = 0;
if ($row = spip_fetch_array($res))
$n = $row['n'];
if(true or $n > 0 ){
echo "
";
echo debut_boite_info();
//echo "";
echo "
"._T('spiplistes:envoi_en_cours')."
";
echo "";
$total = $n;
$res2 = spip_query("SELECT SUM(total_abonnes) AS total FROM spip_courriers WHERE statut='encour'");
$row2 = spip_fetch_array($res2);
$total = $row2['total'];
echo "";
echo "
"._T('spiplistes:envoi_en_cours')." "
. "$n/$total ("
. round($n/$total*100)."%)
";
$href = generer_action_auteur('spiplistes_envoi_lot','envoyer');
for ($i=0;$i<_SPIP_LISTE_SEND_THREADS;$i++)
echo "
";
if (_request('exec')=='spip_listes')
echo "
";
echo "
";
echo "";
echo ""._T('spiplistes:texte_boite_en_cours')."
" ;
echo "["._T('annuler')."]
";
echo fin_boite_info();
}
//echo '
';
//spip_log("spip_listes : autocron");
}
function spip_listes_raccourcis(){
global $connect_statut;
// debut des racourcis
echo debut_raccourcis(_DIR_PLUGIN_SPIPLISTES."img_pack/mailer_config.gif");
if ($connect_statut == "0minirezo") {
icone_horizontale(_T('spiplistes:Nouveau_courrier'), generer_url_ecrire("courrier_edit","new=oui&type=nl"), _DIR_PLUGIN_SPIPLISTES."img_pack/stock_mail_send.gif");
// echo ""; // bug icone_horizontale()
echo "
" ;
echo "
" ;
icone_horizontale(_T('spiplistes:Nouvelle_liste_de_diffusion'), generer_url_ecrire("liste_edit","new=oui"), _DIR_PLUGIN_SPIPLISTES."img_pack/reply-to-all-24.gif");
// echo ""; // bug icone_horizontale()
icone_horizontale(_T('spiplistes:import_export'), generer_url_ecrire("import_export"), _DIR_PLUGIN_SPIPLISTES."img_pack/listes_inout.png");
// echo ""; // bug icone_horizontale()
icone_horizontale(_T('spiplistes:Configuration'), generer_url_ecrire("config"),_DIR_PLUGIN_SPIPLISTES."img_pack/mailer_config.gif");
// echo ""; // bug icone_horizontale()
}
echo fin_raccourcis();
//Afficher la console d'envoi ?
boite_autocron();
// colonne gauche boite info
echo "
" ;
echo debut_boite_info();
echo _T('spiplistes:_aide');
echo fin_boite_info();
}
/**
* spiplistes_afficher_en_liste
*
* affiche des listes d'éléments
*
* @param string titre
* @param string image
* @param string statut
* @param string recherche
* @param string nom_position
* @return string la liste des lettres pour le statut demandé @author BoOz / Pierre Basson
**/
function spiplistes_afficher_en_liste($titre, $image, $element='listes', $statut, $recherche='', $nom_position='position') {
global $pas, $id_auteur;
$position = intval($_GET[$nom_position]);
$clause_where = '';
if (!empty($recherche)) {
$clause_where.= ' AND ( titre LIKE '._q("%$recherche%").' OR descriptif LIKE '._q("%$recherche%").' OR texte LIKE '._q("%$recherche%").' )';
}
$lettres = '';
if(!$pas) $pas=10 ;
if(!$position) $position=0 ;
if($element == 'listes'){
$requete_listes = 'SELECT id_liste,
titre,
date
FROM spip_listes
WHERE statut='._q($statut).' '.$clause_where.'
ORDER BY date DESC
LIMIT '.intval($position).','.intval($pas).'';
}
if($element == 'messages'){
$type='nl' ;
$type2="";
$statut2="";
if($statut=='redac')
$statut2=" OR statut='ready'";
if($statut=='auto'){
$type='auto';
$statut='publie';
}
if($statut=='encour')
$type2=" OR type='auto'";
$requete_listes = 'SELECT id_courrier,
titre,
date, nb_emails_envoyes
FROM spip_courriers
WHERE (type='._q($type).$type2.') AND (statut='._q($statut).$statut2.') '.$clause_where.'
ORDER BY date DESC
LIMIT '.intval($position).','.intval($pas).'';
}
if($element == 'abonnements'){
if($statut=='')
$requete_listes = 'SELECT listes.id_liste, listes.titre, listes.statut, listes.date,lien.id_auteur,lien.id_liste
FROM spip_auteurs_listes AS lien
LEFT JOIN spip_listes AS listes ON lien.id_liste=listes.id_liste
WHERE lien.id_auteur='._q($id_auteur).' AND (listes.statut="liste" OR listes.statut="inact")
ORDER BY listes.date DESC LIMIT '.intval($position).','.intval($pas).'';
else{
$requete_listes = 'SELECT id_courrier,
titre,
date, nb_emails_envoyes
FROM spip_courriers
WHERE type='._q($type).' AND statut='._q($statut).' '.$clause_where.'
ORDER BY date DESC
LIMIT '.intval($position).','.intval($pas).'';
}
}
//echo "$requete_listes";
$resultat_aff = spip_query($requete_listes);
if (@spip_num_rows($resultat_aff) > 0) {
$en_liste.= "\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
$en_liste.= "\n";
$en_liste.= $titre;
$en_liste.= "\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
$en_liste.= "
\n";
while ($row = spip_fetch_array($resultat_aff)) {
$titre = $row['titre'];
$date = affdate($row['date']);
$retour = _DIR_RESTREINT_ABS.self();
switch ($element){
case "abonnements":
$id_row = $row['id_liste'];
$url_row = generer_url_ecrire('listes', 'id_liste='.$id_row);
$url_desabo = generer_action_auteur('spiplistes_changer_statut_abonne', $row['id_auteur']."-listedesabo-$id_row", $retour);
break;
case "listes":
$id_row = $row['id_liste'];
$url_row = generer_url_ecrire('listes', 'id_liste='.$id_row);
break;
default:
$id_row = $row['id_courrier'];
$nb_emails_envoyes = $row['nb_emails_envoyes'];
$url_row = generer_url_ecrire('gerer_courrier', 'id_message='.$id_row);
}
$en_liste.= "\n";
$en_liste.= "";
switch ($statut) {
case 'brouillon':
$en_liste.= "";
break;
case 'publie':
$en_liste.= "";
break;
case 'envoi_en_cours':
$en_liste.= "";
break;
}
$en_liste.= " | ";
$en_liste.= "\n";
$en_liste.= "\n";
$en_liste.= " | \n";
switch ($element){
case "abonnements":
$en_liste.= ""._T('spiplistes:desabonnement')." | \n";
break;
default:
$en_liste.= "".$date." | \n";
}
$en_liste.= ""._T('spiplistes:numero').$id_row." | \n";
$en_liste.= "
\n";
}
$en_liste.= "
\n";
switch ($element){
case "listes":
$requete_total = 'SELECT id_liste
FROM spip_listes
WHERE statut='._q($statut).' '.$clause_where.'
ORDER BY date DESC';
$retour = 'listes_toutes';
break;
case "messages":
$requete_total = 'SELECT id_courrier
FROM spip_courriers
WHERE type='._q($type).' AND statut='._q($statut);
$retour = 'spip_listes';
break;
case "abonnements":
$requete_total = 'SELECT listes.id_liste, listes.titre, listes.statut, listes.date, lien.id_auteur,lien.id_liste
FROM spip_auteurs_listes AS lien
LEFT JOIN spip_listes AS listes
ON lien.id_liste=listes.id_liste
WHERE lien.id_auteur='._q($id_auteur).' AND (listes.statut ="liste" OR listes.statut ="inact")
ORDER BY listes.date DESC';
$retour = 'abonne_edit';
$param = '&id_auteur='.$id_auteur;
break;
}
$resultat_total = spip_query($requete_total);
$total = spip_num_rows($resultat_total);
$en_liste.= spiplistes_afficher_pagination($retour, $param, $total, $position, $nom_position);
$en_liste.= "
\n";
$en_liste.= "
\n";
}
return $en_liste;
}
/**
* adapte de lettres_afficher_pagination
*
* @param string fond
* @param string arguments
* @param int total
* @param int position
* @author Pierre Basson
**/
function spiplistes_afficher_pagination($fond, $arguments, $total, $position, $nom) {
global $pas;
$pagination = '';
$i = 0;
$nombre_pages = floor(($total-1)/$pas)+1;
if($nombre_pages>1) {
$pagination.= "\n";
while($i<$nombre_pages) {
$url = generer_url_ecrire($fond, $nom.'='.strval($i*$pas).$arguments, '&');
$item = strval($i+1);
if(($i*$pas) != $position) {
$pagination.= '
'.$item.''."\n";
} else {
$pagination.= '
'.$item.''."\n";
}
$i++;
}
$pagination.= "\n";
$pagination.= "
\n";
}
return $pagination;
}
function spiplistes_cherche_auteur(){
if (!$cherche_auteur = _request('cherche_auteur')) return;
echo "";
$col = strpos($cherche_auteur, '@') !== false ? 'email' : 'nom';
$like = '';
if (strpos($cherche_auteur, '%') !== false) {
$like = " WHERE $col LIKE '" . $cherche_auteur . "'";
$cherche_auteur = str_replace('%', ' ', $cherche_auteur);
}
$result = spip_query("SELECT id_auteur, $col FROM spip_auteurs$like");
while ($row = spip_fetch_array($result, SPIP_NUM)) {
$table_auteurs[] = $row[1];
$table_ids[] = $row[0];
}
$resultat = mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
echo debut_boite_info();
if (!$resultat)
echo ""._T('texte_aucun_resultat_auteur', array('cherche_auteur' => $cherche_auteur)).".
";
elseif (count($resultat) == 1) {
list(, $nouv_auteur) = each($resultat);
echo ""._T('spiplistes:une_inscription')."
";
$result = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur="._q($nouv_auteur));
echo "
";
while ($row = spip_fetch_array($result)) {
$id_auteur = $row['id_auteur'];
$nom_auteur = $row['nom'];
$email_auteur = $row['email'];
$bio_auteur = $row['bio'];
echo "- ".typo($nom_auteur)."";
echo " | $email_auteur";
echo "\n";
}
echo "
";
}
elseif (count($resultat) < 16) {
reset($resultat);
unset($les_auteurs);
while (list(, $id_auteur) = each($resultat))
$les_auteurs[] = $id_auteur;
if ($les_auteurs) {
$les_auteurs = join(',', $les_auteurs);
echo ""._T('texte_plusieurs_articles', array('cherche_auteur' => $cherche_auteur))."
";
$result = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur IN ($les_auteurs) ORDER BY nom");
echo "";
while ($row = spip_fetch_array($result)) {
$id_auteur = $row['id_auteur'];
$nom_auteur = $row['nom'];
$email_auteur = $row['email'];
$bio_auteur = $row['bio'];
echo "- ".typo($nom_auteur)."";
if ($email_auteur)
echo " ($email_auteur)";
echo " | "._T('spiplistes:choisir')."";
if (trim($bio_auteur))
echo "
".couper(propre($bio_auteur), 100)."\n";
echo "\n";
}
echo "
";
}
}
else
echo ""._T('texte_trop_resultats_auteurs', array('cherche_auteur' => $cherche_auteur))."
";
echo fin_boite_info();
echo "";
}
function spiplistes_afficher_auteurs($query, $url){
$tri = _request('tri') ? _request('tri') : 'nom';
$t = spip_query('SELECT COUNT(*) FROM spip_auteurs');
$nombre_auteurs = spip_fetch_array($t, SPIP_NUM);
$nombre_auteurs = intval($nombre_auteurs[0]);
// reglage du debut
$max_par_page = 30;
$debut = intval(_request('debut'));
if ($debut > $nombre_auteurs - $max_par_page) {
$debut = max(0,$nombre_auteurs - $max_par_page);
}
$t = spip_query($query . ' LIMIT ' . $debut . ',' . $max_par_page);
$auteurs=array();
$les_auteurs = array();
while ($auteur = spip_fetch_array($t)) {
if ($auteur['statut'] == '0minirezo') {
$auteur['restreint'] = spip_num_rows(spip_query(
"SELECT * FROM spip_auteurs_rubriques WHERE id_auteur="._q($auteur['id_auteur'])));
}
$auteurs[] = $auteur;
$les_auteurs[] = $auteur['id_auteur'];
}
$lettre = array();
if (($tri == 'nom') AND $GLOBALS['options'] == 'avancees') {
$qlettre = spip_query(
'select distinct upper(left(nom,1)) l, count(*) from spip_auteurs group by l order by l');
$count = 0;
while ($rlettre = spip_fetch_array($qlettre, SPIP_NUM)) {
$lettre[$rlettre[0]] = $count;
$count += intval($rlettre[1]);
}
}
//
// Affichage
//
// ici commence la vraie boucle
echo debut_cadre_relief('redacteurs-24.gif');
echo "
\n";
if ($nombre_auteurs > $max_par_page) {
echo "";
echo "";
for ($j=0; $j < $nombre_auteurs; $j+=$max_par_page) {
if ($j > 0) echo " | ";
if ($j == $debut)
echo "$j";
elseif ($j > 0)
echo "$j";
else
echo " 0";
if ($debut > $j AND $debut < $j+$max_par_page)
echo " | $debut";
}
echo "";
echo " |
\n";
if (($tri == 'nom') AND $GLOBALS['options'] == 'avancees') {
// affichage des lettres
echo "";
echo "";
foreach ($lettre as $key => $val) {
if ($val == $debut)
echo "$key ";
else
echo "$key ";
}
echo "";
echo " |
\n";
}
echo "
";
}
echo "";
echo "";
$img = "";
if ($tri=='statut')
echo $img;
else
echo "$img";
echo " | ";
if ($tri == '' OR $tri=='nom')
echo ''._T('info_nom').'';
else
echo ""._T('info_nom')."";
echo " | "._T('info_site')."";
echo " | ";
if ($visiteurs != 'oui') {
if ($tri=='nombre')
echo ""._T('spiplistes:format')."";
else
echo ""._T('spiplistes:format')."";
}
echo " | ";
echo ""._T('spiplistes:modifier')."";
echo " |
\n";
//translate extra field data
list(,,,$trad,$val) = explode("|",_T("spiplistes:options"));
$trad = explode(",",$trad);
$val = explode(",",$val);
$trad_map = Array();
for($index_map=0;$index_map";
// statut auteur
echo "";
echo bonhomme_statut($row);
// nom
echo ' | ';
echo "".typo($row['nom']).'';
if ($connect_statut == '0minirezo' AND $row['restreint'])
echo " "._T('statut_admin_restreint')."";
// contact
if ($GLOBALS['options'] == 'avancees') {
echo ' | ';
if ($row['messagerie'] == 'oui' AND $row['login']
AND $activer_messagerie != "non" AND $connect_activer_messagerie != "non" AND $messagerie != "non")
echo _T('spiplistes:erreur'); // bouton_imessage($row['id_auteur'],"force")." ";
if ($connect_statut=="0minirezo"){
if (strlen($row['email'])>3)
echo ""._T('lien_email')."";
else
echo " ";
}
if (strlen($row['url_site'])>3)
echo " | "._T('lien_site')."";
else
echo " | ";
}
// Abonne ou pas ?
echo ' | ';
$id_auteur=$row['id_auteur'] ;
$abo = spip_fetch_array(spip_query("SELECT `spip_listes_format` FROM `spip_auteurs_elargis` WHERE `id_auteur`=$id_auteur")) ;
//var_dump($abo);die("coucou");
$abo = $abo["spip_listes_format"];
//var_dump($abo);
if($abo == "non")
echo "-";
else
echo " ".$trad_map[$abo];
// Modifier l'abonnement
echo ' | ';
echo "";
$retour = parametre_url($url,'debut',$debut);
$u = generer_action_auteur('spiplistes_changer_statut_abonne', $row['id_auteur']."-format", $retour);
if($abo == 'html'){
$option_abo = ""._T('spiplistes:desabo')
. " | "._T('spiplistes:texte')."";
}
elseif ($abo == 'texte')
$option_abo = ""._T('spiplistes:desabo')
. " | "._T('spiplistes:html')."";
elseif(($abo == 'non')OR (!$abo))
$option_abo = ""._T('spiplistes:texte')
. " | "._T('spiplistes:html')."";
echo " ".$option_abo;
echo " | \n";
}
echo "
\n";
echo "";
echo "";
$debut_suivant = $debut + $max_par_page;
if ($debut_suivant < $nombre_auteurs OR $debut > 0) {
echo "
";
echo "";
if ($debut > 0) {
$debut_prec = strval(max($debut - $max_par_page, 0));
echo '";
}
echo " | ";
if ($debut_suivant < $nombre_auteurs) {
echo '";
}
echo " |
\n";
}
echo "
\n";
echo fin_cadre_relief();
return join(',', $les_auteurs);
}
/******************************************************************************************/
/* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information */
/* par email pour SPIP. http://bloog.net/spip-listes */
/* Copyright (C) 2004 Vincent CARON v.caronlaposte.net */
/* */
/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
/* de la Licence Publique Generale GNU publiee par la Free Software Foundation */
/* (version 2). */
/* */
/* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE, */
/* ni explicite ni implicite, y compris les garanties de commercialisation ou */
/* d'adaptation dans un but specifique. Reportez-vous à la Licence Publique Generale GNU */
/* pour plus de détails. */
/* */
/* Vous devez avoir reçu une copie de la Licence Publique Generale GNU */
/* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la */
/* Free Software Foundation, */
/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis. */
/******************************************************************************************/
?>