Example #1
0
/**
 * Utiliser le bon encodage de caractères selon le charset
 *
 * Caractères pris en compte : apostrophe, double guillemet,
 * le tiret cadratin, le tiret demi-cadratin
 *
 * @uses filtrer_entites()
 *
 * @param string $t
 * @return string
 */
function nettoyer_caracteres_mail($t)
{
    $t = filtrer_entites($t);
    if ($GLOBALS['meta']['charset'] != 'utf-8') {
        $t = str_replace(array('’', '“', '”'), array("'", '"', '"'), $t);
    }
    $t = str_replace(array('—', '&endash;'), array('--', '-'), $t);
    return $t;
}
Example #2
0
function exec_mots_type_dist()
{
	$id_groupe= intval(_request('id_groupe'));

	if (!$id_groupe) {
	  $type = $titre = filtrer_entites(_T('titre_nouveau_groupe'));
	  $row = array();
	} else {
		$row = sql_fetsel("id_groupe,titre", "spip_groupes_mots", "id_groupe=$id_groupe");
		if ($row) {
			$id_groupe = $row['id_groupe'];
			$type = $row['titre'];
			$titre = typo($type);
		}
	}

	if (($id_groupe AND !$row) OR
	    !autoriser($id_groupe?'modifier' : 'creer', 'groupemots', $id_groupe)) {
		include_spip('inc/minipres');
		echo minipres();
	} else {

	pipeline('exec_init',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>''));
	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page("« $titre »", "naviguer", "mots");
	
	echo debut_gauche('', true);

	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>''));
	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'mots_type','id_groupe'=>$id_groupe),'data'=>''));
	echo debut_droite('', true);
	
	$contexte = array(
		'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("mots_tous") . "#mots_tous-$id_groupe", "groupe-mot-24.gif", "rien.gif",$GLOBALS['spip_lang_left']),
		'titre'=>$type,
		'redirect'=>generer_url_ecrire("mots_tous",""),
		'new'=>_request('new') == "oui"?"oui":$id_groupe,
		'config_fonc'=>'groupes_mots_edit_config',
	);

	echo recuperer_fond("prive/editer/groupe_mot", $contexte);

	echo pipeline('affiche_milieu',
		array('args' => array(
			'exec' => 'mots_type',
			'id_groupe' => $id_groupe
		),
		'data'=>'')
	),
	fin_gauche(),
	fin_page();
	}
}
Example #3
0
/**
 * Ajout d'un dépot et de son contenu (paquets, plugins) dans la base de données
 *
 * Si une erreur survient (syntaxe XML incorrecte, pas de plugin dans le dépot),
 * son texte est placé dans le paramètre $erreur
 * 
 * @param string $url
 *     URL du fichier XML de description du dépot
 * @param string $erreur
 *     Texte d'un éventuel message d'erreur
 * @return bool
 *     true si le dépot est ajouté correctement, false sinon
 */
