33 if( defined(
'CRON_RUNNING' ) ) {
36 logWrite(
'generazione mail per mailing job #' . $job[
'id'] .
' in corso',
'job', LOG_INFO );
44 'LOCK TABLES job WRITE, mail WRITE, mailing_mail WRITE, mailing WRITE, mail_liste_mailing WRITE, tipologie_anagrafica WRITE, '.
45 'liste_mailing WRITE, mailing_liste WRITE, anagrafica WRITE, contenuti WRITE, mail_out WRITE, file WRITE, metadati WRITE' );
49 if( ! empty( $job[
'workspace'] ) ) {
53 $wksp = unserialize( $job[
'workspace'] );
57 if(
$lock ===
true ) {
61 if( isset(
$wksp[
'id_mailing'] ) ) {
68 $cf[
'mysql'][
'connection'],
69 'SELECT mail.*, IF( mailing_liste.id IS NOT NULL, 1, 0 ) AS se_generata FROM mail '.
70 'INNER JOIN mail_liste_mailing ON mail_liste_mailing.id_mail = mail.id '.
71 'INNER JOIN mailing_liste ON mailing_liste.id_lista = mail_liste_mailing.id_lista '.
72 'LEFT JOIN mailing_mail ON ( mailing_mail.id_mail = mail.id AND mailing_mail.id_mailing = mailing_liste.id_mailing ) '.
73 'WHERE mailing_liste.id_mailing = ? ',
75 array(
's' =>
$wksp[
'id_mailing'] )
81 $cf[
'mysql'][
'connection'],
82 'SELECT mail.*, anagrafica.nome, anagrafica.cognome, anagrafica.denominazione, anagrafica.sesso, '.
83 'tipologie_anagrafica.nome AS tipologia, '.
84 'coalesce( anagrafica.soprannome, anagrafica.denominazione , concat( tipologie_anagrafica.nome, " ", anagrafica.cognome, " ", anagrafica.nome ), "" ) AS destinatario, '.
85 'contenuti.cappello, contenuti.testo, contenuti.mittente_nome, contenuti.mittente_mail, '.
86 'mailing_liste.id_mailing, '.
87 'IF( mailing_mail.id IS NOT NULL, 1, 0 ) AS se_generata '.
89 'INNER JOIN anagrafica ON anagrafica.id = mail.id_anagrafica '.
90 'INNER JOIN mail_liste_mailing ON mail_liste_mailing.id_mail = mail.id '.
91 'INNER JOIN mailing_liste ON mailing_liste.id_lista = mail_liste_mailing.id_lista '.
92 'INNER JOIN contenuti ON ( contenuti.id_mailing = mailing_liste.id_mailing AND contenuti.id_lingua = 1 ) '.
93 'LEFT JOIN tipologie_anagrafica ON tipologie_anagrafica.id = anagrafica.id_tipologia '.
94 'LEFT JOIN mailing_mail ON ( mailing_mail.id_mail = mail.id AND mailing_mail.id_mailing = mailing_liste.id_mailing ) '.
95 'WHERE mailing_liste.id_mailing = ? HAVING se_generata = 0 ',
97 array(
's' =>
$wksp[
'id_mailing'] )
102 logWrite(
'trovate ' . count( $data ) .
' mail per mailing #' .
$wksp[
'id_mailing'] .
' (da fare ' . count( $todo ) .
')',
'job', LOG_INFO );
106 if( is_array( $data ) && count( $data ) ) {
111 $corrente =
$totale - count( $todo );
114 $limite = min( array( $corrente + $job[
'iterazioni'],
$totale ) );
117 logWrite(
'trovate ' .
$totale .
' righe (' . count( $todo ) .
' da fare) per generazione mailing job #' . $job[
'id'] .
' mailing #' .
$wksp[
'id_mailing'],
'job', LOG_NOTICE );
121 mysqlQuery(
$cf[
'mysql'][
'connection'],
'UPDATE job SET totale = ? WHERE id = ?', array( array(
's' =>
$totale ), array(
's' => $job[
'id'] ) ) );
125 for( $i = $corrente; $i < $limite; $i++ ) {
128 $row = array_shift( $todo );
131 if( ! isset( $row[
'gender'][
'suffix'] ) ) { $row[
'gender'][
'suffix'] = ( ( $row[
'sesso'] ==
'F' ) ?
'a' :
'o' ); }
134 logWrite( print_r( $row,
true ),
'job', LOG_DEBUG );
136 # // inserisco il redirect di questa riga 138 # $cf['mysql']['connection'], 139 # 'INSERT INTO redirect ( codice, sorgente, destinazione ) VALUES ( ?, ?, ? ) '. 140 # 'ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID( id ), '. 141 # 'codice = VALUES( codice ), sorgente = VALUES( sorgente ), destinazione = VALUES( destinazione ) ', 143 # array( 's' => $row['codice'] ), 144 # array( 's' => $row['sorgente'] ), 145 # array( 's' => $row['destinazione'] ) 153 'from' => array( $row[
'mittente_nome'] => $row[
'mittente_mail'] ),
154 'oggetto' => $row[
'cappello'],
155 'testo' => $row[
'testo']
162 $cf[
'mysql'][
'connection'],
163 'SELECT path FROM file WHERE id_mailing = ? AND id_lingua = 1',
165 array(
's' =>
$wksp[
'id_mailing'] )
172 $cf[
'mysql'][
'connection'],
173 'SELECT * FROM metadati WHERE id_mailing = ? AND ( id_lingua = 1 OR id_lingua IS NULL )',
175 array(
's' =>
$wksp[
'id_mailing'] )
180 foreach( $mts as &
$mt ) {
181 $m[ $mt[
'nome'] ] = $mt[
'testo'];
188 $twig =
new Twig_Environment(
new Twig_Loader_Array(
$template[
$cf[
'localization'][
'language'][
'ietf'] ] ) );
192 $cf[
'mysql'][
'connection'],
193 $wksp[
'timestamp_invio'],
194 $template[
$cf[
'localization'][
'language'][
'ietf'] ][
'from'],
195 array( $row[
'destinatario'] => $row[
'indirizzo'] ),
196 $twig->render(
'oggetto', array(
'd' => $row ) ),
197 $twig->render(
'testo', array(
'd' => $row,
'm' =>
$m ) ),
204 logWrite(
'inserisco in mailing_mail la mail #' . $row[
'id'] .
' indirizzo '.$row[
'indirizzo'].
' per il mailing #' .
$wksp[
'id_mailing'],
'job', LOG_DEBUG );
208 $cf[
'mysql'][
'connection'],
209 'REPLACE INTO mailing_mail ( id_mailing, id_mail ) VALUES ( ?, ? ) ',
210 array( array(
's' =>
$wksp[
'id_mailing'] ), array(
's' => $row[
'id'] ) )
216 $cf[
'mysql'][
'connection'],
217 'UPDATE job SET corrente = ?, timestamp_esecuzione = ? WHERE id = ?',
218 array( array(
's' => ( $i + 1 ) ), array(
's' => time() ), array(
's' => $job[
'id'] ) )
225 $wksp[
'status'] =
'OK';
231 $wksp[
'status'] =
'impossibile leggere dati dal file';
234 logWrite(
'dataset vuoto per il mailing #' .
$wksp[
'id_mailing'],
'job', LOG_ERR );
242 $wksp[
'status'] =
'document non impostato';
245 logWrite(
'id_mailing non presente nel workspace per il job #' . $job[
'id'],
'job', LOG_ERR );
252 logWrite(
'fine job (elaborate ' . $limite .
' righe su ' .
$totale .
')',
'job', LOG_DEBUG );
253 mysqlQuery( $cf[
'mysql'][
'connection'],
'UPDATE job SET timestamp_completamento = ? WHERE id = ?', array( array(
's' => time() ), array(
's' => $job[
'id'] ) ) );
257 mysqlQuery( $cf[
'mysql'][
'connection'],
'UNLOCK TABLES' );
263 $wksp[
'status'] =
'impossibile acquisire il lock';
266 logWrite(
'impossibile effettuare il lock delle tabelle per generazione mailing #' . $job[
'id'],
'job', LOG_ERR );
272 mysqlQuery( $cf[
'mysql'][
'connection'],
'UPDATE job SET workspace = ? WHERE id = ?', array( array(
's' => serialize(
$wksp ) ), array(
's' => $job[
'id'] ) ) );
277 logWrite(
'workspace vuoto per il job #' . $job[
'id'],
'job', LOG_ERR );
282 logWrite(
'fine script per generazione mailing #' . $job[
'id'],
'job', LOG_DEBUG );
logWrite( $m, $f='site', $l=LOG_NOTICE, $d=DIRECTORY_LOG, $t=CURRENT_LOG_LEVEL, $s=SITE_STATUS)
scrive un messaggio nei log del sito
$cf['ricerca']['template']