' . esc_html__( 'If you choose to get order updates on Telegram, we store your Telegram chat ID with your order (and your account, if you have one) and send messages about your orders through Telegram (Telegram FZ-LLC). We keep a log of these messages for 90 days. Send /stop to the bot at any time to stop the messages; your chat ID is then removed.', 'orderchirp' ) . '
'
);
}
/**
* Register the exporter.
*
* @param array $exporters Exporters.
* @return array
*/
public function exporters( $exporters ) {
$exporters['orderchirp'] = array(
'exporter_friendly_name' => __( 'Orderchirp Telegram messages', 'orderchirp' ),
'callback' => array( $this, 'export' ),
);
return $exporters;
}
/**
* Register the eraser.
*
* @param array $erasers Erasers.
* @return array
*/
public function erasers( $erasers ) {
$erasers['orderchirp'] = array(
'eraser_friendly_name' => __( 'Orderchirp Telegram messages', 'orderchirp' ),
'callback' => array( $this, 'erase' ),
);
return $erasers;
}
/**
* Orders of an email address.
*
* @param string $email Email.
* @return \WC_Order[]
*/
private function orders( $email ) {
$orders = wc_get_orders(
array(
'billing_email' => sanitize_email( $email ),
'limit' => -1,
)
);
$user = get_user_by( 'email', $email );
if ( $user ) {
$orders = array_merge(
$orders,
wc_get_orders(
array(
'customer_id' => $user->ID,
'limit' => -1,
)
)
);
}
$unique = array();
foreach ( $orders as $order ) {
$unique[ $order->get_id() ] = $order;
}
return array_values( $unique );
}
/**
* Export.
*
* @param string $email Email.
* @return array{data:array,done:bool}
*/
public function export( $email ) {
$data = array();
$orders = $this->orders( $email );
foreach ( $orders as $order ) {
$chat = (string) $order->get_meta( Subscribers::ORDER_META );
if ( '' !== $chat ) {
$data[] = array(
'group_id' => 'orderchirp',
'group_label' => __( 'Telegram order updates', 'orderchirp' ),
'item_id' => 'orderchirp-order-' . $order->get_id(),
'data' => array(
array( 'name' => __( 'Order', 'orderchirp' ), 'value' => $order->get_order_number() ),
array( 'name' => __( 'Telegram chat ID', 'orderchirp' ), 'value' => $chat ),
),
);
}
}
foreach ( Message_Log::for_orders( array_map( static function ( $o ) { return $o->get_id(); }, $orders ) ) as $row ) {
$data[] = array(
'group_id' => 'orderchirp',
'group_label' => __( 'Telegram order updates', 'orderchirp' ),
'item_id' => 'orderchirp-message-' . $row['id'],
'data' => array(
array( 'name' => __( 'Time (UTC)', 'orderchirp' ), 'value' => $row['created_at'] ),
array( 'name' => __( 'Direction', 'orderchirp' ), 'value' => 'in' === $row['direction'] ? __( 'From you', 'orderchirp' ) : __( 'To you', 'orderchirp' ) ),
array( 'name' => __( 'Message', 'orderchirp' ), 'value' => $row['body'] ),
),
);
}
return array(
'data' => $data,
'done' => true,
);
}
/**
* Erase.
*
* @param string $email Email.
* @return array{items_removed:bool,items_retained:bool,messages:array,done:bool}
*/
public function erase( $email ) {
$removed = false;
$orders = $this->orders( $email );
$chats = array();
foreach ( $orders as $order ) {
$chat = (string) $order->get_meta( Subscribers::ORDER_META );
if ( '' !== $chat ) {
$chats[ $chat ] = true;
$order->delete_meta_data( Subscribers::ORDER_META );
$order->save();
$removed = true;
}
}
$user = get_user_by( 'email', $email );
if ( $user && get_user_meta( $user->ID, Subscribers::USER_META, true ) ) {
delete_user_meta( $user->ID, Subscribers::USER_META );
$removed = true;
}
if ( Message_Log::erase( array_map( static function ( $o ) { return $o->get_id(); }, $orders ) ) > 0 ) {
$removed = true;
}
foreach ( array_keys( $chats ) as $chat ) {
Message_Log::erase( array(), (string) $chat );
}
return array(
'items_removed' => $removed,
'items_retained' => false,
'messages' => array(),
'done' => true,
);
}
}