function svp_ajouter_depot($url, &$erreur = '')
{
    include_spip('inc/distant');
    // On considere que l'url a deja ete validee (correcte et nouveau depot)
    $url = trim($url);
    // Ajout du depot dans la table spip_depots. Les compteurs de paquets et de plugins
    // sont mis a jour apres le traitement des paquets
    // on recupère le XML
    $fichier_xml = copie_locale($url, 'modif');
    if (!$fichier_xml) {
        $erreur = _T('svp:message_nok_xml_non_recupere', array('fichier' => $url));
        return false;
    }
    $fichier_xml = _DIR_RACINE . $fichier_xml;
    // Lire les donnees d'un depot de paquets
    $infos = svp_phraser_depot($fichier_xml);
    if (!$infos) {
        $erreur = _T('svp:message_nok_xml_non_conforme', array('fichier' => $url));
        return false;
    }
    $titre = filtrer_entites($infos['depot']['titre']);
    $champs = array('titre' => $titre, 'descriptif' => filtrer_entites($infos['depot']['descriptif']), 'type' => $infos['depot']['type'], 'url_serveur' => $infos['depot']['url_serveur'], 'url_brouteur' => $infos['depot']['url_brouteur'], 'url_archives' => $infos['depot']['url_archives'], 'url_commits' => $infos['depot']['url_commits'], 'xml_paquets' => $url, 'sha_paquets' => sha1_file($fichier_xml), 'nbr_paquets' => 0, 'nbr_plugins' => 0, 'nbr_autres' => 0);
    // verifier avant l'insertion que le depot n'existe pas deja
    // car la recuperation pouvant etre longue on risque le probleme en cas de concurrence
    if (sql_countsel('spip_depots', 'xml_paquets=' . sql_quote($url))) {
        $erreur = _T('svp:message_nok_depot_deja_ajoute', array('url' => $url));
        return false;
    } elseif (!($id_depot = sql_insertq('spip_depots', $champs))) {
        $erreur = _T('svp:message_nok_sql_insert_depot', array('objet' => "{$titre} ({$url})"));
        return false;
    }
    // Ajout des paquets dans spip_paquets et actualisation des plugins dans spip_plugins
    $ok = svp_actualiser_paquets($id_depot, $infos['paquets'], $nb_paquets, $nb_plugins, $nb_autres);
    if (!$ok or $nb_paquets == 0) {
        // Si une erreur s'est produite, on supprime le depot deja insere
        sql_delete('spip_depots', 'id_depot=' . sql_quote($id_depot));
        if (!$ok) {
            $erreur = _T('svp:message_nok_xml_non_conforme', array('fichier' => $url));
        } else {
            $erreur = _T('svp:message_nok_aucun_paquet_ajoute', array('url' => $url));
        }
        return false;
    }
    // On met à jour le nombre de paquets et de plugins du depot maintenant !
    sql_updateq('spip_depots', array('nbr_paquets' => $nb_paquets, 'nbr_plugins' => $nb_plugins, 'nbr_autres' => $nb_autres), 'id_depot=' . sql_quote($id_depot));
    // On vide les paquets locaux pour mettre a jour leurs donnees relatives au depot
    // comme les mises a jour disponibles
    include_spip('inc/svp_depoter_local');
    svp_actualiser_paquets_locaux(true);
    return true;
}
Example #4
0
function send_email($email, $subject, $texte, $from = "", $headers = "")
{
    global $hebergeur, $queue_mails, $flag_wordwrap, $os_serveur;
    include_lcm('inc_filters');
    if (!$from) {
        $email_envoi = read_meta("email_sender");
        $from = is_valid_email($email_envoi) ? $email_envoi : $email;
    }
    if (!is_valid_email($email)) {
        return false;
    }
    lcm_debug("mail ({$email}): {$subject}");
    $charset = read_meta('charset');
    $headers = "From: {$from}\n" . "MIME-Version: 1.0\n" . "Content-Type: text/plain; charset={$charset}\n" . "Content-Transfer-Encoding: 8bit\n{$headers}";
    $texte = filtrer_entites($texte);
    $subject = filtrer_entites($subject);
    // fignoler ce qui peut l'etre...
    if ($charset != 'utf-8') {
        $texte = str_replace("’", "'", $texte);
        $subject = str_replace("’", "'", $subject);
    }
    // encoder le sujet si possible selon la RFC
    if ($GLOBALS['flag_multibyte'] and @mb_internal_encoding($charset)) {
        $subject = mb_encode_mimeheader($subject, $charset, 'Q');
    }
    if ($flag_wordwrap) {
        $texte = wordwrap($texte);
    }
    if ($os_serveur == 'windows') {
        $texte = preg_replace("/\r*\n/", "\r\n", $texte);
        $headers = preg_replace("/\r*\n/", "\r\n", $headers);
    }
    switch ($hebergeur) {
        case 'lycos':
            $queue_mails[] = array('email' => $email, 'sujet' => $subject, 'texte' => $texte, 'headers' => $headers);
            return true;
        case 'free':
            return false;
        case 'online':
            if (!($ret = @email('webmaster', $email, $subject, $texte))) {
                lcm_log("ERROR mail: (online) returned false");
            }
            return $ret;
        default:
            if (!($ret = @mail($email, $subject, $texte, $headers))) {
                lcm_log("ERROR mail: (default) returned false");
            }
            return $ret;
    }
}
Example #5
0
function breves_edit_ok($row, $id_breve, $id_rubrique, $new)
{
	global  $connect_statut, $spip_lang_right;

	if ($new != 'oui') {
		$id_breve=$row['id_breve'];
		$titre=$row['titre'];
		$statut=$row['statut'];
		$id_rubrique=$row['id_rubrique'];
	} else {
		$titre = filtrer_entites(_T('titre_nouvelle_breve'));
		$statut = "prop";
	}

	$commencer_page = charger_fonction('commencer_page', 'inc');
	pipeline('exec_init',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));

	echo $commencer_page(_T('titre_page_breves_edit', array('titre' => $titre)), "naviguer", "breves", $id_rubrique);

	echo debut_grand_cadre(true);
	echo afficher_hierarchie($id_rubrique);

	echo fin_grand_cadre(true);
	echo debut_gauche('', true);
	if ($new != 'oui' AND ($connect_statut=="0minirezo" OR $statut=="prop")) {
	# affichage sur le cote des images, en reperant les inserees
	# note : traiter_modeles($texte, true) repere les doublons
	# aussi efficacement que propre(), mais beaucoup plus rapidement
		traiter_modeles("$titre$texte", true);
		echo afficher_documents_colonne($id_breve, "breve");
	}
	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));
	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));
	echo debut_droite('', true);

	$contexte = array(
	'icone_retour'=>$new=='oui'?'':icone_inline(_T('icone_retour'), generer_url_ecrire("breves_voir","id_breve=$id_breve"), "breve-24.gif", "rien.gif",$GLOBALS['spip_lang_left']),
	'redirect'=>generer_url_ecrire("breves_voir"),
	'titre'=>$titre,
	'new'=>$new == "oui"?$new:$id_breve,
	'id_rubrique'=>$id_rubrique,
	'config_fonc'=>'breves_edit_config'
	);

	echo recuperer_fond("prive/editer/breve", $contexte);

	echo fin_gauche(), fin_page();

}
function onelettrebis($chaine) {
    $chaine=sansle($chaine); 
    $chaine=filtrer_entites($chaine); // si il y a des fois des accents en dur qui trainent
    $chaine = unicode2charset(utf_8_to_unicode($chaine), 'iso-8859-1'); // on code en html ISO
    $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
    $b = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
    $chaine=strtr($chaine, $a, $b); // on retire les accents
    $chaine=strtoupper($chaine); // on passe en majuscules 
    /// si débute par le fameux Œ ou œ
    $pattern = "^(Œ|œ)";
    if (eregi($pattern,$chaine,$regs)) 
        $chaine='O';//$chaine= $regs[0]; //on va renvoyer la lettre O
    else 
        $chaine = $chaine{0}; 
    return $chaine ;
}
Example #7
0
function nettoyer_caracteres_mail($t) {

	$t = filtrer_entites($t);

	if ($GLOBALS['meta']['charset'] <> 'utf-8') {
		$t = str_replace(
			array("&#8217;","&#8220;","&#8221;"),
			array("'",      '"',      '"'),
		$t);
	}

	$t = str_replace(
		array("&mdash;", "&endash;"),
		array("--","-" ),
	$t);

	return $t;
}
Example #8
0
function spam_liste_mots($texte) {
	include_spip('inc/filtres');
	$texte = filtrer_entites(trim($texte));
	$split = explode('"', $texte);
	$c = count($split);
	$split2 = array();
	for($i=0; $i<$c; $i++) if (($s = trim($split[$i])) != ""){
		if (($i & 1) && ($i != $c-1)) {
			// on touche pas au texte entre deux ""
			$split2[] = $s;
		} else {
			// on rassemble tous les separateurs : \s\t\n
			$temp = preg_replace("/[\s\t\n\r]+/", "\t", $s);
			$temp = str_replace("+"," ", $temp);
			$split2 = array_merge($split2, explode("\t", $temp));
		}
	}
	return array_unique($split2);
}
Example #9
0
function exec_spiplistes_liste_gerer () {

	include_spip('inc/autoriser');
	include_spip('inc/mots');
	include_spip('inc/lang');
	include_spip('inc/editer_auteurs');
	include_spip('base/spiplistes_tables');
	include_spip('inc/spiplistes_api');
	include_spip('inc/spiplistes_api_presentation');
	include_spip('inc/spiplistes_dater_envoi');
	include_spip('inc/spiplistes_naviguer_paniers');
	include_spip('inc/spiplistes_listes_selectionner_auteur');
	
	global $meta
		, $connect_statut
		, $connect_toutes_rubriques
		, $connect_id_auteur
		, $spip_lang_left
		, $spip_lang_right
		, $couleur_claire
		;

	// initialise les variables postees par le formulaire
	foreach(array(
		'new'	// nouvelle liste si 'oui'
		, 'id_liste'// si modif dans l'editeur
		, 'btn_liste_edit', 'titre', 'texte', 'pied_page' // renvoyes par l'editeur
		, 'btn_modifier_diffusion', 'changer_lang', 'statut' // local
		, 'btn_modifier_replyto', 'email_envoi' // local
		, 'btn_modifier_courrier_auto', 'message_auto' // local
			, 'auto_chrono', 'auto_weekly', 'auto_mois'
			, 'titre_message', 'patron', 'periode', 'envoyer_maintenant'
			, 'jour', 'mois', 'annee', 'heure', 'minute'
		, 'btn_patron_pied', 'btn_grand_patron' // boites gauches
		, 'btn_valider_forcer_abos', 'forcer_abo', 'forcer_format_abo', 'forcer_format_reception'
		, 'btn_supprimer_liste' //local
		) as $key) {
		$$key = _request($key);
	}
	foreach(array('id_liste', 'periode') as $key) {
		$$key = intval($$key);
	}
	foreach(array('titre', 'texte', 'pied_page') as $key) {
		$$key = trim(corriger_caracteres($$key));
	}
	$lang = $changer_lang;

	$cherche_auteur = _request('cherche_auteur');
	$debut = _request('debut');

	$envoyer_maintenant = ($envoyer_maintenant == 'oui');
	
	$boite_pour_confirmer_envoi_maintenant = 
		$grosse_boite_moderateurs = 
		$message_erreur =
		$page_result = "";

	if(!$id_liste)
	{
	//////////////////////////////////////////////////////
	// Creer une liste
	////
		// admin lambda peut creer une liste
		$flag_editable = ($connect_statut == "0minirezo");
		
		if ($btn_liste_edit && ($new=='oui')) {
			
			if ($titre == '') {
				$titre = _T('spiplistes:liste_sans_titre');
			}
			
			$pied_page = _SPIPLISTES_PATRON_PIED_DEFAUT;
			
			if($id_liste = spiplistes_listes_liste_creer(_SPIPLISTES_LIST_PRIVATE, $GLOBALS['spip_lang']
				, $titre, $texte, $pied_page)) {
					spiplistes_log("id_liste #$id_liste added by id_auteur #$connect_id_auteur");
			}
		} 	
	}
	else if($id_liste > 0)
	{
	//////////////////////////////////////////////////////
	// Modifier une liste
	////
		// les admins toutes rubriques et le moderateur seuls peuvent modifier la liste
		$flag_editable = autoriser('moderer', 'liste', $id_liste);

		if($flag_editable)
		{
		
			// Recupere les donnees de la liste courante pour optimiser l'update
			$sql_select = "statut,titre,date,lang";
			$sql_result = sql_select($sql_select, "spip_listes", "id_liste=".sql_quote($id_liste), "", "", "1");
			if($row = sql_fetch($sql_result)) {
				foreach(explode(",", $sql_select) as $key) {
					$current_liste[$key] = $row[$key];
				}
			}
			
			///////////////////////////////////
			// Les modifications (sql_upadteq)
			// A noter, ne pas preparer les valeurs par sql_quote()
			//  sql_upadteq() s'en occupe
			
			$sql_champs = array();

			// Retour de l'editeur ?
			if($btn_liste_edit) {
				$titre = corriger_caracteres($titre);
				$texte = corriger_caracteres($texte);
				if(empty($titre)) {
					$titre = filtrer_entites(_T('spiplistes:Nouvelle_liste_de_diffusion'));
				}
				$sql_champs['titre'] = $titre;
				$sql_champs['texte'] = $texte;
			}
			
			// Modifier le grand patron ?
			// a partir de 2.0049, le patron de pied est construit par la meleuse
			// afin de permettre _texte et multilingue
			if($btn_grand_patron && $patron) {
				$sql_champs['patron'] = $patron;
			}
			
			// Modifier patron de pied ?
			if($btn_patron_pied && $patron) {
				$sql_champs['pied_page'] = $patron;
			}
			
			// Modifier diffusion ?
			if($btn_modifier_diffusion)
			{
				$current_statut = ($statut)
					? $statut
					: $current_liste['statut']
					;
					
				spiplistes_debug_log ('Modification diffusion statut: '.$current_statut);
				
				// Modifier le statut ?
				if(in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_TOUS)) 
					&& ($statut != $current_liste['statut'])
				) {
					spiplistes_debug_log ('Modification statut: '.$statut);
					$sql_champs['statut'] = $statut;
					// si la liste passe en privee, retire les invites
					if($statut == _SPIPLISTES_LIST_PRIVATE) {
						$auteur_statut = '6forum';
						spiplistes_abonnements_auteurs_supprimer($auteur_statut);
						spiplistes_log("AUTEURS ($auteur_statut) REMOVED FROM LISTE #$id_liste ($statut) BY ID_AUTEUR #$connect_id_auteur");
					}
				}
				// Modifier la langue ?
				if(!empty($lang) && ($lang!=$current_liste['lang'])) {
					$sql_champs['lang'] = $lang;
				}
			}
			
			// Modifier l'adresse email de reponse ?
			if($btn_modifier_replyto && email_valide($email_envoi) && ($email_envoi!=$current_liste['email_envoi'])) {
				$sql_champs['email_envoi'] = $email_envoi;
			}

			////////////////////////////////////
			// Modifier message_auto ?
			// bloc "courriers automatiques"
			if($btn_modifier_courrier_auto)
			{
				$current_statut = ($statut)
					? $statut
					: $current_liste['statut']
					;
					
				spiplistes_debug_log ('Modification periodicite statut: '.$current_statut);
				
				$envoyer_quand = spiplistes_formate_date_form($annee, $mois, $jour, $heure, $minute);
			
				if(time() > strtotime($envoyer_quand)) {
				// envoi dans le passe est considere comme envoyer maintenant
					$envoyer_maintenant = true;
					$date_depuis = $envoyer_quand;
					$envoyer_quand = false;
				}
				// spiplistes_debug_log("nb vrais abos : ".spiplistes_listes_vrais_abos_compter($id_liste));
				if($envoyer_maintenant && ($message_auto != 'non')) {
					if(!spiplistes_listes_vrais_abos_compter($id_liste)) {
						$boite_pour_confirmer_envoi_maintenant .= 
							spiplistes_boite_alerte(_T('spiplistes:boite_alerte_manque_vrais_abos'), true);
					}
					else {
						$boite_pour_confirmer_envoi_maintenant = ""
							. debut_cadre_couleur('', true)
							// formulaire de confirmation envoi
							. spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE), true)
							. "<p style='text-align:center;font-weight:bold;' class='verdana2'>"
							. _T('spiplistes:boite_confirmez_envoi_liste') . "</p>"
							. "<input type='hidden' name='id_liste' value='$id_liste' />\n"
							. spiplistes_form_bouton_valider('btn_confirmer_envoi_maintenant')
							. spiplistes_form_fin(true)
							. fin_cadre_couleur(true)
							;
					}
					$date_prevue = normaliser_date(time());
				}

				if($message_auto == 'oui') {
				
					$sql_champs['message_auto'] = 'oui';
					$sql_champs['titre_message'] = $titre_message;
					$sql_champs['date'] = (!$envoyer_maintenant) ? $envoyer_quand : '';
					
					switch($auto_chrono) {
						case 'auto_jour':
							$sql_champs['statut'] =
								($current_statut == _SPIPLISTES_LIST_PRIVATE)
								? _SPIPLISTES_LIST_PRIV_DAILY
								: _SPIPLISTES_LIST_PUB_DAILY
								;
							// force au minimum 1 jour
							$sql_champs['periode'] = (($periode > 0) ? $periode : 1);
							break;
						case 'auto_hebdo':
							if($auto_weekly == 'oui') {
								// debut de semaine ?
								$sql_champs['statut'] =
									($current_statut == _SPIPLISTES_LIST_PRIVATE)
									? _SPIPLISTES_LIST_PRIV_WEEKLY
									: _SPIPLISTES_LIST_PUB_WEEKLY
									;
								// corrige la date pour le lundi de la semaine
								$time = strtotime($envoyer_quand);
								$time = mktime(0,0,0,date("m", $time),date("d", $time)-date("w", $time)+1,date("Y", $time));
    							$envoyer_quand = date("Y-m-d H:i:s", $time);
	 							$sql_champs['date'] = $envoyer_quand;
							} else {
								$sql_champs['statut'] =
									($current_statut == _SPIPLISTES_LIST_PRIVATE)
									? _SPIPLISTES_LIST_PRIV_HEBDO
									: _SPIPLISTES_LIST_PUB_HEBDO
									;
							}
							$sql_champs['periode'] = 0;
							break;
						case 'auto_mensuel':
							if($auto_mois == 'oui') {
								// debut du mois ?
								$sql_champs['statut'] =
									($current_statut == _SPIPLISTES_LIST_PRIVATE)
									? _SPIPLISTES_LIST_PRIV_MONTHLY
									: _SPIPLISTES_LIST_PUB_MONTHLY
									;
								// corrige la date, 1' du mois
								$envoyer_quand = substr($envoyer_quand, 0, 8)."01 00:00:00";
								$sql_champs['date'] = $envoyer_quand;
							} else {
								$sql_champs['statut'] =
									($current_statut == _SPIPLISTES_LIST_PRIVATE)
									? _SPIPLISTES_LIST_PRIV_MENSUEL
									: _SPIPLISTES_LIST_PUB_MENSUEL
									;
							}
							$sql_champs['periode'] = 0;
							break;
						case 'auto_an':
							$sql_champs['statut'] =
								($current_statut == _SPIPLISTES_LIST_PRIVATE)
								? _SPIPLISTES_LIST_PRIV_YEARLY
								: _SPIPLISTES_LIST_PUB_YEARLY
								;
							$sql_champs['periode'] = 0;
							break;
					}
				}
				else if($message_auto == 'non') {
					$sql_champs['message_auto'] = 'non';
					$sql_champs['date'] = '';
					$sql_champs['periode'] = 0;
				}
			} // end if($btn_modifier_courrier_auto)
			
			// Enregistre les modifs pour cette liste
			if(count($sql_champs))
			{
				sql_updateq('spip_listes', $sql_champs, 'id_liste='.sql_quote($id_liste).' LIMIT 1');
			}
			
			// Forcer les abonnements
			if($btn_valider_forcer_abos && $forcer_abo && in_array($forcer_abo, array('tous', 'auteurs', '6forum', 'aucun'))) {
				
				$forcer_format_reception = 
					(($forcer_format_abo == 'oui') && in_array($forcer_format_reception, spiplistes_formats_autorises()))
					? $forcer_format_reception
					: false
					;
				include_spip('inc/spiplistes_listes_forcer_abonnement');
				
				if(spiplistes_listes_forcer_abonnement ($id_liste, $forcer_abo, $forcer_format_reception) ===  false) {
					$message_erreur .= spiplistes_boite_alerte(_T('spiplistes:Forcer_abonnement_erreur'), true);
				}
			}
			
		} // end if($flag_editable)
	}

	//////////////////////////////////////////////////////
	// Recharge les donnees la liste

	$sql_select_array = array('id_liste', 'titre', 'texte'
			, 'titre_message', 'pied_page', 'date', 'statut', 'maj'
			, 'email_envoi', 'message_auto', 'periode', 'patron', 'lang');

	if($row = spiplistes_listes_liste_fetsel($id_liste, $sql_select_array)) {
		foreach($sql_select_array as $key) {
			// initialise les variables du resultat SQL
			$$key = $row[$key];
		}
	}

	// les supers-admins et le moderateur seuls peuvent modifier la liste
	$flag_editable = autoriser('moderer', 'liste', $id_liste);

	if (empty($titre_message))
	{
		$titre_message = $titre;
		if (spiplistes_pref_lire_defaut('opt_completer_titre_nom_site', 'oui') == 'oui')
		{
			$titre_message .= _T('spiplistes:_de_')
				. spiplistes_nom_site_texte($lang);
		}
	}
	
	$nb_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste);

	// preparation des boutons 
	if($flag_editable) {
		// Propose de modifier la liste 
		$gros_bouton_modifier = 
			icone (
				_T('spiplistes:Modifier_cette_liste') // legende bouton
				, generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_EDIT,'id_liste='.$id_liste) // lien
				, _DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply-to-all-24.gif" // image du fond
				, "edit.gif" // image de la fonction. Ici, le crayon
				, '' // alignement
				, false // pas echo, demande retour
				)
			;
		// Propose de supprimer la liste 
		$gros_bouton_supprimer = 
			icone (
					_T('spiplistes:Supprimer_cette_liste')
					, generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "btn_supprimer_liste=$id_liste&id_liste=$id_liste")
					, _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'poubelle_msg.gif'
					, ""
					, "right"
					, false
					)
			;
			
		// la grosse boite des abonnes
		$tri = _request('tri') ? _request('tri') : 'nom';
		//
		// CP-20101017: Si trop d'elligibles, ca gele.
		// @todo: revoir la boite/liste des abonnes/elligibles
		// En attendant ...
		//if(spiplistes_auteurs_elligibles_compter() < 1000)
		//{
			$boite_liste_abonnes = spiplistes_listes_boite_abonnements(
				$id_liste, $statut, $tri, $debut, _SPIPLISTES_EXEC_LISTE_GERER
			);
		//}
		//else
		//{
		//	$boite_liste_abonnes = _T('spiplistes:code_en_travaux');
		//}
		
		
		// @see http://www.spip-contrib.net/SPIP-Listes#comment444314
		
		
		
		$titre_boite = _T('spiplistes:abos_cette_liste');
		$legend = '<small id="legend-abos1">'
			. spiplistes_nb_abonnes_liste_str_get($id_liste)
			. '</small>'.PHP_EOL
			;
		$grosse_boite_abonnements = ''
			. '<!-- boite abonnes/elligibles -->'.PHP_EOL
			. debut_cadre_enfonce('auteur-24.gif', true, '', $titre_boite)
			. spiplistes_bouton_block_depliable($legend
				, false, md5('abonnes_liste'))
			. (spiplistes_spip_est_inferieur_193() ? $legend : '')
			. spiplistes_debut_block_invisible(md5('abonnes_liste'))
			. debut_cadre_relief('', true)
			. $boite_liste_abonnes
			. fin_cadre_relief(true)
			. fin_block()
			. fin_cadre_enfonce(true)
			. '<!-- fin boite abonnes/elligibles -->'.PHP_EOL
			;

		// la grosse boite des moderateurs
		$boite_liste_moderateurs = spiplistes_listes_boite_moderateurs(
			$id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'mods-conteneur'
			);
		$titre_boite = _T('spiplistes:mods_cette_liste');
		$nb = spiplistes_mod_listes_compter($id_liste);
		$legend = '<small>'
			. spiplistes_nb_moderateurs_liste_str_get($nb)
			. '</small>'.PHP_EOL
			;
		$grosse_boite_moderateurs = ''
			. '<!-- boite moderateurs -->'.PHP_EOL
			. debut_cadre_enfonce('redacteurs-24.gif', true, '', $titre_boite)
			. spiplistes_bouton_block_depliable($legend
				, false, md5('mods_liste'))
			. (spiplistes_spip_est_inferieur_193() ? $legend : '')
			. spiplistes_debut_block_invisible(md5('mods_liste'))
			. debut_cadre_relief('', true)
			. '<div id="mods-conteneur">'.PHP_EOL
			. $boite_liste_moderateurs
			. '</div>'.PHP_EOL
			. fin_cadre_relief(true)
			. fin_block()
			. fin_cadre_enfonce(true)
			. '<!-- fin boite moderateurs -->'.PHP_EOL
			;

	}
	else {
		$gros_bouton_modifier = $gros_bouton_supprimer = $grosse_boite_abonnements = '';
	}

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

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

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

	// la gestion des listes de courriers est reservee aux admins 
	if($connect_statut != '0minirezo') {
		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)
		. spiplistes_boite_info_id(_T('spiplistes:liste_numero'), $id_liste, true)
		. spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), true)
		. spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_grand_patron'
			, _SPIPLISTES_PATRONS_DIR, _T('spiplistes:Patron_grand_')
			, ($patron ? $patron : '')
			, $patron)
		. spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_patron_pied'
			, _SPIPLISTES_PATRONS_PIED_DIR, _T('spiplistes:Patron_de_pied_')
			, ((($ii = strlen($pied_page)) > _SPIPLISTES_PATRON_FILENAMEMAX) 
				? _T('taille_octets',array('taille'=>$ii)) . _T('spiplistes:conseil_regenerer_pied')
				: $pied_page)
			, $pied_page)
		. 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)
		. $message_erreur
		;

	changer_typo('','liste'.$id_liste);

	// message alerte et demande de confirmation si supprimer liste
	if(($btn_supprimer_liste > 0) && ($btn_supprimer_liste == $id_liste)) {
		$page_result .= ''
			. spiplistes_boite_alerte (_T('spiplistes:Attention_suppression_liste').'<br />'._T('spiplistes:Confirmez_requete'), true)
			. '<form name="form_suppr_liste" id="form_suppr_liste" method="post"
				action="'.generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE, '').'">' . PHP_EOL
			. "<div class='verdana2' style='text-align:right;'>\n"
			. "<input type='hidden' name='id_liste' value='$id_liste' />\n"
   		. "<label>"._T('spiplistes:Confirmer_la_suppression_de_la_liste')."# $id_liste : \n"
   		. "<input class='fondo' type='submit' name='btn_supprimer_liste_confirme' value='"._T('bouton_valider')."' /></label>\n"
			. "</div>\n"
			. "</form>\n"
			. "<br />\n"
		;
	}

	$page_result .= ""
		. debut_cadre_relief("", true)
		. "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n"
		. "<tr><td valign='top'>\n"
		. spiplistes_gros_titre(spiplistes_bullet_titre_liste('puce', $statut, '', true)." "
			. spiplistes_calculer_balise_titre(extraire_multi($titre))
			, '', true)
		. "</td>"
		. "<td rowspan='2'>"
		// le gros bouton modifier si besoin
		. $gros_bouton_modifier
		. "</td></tr>\n"
		. "<tr><td width='100%'>\n"
		. "<div align='$spip_lang_left' style='padding: 5px; border: 1px dashed #aaa; ' class='verdana1 spip_small'>\n"
		. propre($texte."~")
		. "</div>\n"
		. "</td>\n"
		. "</tr></table>\n"
		;

	
	//////////////////////////////////////////////////////
	// Modifier le statut de la liste
	//$email_defaut = entites_html($meta['email_webmaster']);
	$email_defaut = ($m = email_valide($GLOBALS['meta']['email_defaut']))
		? $m
		: $GLOBALS['meta']['email_webmaster']
		;
	$email_envoi = ($m = email_valide($email_envoi))
		? $email_envoi
		: $email_defaut
		;

	$page_result .= ""
		//. debut_cadre_relief("racine-site-24.gif", true)
		. debut_cadre_relief("racine-site-24.gif", true, '', _T('spiplistes:Diffusion').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "diffusion"))
		//
		////////////////////////////
		// Formulaire diffusion
		.	(
			($flag_editable)
			? ''
				. spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,'id_liste='.$id_liste), true)
				. '<input type="hidden" name="exec" value="listes" />' . PHP_EOL
				. '<input type="hidden" name="id_liste" value="'.$id_liste.'" />' . PHP_EOL
			: ''
			)
		. '<span class="verdana2">'
			. _T('spiplistes:cette_liste_est_'
			 	, array('s' => spiplistes_bullet_titre_liste ('puce', $statut, 'img_statut', true)))
		. '</span>' . PHP_EOL
		;

		$sel_private = ' value="' . _SPIPLISTES_LIST_PRIVATE . '" ' 
			. 	(
					in_array ($statut, array(
									_SPIPLISTES_LIST_PRIVATE
									, _SPIPLISTES_LIST_PRIV_DAILY
									, _SPIPLISTES_LIST_PRIV_HEBDO
									, _SPIPLISTES_LIST_PRIV_WEEKLY
									, _SPIPLISTES_LIST_PRIV_MENSUEL
									, _SPIPLISTES_LIST_PRIV_MONTHLY
									, _SPIPLISTES_LIST_PRIV_YEARLY
									)
						 )
					? ' selected="selected"' 
					: ''
				)
				;
		$sel_publique = ' value="' . _SPIPLISTES_LIST_PUBLIC . '" ' 
			. 	(
					in_array ($statut, array(
									_SPIPLISTES_LIST_PUBLIC
									, _SPIPLISTES_LIST_PUB_DAILY
									, _SPIPLISTES_LIST_PUB_HEBDO
									, _SPIPLISTES_LIST_PUB_WEEKLY
									, _SPIPLISTES_LIST_PUB_MENSUEL
									, _SPIPLISTES_LIST_PUB_MONTHLY
									, _SPIPLISTES_LIST_PUB_YEARLY
									)
						 )
					? ' selected="selected"' 
					: ''
				)
				;
	$page_result .= PHP_EOL
		.	(
			($flag_editable)
			? ''
				. '<select class="verdana2 fondl" name="statut" size="1" id="change_statut">' . PHP_EOL
				. '<option' . $sel_private . ' style="background-color:#fff">'
					. _T('spiplistes:statut_interne')
					. '</option>' . PHP_EOL
				. '<option' . $sel_publique . ' style="background-color:#B4E8C5">'
					. _T('spiplistes:statut_publique')
					. '</option>' . PHP_EOL
				. '<option' . mySel(_SPIPLISTES_TRASH_LIST, $statut)
					. ' style="background:url(' . _DIR_IMG_PACK.'rayures-sup.gif)">'
					. _T('texte_statut_poubelle').'</option>' . PHP_EOL
				. '</select>' . PHP_EOL
			: '<span class="verdana2" style="font-weight:bold;">'
				. spiplistes_items_get_item('alt', $statut)
				. '</span>'. PHP_EOL
			)
		. '<div style="margin:10px 0px;">' . PHP_EOL
		.	(
			($flag_editable && strpos($GLOBALS['meta']['langues_multilingue'], ','))
			? ''
				. '<label class="verdana2" for="changer_lang">'
					. _T('info_multi_herit').' : </label>' . PHP_EOL
				. '<select name="changer_lang" class="fondl" id="changer_lang">' . PHP_EOL
				. liste_options_langues('changer_lang', $lang , _T('spiplistes:langue_'), '', '')
				. '</select>' . PHP_EOL
			: ''
				//. "<span class='verdana2'>". _T('info_multi_herit')." : "
				//. "<span class='verdana2' style='font-weight:bold;'>".traduire_nom_langue($lang)."</span>\n"
			)
		. '</div>' . PHP_EOL
		.	(
				($flag_editable)
				? spiplistes_form_bouton_valider('btn_modifier_diffusion')
					. spiplistes_form_fin(true)
				: ''
			)
		. fin_cadre_relief(true)
		;

		////////////////////////////
		// Formulaire adresse email pour le reply-to
	$page_result .= ''
		. debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply_to-24.png"
							, true
							, ''
							, _T('spiplistes:adresse_de_reponse').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE
								, "replyto")
							)
		. spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste"), true)
		. "<p class='verdana2'>\n"
		. _T('spiplistes:adresse_mail_retour').":<br />\n"
		.	(
			($flag_editable)
			? _T('spiplistes:adresse')."</p>\n"
				. "<div style='text-align:center'>\n"
				. "<input type='text' name='email_envoi' value=\"".$email_envoi."\" size='40' class='fondl' /></div>\n"
				. spiplistes_form_bouton_valider('btn_modifier_replyto')
			: "</p><p style='font-weight:bold;text-align:center;'>$email_envoi</p>\n"
			)
		. spiplistes_form_fin(true)
		. fin_cadre_relief(true)
		;
		
		////////////////////////////
		// Formulaire planifier un courrier automatique
	$page_result .= ""
		. "<a name='form-programmer' id='form-programmer'></a>\n"
		. debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."stock_timer.png", true, '', _T('spiplistes:messages_auto')
			. spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "temporiser"))
		;
	$page_result .= ""
		. $boite_pour_confirmer_envoi_maintenant
		. spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste")."#form-programmer", true)
		. "<table border='0' cellspacing='1' cellpadding='3' width='100%'>\n"
		. "<tr><td align='$spip_lang_left' class='verdana2'>\n"
		;
	if(empty($patron)) {
		$page_result .= ""
			. (
				$flag_editable
				? spiplistes_boite_alerte(_T('spiplistes:patron_manquant_message'), true)
				: "<p class='verdana2'>" . _T('spiplistes:liste_sans_patron') . "</p>\n"
			  )
			. "</td>\n"
			. "</tr>\n"
			. "<tr><td align='$spip_lang_left' class='verdana2'>\n"
			;
	}
	if ($message_auto != "oui") {
		$page_result .= "<div class='verdana2'>"._T('spiplistes:pas_denvoi_auto_programme')."</div>\n";
	}
	else {
		$page_result .= ""
			// petite ligne d'info si envoi programme
			. "<p class='verdana2'>"._T('spiplistes:sujet_courrier_auto')."<br />\n"
			. "<span class='spip_large'> "
				. spiplistes_calculer_balise_titre(extraire_multi($titre_message))
				. "</span></p>\n"
			. "<p class='verdana2'>"
			. spiplistes_items_get_item('alt', $statut)."<br />\n"
			.	(	
					($statut == _SPIPLISTES_LIST_PUB_MONTHLY)
					?	"<strong>" . spiplistes_items_get_item("tab_t", $statut) . "</strong><br />"
					:	""
				)
			.	(
					($periode > 0)
					? _T('spiplistes:periodicite_tous_les_n_s'
						, array('n' => "  <strong>".$periode."</strong>  "
							, 's' => spiplistes_singulier_pluriel_str_get($periode, _T('spiplistes:jour'), _T('spiplistes:jours'), false)
							)
						)
					: ""
				)
			.	(
					(!in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_PERIODIQUES)))
					? " <strong>"._T('spiplistes:Pas_de_periodicite')."</strong><br />"
						._T('spiplistes:Ce_courrier_ne_sera_envoye_qu_une_fois')
					: ""
				)
			.	"<br />"
			.	(
				(intval($maj))
				? _T('spiplistes:Dernier_envoi_le_') . " <strong>" . affdate_heure($maj) . "</strong>"
					.	(
						($last =  round((time() - strtotime($maj)) / _SPIPLISTES_TIME_1_DAY))
							? " (".spiplistes_singulier_pluriel_str_get($last, _T('spiplistes:jour'), _T('spiplistes:jours')).")"
							: ""
					). "<br />"
				: ""
				)
			.	(
				($date_prevue || (intval($date) && (time() < strtotime($date))))
				? _T('spiplistes:prochain_envoi_prevu')." : <strong>" . affdate_heure($date_prevue ? $date_prevue : $date) . "</strong>"
					.	(
						(!$date_prevue && ($next = round((strtotime($date) - time()) / _SPIPLISTES_TIME_1_DAY)))
							? " (".spiplistes_singulier_pluriel_str_get($next, _T('spiplistes:jour'), _T('spiplistes:jours')).")"
							: ""
						)
				: ""
				)
			. "</p>\n"
			;
		if($btn_modifier_courrier_auto) {
			$page_result .= ""
				. "<p class='verdana2'>"._T('spiplistes:date_act')."<br />"
				. _T('spiplistes:env_esquel')." <em>".$patron."</em>"
				. "</p>\n"
				;
		}
	}
	$date_debut_envoi = (!empty($date_prevue) ? $date_prevue : (($date && intval($date)) ? $date : normaliser_date(time())));

	$page_result .= ""
		. "</td>\n"
		. "</tr>\n"
		;
	if($flag_editable) {
		$page_result .= ""
			. "<tr><td align='$spip_lang_left' class='verdana2'>"
			. "<input type='radio' name='message_auto' value='oui' id='auto_oui' "
				. (empty($patron) ? " disabled='disabled' " : "")
				. ($auto_checked = ($message_auto=='oui' ? "checked='checked'" : ""))
				. " />"
			. "<label for='auto_oui' ".($auto_checked ? "style='font-weight:bold;'" : "").">"
				. _T('spiplistes:prog_env')."</label>\n"
			. "<div id='auto_oui_detail' "
				.((empty($patron) || !$auto_checked) ? "style='display:none;'" : "")
				.">"
			. "<ul style='list-style-type:none;'>\n"
			. "<li>"._T('spiplistes:message_sujet')
			. ': <input type="text" name="titre_message" value="'.$titre_message.'" size="50" class="fondl" /> </li>'."\n"
			;
			// 
			// chrono jour
			$ii = ($periode > 0) ? $periode : 1;
		$page_result .= ""
			. "<li style='margin-top:0.5em'>"
				. spiplistes_form_input_radio ('auto_chrono', 'auto_jour'
					, ''
					, ($statut == _SPIPLISTES_LIST_PUB_DAILY)
					, true, false
					)
				. _T('spiplistes:Tous_les')
				. " <input type='text' name='periode' value='".$ii."' size='4' maxlength='4' class='fondl' /> "
				. _T('info_jours')
				. "</li>\n"
			// chrono hebdo
			. "<li>"
				. spiplistes_form_input_radio ('auto_chrono', 'auto_hebdo'
					, _T('spiplistes:Toutes_les_semaines')
					, (($statut == _SPIPLISTES_LIST_PUB_HEBDO) || ($statut == _SPIPLISTES_LIST_PUB_WEEKLY))
					, true, false)
				. spiplistes_form_input_checkbox('auto_weekly', 'oui'
					, _T('spiplistes:en_debut_de_semaine'), ($statut == _SPIPLISTES_LIST_PUB_WEEKLY), true, false)
				. "</li>\n"
			// chrono mois
			. "<li>"
				. spiplistes_form_input_radio ('auto_chrono', 'auto_mensuel'
					, _T('spiplistes:Tous_les_mois')
					, (($statut == _SPIPLISTES_LIST_PUB_MENSUEL) || ($statut == _SPIPLISTES_LIST_PUB_MONTHLY))
					, true, false)
				. spiplistes_form_input_checkbox('auto_mois', 'oui'
					, _T('spiplistes:en_debut_de_mois'), ($statut == _SPIPLISTES_LIST_PUB_MONTHLY), true, false)
				. "</li>\n"
			// chrono annee
			. "<li>"
				. spiplistes_form_input_radio ('auto_chrono', 'auto_an'
					, _T('spiplistes:Tous_les_ans')
					, ($statut == _SPIPLISTES_LIST_PUB_YEARLY)
					, true, false)
				. "</li>\n"
			. "<li style='margin-top:0.5em'>"._T('spiplistes:A_partir_de')." : <br />\n"
			//
			. spiplistes_dater_envoi(
				'liste', $id_liste, $statut
				, $flag_editable
				, _T('spiplistes:date_expedition_')
				, $date_debut_envoi, 'btn_changer_date'
				, false
				)
			. "</li>\n"
			.	(
				(!$envoyer_maintenant)
				? " <li>"
					. spiplistes_form_input_checkbox('envoyer_maintenant', 'oui'
						, _T('spiplistes:env_maint'), false, true)
					. "</li>\n"
				: ""
				)
			. "</ul></div>\n"
			;
		$checked = ($message_auto=='non') ? "checked='checked'" : "";
		$class = $checked ? "class='bold'" : "";
		$disabled = (empty($patron) ? " disabled='disabled' " : "");
		$page_result .= ""
			. "<br /><input type='radio' name='message_auto' value='non' id='auto_non' $disabled $checked />"
			. "<span $class >"
			. " <label for='auto_non'>"._T('spiplistes:prog_env_non')."</label> "
			. "</span>\n"
			. "</td></tr>\n"
			;

		$page_result .= ""
			. "<tr><td style='text-align:$spip_lang_right;'>"
			. 	(
				($id_liste)
				? "<input type='hidden' name='id_liste' value='$id_liste' />"
				: ""
				)
			.	(
				($new)
				? "<input type='hidden' name='new' value='$new' />"
				: ""
				)
			// bouton de validation
			. (!empty($patron) 
				? spiplistes_form_bouton_valider('btn_modifier_courrier_auto', _T('bouton_valider'), true)
				: "")
			. "</td></tr>"
			;
	}
	$page_result .= ""
		. "</table>\n"
		. spiplistes_form_fin(true)
		. fin_cadre_relief(true)
		;
		// fin formulaire planifier
		
	$page_result .= ""
		. fin_cadre_relief(true)
		. $grosse_boite_abonnements
		. $grosse_boite_moderateurs
		;
	
	// le super-admin peut abonner en masse
	if($connect_toutes_rubriques) {
		$page_result .= ""
			. "\n<!-- forcer abo -->\n"
			. debut_cadre_enfonce(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."abonner-24.png", true, '', _T('spiplistes:forcer_les_abonnement_liste').spiplistes_plugin_aide("forcerliste"))."\n"
			. "<p class='verdana2'>\n"
			. _T('spiplistes:forcer_abonnement_desc')
			. "</p>\n"
			. "<p class='verdana2' style='margin-bottom:1em'><em>"
			. _T('spiplistes:forcer_abonnement_aide', array('lien_retour' => generer_url_ecrire(_SPIPLISTES_EXEC_ABONNES_LISTE)))
			. "</em></p>\n"
			. "<form action='".generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste#auteurs")."' id='form_forcer_abo' name='form_forcer_abo' method='post'>\n"
			. debut_cadre_relief("", true)."\n"
			//
			//////////////////////////
			// propose de forcer les membres sauf invites si la liste est privee
			.	(
					($statut==_SPIPLISTES_LIST_PRIVATE)
					? "<div class='verdana2'><input type='radio' name='forcer_abo' value='auteurs' id='forcer_abo_tous' />\n"
						. "<label for='forcer_abo_tous'>"._T('spiplistes:Abonner_tous_les_inscrits_prives')."</label>"
						. "</div>\n"
						. spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux'))
					: ""
				)
			//
			// propose de forcer les invites si la liste est publique ou periodique
			.	(
					(($statut!=_SPIPLISTES_LIST_PRIVATE) && ($statut!=_SPIPLISTES_TRASH_LIST))
					? "<div class='verdana2'><input type='radio' name='forcer_abo' value='6forum' id='forcer_abo_6forum' />\n"
						. "<label for='forcer_abo_6forum'>"._T('spiplistes:Abonner_tous_les_invites_public')."</label></div>\n"
						. spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux'))
					: ""
				)
			. (
				($nb_abonnes)
				? "<hr />\n"
					. "<div class='verdana2'><input type='radio' name='forcer_abo' value='aucun' id='forcer_desabo' />\n"
					. "<label for='forcer_desabo'>"._T('spiplistes:Forcer_desabonner_tous_les_inscrits')."</label></div>\n"
				: ""
				)
			. fin_cadre_relief(true)."\n"
			. "<div style='text-align:right;'><input type='submit' name='btn_valider_forcer_abos' value='"._T('bouton_valider')."' class='fondo' /></div>\n"
			. "</form>\n"
			. fin_cadre_enfonce (true)."\n"
		;
	}
	//
	$page_result .= ""
		. $gros_bouton_supprimer
		;
	
	echo($page_result);

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

} // end exec_spiplistes_liste_gerer()
Example #10
0
/**
 * Récupère les valeurs d'une traduction de référence pour la création
 * d'un objet (préremplissage du formulaire). 
 *
 * @param string $type
 *     Type d'objet (article, breve...)
 * @param string|int $id_objet
 *     Identifiant de l'objet, ou "new" pour une création
 * @param int $id_rubrique
 *     Identifiant éventuel de la rubrique parente
 * @param int $lier_trad
 *     Identifiant éventuel de la traduction de référence
 * @param string $champ_titre
 *     Nom de la colonne SQL de l'objet donnant le titre
 * @return array
 *     Couples clés / valeurs des champs du formulaire à charger
**/
function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre')
{
    $table = table_objet_sql($type);
    $_id_objet = id_table_objet($table);
    // Recuperer les donnees de l'objet original
    $row = sql_fetsel("*", $table, "{$_id_objet}={$lier_trad}");
    if ($row) {
        $row[$champ_titre] = filtrer_entites(_T('info_nouvelle_traduction')) . ' ' . $row[$champ_titre];
    } else {
        $row = array();
    }
    // on met l'objet dans une rubrique si l'objet le peut
    $desc = lister_tables_objets_sql($table);
    $is_rubrique = isset($desc['field']['id_rubrique']);
    if ($is_rubrique) {
        if ($id_rubrique) {
            $row['id_rubrique'] = $id_rubrique;
            return $row;
        }
        $id_rubrique = $row['id_rubrique'];
        // Regler la langue, si possible, sur celle du redacteur
        // Cela implique souvent de choisir une rubrique ou un secteur
        if (in_array($GLOBALS['spip_lang'], explode(',', $GLOBALS['meta']['langues_multilingue']))) {
            // Si le menu de langues est autorise sur l'objet,
            // on peut changer la langue quelle que soit la rubrique
            // donc on reste dans la meme rubrique
            if (in_array($table, explode(',', $GLOBALS['meta']['multi_objets']))) {
                $row['id_rubrique'] = $row['id_rubrique'];
                # explicite :-)
                // Sinon, chercher la rubrique la plus adaptee pour
                // accueillir l'objet dans la langue du traducteur
            } elseif ($is_rubrique and $GLOBALS['meta']['multi_rubriques'] == 'oui') {
                if ($GLOBALS['meta']['multi_secteurs'] == 'oui') {
                    $id_parent = 0;
                } else {
                    // on cherche une rubrique soeur dans la bonne langue
                    $row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique={$id_rubrique}");
                    $id_parent = $row_rub['id_parent'];
                }
                $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='" . $GLOBALS['spip_lang'] . "' AND id_parent={$id_parent}");
                if ($row_rub) {
                    $row['id_rubrique'] = $row_rub['id_rubrique'];
                }
            }
        }
    }
    return $row;
}
Example #11
0
function signatures_edit_mail($id_article, $ad_email, $row) {

	$email = attribut_html($ad_email);
	if (email_valide($ad_email)) {
		if ($row['statut'] != 'publie'
		AND autoriser('modererpetition', 'article', $id_article)) {
			include_spip('formulaires/signature');
			$url = generer_url_entite_absolue($id_article, 'article','','',true);
			list($titre, $url) = signature_langue($id_article, $url);

			list($sujet, $corps) = signature_demande_confirmation($id_article, $url, $row['nom_email'], $row['nom_site'], $row['url_site'], $row['message'], $titre, $row['statut']);

			include_spip('inc/filtres');
			$sujet = rawurlencode(filtrer_entites($sujet));
			$corps = rawurlencode(filtrer_entites($corps));
			$corps = "?subject=$sujet&amp;body=$corps";
		} else $corps = '';
		$email = "<a href=\"mailto:$ad_email$corps\">$email</a>";
	}
	return "<div class='ad_email'><span class='spip_x-small'>"
			._T('info_adresse_email')
			."</span> "
			. $email
			. "</div>\n";

}
Example #12
0
function couper($texte, $taille = 50)
{
    $texte = substr($texte, 0, 400 + 2 * $taille);
    /* eviter de travailler sur 10ko pour extraire 150 caracteres */
    // on utilise les \r pour passer entre les gouttes
    $texte = str_replace("\r\n", "\n", $texte);
    $texte = str_replace("\r", "\n", $texte);
    // sauts de ligne et paragraphes
    $texte = preg_replace("/\n\n+/", "\r", $texte);
    $texte = preg_replace("/<(p|br)( [^>]*)?/" . ">", "\r", $texte);
    // supprimer les traits, lignes etc
    $texte = preg_replace("/(^|\r|\n)(-[-#\\*]*|_ )/", "\r", $texte);
    // supprimer les tags
    $texte = supprimer_tags($texte);
    $texte = trim(str_replace("\n", " ", $texte));
    $texte .= "\n";
    // marquer la fin
    // travailler en accents charset
    $texte = filtrer_entites($texte);
    // supprimer les liens
    $texte = preg_replace("/\\[->([^]]*)\\]/", "\\1", $texte);
    // liens sans texte
    $texte = preg_replace("/\\[([^\\[]*)->([^]]*)\\]/", "\\1", $texte);
    // supprimer les notes
    $texte = preg_replace("/[\\[([^]]|\\][^]])*\\]\\]/", "", $texte);
    // supprimer les codes typos
    $texte = preg_replace("/[{}]/", "", $texte);
    // supprimer les tableaux
    $texte = preg_replace("/(^|\r)\\|.*\\|\r/", "\r", $texte);
    // couper au mot precedent
    $long = substr($texte, 0, max($taille - 4, 1));
    $court = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\n?\$/", "\\1", $long);
    $points = '&nbsp;(...)';
    // trop court ? ne pas faire de (...)
    if (strlen($court) < max(0.75 * $taille, 2)) {
        $points = '';
        $long = preg_replace("/&#?[a-z0-9]*;?\$/", "", substr($texte, 0, $taille));
        $texte = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\$/", "\\1", $long);
        // encore trop court ? couper au caractere
        if (strlen($texte) < 0.75 * $taille) {
            $texte = $long;
        }
    } else {
        $texte = $court;
    }
    if (strpos($texte, "\n")) {
        // la fin est encore la : c'est qu'on n'a pas de texte de suite
        $points = '';
    }
    // remettre les paragraphes
    $texte = preg_replace("/\r+/", "\n\n", $texte);
    return trim($texte) . $points;
}
Example #13
0
/**
 * @param $in string, contenu html du courrier a envoyer
 * @return string, version texte seul (ascii) du courrier
 **/
