<?php
/**
* Libro Soci CSV export.
*
* @package TonItaliaRegistration
*/
defined( 'ABSPATH' ) || exit;
/**
* Class TON_Reg_Members_Export
*/
class TON_Reg_Members_Export {
const CSV_DELIMITER = ';';
/**
* @return array<int,string>
*/
public static function get_columns() {
return array(
__( 'N.', 'ton-italia-registration' ),
__( 'Cognome', 'ton-italia-registration' ),
__( 'Nome', 'ton-italia-registration' ),
__( 'Data di nascita', 'ton-italia-registration' ),
__( 'Luogo di nascita', 'ton-italia-registration' ),
__( 'Provincia nascita', 'ton-italia-registration' ),
__( 'Codice fiscale', 'ton-italia-registration' ),
__( 'Indirizzo', 'ton-italia-registration' ),
__( 'CAP', 'ton-italia-registration' ),
__( 'Comune residenza', 'ton-italia-registration' ),
__( 'Provincia residenza', 'ton-italia-registration' ),
__( 'Telefono', 'ton-italia-registration' ),
__( 'Email', 'ton-italia-registration' ),
__( 'Data iscrizione', 'ton-italia-registration' ),
__( 'Data Libro Associati', 'ton-italia-registration' ),
);
}
/**
* @param object $row Registration row.
* @param int $index 1-based row number.
* @return array<int,string>
*/
public static function row_to_csv( $row, $index ) {
$address = trim( ( $row->indirizzo ?? '' ) . ' ' . ( $row->numero_civico ?? '' ) );
return array(
(string) $index,
(string) ( $row->cognome ?? '' ),
(string) ( $row->nome ?? '' ),
self::format_date_it( $row->data_nascita ?? '' ),
(string) ( $row->luogo_nascita ?? '' ),
(string) ( $row->provincia_nascita ?? '' ),
strtoupper( (string) ( $row->codice_fiscale ?? '' ) ),
$address,
(string) ( $row->cap ?? '' ),
(string) ( $row->comune_residenza ?? '' ),
(string) ( $row->provincia_residenza ?? '' ),
(string) ( $row->telefono ?? '' ),
(string) ( $row->email ?? '' ),
self::format_date_it( $row->created_at ?? '' ),
self::format_date_it( $row->libro_associati_date ?? '' ),
);
}
/**
* Stream Libro Soci CSV to output.
*/
public static function stream_libro_soci_csv() {
$rows = TON_Reg_Database::query_for_export(
array(
'status' => 'admitted',
'exclude_anonymized' => true,
'orderby' => 'cognome',
'order' => 'ASC',
)
);
$filename = 'libro-soci-ton-italia-' . gmdate( 'Y-m-d' ) . '.csv';
nocache_headers();
header( 'Content-Type: text/csv; charset=utf-8' );
header( 'Content-Disposition: attachment; filename="' . sanitize_file_name( $filename ) . '"' );
$out = fopen( 'php://output', 'w' );
if ( false === $out ) {
wp_die( esc_html__( 'Impossibile generare il file CSV.', 'ton-italia-registration' ) );
}
// UTF-8 BOM for Excel (IT).
fprintf( $out, chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF ) );
fputcsv( $out, self::get_columns(), self::CSV_DELIMITER );
$index = 1;
foreach ( $rows as $row ) {
fputcsv( $out, self::row_to_csv( $row, $index ), self::CSV_DELIMITER );
++$index;
}
fclose( $out );
exit;
}
/**
* @param string|null $value Date or datetime.
* @return string
*/
private static function format_date_it( $value ) {
if ( empty( $value ) ) {
return '';
}
$timestamp = strtotime( (string) $value );
if ( false === $timestamp ) {
return '';
}
return wp_date( 'd/m/Y', $timestamp );
}
}