*/
if ( !defined( 'WPINC' ) ) {
die;
}
/**
* Builds export page for activities
*/
function activities_export_page() {
$current_url = activities_admin_access_activities( array( 'item_id', 'acts' ) );
$act_ids = array();
if ( isset( $_POST['selected_activities'] ) ) {
$act_ids = $_POST['selected_activities'];
} elseif ( isset( $_GET['item_id'] ) ) {
$act_ids = array( $_GET['item_id'] );
} elseif ( isset( $_GET['acts'] ) ) {
$act_ids = explode( ',', $_GET['acts'] );
}
$act_ids = array_filter( $act_ids, "acts_validate_int" );
$archive = isset( $_GET['archive'] ) && $_GET['archive'] == 1;
$user_meta = null;
if ( isset( $_POST['user_meta'] ) ) {
$user_meta = sanitize_key( $_POST['user_meta'] );
if ( !array_key_exists( $user_meta, acts_get_export_options() ) ) {
$user_meta = null;
}
}
$delimiter = null;
if ( isset( $_POST['delimiter'] ) ) {
$delimiter = sanitize_key( $_POST['delimiter'] );
if ( !array_key_exists( $delimiter, acts_get_export_delimiters() ) ) {
$delimiter = null;
}
}
if ( isset( $_POST['export_data'] ) ) {
if ( sizeof( $act_ids ) == 0 ) {
Activities_Admin::add_error_message( esc_html__( 'Select one or more activities.', 'activities' ) );
} elseif ( $user_meta === null ) {
Activities_Admin::add_error_message( esc_html__( 'Select user data to export.', 'activities' ) );
} else {
$export = '';
$notice = '';
$users = '';
Activities_Options::update_user_option( 'export', $user_meta, $delimiter );
$user_ids = array();
foreach ( $act_ids as $act_id ) {
$act = new Activities_Activity( $act_id );
$user_ids = array_unique( array_merge( $user_ids, $act->members ), SORT_REGULAR );
}
$data = array();
$user_count = count( $user_ids );
foreach ( $user_ids as $user_id ) {
switch ( $user_meta ) {
case 'email':
$data[$user_id] = acts_get_user_email( $user_id );
break;
case 'phone':
$data[$user_id] = acts_get_user_phone( $user_id );
break;
case 'name':
$data[$user_id] = Activities_Utility::get_user_name( $user_id, false );
break;
}
}
$export .= '
' . sprintf( esc_html__( 'User data found for %s:', 'activities' ), stripslashes( wp_filter_nohtml_kses( acts_get_export_options()[$user_meta] ) ) );
$export .= ' ' . esc_html__( 'Copied!', 'activities' ) . '
';
if ( count( $data ) === 0 ) {
$export .= '' . esc_html__( 'No data found.', 'activities' ) . '
';
} else {
$export .= '';
foreach ( $data as $user_id => $user_data ) {
$user_data = trim( $user_data );
if ( $user_data === '' ) {
unset( $data[$user_id] );
$users .= '
' . esc_html( Activities_Utility::get_user_name( $user_id ) ) . '';
} else {
$data[$user_id] = esc_html( $user_data );
}
}
if ( $user_meta != 'name' ) {
$unique_data = array_unique( $data, SORT_REGULAR );
} else {
$unique_data = $data;
}
if ( count( $data ) < $user_count ) {
$notice .= '
' . esc_html__( 'Notice:', 'activities' ) . ' ' . sprintf( esc_html__( '%d users missing data', 'activities' ), ( $user_count - count( $data ) ) ) . '';
}
switch ( $delimiter ) {
case 'semicolon':
$delimiter_char = '; ';
break;
case 'newline':
$delimiter_char = "\n";
break;
case 'comma':
default:
$delimiter_char = ', ';
break;
}
$export .= implode( $delimiter_char, $unique_data );
$export .= '
';
}
$export .= $notice;
$export .= $users;
}
}
if ( $act_ids && Activities_Responsible::current_user_restricted_view() ) {
$act = new Activities_Activity( $act_ids );
if ( $act->responsible_id != get_current_user_id() ) {
Activities_Admin::add_error_message( esc_html__( 'You are not allowed to export this activity.', 'activities' ) );
$act_ids = '';
}
}
$title = $archive ? esc_html__( 'Activities Archive Export', 'activities' ) : esc_html__( 'Activities Export', 'activities' );
echo '' . $title;
$button_text = $archive ? esc_html__( 'Active Activities', 'activities' ) : esc_html__( 'Archived Activities', 'activities' );
echo ' ' . $button_text . '';
echo '
';
echo Activities_Admin::get_messages();
echo '';
if ( isset( $export ) ) {
echo $export;
}
$mapping = array();
foreach ( acts_get_export_options() as $user_id => $user_data ) {
$mapping[] = $user_id . ': "' . wp_filter_nohtml_kses( Activities_Options::get_user_option( 'export', $user_id ) ) . '"';
}
$js_map = 'var defaults = {' . implode( ', ', $mapping ) . '};';
echo '';
}
/**
* Get user email
*
* Tries first to get billing_email, if it does not exist it gets the user_email
*
* @param int $user_id Id of the user
*
* @return string Email
*/
function acts_get_user_email( $user_id ) {
$user = new WP_User( $user_id );
if ( $user->billing_email != '' ) {
$email = $user->billing_email;
} else {
$email = $user->user_email;
}
return $email;
}
/**
* Get user phone number
*
* Tries first to get billing_phone.
* If it does not exist, it searches for phone in the user_meta table
*
* @param int $user_id Id of the user
*
* @return string Phone number or '' if it could not find any
*/
function acts_get_user_phone( $user_id ) {
global $wpdb;
$user = new WP_User( $user_id );
if ( $user->billing_phone != '' ) {
return $user->billing_phone;
} else {
$p_numbers = $wpdb->get_col( $wpdb->prepare(
"SELECT meta_value
FROM {$wpdb->usermeta}
WHERE meta_key LIKE '%phone%' AND user_id = %d",
$user_id
) );
foreach ( $p_numbers as $p_number ) {
if ( $p_number != '' ) {
return $p_number;
}
}
}
return '';
}
function acts_get_export_options() {
return array(
'email' => esc_html__( 'Email', 'activities' ),
'phone' => esc_html__( 'Phone', 'activities' ),
'name' => esc_html__( 'Name', 'activities' )
);
}
function acts_get_export_delimiters() {
return array(
'comma' => sprintf( esc_html__( 'Comma (%s)', 'activities' ), ', ' ),
'semicolon' => sprintf( esc_html__( 'Semicolon (%s)', 'activities' ), '; ' ),
'newline' => esc_html__( 'Newline', 'activities' )
);
}