function spiplistes_courrier_version_texte($in) {

	$eol = PHP_EOL;
	
	// Nettoyage des liens des notes de bas de page
	$out = preg_replace("@<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>@"
						, "\\3", $in);
	
	// Supprimer tous les liens internes
	$patterns = array("/\<a href=['\"]#(.*?)['\"][^>]*>(.*?)<\/a>/ims");
	$replacements = array("\\2");
	$out = preg_replace($patterns,$replacements, $out);
	
	// Supprime feuille style
	$out = preg_replace("/<style[^>]*>[^<]*<\/style>/", '', $out);
	
	// les puces
	// @see http://www.spip.net/fr_article1825.html
	if (isset($GLOBALS['puce'])) {
		$out = str_replace($GLOBALS['puce'], $eol.'-', $out);
	}
	
	// Remplace tous les liens	
	$patterns = array("/\<a href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims");
	$replacements = array("\\2 (\\1)");
	$out = preg_replace($patterns,$replacements, $out);
	
	$_traits = str_repeat('-', 40);
	$_points = str_repeat('.', 20);
	
	$out = preg_replace('/<h1[^>]*>/', '_SAUT__SAUT_'.$_traits.'_SAUT_', $out);
	$out = str_replace('</h1>', '_SAUT__SAUT_'.$_traits.'_SAUT__SAUT_', $out);
	$out = preg_replace('/<h2[^>]*>/', '_SAUT__SAUT_'.$_points.' ', $out);
	$out = str_replace('</h2>', ' '.$_points.'_SAUT__SAUT_', $out);
	$out = preg_replace('/<h3[^>]*>/', '_SAUT__SAUT_*', $out);
	$out = str_replace('</h3>', '*_SAUT__SAUT_', $out);
	
	// Les notes de bas de page
	$out = str_replace('<p class="spip_note">', $eol, $out);
	$out = preg_replace('/<sup>([0-9]+)<\/sup>/', '[\\1]', $out);
	
	// etrange parfum de regex dans un str_replace ?
	// @todo: a verifier
	//$out = str_replace('<p[^>]*>', $eol.$eol, $out);
	
	//$out = str_replace('<br /><img class=\'spip_puce\' src=\'puce.gif\' alt=\'-\' border=\'0\'>', "\n".'-', $out);
	$out = preg_replace('/<li[^>]>/', $eol.'-', $out);
	//$out = str_replace('<li>', "\n".'-', $out);
	
	
	// accentuation du gras -
	// <b>texte</b> -> *texte*
	$out = preg_replace('/<b[^>|r]*>/','*' ,$out);
	$out = str_replace ('</b>','*' ,$out);
	
	// accentuation du gras -
	// <strong>texte</strong> -> *texte*
	$out = preg_replace('/<strong[^>]*>/','*' ,$out);
	$out = str_replace ('</strong>','*' ,$out);
	
	
	// accentuation de l'italique
	// <i>texte</i> -> *texte*
	$out = preg_replace('/<i[^>|mg]*>/','*' ,$out);
	$out = str_replace ('</i>', '*', $out);
	
	$out = str_replace('&oelig;', 'oe', $out);
	$out = str_replace('&nbsp;', ' ', $out);
	$out = filtrer_entites($out);
	
	//attention, trop brutal pour les logs irc <@RealET>
	$out = supprimer_tags($out);
	
	$out = str_replace('\x0B', '', $out); 
	$out = str_replace("\t", '', $out) ;
	$out = preg_replace('/[ ]{3,}/', '', $out);
	
	// espace en debut de ligne
	$out = preg_replace("/(\r\n|\n|\r)[ ]+/m", $eol, $out);
	
	// Bring down number of empty lines to 2 max
	// sauts de ligne >= 3 reduits a 2
	$out = preg_replace("/(\r\n|\n|\r){3,}/m", $eol.$eol, $out);
	
	//retablir les saut de ligne
	//Réduire les > 3 à 3
	$out = preg_replace('/(_SAUT_){4,}/m', '_SAUT__SAUT__SAUT_', $out);
	$out = str_replace('_SAUT_', $eol, $out);
	
	//saut de lignes en debut et fin de texte
	$out = $eol.$eol.trim($out).$eol.$eol;
	
	// Faire des lignes de 75 caracteres maximum
	$out = wordwrap($out);
	
	return $out;

} // end spiplistes_courrier_version_texte()
Example #14
0
function article_select_trad($lier_trad, $id_rubrique=0) {
	// Recuperer les donnees de l'article original
	$row = sql_fetsel("*", "spip_articles", "id_article=$lier_trad");
	if ($row) {
		$row['titre'] = filtrer_entites(_T('info_nouvelle_traduction')).' '.$row["titre"];

	} else $row = array();
	if ($id_rubrique) {
		$row['id_rubrique'] = $id_rubrique;
		return $row;
	}
	$id_rubrique = $row['id_rubrique'];
	// Regler la langue, si possible, sur celle du redacteur
	// Cela implique souvent de choisir une rubrique ou un secteur
	if (in_array($GLOBALS['spip_lang'],
	explode(',', $GLOBALS['meta']['langues_multilingue']))) {
		// Si le menu de langues est autorise sur les articles,
		// on peut changer la langue quelle que soit la rubrique
		// donc on reste dans la meme rubrique
		if ($GLOBALS['meta']['multi_articles'] == 'oui') {
			$row['id_rubrique'] = $row['id_rubrique']; # explicite :-)
		}
		else if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
			// Sinon, chercher la rubrique la plus adaptee pour
			// accueillir l'article dans la langue du traducteur
			if ($GLOBALS['meta']['multi_secteurs'] == 'oui') {
				$id_parent = 0;
			} else {
				// on cherche une rubrique soeur dans la bonne langue
				$row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");

				$id_parent = $row_rub['id_parent'];
			}
			$row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='".$GLOBALS['spip_lang']."' AND id_parent=$id_parent");
			if ($row_rub)
				$row['id_rubrique'] = $row_rub['id_rubrique'];
		}
	}
	return $row;
}
Example #15
0
function exec_rubriques_edit_args($id_rubrique, $id_parent, $new, $lier_trad)
{
	global $connect_toutes_rubriques, $connect_statut, $spip_lang_right;

	$titre = false;

	if ($new == "oui") {
		$id_rubrique = 0;
		$titre = filtrer_entites(_T('titre_nouvelle_rubrique'));

		if (!autoriser('creerrubriquedans','rubrique',$id_parent)) {
			$id_parent = intval(reset($GLOBALS['connect_id_rubrique']));
		}
	} else {
		$row = sql_fetsel("*", "spip_rubriques", "id_rubrique=$id_rubrique");
		if ($row) {
	
			$id_parent = $row['id_parent'];
			$titre = $row['titre'];
			$id_secteur = $row['id_secteur'];
		}
	}
	$commencer_page = charger_fonction('commencer_page', 'inc');

	if ($titre === false
	OR ($new=='oui' AND !autoriser('creerrubriquedans','rubrique',$id_parent))
	OR ($new!='oui' AND !autoriser('modifier','rubrique',$id_rubrique)))  {
		include_spip('inc/minipres');
		echo minipres();
	} else {

	pipeline('exec_init',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
	echo $commencer_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", $id_rubrique);

	if ($id_parent == 0) $ze_logo = "secteur-24.gif";
	else $ze_logo = "rubrique-24.gif";

	echo debut_grand_cadre(true);
	echo afficher_hierarchie($id_parent,'',$id_rubrique,'rubrique');
	echo fin_grand_cadre(true);

	echo debut_gauche('', true);

	// Pave "documents associes a la rubrique"
	if (!$new){
		# affichage sur le cote des pieces jointes, en reperant les inserees
		# note : traiter_modeles($texte, true) repere les doublons
		# aussi efficacement que propre(), mais beaucoup plus rapidement
		traiter_modeles(join('',$row), true);
		echo afficher_documents_colonne($id_rubrique, 'rubrique');
	} 

	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  
	echo debut_droite('', true);

	$contexte = array(
	'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$GLOBALS['spip_lang_left']),
	'redirect'=>generer_url_ecrire("naviguer"),
	'titre'=>$titre,
	'new'=>$new == "oui"?$new:$id_rubrique,
	'id_rubrique'=>$id_parent, // pour permettre la specialisation par la rubrique appelante
	'config_fonc'=>'rubriques_edit_config',
	'lier_trad'=>$lier_trad
	);

	echo recuperer_fond("prive/editer/rubrique", $contexte);

	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  

	echo fin_gauche(), fin_page();
	}
}
Example #16
0
function get_id_doc($fichier) {
    if (trim($fichier)=="") return false;   
    spip_log("get_id_doc cherche : ".$fichier,"snippets"); 
    $sql = "SELECT id_document FROM spip_documents WHERE fichier='".addslashes(filtrer_entites($fichier))."'";
    $result = spip_query($sql);
    while ($row = spip_fetch_array($result)) {
       spip_log("get_id_doc trouve : ".$row['id_document'],"snippets");
       return $row['id_document'];
    }
    // inconnu  ...
    spip_log("get_id_doc trouve pas :( ","snippets");
    return false ;
}
Example #17
0
/**
 * Analyser une URL de site distant, qui peut être une syndication.
 *
 * @param string $url
 *     URL du site à analyser
 * @return array|bool
 *     - array : informations du site
 *     - false : site impossible à récupérer
 **/
function analyser_site($url)
{
    include_spip('inc/filtres');
    include_spip('inc/distant');
    // Accepter les URLs au format feed:// ou qui ont oublie le http://
    $url = preg_replace(',^feed://,i', 'http://', $url);
    if (!preg_match(',^[a-z]+://,i', $url)) {
        $url = 'http://' . $url;
    }
    $texte = recuperer_page($url, true);
    if (!$texte) {
        return false;
    }
    include_spip('inc/syndic');
    cdata_echappe($texte, $echappe_cdata);
    if (preg_match(',<(channel|feed)([\\:[:space:]][^>]*)?' . '>(.*)</\\1>,ims', $texte, $regs)) {
        $result['syndication'] = 'oui';
        $result['url_syndic'] = $url;
        $channel = $regs[3];
        // Pour recuperer l'entete, on supprime tous les items
        $b = array_merge(extraire_balises($channel, 'item'), extraire_balises($channel, 'entry'));
        $header = str_replace($b, array(), $channel);
        if ($t = extraire_balise($header, 'title')) {
            cdata_echappe_retour($t, $echappe_cdata);
            $result['nom_site'] = filtrer_entites(supprimer_tags($t));
        }
        if ($t = extraire_balises($header, 'link')) {
            cdata_echappe_retour($t, $echappe_cdata);
            foreach ($t as $link) {
                $u = supprimer_tags(filtrer_entites($link));
                if (!strlen($u)) {
                    $u = extraire_attribut($link, 'href');
                }
                if (strlen($u)) {
                    // on installe l'url comme url du site
                    // si c'est non vide, en donnant la priorite a rel=alternate
                    if (preg_match(',\\balternate\\b,', extraire_attribut($link, 'rel')) or !isset($result['url_site'])) {
                        $result['url_site'] = filtrer_entites($u);
                    }
                }
            }
        }
        $result['url_site'] = url_absolue($result['url_site'], $url);
        if ($a = extraire_balise($header, 'description') or $a = extraire_balise($header, 'tagline')) {
            cdata_echappe_retour($a, $echappe_cdata);
            $result['descriptif'] = filtrer_entites(supprimer_tags($a));
        }
        if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims', $header, $r) and preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r) and $image = recuperer_infos_distantes($r[1])) {
            if (in_array($image['extension'], array('gif', 'jpg', 'png'))) {
                $result['format_logo'] = $image['extension'];
                $result['logo'] = $r[1];
            } else {
                if ($image['fichier']) {
                    spip_unlink($image['fichier']);
                }
            }
        }
    } else {
        $result['syndication'] = 'non';
        $result['url_site'] = $url;
        if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) {
            $head = filtrer_entites($regs[1]);
        } else {
            $head = $texte;
        }
        if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)) {
            $titre = trim($regs[1]);
            if (!strlen($titre)) {
                $titre = substr($head, strpos($head, $regs[0]));
            }
            $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre)));
        }
        if ($a = array_merge(extraire_balises($head, 'meta'), extraire_balises($head, 'http-equiv'))) {
            foreach ($a as $meta) {
                if (extraire_attribut($meta, 'name') == 'description') {
                    $desc = trim(extraire_attribut($meta, 'content'));
                    if (!strlen($desc)) {
                        $desc = trim(extraire_attribut($meta, 'value'));
                    }
                    $result['descriptif'] = $desc;
                }
            }
        }
        // Cherchons quand meme un backend
        include_spip('inc/distant');
        include_spip('inc/feedfinder');
        $feeds = get_feed_from_url($url, $texte);
        // si on a a trouve un (ou plusieurs) on le note avec select:
        // ce qui constitue un signal pour exec=sites qui proposera de choisir
        // si on syndique, et quelle url.
        if (count($feeds) >= 1) {
            spip_log("feedfinder.php :\n" . join("\n", $feeds));
            $result['url_syndic'] = "select: " . join(' ', $feeds);
        }
    }
    cdata_echappe_retour($result, $echappe_cdata);
    return $result;
}
Example #18
0
/**
 * Envoie le courrier pret au depart
 *
 * Prend dans le panier des courriers a envoyer (spip_courriers) les encours
 * - formate le titre, texte pour l'envoi
 *
 * 
 * les etiquettes sont dans la queue d'envois (spip_auteurs_courriers)
 * - id_auteur (pour reprendre l'adresse mail de id_auteur)
 * - id_courrier (le courrier a dupliquer/envoyer)
 * 
 * la queue (spip_auteurs_courriers) a ete remplie par cron_spiplistes_cron()
 * se sert de la queue pour ventiler les envois par lots

 * le courrier (spip_courriers) doit avoir date <= time() et statut 'encour'
 * si email_test, la meleuse envoie le courrier a email_test, 
 *  supprime email_test du courrier 
 *  et repositionne le statut du courrier en 'redac'
 * si pas email_test mais id_liste, 
 *  regarde la queue d'envois (spip_auteurs_courriers) 
 *  et passe le statut du courrier (spip_courriers) a :
 *		'publie' si type == 'nl' (newsletter)
 *		'auto' si type == 'auto' (liste programmee)
 * 	et envoie les courriers precises aux abonnes de cette liste
 * 	et supprime l'identifiant du courrier dans la queue d'envois (spip_auteurs_courriers)

 * renvoie:
 * - nul, si la tache n'a pas a etre effectuee
 * - positif, si la tache a ete effectuee
 * - negatif, si la tache doit etre poursuivie ou recommencee
 *
 * @package spiplistes
 * @param int $last_time
 * @return int
 */
