Skip to content

Instantly share code, notes, and snippets.

@bystrano
Created June 10, 2013 09:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bystrano/5747558 to your computer and use it in GitHub Desktop.
Save bystrano/5747558 to your computer and use it in GitHub Desktop.
des scripts utiles pour spip-listes…
#CACHE{0}
<?php
include_spip('inc/spiplistes_api');
include_spip('inc/spiplistes_api_globales');
include_spip('inc/autoriser');
/***********************************************************************/
/* *---------------------* */
/* |eliminer_doublons.php| : élimine les doublons dans une base de */
/* *---------------------* donnée spip-listes. */
/***********************************************************************/
/* */
/* les paramètres que l'on peut passer en GET : */
/* */
/* debut : permet de ne pas traiter les n premiers auteurs */
/* */
/* nb_traitements : permet de limiter le nombre d'auteurs traité */
/* pour éviter que la requête ne prennent trop de */
/* temps. */
/* */
/***********************************************************************/
$index_depart = _request('debut') ? _request('debut') : 0;
$nb_traitements = _request('nb_traitements');
if ( ! is_string($nb_traitements)) {
$limit = '';
} else {
$limit = $index_depart . ', ' . $nb_traitements;
}
/* HELPER FUNCTIONS */
function logg ($msg) {
spip_log(var_export($msg, TRUE), 'scratch');
}
// inspiré de action/spiplistes_supprimer_abonne_dist
function supprimer_abonne ($id_auteur) {
$result = sql_select("id_auteur,statut", "spip_auteurs", "id_auteur=".sql_quote($id_auteur), '','', 1);
if ($row = sql_fetch($result)) {
$id_auteur = intval($row['id_auteur']);
$statut = $row['statut'];
if(
($id_auteur > 0)
&& ($statut=='6forum')
) {
$sql_whereq = "id_auteur=".sql_quote($id_auteur);
if(
// vide la queue du courrier en attente pour cet abonne'
(spiplistes_courriers_en_queue_supprimer($sql_whereq) !== FALSE)
// supprime l'abonne' des abonnements
&& spiplistes_abonnements_auteur_desabonner($id_auteur, 'toutes')
// supprime l'abonne' des formats elargis
&& spiplistes_format_abo_supprimer($id_auteur)
) {
spiplistes_log("ID_AUTEUR #$id_auteur UNSUBSCRIBE BY ID_AUTEUR #$connect_id_auteur");
// ne peut supprimer que les invites
if($statut=='6forum') {
if(spiplistes_auteurs_auteur_delete($sql_whereq)) {
// garde une petite trace...
spiplistes_log("ID_AUTEUR #$id_auteur DELETED BY ID_AUTEUR #$connect_id_auteur");
}
}
}
}
}
}
/********/
/* main */
/********/
logg('******************************');
$auteurs = sql_allfetsel('id_auteur, email', 'spip_auteurs', array(), array(), array(), $limit);
foreach ($auteurs as $auteur) {
// Trouver les doublons dans la db
$a_la_meme_adresse =
sql_allfetsel('id_auteur, email', 'spip_auteurs',
'email=' . sql_quote($auteur['email']) .
'AND statut!=' . sql_quote('5poubelle'));
// si plusieurs auteurs ont le même email, on a du boulot…
if (($auteur['email'] != '') && (count($a_la_meme_adresse) > 1)) {
// on garde l'auteur avec l'id le plus haut, comme il a plus de
// chances d'être d'actualité. Comme ça on les auteurs recevront les
// mêmes listes qu'avant le nettoyage.
sort($a_la_meme_adresse);
$auteur_a_garder = array_pop($a_la_meme_adresse);
// on abonne l'auteur qu'on va garder aux listes auxquelles sont
// abonnés les doublons.
$listes_abo = spiplistes_abonnements_listes_auteur(
$auteur_a_garder['id_auteur']);
foreach ($a_la_meme_adresse as $auteur_a_supprimer) {
$listes_abo =
array_merge($listes_abo,
spiplistes_abonnements_listes_auteur(
$auteur_a_supprimer['id_auteur']));
}
spiplistes_abonnements_ajouter($auteur_a_garder['id_auteur'],
$listes_abo);
// Et enfin, on vire les auteurs doublons
foreach ($a_la_meme_adresse as $auteur) {
supprimer_abonne($auteur['id_auteur']);
logg('auteur ' . $auteur['id_auteur'] . ' supprimé');
}
}
}
echo "Done !";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment