* * @internal Hooked to `wp_privacy_personal_data_erasers`. */ public static function registerEraser( $erasers ): array { $erasers = is_array( $erasers ) ? $erasers : []; $erasers['rahkar-send-rules'] = [ 'eraser_friendly_name' => __( 'قواعد ارسال پیامک', 'rahkar-toolkit' ), 'callback' => [ self::class, 'erase' ], ]; return $erasers; } /** * Erase the flow entries and customer stats of the account behind an email address. * * @param string $email Address of the erasure request. * @param int $page Page number; one page is always enough here. * * @return array{items_removed: bool, items_retained: bool, messages: list, done: bool} */ public static function erase( string $email, int $page = 1 ): array { unset( $page ); $user = get_user_by( 'email', $email ); $removed = 0; if ( $user instanceof \WP_User ) { foreach ( [ 'rahkar_phone', 'billing_phone' ] as $key ) { $phone = PhoneNumber::parse( (string) get_user_meta( $user->ID, $key, true ) ); if ( null !== $phone ) { $removed += Flows::forget( $phone->canonical() ); $removed += \Rahkar\WP\Customers\Stats::forgetPhone( $phone->canonical() ); /** * A person's number is being erased. Add-ons drop their own rows for it, * such as a win-back ladder or a replenishment reminder. * * @param string $canonical Number in canonical form. */ do_action( 'rahkar_wp_phone_forgotten', $phone->canonical() ); } } } return [ 'items_removed' => $removed > 0, 'items_retained' => true, 'messages' => [ __( 'اگر این شماره پیامک تبلیغاتی را لغو کرده باشد، نشانه‌ی لغو (بدون خود شماره) نگه داشته می‌شود تا دوباره پیام تبلیغاتی نگیرد.', 'rahkar-toolkit' ) ], 'done' => true, ]; } }