Presentazione dello script per il porting di utenti xoops sulla piattaforma per mailing-list: phplist.
Inanizitutto è da notare che questo script è adattato per xoops 2.2.x (per esigenze personali) ma è adattabile facilmente a qualunque tipo versione di xoops.
Phplist è un potentissimo strumento per inviare mailing-list. Grazie a phplist si possono creare mailing list con editor WYSWYG e creare invii personalizzati. Si possono inoltre decidere quando inviare mail (scheduler) per non incorrere in segnalazioni spam o cose del genere (molto gravose per mass-mail).
E' lo strumento ideale per amministrare mailing-list di grandi community.
Phplist ha anche un potente strumento di subscribe che però non è pienamente utilizzabile quando si vuole che tutti gli utenti iscritti ad un sito xoops debbano automaticamente ricevere la mailing-list. Quindi ho deciso di creare questo script automatico di porting degli utenti.
Lo script importa tutti gli utenti del sito xoops nel database di phplist. Inoltre controlla eventuali campi aggiornati sul database xoops e li sostituisce con quelli vecchi presenti sul database di phplist.
Con questo script avrò sempre tutti gli utenti aggiornati e, per esempio, potrò inviare newsletter solamente agli utenti uomini, o solamente a utenti di milano, o solamente a utenti con foto, ecc. Insomma potrò personalizzare gli invii a mio piacimento.
Lo script di porting farà dei cicli di 300 utenti per volta per non rischiare, in caso di gran numero di utenti, di mandare in timeout il server o altri problemi vari.
Se lo script dovesse interrompersi per un qualunque motivo, niente paura perchè basterà rifarlo partire e fargli fare un ciclo completo di porting per sistemare tutto.
INIZIAMO:
Createvi una pagina nome_file.php ed copiateci lo script. Inseritelo poi in modules/profile/.
Ecco lo script:
<?php
include '../../mainfile.php';
include XOOPS_ROOT_PATH.'/header.php';
//Hack by Stefano Silvestrini - stefanoitalia at gmail dot com
// aka slyss in xoopsitalia.org
// 20/02/2007
//Per favore, se possibile, lasciare i crediti.
global $xoopsUser;
if (!$xoopsUser)
{
header("Location: http://www.vostrosito.com");
exit();
}
// controllo se sono admin inteso come uid = 1
if ($xoopsUser->getVar('uid') != 1)
{
redirect_header("../../index.php", 5 , "Solo gli admin hanno accesso a questa area!");
exit();
}
// ---------------------------------------------------
//
$start = empty( $_GET['start'] ) ? 0 : intval( $_GET['start'] ) ;
$step = 300;
if ($start == '') {
$start = 0;
}
// --------- dati collegamento database del sito xoops ----------
$db2_host = "indirizzo_database";
$db2_user = "nome_utente";
$db2_password = "password";
$db2_name = "nome_database";
$db2_prefix = "prefissotabelle_";
// --------- dati collegamento database del sito xoops ----------
$db2 = mysql_connect($db2_host, $db2_user, $db2_password);
if ($db2 == FALSE)
die ("Errore nella connessione.");
mysql_select_db($db2_name, $db2)
or die ("Errore nella selezione del database.");
// query per trovarmi tutti gli utenti del vostro sito xoops
$risultato = mysql_query("SELECT s.*, t.* FROM ".$db2_prefix."users s, ".$db2_prefix."user_profile t WHERE (s.uid = t.profileid) AND (s.level = 1) ORDER BY s.uid ASC LIMIT ".$start.",".$step."; ")
or die("Query non valida: " . mysql_error());
$num_righe = mysql_num_rows($risultato);
if ($num_righe != 0) {
while ($myrow_users_network = mysql_fetch_array ($risultato))
{
// campi personalizzati di extended profile da importare nel database di phplist
$uid_find = $myrow_users_network['profileid'];
$email_find = $myrow_users_network['email'];
$uname_find = $myrow_users_network['uname'];
$loginname_find = $myrow_users_network['loginname'];
$name_find = $myrow_users_network['name'];
$user_avatar_find = $myrow_users_network['user_avatar'];
$rank_find = $myrow_users_network['rank'];
$bio_find = $myrow_users_network['bio'];
$user_intrest_find = $myrow_users_network['user_intrest'];
$user_occ_find = $myrow_users_network['user_occ'];
$location_sly_find = $myrow_users_network['location_sly'];
$years_old_sly_find = $myrow_users_network['years_old_sly'];
$specific_location_city_sly_find = $myrow_users_network['specific_location_city_sly'];
$field_inserted_sly_find = $myrow_users_network['field_inserted_sly'];
$gender_sly_find = $myrow_users_network['gender_sly'];
// --------- dati collegamento database di phplist ----------
$db_host = "indirizzo_database";
$db_user = "nome_utente";
$db_password = "password";
$db_name = "nome_database";
$db_prefix = "prefissotabelle_";
// --------- dati collegamento database di phplist ----------
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione.");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database.");
// --------- INIZIO CICLO DI INSERIMENTO ---------
// inizio iscrivo utente alla lista dello Stefano Network Mailing List ---> cioe numero 3
// questo sotto (3) è il numero della mailing-list alla quale gli utenti importati saranno iscritti automaticamente
// quindi andatevi a creare prima una mailing list di base e vedete quale id sarà ad essa assegnata
$mailing_network = 3 ;
$date = date('Y-m-d H:i:s');
$date1 = date('Y-m-d');
$listuser = mysql_query("REPLACE LOW_PRIORITY INTO ".$db_prefix."listuser (`userid`, `listid`, `entered`, `modified`) VALUES (".$uid_find.", '".$mailing_network."', '".$date."', '".$date."'); ")
or die("Query non valida: " . mysql_error());
// fine iscrivo utente alla lista dello Stefano Network Mailing List ---> cioe numero 3
// inizio inserisco utente parte 1
// mi creo un token univoco per ogni utente... magari potrà servire in futuro
$better_token = md5(uniqid(rand(), true));
$user_user = mysql_query("REPLACE LOW_PRIORITY INTO ".$db_prefix."user_user (id, email, confirmed, blacklisted, bouncecount, entered, modified, uniqid, htmlemail, subscribepage, rssfrequency, password, passwordchanged, disabled, extradata, foreignkey) VALUES (".$uid_find.", '".$email_find."', 1, 0, 0, '".$date."', '".$date."', '".$better_token."', 1, 'NULL', '', '', '".$date1."', 0, '', ''); ")
or die("Query non valida: " . mysql_error());
// fine inserisco utente parte 1
// inizio inserisco utente parte 2
$uid_find_ok = (int) $uid_find;
// mi faccio alcuni controllo per evitare che nei campi ci siano asterischi che possano in qualche modo
// bloccarmi lo script automatico
$specific_location_city_sly_find_slash = mysql_real_escape_string($specific_location_city_sly_find);
$location_sly_find_slash = mysql_real_escape_string($location_sly_find);
$user_occ_find_slash = mysql_real_escape_string($user_occ_find);
$user_intrest_find_slash = mysql_real_escape_string($user_intrest_find);
$bio_find_slash = mysql_real_escape_string($bio_find);
$name_find_slash = mysql_real_escape_string($name_find);
$uname_find_slash = mysql_real_escape_string($uname_find);
// inserisco gli attributi di extended profile di ogni utente nel database di phplist
// nota: mi sono già creato tramite phplist i vari attributi personalizzati
// esempio 22 è l'id assegnato al campo gender su phplist
// esempio 21 è l'id assegnato al campo years su phplist
// esempio 9 è l'id assegnato al campo rank su phplist
// ecc...
$user_user_attribute = mysql_query("REPLACE LOW_PRIORITY INTO ".$db_prefix."user_user_attribute VALUES
(22, ".$uid_find.", '".$gender_sly_find."'),
(23, ".$uid_find.", '".$field_inserted_sly_find."'),
(20, ".$uid_find.", '".$specific_location_city_sly_find_slash."'),
(21, ".$uid_find.", '".$years_old_sly_find."'),
(19, ".$uid_find.", '".$location_sly_find_slash."'),
(16, ".$uid_find.", '".$user_occ_find_slash."'),
(15, ".$uid_find.", '".$user_intrest_find_slash."'),
(14, ".$uid_find.", '".$bio_find_slash."'),
(9, ".$uid_find.", '".$rank_find."'),
(7, ".$uid_find.", '".$user_avatar_find."'),
(6, ".$uid_find.", '".$email_find."'),
(5, ".$uid_find.", '".$name_find_slash."'),
(4, ".$uid_find.", '".$loginname_find."'),
(3, ".$uid_find.", '".$uname_find_slash."'),
(2, ".$uid_find.", '".$uid_find."'); ") or die("Query non valida: " . mysql_error());
// fine inserisco utente parte 2
// --------- FINE CICLO DI INSERIMENTO ---------
} // chiudo il while
$myrow_attrib = mysql_fetch_array ($risultato);
$uid = $myrow_attrib['uid'];
$var_uid = (int) $uid;
$start_next = $start + $step;
echo "<br /><br /><div align='center'><img src='http://www.stefanosnetwork.com/site/uploads/img45da09000337f.gif'>
<br /><br />
Attendere prego... stiamo aggiornando la lista utenti sulla mailing-list!<br /><br />
Aggiornamento record utenti da ".$start." a ".$start_next."</div>";
// faccio un redirect a questo file dandogli però il nuovo next per fare il ciclo successivo
$url = "http://www.vostrosito.com/site/modules/profile/nome_file.php?start=".$start_next;
header("Refresh: 4; URL="$url"");
}
else
{
// finito il ciclo esco...
echo "<br /><br /><div align='center'><strong>AGGIORNAMENTO COMPLETATO!</strong><br /><br />La mailing list è pronta per essere usata!<br /><br />
<a href='http://www.vostrosito.com/mailing-list/' target='_top'>Vai alla Mailing List!</a><br /><br />
<a href='http://www.vostrosito.com/index.php' target='_top'>Torna alla Home Page!</a></div>";
// --------- dati collegamento database di phplist ----------
$db_host = "indirizzo_database";
$db_user = "nome_utente";
$db_password = "password";
$db_name = "nome_database";
$db_prefix = "prefissotabelle_";
// --------- dati collegamento database di phplist ----------
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione.");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database.");
$risultato = mysql_query("SELECT * FROM ".$db_prefix."user_user ; ")
or die("Query non valida: " . mysql_error());
$trovato_users_mailing = 0;
while ($myrow_users_mailing = mysql_fetch_array ($risultato))
{
$trovato_users_mailing ++;
}
// stampo il numero utenti sulla mailing list
echo "<div align='center'><br />Utenti Mailing-List: ".$trovato_users_mailing."<br /></div>";
// --------- dati collegamento database del sito xoops ----------
$db2_host = "indirizzo_database";
$db2_user = "nome_utente";
$db2_password = "password";
$db2_name = "nome_database";
$db2_prefix = "prefissotabelle_";
// --------- dati collegamento database del sito xoops ----------
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione.");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database.");
$risultato = mysql_query("SELECT * FROM ".$db_prefix."users ; ")
or die("Query non valida: " . mysql_error());
$trovato_users_network = 0;
while ($myrow_users_mailing = mysql_fetch_array ($risultato))
{
$trovato_users_network ++;
}
// stampo numero utenti sul sito xoops
echo "<div align='center'><br />Utenti Network: ".$trovato_users_network."<br /></div>";
}
include XOOPS_ROOT_PATH.'/footer.php';
?>
ed ecco il risultato:
Spero che potrà interessare a qualcuno.
PhpList si preleva da: http://www.phplist.com/
Per discussioni ho aperto questo topic, clicca qui:
vai alla discussione sul forum!
ciao sly



