File "newsletters_administrations.php"

Full path: /home/argothem/www/organecyberpresse/plugins/auto/newsletters/v3.0.1/newsletters_administrations.php
File size: 9.35 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * Plugin Newsletters
 * (c) 2012 Cedric Morin
 * Licence GNU/GPL
 */

if (!defined('_ECRIRE_INC_VERSION')) return;


/**
 * Fonction d'installation du plugin et de mise à jour.
**/
function newsletters_upgrade($nom_meta_base_version, $version_cible) {
	$maj = array();

	$maj['create'] = array(
		array('maj_tables', array('spip_newsletters', 'spip_newsletters_liens')),
		array('newsletters_import_from_spiplistes'),
		array('newsletters_import_from_spiplettres'),
		array('newsletters_import_from_clevermail'),
	);

	$maj['0.1.1'] = array(
		array('sql_alter', "table spip_newsletters ADD baked tinyint NOT NULL DEFAULT 0"),
	);

	$maj['0.2.1'] = array(
		array('sql_alter', "table spip_newsletters ADD recurrence text NOT NULL DEFAULT ''"),
		array('sql_alter', "table spip_newsletters ADD email_test text NOT NULL DEFAULT ''"),
		array('sql_alter', "table spip_newsletters ADD liste text NOT NULL DEFAULT ''"),
	);
	$maj['0.3.0'] = array(
		array('maj_tables', array('spip_newsletters')),
	);

	$maj['0.3.1'] = array(
		array('maj_tables', array('spip_newsletters')),
	);

	include_spip('base/upgrade');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
}


/**
 * Fonction de désinstallation du plugin.
**/
function newsletters_vider_tables($nom_meta_base_version) {

	sql_drop_table("spip_newsletters");
	sql_drop_table("spip_newsletters_liens");

	# Nettoyer les versionnages et forums
	sql_delete("spip_versions",              sql_in("objet", array('newsletter')));
	sql_delete("spip_versions_fragments",    sql_in("objet", array('newsletter')));
	sql_delete("spip_forum",                 sql_in("objet", array('newsletter')));

	effacer_meta($nom_meta_base_version);
}




/**
 * Importe les lettres du plugin SPIP Listes
 *
 * @note
 *     Très proche de l'import fait par 'mailshot' également.
 *
 * @return void|null
**/
function newsletters_import_from_spiplistes(){
	$trouver_table = charger_fonction("trouver_table","base");
	if ($desc = $trouver_table('spip_courriers')){

		include_spip('inc/charsets');
		include_spip("action/editer_objet");

		sql_alter("TABLE spip_courriers ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
		$res = sql_select(
			"C.id_courrier,C.titre as sujet, C.texte as html, C.message_texte as texte," .
			"C.date_fin_envoi as date,C.date_debut_envoi as date_start, C.statut AS statut",
			'spip_courriers AS C',"C.id_newsletter=0 AND C.total_abonnes>0 AND ".sql_in("C.type",array('nl','auto')));
		while ($row = sql_fetch($res)){

			$id_courrier = $row['id_courrier'];
			unset($row['id_courrier']);

			// nettoyer les vieux hacks de spip-listes
			$row['html'] = preg_replace(",__bLg__[0-9@\.A-Z_-]+__bLg__,","",$row['html']);

			if ($GLOBALS['meta']['charset']=='utf-8'){
				if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
				if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
				if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
			}

			// id dans mailshot
			$hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));

			// remettre le format pour newsletter.
			$row['titre']        = $row['sujet'];
			$row['texte_email']  = $row['texte'];
			$row['html_email']   = $row['html'];
			$row['html_page']    = $row['html'];
			unset($row['sujet'], $row['texte'], $row['html'], $row['id'], $row['date_start']);
			if ($row['statut']=="auto")
				$row['statut'] = "publie";
			if (!in_array($row['statut'],array("publie","prop","prepa")))
				$row['statut'] = 'publie';
			$row['baked'] = 1;

			// inserer la lettre dans newsletter
			if ($id_newsletter = newsletters_import_one($row)){
				sql_updateq("spip_courriers",array('id_newsletter'=>$id_newsletter),"id_courrier=".intval($id_courrier));
				sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
				spip_log("import from spip_listes newsletters $id_newsletter ".var_export($row,true),"newsletters");
			}

			// timeout ? on reviendra
			if (time() >= _TIME_OUT)
				return;
		}
		sql_alter("TABLE spip_courriers DROP id_newsletter");
	}
}



/**
 * Importe les lettres & abonnés du plugin SPIP Lettres
 *
 * @note
 *     Très proche de l'import fait par 'mailshot' également.
 *
 * @return void|null
**/
function newsletters_import_from_spiplettres(){
	$trouver_table = charger_fonction("trouver_table","base");
	if ($trouver_table('spip_lettres')
	  AND $trouver_table('spip_abonnes_lettres')){

		include_spip('inc/charsets');
		include_spip("action/editer_objet");

		// importer les envois
		sql_alter("TABLE spip_lettres ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
		$res = sql_select(
			"id_lettre,titre as sujet,message_html as html,message_texte as texte,date_fin_envoi as date,date_debut_envoi as date_start",
			'spip_lettres',"id_newsletter=0 AND statut=".sql_quote('envoyee'));
		while ($row = sql_fetch($res)){

			$id_lettre = $row['id_lettre'];
			unset($row['id_lettre']);

			if ($GLOBALS['meta']['charset']=='utf-8'){
				if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
				if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
				if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
			}

			// id dans mailshot
			$hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));

			$row['statut'] = 'publie';

			// remettre le format pour newsletter.
			$row['titre']        = $row['sujet'];
			$row['texte_email']  = $row['texte'];
			$row['html_email']   = $row['html'];
			$row['html_page']    = $row['html'];
			unset($row['sujet'], $row['texte'], $row['html'], $row['date_start']);
			$row['baked'] = 1;

			if ($id_newsletter = newsletters_import_one($row)){
				sql_updateq("spip_lettres",array('id_newsletter'=>$id_newsletter),"id_lettre=".intval($id_lettre));
				sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
				spip_log("import from spip_lettres newsletters $id_newsletter ".var_export($row,true),"newsletters");
			}

			// timeout ? on reviendra
			if (time() >= _TIME_OUT)
				return;
		}

		// et c'est tout !
		sql_alter("TABLE spip_lettres DROP id_newsletter");
	}
}


/**
 * Importe les lettres du plugin Clevermail
 *
 * @note
 *     Très proche de l'import fait par 'mailshot' également.
 *
 * @return void|null
**/
function newsletters_import_from_clevermail(){
	$trouver_table = charger_fonction("trouver_table","base");
	if ($trouver_table('spip_cm_posts')
	  AND $trouver_table('spip_cm_posts_done')) {
		spip_log('Import des lettres clevermail', 'newsletters');

		include_spip("inc/charsets");
		include_spip("action/editer_objet");

		// Importer les lettres
		// ajout d'un champ le temps de l'import. Évite d'attraper 2 fois une même lettre et de reprendre sur timeout.
		sql_alter("TABLE spip_cm_posts ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
		$res = sql_select(array(
			"C.pst_id",
			"C.pst_subject AS sujet",
			"C.pst_html AS html",
			"C.pst_text AS texte",
			"C.pst_date_create AS date",
			"C.pst_date_sent AS date_start",
			),
			'spip_cm_posts AS C',
			"C.id_newsletter=0");
		while ($row = sql_fetch($res)){

			$pst_id = $row['pst_id'];
			unset($row['pst_id']);

			// Tant qu'à faire, remplacer des mauvais restes
			$row['html']  = str_replace('@@NOM_LETTRE@@', $row['sujet'], $row['html']);
			$row['texte'] = str_replace('@@NOM_LETTRE@@', $row['sujet'], $row['texte']);

			if ($GLOBALS['meta']['charset']=='utf-8'){
				if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
				if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
				if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
			}

			// id dans mailshot
			$hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));

			// corriger les dates actuellement en time
			$row['date']       = date('Y-m-d H:i:s', $row['date']);
			#$row['date_start'] = date('Y-m-d H:i:s', $row['date_start']);

			$row['statut'] = 'publie';

			// remettre le format pour newsletter.
			$row['titre']        = $row['sujet'];
			$row['texte_email']  = $row['texte'];
			$row['html_email']   = $row['html'];
			$row['html_page']    = $row['html'];
			unset($row['sujet'], $row['texte'], $row['html'], $row['date_start']);
			$row['baked'] = 1;

			// inserer la lettre dans newsletter
			if ($id_newsletter = newsletters_import_one($row)){
				sql_updateq("spip_cm_posts", array('id_newsletter'=>$id_newsletter), "pst_id=".intval($pst_id));
				sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
				spip_log("import from spip_cm_posts newsletter $id_newsletter ".var_export($row,true),"newsletters");
			}

			// timeout ? on reviendra
			if (time() >= _TIME_OUT)
				return;
		}

		// C'est fini !
		sql_alter("TABLE spip_cm_posts DROP id_newsletter");
	}

}


/**
 * Insère une newsletter en base
 *
 * @param array $set
 *     Couples de données à enregistrer
 * @return int
 *     Identifiant de la newsletter
**/
function newsletters_import_one($set){
	include_spip("inc/drapeau_edition");
	$id = objet_inserer("newsletter",0,$set);
	objet_modifier("newsletter",$id,$set); // double detente
	debloquer_tous($GLOBALS['visiteur_session']['id_auteur']);
	return $id;
}


?>