function spiplistes_meleuse ($last_time) {

	//spiplistes_debug_log('spiplistes_meleuse()');
	
	include_spip('inc/meta');
	include_spip('inc/texte');
	include_spip('inc/filtres');
	include_spip('inc/acces');
	include_spip('inc/spiplistes_api');
	include_spip('inc/spiplistes_api_courrier');
	
	include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php');

	// initialise les options (preferences)
	foreach(array(
		'opt_simuler_envoi'
		, 'opt_suspendre_meleuse'
		, 'opt_lien_en_tete_courrier', 'lien_patron'
		, 'opt_ajout_pied_courrier', 'pied_patron'
		, 'opt_ajout_tampon_editeur'
		, 'opt_personnaliser_courrier'
		, 'opt_log_voir_destinataire'
		, 'opt_ajout_lien_desabo'
		) as $key) {
		$$key = spiplistes_pref_lire($key);
	}
	
	$sql_vide = sql_quote('');
	$nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide);
	
	
	$prefix_log = _SPIPLISTES_PREFIX_LOG;
	
	// si meleuse suspendue, signale en log 
	if($opt_suspendre_meleuse == 'oui') {
		spiplistes_log($prefix_log.'SUSPEND MODE !!!');
		return(0 - $last_time);
	}

	if($nb_etiquettes) {
		
		$eol = "\n";
		$eol2 =$eol.$eol;
		$body_html_debut = '<html>'.$eol2.'<body style="margin:0;padding:0;">'.$eol2;
		$body_html_fin = $eol2.'</body></html>';
		$charset_spip = $GLOBALS['meta']['charset'];
		$charset_dest = $GLOBALS['meta']['spiplistes_charset_envoi'];

		spiplistes_log($prefix_log.$nb_etiquettes.' job(s), distribution...');
		
		$log_voir_destinataire = ($opt_log_voir_destinataire == 'oui');
		$simuler_envoi = ($opt_simuler_envoi == 'oui');
		
		// signale en log si mode simulation
		if($simuler_envoi) {
			spiplistes_log($prefix_log.'SIMULATION MODE !!!');
		}

		// prepare le tampon editeur
		if($opt_ajout_tampon_editeur == 'oui')
		{
			list($tampon_html, $tampon_texte) = spiplistes_tampon_assembler_patron();
		}
		else {
			$tampon_html = $tampon_texte = '';
		}
		
		// prendre la premiere etiquette sur le tas et traiter son courrier
		$sql_courrier_select = array(
			'titre', 'texte', 'message_texte', 'type'
			, 'id_courrier', 'id_liste', 'email_test', 'total_abonnes', 'date_debut_envoi'
			);
		if($id_courrier = 
			intval(spiplistes_courriers_en_queue_premier('id_courrier', 'etat='.$sql_vide))
		) {
			$sql_courrier_a_traiter = spiplistes_courriers_casier_premier(
				  $sql_courrier_select
				, 'id_courrier='.sql_quote($id_courrier)
			);
			spiplistes_debug_log ($prefix_log.'etiquette en cours pour id_courrier #'.$id_courrier);
		} else {
			// un vieux bug dans une ancienne version, eradique depuis (j'espere ;-)
			//spiplistes_log($prefix_log."premiere etiquette en erreur. id_courier = 0. Supprimer cette etiquette manuellement !");
			spiplistes_log(_T('spiplistes:erreur_queue_supprimer_courrier'
							  , array('s' => $prefix_log))
						   );
		}
		
		// boucle (sur LIMIT 1) pour pouvoir sortir par break si erreur
		while($row = sql_fetch($sql_courrier_a_traiter)) {
		
			foreach($sql_courrier_select as $key) {
				$$key = $row[$key];
			}
			foreach(array('id_courrier','id_liste','total_abonnes') as $key) {
				$$key = intval($$key);
			}
			// objet (subject) ne peut pas être en html ?!
			// sauf pour le webmail (et encore)
			$objet_html = filtrer_entites(typo(spiplistes_calculer_balise_titre(extraire_multi($titre))));
			$page_html = stripslashes($texte);
			$message_texte = stripslashes($message_texte);
			
			$nb_emails = array();
			
			// compteur pour la session uniquement
			// le total de chaque sera ajoute en fin de session
			$nb_emails_envoyes =
				$nb_emails_echec = 
				$nb_emails_non_envoyes = 
				$nb_emails['texte'] = 
				$nb_emails['html'] = 0
				;
			
			$str_log = 'id_courrier #'.$id_courrier;
			
			//////////////////////////
			// Determiner email de l emetteur
			if($is_a_test = email_valide($email_test)) {
				// courrier a destination adresse email de test
				$str_log .= ' TO: '.$email_test.' (TEST)';
			} 
			else if($id_liste > 0) {
				// courrier a destination des abonnes d'une liste
				$total_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste);
				$str_log .= ' TO id_liste #'.$id_liste.' ('.$total_abonnes.' users)';
	
				$lang = spiplistes_listes_langue($id_liste);

				if($lang != '') {
					$GLOBALS['spip_lang'] = $lang;
				}
				
				$contexte = array('lang' => $lang);
				
				list($pied_html, $pied_texte) = spiplistes_pied_page_assembler_patron($id_liste, $lang);
			}
			else {
				// erreur dans un script d'appel ? Ou url ? Ou base erreur ?
				$str_log .= ' [ERROR] MISSING PARAMS (id_liste AND email_test)';
				spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR);
				// quitte while() principal
				break;
			}
			
			//////////////////////////////
			// email emetteur
			$email_envoi = spiplistes_listes_email_emetteur($id_liste);
			if(!$is_a_test && !($email_envoi)) { 
				$str_log .= ' [ERROR] ID_LISTE #'.$id_liste.' or from email MISSING'; 
				spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR);
				// quitte while() principal
				break;
			}
			$from = $email_envoi;
			if($from_valide = email_valide($from)) {
				if(strpos($from, '<') === false) {
					$fromname = spiplistes_nom_site_texte ($lang);
					$fromname = extraire_multi($GLOBALS['meta']['nom_site']);
					if ($charset_dest!=$charset_spip)
					{
						include_spip('inc/charsets');
						$fromname = unicode2charset(charset2unicode($fromname),$charset_dest);
					}
				}
			}
			else {
				spiplistes_log('[ERROR] from address incorrect: '.$from);
				if($is_a_test) {
					spiplistes_courriers_statut_redac ($id_courrier);
				}
				// break; // garder pour incrementer les erreurs des listes
			}
			
			$email_reply_to = spiplistes_pref_lire_defaut('email_reply_to', $from);
			
			$return_path = spiplistes_pref_lire_defaut('email_return_path_defaut', $from);
			
			////////////////////////////////////
			// Prepare la version texte
			$objet_texte = $titre;
			$page_texte = ($message_texte !='')
				? $message_texte
				: spiplistes_courrier_version_texte($page_html)
				;
			
			////////////////////////////////////
			// Ajoute lien tete de courrier
			if(
				($opt_lien_en_tete_courrier == 'oui') 
				&& !empty($lien_patron)
			) {
				list($lien_html, $lien_texte) = spiplistes_courriers_assembler_patron (
					_SPIPLISTES_PATRONS_TETE_DIR . $lien_patron
					, array('id_courrier' => $id_courrier
							, 'lang' => $lang)
					);
				$page_html = $lien_html . $page_html;
				$page_texte = $lien_texte . $page_texte;
			}

			////////////////////////////////////
			// La petite ligne du renvoi du cookie pour modifier son abonnement
			//$pied_rappel_html = _T('spiplistes:modif_abonnement_html');
			//$pied_rappel_texte = _T('spiplistes:modif_abonnement_text');
			
			// transcrire le contenu
			if($charset_dest != $charset_spip){
				include_spip('inc/charsets');
				foreach(array(
					  'objet_html', 'objet_texte'
					, 'page_html', 'page_texte'
					, 'pied_html', 'pied_texte'
					//, 'pied_rappel_html', 'pied_rappel_texte'
					, 'tampon_html', 'tampon_texte') as $key) 
				{
					if(!empty($$key)) {
						$$key = spiplistes_translate_2_charset(
							$$key
							, $charset_dest
							, (strpos($key, 'texte') === false)
							);
					}
				}
			}
			
			// corrige les liens relatifs (celui de texte a deja ete corrige par la trieuse (cron)
			foreach(array('pied_html', 'pied_texte'
				//, 'pied_rappel_html', 'pied_rappel_texte'
				, 'tampon_html', 'tampon_texte') as $key) {
				if(!empty($$key)) {
					$$key = spiplistes_liens_absolus ($$key);
				}
			}
			
			$email_a_envoyer = array();
			$email_a_envoyer['texte'] = new phpMail('', $objet_texte, ''
													, $page_texte, $charset_dest);
			$email_a_envoyer['texte']->From = $from ; 
			if($fromname) $email_a_envoyer['texte']->FromName = $fromname ;
			// Errors-To:,    Non-standard @see: http://www.ietf.org/rfc/rfc2076.txt
			//$email_a_envoyer['texte']->AddCustomHeader('Errors-To: '.$return_path); 
			$email_a_envoyer['texte']->AddCustomHeader('Reply-To: '.$email_reply_to); 
			$email_a_envoyer['texte']->AddCustomHeader('Return-Path: '.$return_path); 
			$email_a_envoyer['texte']->SMTPKeepAlive = true;

			//$email_a_envoyer['html'] = new phpMail('', $objet_html, $page_html, $page_texte, $charset_dest);
			$email_a_envoyer['html'] = new phpMail(''
												   , $objet_html
												   , $page_html
												   , $page_texte
												   , $charset_dest
												   );
			$email_a_envoyer['html']->From = $from ; 
			if($fromname) {
				$email_a_envoyer['html']->FromName = $fromname ;
			}
			//$email_a_envoyer['html']->AddCustomHeader('Errors-To: '.$return_path); 
			$email_a_envoyer['html']->AddCustomHeader('Reply-To: '.$email_reply_to); 
			$email_a_envoyer['html']->AddCustomHeader('Return-Path: '.$return_path); 	
			$email_a_envoyer['html']->SMTPKeepAlive = true;
		
			$str_log .= ' REPLY-TO: '.$email_reply_to.' RETURN-PATH: '.$return_path;
			
			if($total_abonnes) {
		
				$limit = intval($GLOBALS['meta']['spiplistes_lots']); // nombre de messages envoyes par boucles.	
				
				if($is_a_test) {
					$sql_adresses_dest = sql_select('id_auteur,nom,email', 'spip_auteurs'
						, 'email='.sql_quote($email_test).' LIMIT 1');
				}
				else {
					// Pour memo: les etiquettes sont creees par la trieuse
					// ou directement en backoffice 
					// - pour les envois de test
					// - pour les envoyer maintenant des courriers
					
					// Traitement d'une liasse d'etiquettes
					// un id pour ce processus (le tampon est unique par liasse)
					$id_process = intval(substr(creer_uniqid(),0,5));
					$prefix_log .= '['.$id_process.'] ';
			
					// un coup de tampon sur les etiquettes 
					// des courriers qui vont partir
					spiplistes_courriers_en_queue_modifier(
						array(
							  'etat' => sql_quote($id_process))
							, 'etat='.$sql_vide.' AND id_courrier='.sql_quote($id_courrier).' LIMIT '.$limit
					);
					
					// prendre la liasse des etiquettes tamponnees
					$sql_adresses_dest = sql_select(
						  array('a.nom', 'a.id_auteur', 'a.email')
						, array('spip_auteurs AS a', 'spip_auteurs_courriers AS b')
						, array(
							'etat='.sql_quote($id_process)
							, 'a.id_auteur=b.id_auteur'
							, 'b.id_courrier='.sql_quote($id_courrier)
							)
						, 'a.email'
					);
				}
					
				$nb_destinataires = sql_count($sql_adresses_dest);
				spiplistes_log($prefix_log.'nb etiquettes a traiter: '.$nb_destinataires);
				if($nb_destinataires > 0) {

					spiplistes_debug_log($prefix_log.'total_abos: '.$total_abonnes.', en cours: '.$nb_destinataires.', limit: '.$limit);

/*
// CP:20100215: inutile de compter AVANT
// si process en //, le chiffre est faux
					// replacer les compteurs
					if($row = sql_fetch(sql_select(
						"nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html"
						, 'spip_courriers'
						, 'id_courrier='.sql_quote($id_courrier)
						, '', '', 1
						))
					) {
						$nb_emails_envoyes = intval($row['nb_emails_envoyes']);
						$nb_emails_echec = intval($row['nb_emails_echec']);
						$nb_emails_non_envoyes = intval($row['nb_emails_non_envoyes']);
						$nb_emails['texte'] = intval($row['nb_emails_texte']);
						$nb_emails['html'] = intval($row['nb_emails_html']);
					}
*/

					//envoyer le lot d'emails selectionne' (la liasse)
					while($adresse = sql_fetch($sql_adresses_dest)) {

						if($log_voir_destinataire) {
							$str_temp = '';
						}

						$id_auteur = intval($adresse['id_auteur']);
						$nom_auteur = $adresse['nom'];
						$email = $adresse['email'];

						// Marquer le debut de l'envoi
						if(!intval($date_debut_envoi)) {
							spiplistes_courrier_modifier ($id_courrier, array('date_debut_envoi' => 'NOW()'), false);
						}
				
						$format_abo = spiplistes_format_abo_demande($id_auteur);

						$total++;
						if($log_voir_destinataire) {
							$str_temp .= $nom_auteur.'('.$format_abo.') - '.$email;
						}
						unset ($cookie);
		
						if(($format_abo=='html') || ($format_abo=='texte')) {
							$cookie = creer_uniqid();
							spiplistes_auteurs_cookie_oubli_updateq($cookie, $email);
		
							if($from_valide) {
								//$_url = generer_url_public('abonnement','d='.$cookie);
								
								if($opt_personnaliser_courrier == 'oui') {
									list($ventre_html, $ventre_texte) = spiplistes_personnaliser_courrier(
																			$page_html
																			, $page_texte
																			, $id_auteur
																			, $format_abo
																		);
								}
								else {
									$ventre_html = $page_html;
									$ventre_texte = $page_texte;
								}
								// le &amp; semble poser probleme sur certains MUA. A suivre...
								//$_url = preg_replace(',(&amp;),','&', $_url);
								
								// Pour le moment (27/03/2011), un seul patron connu
								$lien_rappel = 'lien_standard';
								
								list($pied_rappel_html, $pied_rappel_texte) = spiplistes_courriers_assembler_patron (
									_SPIPLISTES_PATRONS_LIEN_DIR . $lien_rappel
									, array('id_courrier' => $id_courrier
											, 'id_liste' => $id_liste
											, '_url' => generer_url_public()
											, 'lang' => $lang
											, 'd' => $cookie
											, 'lien_desabo' => ($opt_ajout_lien_desabo == 'oui')
											)
								);
								$pied_rappel_texte = spiplistes_translate_2_charset ($pied_rappel_texte
																					 , $charset_dest
																					 , true);
								
								switch($format_abo) {
									case 'html':
										// Si on ne trouve pas les tags HTML alors on les ajoutes
										if (FALSE === strpos($ventre_html, '</html>')) {
											$email_a_envoyer[$format_abo]->Body =
												  $body_html_debut . $eol
												. $ventre_html . $eol
												. $pied_html . $eol
												. $pied_rappel_html . $eol
												. $tampon_html . $eol
												. $body_html_fin
												;										
										} else {
											// Si on trouve les tags HTML cela veut dire que l'auteur
											// veut pouvoir gerer lui meme la partie <head> ainsi que le lien de desabonnement
											// donc on ne prend en compte que la partie ventre_html.
											$tags_perso = array('http://%URL_ABONNEMENT%' => generer_url_public('abonnement','d='.$cookie),);
											$email_a_envoyer[$format_abo]->Body = str_replace(array_keys($tags_perso), array_values($tags_perso), $ventre_html);
										}
										// la version alternative texte 
										$email_a_envoyer[$format_abo]->AltBody = 
											$ventre_texte .$eol2
											. $pied_texte . $eol2
											. $pied_rappel_texte . $eol2
											. $tampon_texte
											;
										break;
									case 'texte':
										$email_a_envoyer[$format_abo]->Body =
											$ventre_texte .$eol2
											. $pied_texte . $eol2
											. $pied_rappel_texte . $eol2
											. $tampon_texte
											;
										break;
								}

								$email_a_envoyer[$format_abo]->SetAddress($email, $nom_auteur);
								// envoie le mail																
								if($simuler_envoi || $email_a_envoyer[$format_abo]->send()) {
									$nb_emails_envoyes++;
									$nb_emails[$format_abo]++;
									if($log_voir_destinataire) {
										$str_temp .= '  [OK]';
									}
								}
								else {
									$nb_emails_echec++;
									if($log_voir_destinataire) {
										$str_temp .= _T('spiplistes:erreur_mail');
									}
								}
							}
							else {
								$nb_emails_echec++;
								if($log_voir_destinataire) {
									$str_temp .= _T('spiplistes:sans_adresse');
								}
							} 
							
						} // end if(($format_abo=='html') || ($format_abo=='texte'))
						else {  
							$nb_emails_non_envoyes++; 
							if($log_voir_destinataire) {
								$str_temp .= ' '._T('spiplistes:msg_abonne_sans_format');
							}
							// prevenir qu'il manque le format
							spiplistes_log($prefix_log.' destination format MISSING FOR ID_AUTEUR #'.$id_auteur);
						} /* fin abo*/
						
						if($log_voir_destinataire) {
							spiplistes_log($prefix_log.$str_temp);
						}
						
					} // fin while
					
					// supprime la liasse de la queue d'envois
					spiplistes_debug_log($prefix_log."envoi OK. Supprimer queue $id_process");
					spiplistes_courriers_en_queue_supprimer('etat='.sql_quote($id_process));
					
					// si c'est un test on repasse le courrier en redac
					if($is_a_test) {
						spiplistes_courriers_statut_redac ($id_courrier);
					}
					$email_a_envoyer['texte']->SmtpClose();
					$email_a_envoyer['html']->SmtpClose();
				} // end if 
			}
			else {
				//aucun destinataire connu pour ce message
				spiplistes_debug_log($prefix_log._T('spiplistes:erreur_sans_destinataire')
									 . '---' . _T('spiplistes:envoi_annule')
									 );
				spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_IGNORE);
				spiplistes_courrier_supprimer_queue_envois('id_courrier', $id_courrier);
				$str_log .= ' END #'.$id_courrier;
				// 
				break;
			}

			if(!$is_a_test) {
				// faire le bilan apres l'envoi d'un lot
				$sql_set_array = array(
					  'nb_emails_envoyes' => sql_quote('nb_emails_envoyes').'+'.$nb_emails_envoyes
					, 'nb_emails_texte' => sql_quote('nb_emails_texte').'+'.$nb_emails['texte']
					, 'nb_emails_html' => sql_quote('nb_emails_html').'+'.$nb_emails['html']
				);
				if($nb_emails_echec) {
					$sql_set_array['nb_emails_echec'] = sql_quote('nb_emails_echec').'+'.$nb_emails_echec;
				}
				if($nb_emails_non_envoyes) {
					$sql_set_array['nb_emails_non_envoyes'] = sql_quote('nb_emails_non_envoyes').'+'.$nb_emails_non_envoyes;
				}

				spiplistes_log($prefix_log.$str_log);
				
				$str_log = spiplistes_trace_compteur ($id_courrier
												   , $nb_emails_envoyes
												   , $nb_emails['html']
												   , $nb_emails['texte']
												   , $nb_emails_non_envoyes
												   , $nb_emails_echec
												   , 'SESSION');

				// si courrier pas termine, redemande la main au CRON, sinon nettoyage.
				if($t = spiplistes_courriers_en_queue_compter('id_courrier='.sql_quote($id_courrier))) {
					$str_log .= ' LEFT '.$t.' jobs'; 
				}
				else {
					$statut = ($type == _SPIPLISTES_COURRIER_TYPE_NEWSLETTER) ? _SPIPLISTES_COURRIER_STATUT_PUBLIE : _SPIPLISTES_COURRIER_STATUT_AUTO;
					spiplistes_debug_log($prefix_log."nouveau statut $statut");
					$sql_set_array['statut'] = sql_quote($statut);
					$sql_set_array['date_fin_envoi'] = 'NOW()';
					$str_log .= ' END #'.$id_courrier;
				}
				spiplistes_courrier_modifier($id_courrier, $sql_set_array, false);
				
				// placer en log le suivi des compteurs si mode debug
				if (spiplistes_debug_log())
				{					
					if ($row = sql_fetch(sql_select(
						'nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html'
						, 'spip_courriers'
						, 'id_courrier='.sql_quote($id_courrier)
						, '', '', 1
						))
					) {
						spiplistes_log($prefix_log.$str_log);
						
						$str_log = spiplistes_trace_compteur ($id_courrier
												   , $row['nb_emails_envoyes']
												   , $row['nb_emails_html']
												   , $row['nb_emails_texte']
												   , $row['nb_emails_non_envoyes']
												   , $row['nb_emails_echec']
												   , 'FROM_DB')
												. ' END #'.$id_courrier;
												;
					}
				}
				
			}
		} // end while()
	} // end if($nb_etiquettes)
	else {
		$str_log = 'no job'; 
	}

	spiplistes_log($prefix_log.$str_log);

	if(($ii = spiplistes_courriers_total_abonnes()) > 0) {
		// il en reste apres la meleuse ? Signale au CRON tache non terminee
		$nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide);
		spiplistes_log($prefix_log.'courriers prets au depart ('.$nb_etiquettes.'/'.$ii.')');
		$last_time = -$last_time;
	}
	
	return($last_time);
} // end spiplistes_meleuse()
Example #19
0
function cdata_echappe_retour(&$x, &$echappe_cdata)
{
    if (is_string($x)) {
        if (strpos($x, '&lt;') !== false) {
            $x = filtrer_entites($x);
        }
        if (strpos($x, '@@@SPIP_CDATA') !== false) {
            $x = str_replace(array_keys($echappe_cdata), array_values($echappe_cdata), $x);
        }
    } else {
        if (is_array($x)) {
            foreach ($x as $k => &$v) {
                cdata_echappe_retour($v, $echappe_cdata);
            }
        }
    }
}
Example #20
0
function exec_spiplistes_liste_edit(){

	include_spip('inc/barre');
	include_spip('inc/spiplistes_api');
	include_spip('inc/spiplistes_api_presentation');
	include_spip('inc/spiplistes_naviguer_paniers');
	
	global $connect_statut
		, $connect_toutes_rubriques
		, $connect_id_auteur
		, $spip_ecran
		;
	
	// initialise les variables postees par le formulaire
	foreach(array(
		'new'	// nouvelle liste si 'oui'
		, 'id_liste'// si modif dans l'editeur
		, 'titre', 'texte'
		) as $key) {
		$$key = _request($key);
	}
	foreach(array('id_liste') as $key) {
		$$key = intval($$key);
	}

	$flag_editable = false;
	$clearonfocus = '';
	
	// MODE LISTE EDIT: modification ou creation
	
	if($id_liste > 0) {
	///////////////////////////////
	// Modification de la liste transmise
	//
		// les admins toutes rubriques et le moderateur seuls peuvent modifier la liste
		$flag_editable = autoriser('moderer', 'liste', $id_liste);

		$sql_select_array = array('titre', 'lang', 'pied_page', 'texte', 'date', 'statut');
	
		if($row = spiplistes_listes_liste_fetsel($id_liste, $sql_select_array)) {
			foreach($sql_select_array as $key) {
				$$key = $row[$key];
			}
			// supers-admins et moderateur seuls ont droit de modifier la liste
//			$ids_mods_array = spiplistes_mod_listes_get_id_auteur($id_liste);
//			$ids_mods_array = ($ids_mods_array && isset($ids_mods_array[$id_liste]) ? $ids_mods_array[$id_liste] : array();
//			$flag_editable = ($connect_toutes_rubriques || in_array($connect_id_auteur, $ids_mods_array));
		}
		else {
			// liste perdue ?
			$id_liste = 0;
		}
	} 
	
	if(!$id_liste) {
	///////////////////////////////
	// Creation de la liste
	//
		$titre = filtrer_entites(_T('spiplistes:Nouvelle_liste_de_diffusion'));
		$texte = "";
		$clearonfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
		// les admins ont droit de creer une liste
		$flag_editable = ($connect_statut == "0minirezo");
	}

	$gros_bouton_retour = icone(
		_T('spiplistes:retour_link')
		, generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=" . ($lier_trad ? $lier_trad : $id_liste) )
		, "article-24.gif"
		, "rien.gif"
		, ""
		, false
		)
		;
		

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

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

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

	// la gestion des listes de courriers est reservee aux admins 
	if(!$flag_editable) {
		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)
		. spiplistes_boite_info_id(_T('spiplistes:liste_numero'), $id_liste, true)
		. spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), 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() // ne pas gener l'edition
		. pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		. debut_droite($rubrique, true)
		;

	$titre = entites_html($titre);
	$texte = entites_html($texte);
	
	$formulaire_action = 
		($id_liste > 0)
		? generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "id_liste=$id_liste")
		: generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER)
		;

	$page_result .= ""
		. debut_cadre_formulaire("", true)
		. "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>"
		. "<tr>"
		. "<td>"
		. $gros_bouton_retour
		. "</td>"
		. "<td><img src='"._DIR_IMG_PACK."rien.gif' alt='' width='10' /></td>\n"
		. "<td width='100%'>"
		.	(
				(!$id_liste)
				? _T('spiplistes:Creer_une_liste_')
				: _T('spiplistes:modifier_liste')
			) . ":"
		. spiplistes_gros_titre($titre, '', true)
		. "</td>"
		. "</tr></table>"
		. "<hr />"
		. "<form action='$formulaire_action' method='post' name='formulaire'>\n"
		. (
			($id_liste)
			? "<input type='hidden' name='id_liste' value='$id_liste' />" 
			: "<input type='hidden' name='new' value='oui' />"
				// une nouvelle liste est toujours privee
				. "<input type='hidden' name='statut_nouv' value='"._SPIPLISTES_LIST_PRIVATE."' />"
			)
		.	(
			// ne sert pas pour le moment (CP-20070922)
			($lier_trad)
			? "<input type='hidden' name='lier_trad' value='$lier_trad' />"
			: ""
			)
		. _T('texte_titre_obligatoire').":"
		. "<br />"
		// champ titre
		. "<input type='text' name='titre' class='formo' value=\"$titre\" size='40' $clearonfocus />"
		. "<br />"
		. "<strong>"._T('spiplistes:texte_dinsctription_')."</strong>"
		. "<br />"._T('spiplistes:txt_abonnement')
		// boite edition texte
		. afficher_barre('document.formulaire.texte')
		. "<textarea id='text_area' name='texte' ".$GLOBALS['browser_caret']
			." class='formo' rows='".(($spip_ecran == "large") ? 28 : 20)."' cols='40'>\n"
		. $texte
		. "</textarea>\n"
		// pied de page
		// inutile de l'afficher, on a pas encore le contexte (lang)
		//. _T('spiplistes:texte_pied')
		//. _T('spiplistes:texte_contenu_pied')
		//. "<div style='background-color:#fff'>"
		//. $pied_page
		//. "</div>"
		. "<p align='right' class='verdana2'>"
		. "<input class='fondo' type='submit' name='btn_liste_edit' value='"._T('bouton_valider')."' />"
		. "</p>"
		. "</form>"
		. fin_cadre_formulaire(true)
		;

	echo($page_result);

	// MODE LISTE EDIT: FIN --------------------------------------------------------
	
	echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>''))
		, spiplistes_html_signature(_SPIPLISTES_PREFIX)
		, fin_gauche(), fin_page();

}
Example #21
0
function cs_urls_propres($type, $id) {
	global $type_urls;
	if(!$id) return '';
	$res = "";
	// SPIP >= 2.0
	if(defined('_SPIP19300')) {
		$url = generer_url_entite_absolue($id, $type, '', '', true);
		$lien_public = "\n[<span>[". _T('couteau:urls_propres_lien'). "|{$url}->{$url}]</span>]\n\n";
		$s = sql_select("url", "spip_urls", "id_objet=$id AND type='$type'", '', 'date DESC');
		while ($t = sql_fetch($s)) $res .= ($res?'<br />':'')."&bull;&nbsp;$t[url]\n";
	// SPIP < 2.0
	} else {
		// impossible de calculer l'url publique d'ici.
		$table = $type.($type=='syndic'?'':'s');
		$r = spip_query("SELECT url_propre FROM spip_$table WHERE id_$type=$id");
		if ($r && $r = spip_fetch_array($r) ) {
			if(!strlen($r=$r['url_propre'])) $r=_T('couteauprive:variable_vide');
			$res .= "&bull;&nbsp;$r\n";
		}
		$lien_public = './?exec=action_rapide&arg=type_urls|URL_objet_191&format=iframe&type_objet='.$type.'&id_objet='.$id.'&script=foo';
		$lien_public = '<iframe src="'.$lien_public.'" width="100%" style="border:none; height:4em;"></iframe>';
	}

	$format = in_array($type_urls, array('page', 'standard', 'html'))
		?_T('couteau:urls_propres_erreur')
		:_T('couteau:urls_propres_objet');
	$mem = $GLOBALS['class_spip_plus'];
	$GLOBALS['class_spip_plus']=' class="spip"';
	$res = propre(
		_T('couteau:urls_propres_format', array(
			'format'=>$type_urls,
			'url'=>generer_url_ecrire('admin_couteau_suisse', 'cmd=descrip&outil=type_urls#cs_infos')
		)). "\n\n"
		. $format . "\n\n"
		. '|{{'. _T('couteau:2pts', array(
			'objet'=>strtoupper(filtrer_entites(_T('couteau:objet_'.$type))).' '.$id
		))."}}|\n"
		. "|$res|")
		// bug SPIP ?
		. propre($lien_public);
	$GLOBALS['class_spip_plus'] = $mem;
	return cs_cadre_depliable(_T('couteau:urls_propres_titre'), 'bp_urls_propres', $res);
}
function preparer_texte($texte)
{
    //$texte = "Philippe Lucas et Jean-Claude Vatin, Maspero, Paris, 1975."; << merde car pas d'espace au debut
    //http://archives.mondediplo.com/?page=noms&id_article=2488
    //$texte = "Dans l’article d’Eric Rouleau « Ce pouvoir si pesant des militaires turcs »" ; << '
    // M. François d’Orcival http://archives.mondediplo.com/?page=noms&id_article=38507&var_mode=recalcul
    //$texte = "M. François d'Orcival" ;
    // $texte = "Fondé en 1954, sur l’initiative de M. François Honti, par M. Beuve-Méry, le Monde diplomatique atteint";
    // insecables utf-8
    $texte = str_replace(" ", " ", $texte);
    $texte = str_replace("’", "'", $texte);
    $texte = str_replace("~", " ", $texte);
    // Nettoyer les inters et itals spip.
    $texte = str_replace("}}}", ". ", $texte);
    // gras spip
    $texte = str_replace("{{", "", $texte);
    $texte = str_replace("}}", "", $texte);
    include_spip("inc/filtres");
    $texte = " " . filtrer_entites($texte);
    // ne pas louper un nom en début de texte.
    return $texte;
}
Example #23
0
 function filtre_filtrer_entites_dist($t)
 {
     include_spip('inc/texte');
     return interdire_scripts(filtrer_entites($t));
 }
