Example #1
0
function exec_spiplistes_abonnes_tous () {

	include_spip('inc/presentation');
	include_spip('inc/mots');
	include_spip('inc/spiplistes_api');
	include_spip('inc/spiplistes_api_presentation');

	global $connect_statut
		, $connect_toutes_rubriques
		, $connect_id_auteur
		;

	$flag_autorise = ($connect_statut == '0minirezo');
	
	if($flag_autorise) {
	
		$total_auteurs_elligibles = spiplistes_auteurs_elligibles_compter();
		
		//Total des auteurs qui ne sont pas abonnes a une liste
		$nb_abonnes_a_rien = spiplistes_auteurs_non_abonnes_compter();

		//evaluer les formats de tous les auteurs + compter tous les auteurs
		$sql_result = sql_select(
			"`spip_listes_format` AS format, COUNT(`spip_listes_format`) AS nb"
			, 'spip_auteurs_elargis', '', "`spip_listes_format`"
		);
		//repartition des formats
		$total_abonnes_format = 0;
		$nb_abonnes_par_format = array(
			'texte' => 0	// abonnés au format texte
			, 'html' => 0	// au format html
			, 'non' => 0	// qui a été désabonné
			);
		while($row = sql_fetch($sql_result)) {
			$nb_abonnes_par_format[$row['format']] = $row['nb'];
			$total_abonnes_format += $row['nb'];
		}
	
		//Compter tous les abonnes a des listes 
		$sql_result = sql_select(
			"listes.statut AS statut, COUNT(abonnements.id_auteur) AS nb"
			, "spip_listes AS listes LEFT JOIN spip_auteurs_listes AS abonnements USING (id_liste)"
			, "", "listes.statut"
		);
		// etablit l'inventaire des listes
		// tries pas statut de la liste
		$nb_abonnes_listes = array();
		while ($row = sql_fetch($sql_result)) {
			$nb_abonnes_listes[$row['statut']] = intval($row['nb']);
		}
	}
	
////////////////////////////////////
// PAGE CONTENU
////////////////////////////////////

	$titre_page = _T('spiplistes:suivi');
	// Permet entre autres d'ajouter les classes a' la page : <body class='$rubrique $sous_rubrique'>
	$rubrique = _SPIPLISTES_PREFIX;
	$sous_rubrique = 'abonnes_tous';

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo($commencer_page( _T('spiplistes:spiplistes') . " - " . $titre_page, $rubrique, $sous_rubrique));
	
	// la gestion des abonnés est réservée aux admins 
	if(!$flag_autorise) {
		die (spiplistes_terminer_page_non_autorisee() . fin_page());
	}
	
	$page_result = ''
		. '<br /><br /><br />' . PHP_EOL
		. spiplistes_gros_titre($titre_page, '', true)
		. barre_onglets($rubrique, $sous_rubrique)
		. debut_gauche($rubrique, true)
		;

	// formulaire de recherche 
	if ($total_auteurs_elligibles > 1) {
		$page_result .= ""
			. debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."contact_loupe-24.png", true, "", _T('spiplistes:chercher_un_auteur'))
			. "<form action='".generer_url_ecrire(_SPIPLISTES_EXEC_ABONNES_LISTE)."' method='post' class='verdana2'>"
			. "<div style='text-align:center'>\n"
			. "<input type='text' name='cherche_auteur' class='fondl' value='' size='20' />"
			. "<div style='text-align:right;margin-top:0.5em;'><input type='submit' name='Chercher' value='"._T('bouton_chercher')."' class='fondo' /></div>"
			. "</div></form>"
			. fin_cadre_relief(true)
			;
	}

	$page_result .= ""
		. pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		//. creer_colonne_droite($rubrique, true)  // spiplistes_boite_raccourcis() s'en occupe
		. spiplistes_boite_raccourcis(true)
		. spiplistes_boite_autocron()
		. spiplistes_boite_info_spiplistes(true)
		. pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		. debut_droite($rubrique, true)
		// boite résultat Recherche d'auteur
		. spiplistes_cherche_auteur()
		;
	
	// première boite des stats
	$page_result .= ''
		. debut_cadre_trait_couleur('forum-interne-24.gif', true)
		. spiplistes_titre_boite_info(_T('spiplistes:abonnes_titre'))
		. '<div class="verdana2" style="position:relative;margin:1ex;height:14em">'
		// bloc de gauche. Répartition des abonnés.
		. '<div style="position:absolute;top:0;left:0;width:250px" id="info_abo">'
		. PHP_EOL
		. '<p style="margin:0;">'._T('spiplistes:repartition_abonnes').' : </p>'
		. PHP_EOL
		. '<ul style="margin:0;padding:0 1ex;list-style:none">' . PHP_EOL

		// Total des abonnés listes privées (internes)
		. '<li>- '._T('spiplistes:Listes_diffusion_prive') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PRIVATE])
			. '</li>' . PHP_EOL
		// Total des abonnés listes périodiques (hebdomadaires)
	 	. '<li>- '. _T('spiplistes:Listes_diffusion_hebdo') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_HEBDO] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_WEEKLY])
			. '</li>' . PHP_EOL
		// privees hebdo
	 	. '<li>- '. _T('spiplistes:listes_privees_hebdo') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_HEBDO] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_WEEKLY])
			. '</li>' . PHP_EOL
		// Total des abonnés listes périodiques (mensuels)
	 	. '<li>- '. _T('spiplistes:Listes_diffusion_mensuelle') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_MENSUEL] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_MONTHLY])
			. '</li>' . PHP_EOL
		// privees mensuelles
	 	. '<li>- '. _T('spiplistes:listes_privees_mensuelle') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_MENSUEL] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_MONTHLY])
			. '</li>' . PHP_EOL
		// Total des abonnés listes périodiques (annuelles)
	 	. '<li>- '. _T('spiplistes:Listes_diffusion_annuelle') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_YEARLY])
			. '</li>' . PHP_EOL
		// privees annuelles
	 	. '<li>- '. _T('spiplistes:listes_privees_annuelle') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_YEARLY])
			. '</li>' . PHP_EOL
		// Total des abonnés listes périodiques (periode ou envoi manuel)
	 	. '<li>- '. _T('spiplistes:Listes_autre_periode') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PUBLIC] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PUB_DAILY])
			. '</li>' . PHP_EOL
		// privees quotidiennes
	 	. '<li>- '. _T('spiplistes:listes_privees_autre_periode') . ': '
			. (0 + $nb_abonnes_listes[_SPIPLISTES_LIST_PRIVATE] 
				+ $nb_abonnes_listes[_SPIPLISTES_LIST_PRIV_DAILY])
			. '</li>' . PHP_EOL
		// Total des non abonnés
	 	. '<li>- '. _T('spiplistes:abonne_aucune_liste') . ': '.$nb_abonnes_a_rien
			. '</li>' . PHP_EOL
		. '</ul>' . PHP_EOL
		. '</div>' . PHP_EOL

		// bloc de droite. Répartition des formats.
		. "<div style='position:absolute;top:0;right:0;width:180px;' id='info_fmt'>\n"
		. "<p style='margin:0;'>"._T('spiplistes:repartition_formats')." : </p>\n"
		. "<ul style='margin:0;padding:0 1ex;list-style: none;'>"
		. "<li>- "._T('spiplistes:html')." : {$nb_abonnes_par_format['html']}</li>"
		. "<li>- "._T('spiplistes:texte')." : {$nb_abonnes_par_format['texte']}</li>"
		. "<li>- "._T('spiplistes:format_aucun')." : {$nb_abonnes_par_format['non']}</li>"
		. "</ul>"
		. "</div>\n"
		// fin des infos
		. "</div>\n"
		;


	$page_result .= ""
		. fin_cadre_trait_couleur(true)
		;
		
	////////////////////////////
	// Liste des auteurs
	
	$tri = _request('tri') ? _request('tri') : 'nom';

	$id_boite_dest_ajax = 'auteurs';
	
	$page_result .= 
		debut_cadre_relief('redacteurs-24.gif', true)
		. "<div id='$id_boite_dest_ajax'>\n"
		//. spiplistes_listes_boite_abonnes(0, $tri, $debut, _SPIPLISTES_EXEC_ABONNES_LISTE, $id_boite_dest_ajax)
		. spiplistes_listes_boite_abonnements(
			0, false, $tri, $debut, _SPIPLISTES_EXEC_ABONNES_LISTE
			)
		. "</div>\n"
		. fin_cadre_relief(true)
		;
	echo($page_result);

	echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		, spiplistes_html_signature(_SPIPLISTES_PREFIX)
		, fin_gauche(), fin_page();
}
function exec_spiplistes_import_export(){

	include_spip('inc/presentation');
	include_spip('inc/acces');
	include_spip('inc/spiplistes_api');
	include_spip('inc/spiplistes_api_presentation');

	global $connect_statut
		, $connect_toutes_rubriques
		, $connect_id_auteur
		;
	static $eol = PHP_EOL;
	
	// initialise les variables postées par le formulaire
	foreach(array(
		'btn_valider_import', 'abos_liste', 'format_abo', 'forcer_abo'	// retour import
		, 'btn_valider_export', 'export_id' // retour export
		, 'separateur', 'exporter_statut_auteur'
		) as $key) {
		$$key = _request($key);
	}

	$separateur = (($separateur == 'tab') ? "\t" : ';');
	
	$flag_admin = ($connect_statut == "0minirezo") && $connect_toutes_rubriques;
	$flag_moderateur = false;
	
	$flag_autorise = 
		$flag_admin
		|| (
				$flag_moderateur = ($listes_moderees = spiplistes_mod_listes_id_auteur($connect_id_auteur))
			)
		;

	// exportation de liste. Retour formulaire local.
	// les admins tt rubriques peuvent tt exporter
	// le moderateur ne peut exporter que sa liste
	if(
		$flag_autorise
		&& 
			(	$flag_admin
				|| in_array($export_id, $listes_moderees)
			)
	) {
	
		// generation du fichier export ?
		if($btn_valider_export && $export_id) {
		
			$sql_select = array('a.email', 'a.nom', 'a.login', 'a.statut');
			$sql_from = array('spip_auteurs AS a');
			$sql_where = array("a.statut!=".sql_quote('5poubelle'));
			if(($id_liste = intval($export_id)) > 0) {
			// exportation d'une liste ID ? 
				$sql_from[] = "spip_auteurs_listes AS l";
				$sql_where[] = "l.id_liste=".sql_quote($id_liste);
				$sql_where[] = "a.id_auteur=l.id_auteur";
			}
			else {
			// autre type de liste
				if($export_id == "sans_abonnement") {
					if(spiplistes_spip_est_inferieur_193()) {
						$sql_where[] = "a.id_auteur NOT IN (SELECT id_auteur FROM spip_auteurs_listes GROUP BY id_auteur)";
					} else {
						$selection = sql_select("id_auteur", "spip_auteurs_listes", '','id_auteur','','','','',false);
						$sql_where[] = "a.id_auteur NOT IN ($selection)";
					}
				} 
				else if($export_id == "desabo") {
					$sql_from[] = "spip_auteurs_elargis AS f";
					$sql_where[] = "a.id_auteur=f.id_auteur";
					$sql_where[] = "f.`spip_listes_format`=".sql_quote('non');
				}
			}

			$sql_result = sql_select(
				$sql_select
				, $sql_from
				, $sql_where
				);

			$nb_inscrits = sql_count($sql_result);
			$exporter_statut_auteur = ($exporter_statut_auteur == 'oui');
			
			$str_export = ''
				. '# ' . spiplistes_html_signature(_SPIPLISTES_PREFIX, false).$eol
				. '# '._T('spiplistes:membres_liste').$eol
				. '# liste id: $export_id\n'
				. '# '.spiplistes_nom_site_texte().$eol
				. '# '.$GLOBALS['meta']['adresse_site'].$eol
				. '# date: '.date('Y-m-d').$eol
				. '# nb abos: '.$nb_inscrits.$eol.$eol
				. '#'.$eol
				. '# \'email\''.$separateur.'\'login\''.$separateur.'\'nom\''
				. ($exporter_statut_auteur ? $separateur.'\'statut\'' : '')
				. $eol.$eol
				;
			
			while($row = sql_fetch($sql_result)) {
				$str_export .= $row['email'].$separateur.$row['login'].$separateur.$row['nom']
					. ($exporter_statut_auteur ? $separateur.$row['statut'] : '')
					. "\n"
					;
			}
			// envoie le fichier
			header('Content-type: text/plain');
			header('Content-Disposition: attachment; filename="export_liste_$export_id-'.date("Y-m-d").'.txt"');
			echo ($str_export);
			exit;
		}
		// fin de generation du fichier export
	}

////////////////////////////////////
// PAGE CONTENU
////////////////////////////////////

	$titre_page = _T('spiplistes:listes_de_diffusion_');
	// Permet entre autres d'ajouter les classes a' la page : <body class='$rubrique $sous_rubrique'>
	$rubrique = _SPIPLISTES_PREFIX;
	$sous_rubrique = "import_export";

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo($commencer_page(_T('spiplistes:spiplistes') . " - " . _T('spiplistes:import_export'), $rubrique, $sous_rubrique));

	// la gestion du courrier est réservée aux admins 
	if (!$flag_autorise) {
		die (spiplistes_terminer_page_non_autorisee() . fin_page());
	}       

	$page_result = ""
		. "<br /><br /><br />\n"
		. spiplistes_gros_titre($titre_page, '', true)
		. barre_onglets($rubrique, $sous_rubrique)
		. debut_gauche($rubrique, true)
		. pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		//. creer_colonne_droite($rubrique, true)  // spiplistes_boite_raccourcis() s'en occupe
		. spiplistes_boite_raccourcis(true)
		. spiplistes_boite_autocron()
		. pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		. debut_droite($rubrique, true)
		;
	
	// importation
	$flag_import_fichier_ok = 
		(count($_FILES) && is_array($fichier_import = $_FILES['fichier_import']) 
		&& !$fichier_import['error']);

	if($btn_valider_import && $flag_import_fichier_ok) {
		if(!($abos_liste && is_array($abos_liste) && count($abos_liste))) {
		// A oublie' de selectionner une liste de destination
			$page_result .= spiplistes_boite_alerte(_T('spiplistes:Selectionnez_une_liste_pour_import'), true);
		}
	}
		
	// import form
	$page_result .= ""
		. debut_cadre_trait_couleur(_DIR_PLUGIN_SPIPLISTES_IMG_PACK.'listes_in-24.png', true
									, '', _T('spiplistes:Importer'))
		. "<p class='verdana2'>"._T('spiplistes:_aide_import')."</p>\n"
		;
	
	if($flag_import_fichier_ok)
	{
		//syslog(LOG_NOTICE, 'memory_limit: ' . get_cfg_var('memory_limit'));
		//syslog(LOG_NOTICE, 'memory_get_usage[1]: ' . memory_get_usage());
		//syslog(LOG_NOTICE, 'memory_get_peak_usage[1]: ' . memory_get_peak_usage());
		//syslog(LOG_NOTICE, 'filesize: ' . filesize($fichier_import['tmp_name']));
		   
		if($abos_liste && is_array($abos_liste) && count($abos_liste))
		{
			include_spip('inc/spiplistes_import');
			$page_result .= ''
				. debut_boite_info(true)
				. spiplistes_titre_boite_info(_T('spiplistes:Resultat_import'))
				. spiplistes_import(
					$fichier_import['tmp_name']
					, $fichier_import['name']
					, $abos_liste
					, $format_abo
					, $separateur
					, $flag_admin
					, $listes_moderees
					, $forcer_abo
					)
				. fin_boite_info(true)
				. '<br />'
				;
		}
	}

	$list = sql_select(
		array('id_liste','titre','texte')
		, 'spip_listes'
		, spiplistes_listes_sql_where_or(_SPIPLISTES_LISTES_STATUTS_OK));

	$nb_listes = sql_count($list);
	
	if($nb_listes) {
		$listes_array = array();
		while($row = sql_fetch($list)) {
			$listes_array[] = $row;
		}
	}
	
	if(!$nb_listes) {
		$page_result .= spiplistes_boite_alerte(_T('spiplistes:Pas_de_liste_pour_import'), true);
	} 
	else {
		$page_result .= ""
			. "<form action='" . generer_url_ecrire(_SPIPLISTES_EXEC_IMPORT_EXPORT) . "' method='post' enctype='multipart/form-data'name='importform'>\n"
			. debut_cadre_relief("", true, "", _T('spiplistes:Liste_de_destination'))
			. "<p class='verdana2'>"._T('spiplistes:Selectionnez_une_liste_de_destination')."</p>\n"
			. "<ul class='liste-listes verdana2'>\n"
			;

		$listes_sans_patron = array();

		if(count($listes_array) > 0) {
			// une liste sans patron ne peut pas contenir d'abonnés.
			// récupère la liste des listes qui n'ont pas de patron.
			$sql_result = sql_select('id_liste', 'spip_listes'
				, array("patron=''"
					, "(statut=".implode(" OR statut=", array_map("sql_quote", explode(";", _SPIPLISTES_LISTES_STATUTS_OK))).")"
				)
			);
			while($row = sql_fetch($sql_result)) {
				$listes_sans_patron[] = $row['id_liste'];
			}
		}
		
		// liste des listes (destination)
		$couleur_ligne = 0;
		foreach($listes_array as $row) {
			$id_liste = $row['id_liste'] ;
			if(
				!in_array($id_liste, $listes_sans_patron)
				&&
				($flag_admin || in_array($id_liste, $listes_moderees))
			) {
				$titre = couper($row['titre'], 30, '...');
				$texte = couper($row['texte'], 30, '...');
				$label = _T('spiplistes:Liste_de_destination').": $titre";
				$checked = ($nb_listes == 1) ? "checked='checked'" : "";
				$class = ($couleur_ligne++ % 2) ? "class='row-even'" : "";
				$page_result .= ""
					. "<li style='padding:4px' $class >"
					. "<input name='abos_liste[]' type='checkbox' id='abos_$id_liste' value='$id_liste' title=\"$label\" $checked />\n"
					. "<label for='abos_$id_liste'><strong>".$titre."</strong> <em>".$texte."</em></label>\n"
					. "</li>\n"
					;
			}
		}
		$page_result .= ""
			. "</ul>"
			. fin_cadre_relief(true)
			//
			// Sélection du format de réception
			. debut_cadre_relief("", true, "", _T('spiplistes:format_de_reception_'))
			. "<ul class='liste-listes verdana2'>\n"
			. "<li>"
				. spiplistes_form_input_radio('format_abo', 'html', _T('spiplistes:html'), true, true, false)
				. "</li>\n"
			. "<li>"
				. spiplistes_form_input_radio('format_abo', 'texte', _T('spiplistes:texte'), false, true, false)
				. "</li>\n"
			. "<li>"
				. spiplistes_form_input_radio('format_abo', 'non', _T('spiplistes:desabonnement'), false, true, false)
				. "</li>\n"
			. "</ul>"
			. fin_cadre_relief(true)
			//
			// cadre insertion nom de fichier
			. debut_cadre_relief("", true, "", _T('spiplistes:importer_fichier'))
			. "<input type='file' size='40' name='fichier_import' />"
			//
			. spiplistes_fieldset_separateur($separateur)
			//
			// forcer les abonnements
			. spiplistes_fieldset_option(
				_T('spiplistes:option_import_')
				, 'forcer_abo'
				, 'oui'
				, _T('spiplistes:forcer_abos_'), ($forcer_abo == 'oui')
				
				)
			//
			. fin_cadre_relief(true)
			. spiplistes_form_bouton_valider('btn_valider_import')
			. spiplistes_form_fin(true)
			;
	} // end else
	$page_result .= fin_cadre_trait_couleur(true);
	// fin formulaire import

	// export //(original from erational.org)
	// formulaire d'export

	if ($nb_listes > 0) {
		$page_result .= ""
			. debut_cadre_trait_couleur(_DIR_PLUGIN_SPIPLISTES_IMG_PACK.'listes_out-24.png', true, "", _T('spiplistes:Exporter'))
			// exportation par listes
			. spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_IMPORT_EXPORT), true)
			. debut_cadre_relief("", true, "", _T('spiplistes:Exporter_une_liste_d_abonnes'))
			. "<ul class='liste-listes verdana2'>\n"
			;
		$couleur_ligne = 0;
		foreach($listes_array as $row) {
			$id_liste = intval($row['id_liste']);
			if($flag_admin || in_array($id_liste, $listes_moderees)) {
				$titre = couper($row['titre'], 30, '...');
				$class = ($couleur_ligne++ % 2) ? "class='row-even'" : "";
				list($nb_abos, $html, $texte) = spiplistes_listes_nb_abonnes_compter($id_liste, true);
				if($nb_abos > 0) {
					$page_result .= ""
						. "<li style='padding:4px'  $class >"
						. spiplistes_form_input_radio('export_id', $id_liste
							, "<strong>".$titre."</strong> <em>"
								. spiplistes_nb_abonnes_liste_str_get($id_liste, $nb_abos, $html, $texte)
								. "</em>"
							, ($nb_listes==1), true, false)
						. "</li>\n"
						;
				}
			}
		}
		$page_result .= ""
			. "</ul>"
			. fin_cadre_relief(true)
			. "<!-- fin de liste export -->\n"
			//
			// exportation autres
			. debut_cadre_relief("", true, "", _T('spiplistes:Exporter_une_liste_de_non_abonnes'))
			. "<div class='verdana2'>\n"
			. spiplistes_form_input_radio('export_id', 'sans_abonnement', _T('spiplistes:abonne_aucune_liste'), false, true, false)
			. spiplistes_form_input_radio('export_id', 'desabo', _T('spiplistes:desabonnes'), false, true, false)
			. "</div>"
			. fin_cadre_relief(true)
			. "<fieldset class='verdana2'><legend>"._T('spiplistes:export_etendu_').":</legend>"
			. spiplistes_form_input_checkbox('exporter_statut_auteur', 'oui'
				, _T('spiplistes:exporter_statut'), false, true, false)
			. "</fieldset>\n"
			//
			. spiplistes_fieldset_separateur($separateur)
			//
			. spiplistes_form_bouton_valider('btn_valider_export')
			. spiplistes_form_fin(true)
			. fin_cadre_trait_couleur(true)
			;
	}

	echo($page_result);
	
	echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		, spiplistes_html_signature(_SPIPLISTES_PREFIX)
		, fin_gauche(), fin_page();
}