Example #24
0
function cs_sauve_configuration() {
	global $outils, $metas_vars;
	$metas = $metas_actifs = $variables = $lesoutils = $actifs = array();
	foreach($outils as $t) {
		$lesoutils[] = "\t// ".$t['nom']."\n\t'".$t['id']."' => '".join('|', $t['variables']) . "'";
		if($t['actif']) {
			$actifs[] = $t['id'];
			$variables = array_merge($variables, $t['variables']);
		}
	}
	foreach($metas_vars as $i => $v) if($i!='_chaines' && $i!='_nombres') {
		$metas[] = $temp = "\t'$i' => " . cs_php_format($v, in_array($i, $metas_vars['_chaines']));
		if(in_array($i, $variables)) $metas_actifs[] = $temp;
	}
	$sauve = "// Tous les outils et leurs variables\n\$liste_outils = array(\n" . join(",\n", $lesoutils) . "\n);\n"
		. "\n// Outils actifs\n\$outils_actifs =\n\t'" . join('|', $actifs) . "';\n"
		. "\n// Variables actives\n\$variables_actives =\n\t'" . join('|', $variables) . "';\n"
		. "\n// Valeurs validees en metas\n\$valeurs_validees = array(\n" . join(",\n", $metas) . "\n);\n";

	include_spip('inc/charset');
	$nom_pack = _T('couteauprive:pack_actuel', array('date'=>cs_date()));
	$fct_pack = md5($nom_pack.time());
	$sauve .= $temp = "\n######## "._T('couteauprive:pack_actuel_titre')." #########\n\n// "
		. filtrer_entites(_T('couteauprive:pack_actuel_avert')."\n\n"
			. "\$GLOBALS['cs_installer']['$nom_pack'] =\t'cs_$fct_pack';\nfunction cs_$fct_pack() { return array(\n\t// "
			. _T('couteauprive:pack_outils_defaut')."\n"
			. "\t'outils' =>\n\t\t'".join(",\n\t\t", $actifs)."',\n"
			. "\n\t// "._T('couteauprive:pack_variables_defaut')."\n")
		. "\t'variables' => array(\n\t" . join(",\n\t", $metas_actifs) . "\n\t)\n);} # $nom_pack #\n";

	ecrire_fichier(_DIR_CS_TMP.'config.php', '<'."?php\n// Configuration de controle pour le plugin 'Couteau Suisse'\n\n$sauve?".'>');
	if(@$_GET['cmd']=='pack') $GLOBALS['cs_pack_actuel'] = $temp;
}
Example #25
0
function action_editer_message_post_nouveau($type, $dest='', $rv='')
{

	$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];

	$mydate = date("YmdHis", time() - 2 * 24 * 3600);
	sql_delete("spip_messages", "(statut = 'redac') AND (date_heure < $mydate)");

	if ($type == 'pb') $statut = 'publie';
	else $statut = 'redac';

	$titre = filtrer_entites(_T('texte_nouveau_message'));

	$vals = array('titre' => $titre,
		      'statut' => $statut,
		      'type' => $type,
		      'id_auteur' => $id_auteur);

	if (!$rv)
		$vals['date_heure'] = date('Y-m-d H:i:s');
	else {
		$vals['date_heure'] = "$rv 12:00:00";
		$vals['date_fin'] = "$rv 13:00:00";
		$vals['rv'] = 'oui';
	}

	$id_message = sql_insertq("spip_messages", $vals);

	if ($type != "affich"){
		sql_insertq('spip_auteurs_messages',
		   array('id_auteur' => $id_auteur,
			 'id_message' => $id_message,
			 'vu' =>'oui'));
		if ($dest) {
			sql_insertq('spip_auteurs_messages',
				    array('id_auteur' => $dest,
					  'id_message' => $id_message,
					  'vu' =>'non'));
		}
	}

	redirige_url_ecrire('message_edit', "id_message=$id_message&new=oui&dest=$dest");
}
Example #26
0
function cdata_echappe_retour(&$table, &$echappe_cdata) {
	foreach ($table as $var => $val) {
		$table[$var] = filtrer_entites($table[$var]);
		foreach ($echappe_cdata as $n => $e)
			$table[$var] = str_replace("@@@SPIP_CDATA$n@@@",
				$e, $table[$var]);
	}
}
Example #27
0
function microformat2enclosure($tags)
{
    $enclosures = array();
    foreach (extraire_balises($tags, 'a') as $e) {
        if (extraire_attribut($e, 'rel') == 'enclosure') {
            $url = filtrer_entites(extraire_attribut($e, 'href'));
            $type = extraire_attribut($e, 'type');
            if (!($length = intval(extraire_attribut($e, 'title')))) {
                $length = intval(extraire_attribut($e, 'length'));
            }
            # vieux data
            $fichier = basename($url);
            $enclosures[] = '<enclosure' . ($url ? ' url="' . spip_htmlspecialchars($url) . '"' : '') . ($type ? ' type="' . spip_htmlspecialchars($type) . '"' : '') . ($length ? ' length="' . $length . '"' : '') . ' />';
        }
    }
    return join("\n", $enclosures);
}
Example #28
0
function cdata_echappe_retour(&$x, &$echappe_cdata)
{
    if (is_string($x)) {
        if (strpos($x, '@@@SPIP_CDATA') !== false or strpos($x, '&lt;') !== false) {
            $x = filtrer_entites($x);
            foreach ($echappe_cdata as $n => $e) {
                $x = str_replace("@@@SPIP_CDATA{$n}@@@", $e, $x);
            }
        }
    } else {
        if (is_array($x)) {
            foreach ($x as $k => &$v) {
                cdata_echappe_retour($v, $echappe_cdata);
            }
        }
    }
}