| 2954 | * Notify the site administrator via email when a request is confirmed. |
| 2955 | * |
| 2956 | * Without this, the admin would have to manually check the site to see if any |
| 2957 | * action was needed on their part yet. |
| 2958 | * |
| 2959 | * @since 4.9.6 |
| 2960 | * |
| 2961 | * @param int $request_id The ID of the request. |
| 2962 | */ |
| 2963 | function _wp_privacy_send_request_confirmation_notification( $request_id ) { |
| 2964 | $request_data = wp_get_user_request_data( $request_id ); |
| 2965 | |
| 2966 | if ( ! is_a( $request_data, 'WP_User_Request' ) || 'request-confirmed' !== $request_data->status ) { |
| 2967 | return; |
| 2968 | } |
| 2969 | |
| 2970 | $already_notified = (bool) get_post_meta( $request_id, '_wp_admin_notified', true ); |
| 2971 | |
| 2972 | if ( $already_notified ) { |
| 2973 | return; |
| 2974 | } |
| 2975 | |
| 2976 | $subject = sprintf( |
| 2977 | /* translators: %s Site name. */ |
| 2978 | __( '[%s] Action Confirmed' ), |
| 2979 | wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) |
| 2980 | ); |
| 2981 | |
| 2982 | $manage_url = add_query_arg( 'page', $request_data->action_name, admin_url( 'tools.php' ) ); |
| 2983 | |
| 2984 | /** |
| 2985 | * Filters the recipient of the data request confirmation notification. |
| 2986 | * |
| 2987 | * In a Multisite environment, this will default to the email address of the |
| 2988 | * network admin because, by default, single site admins do not have the |
| 2989 | * capabilities required to process requests. Some networks may wish to |
| 2990 | * delegate those capabilities to a single-site admin, or a dedicated person |
| 2991 | * responsible for managing privacy requests. |
| 2992 | * |
| 2993 | * @since 4.9.6 |
| 2994 | * |
| 2995 | * @param string $admin_email The email address of the notification recipient. |
| 2996 | * @param WP_User_Request $request_data The request that is initiating the notification. |
| 2997 | */ |
| 2998 | $admin_email = apply_filters( 'user_request_confirmed_email_to', get_site_option( 'admin_email' ), $request_data ); |
| 2999 | |
| 3000 | $email_data = array( |
| 3001 | 'request' => $request_data, |
| 3002 | 'user_email' => $request_data->email, |
| 3003 | 'description' => wp_user_request_action_description( $request_data->action_name ), |
| 3004 | 'manage_url' => $manage_url, |
| 3005 | 'sitename' => get_option( 'blogname' ), |
| 3006 | 'siteurl' => home_url(), |
| 3007 | 'admin_email' => $admin_email, |
| 3008 | ); |
| 3009 | |
| 3010 | /* translators: Do not translate SITENAME, USER_EMAIL, DESCRIPTION, MANAGE_URL, SITEURL; those are placeholders. */ |
| 3011 | $email_text = __( |
| 3012 | 'Howdy, |
| 3013 | |
| 3014 | A user data privacy request has been confirmed on ###SITENAME###: |
| 3015 | |
| 3016 | User: ###USER_EMAIL### |
| 3017 | Request: ###DESCRIPTION### |
| 3018 | |
| 3019 | You can view and manage these data privacy requests here: |
| 3020 | |
| 3021 | ###MANAGE_URL### |
| 3022 | |
| 3023 | Regards, |
| 3024 | All at ###SITENAME### |
| 3025 | ###SITEURL###' |
| 3026 | ); |
| 3027 | |
| 3028 | /** |
| 3029 | * Filters the body of the user request confirmation email. |
| 3030 | * |
| 3031 | * The email is sent to an administrator when an user request is confirmed. |
| 3032 | * The following strings have a special meaning and will get replaced dynamically: |
| 3033 | * |
| 3034 | * ###SITENAME### The name of the site. |
| 3035 | * ###USER_EMAIL### The user email for the request. |
| 3036 | * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for. |
| 3037 | * ###MANAGE_URL### The URL to manage requests. |
| 3038 | * ###SITEURL### The URL to the site. |
| 3039 | * |
| 3040 | * @since 4.9.6 |
| 3041 | * |
| 3042 | * @param string $email_text Text in the email. |
| 3043 | * @param array $email_data { |
| 3044 | * Data relating to the account action email. |
| 3045 | * |
| 3046 | * @type WP_User_Request $request User request object. |
| 3047 | * @type string $user_email The email address confirming a request |
| 3048 | * @type string $description Description of the action being performed so the user knows what the email is for. |
| 3049 | * @type string $manage_url The link to click manage privacy requests of this type. |
| 3050 | * @type string $sitename The site name sending the mail. |
| 3051 | * @type string $siteurl The site URL sending the mail. |
| 3052 | * } |
| 3053 | */ |
| 3054 | $content = apply_filters( 'user_confirmed_action_email_content', $email_text, $email_data ); |
| 3055 | |
| 3056 | $content = str_replace( '###SITENAME###', wp_specialchars_decode( $email_data['sitename'], ENT_QUOTES ), $content ); |
| 3057 | $content = str_replace( '###USER_EMAIL###', $email_data['user_email'], $content ); |
| 3058 | $content = str_replace( '###DESCRIPTION###', $email_data['description'], $content ); |
| 3059 | $content = str_replace( '###MANAGE_URL###', esc_url_raw( $email_data['manage_url'] ), $content ); |
| 3060 | $content = str_replace( '###SITEURL###', esc_url_raw( $email_data['siteurl'] ), $content ); |
| 3061 | |
| 3062 | $result = wp_mail( $email_data['admin_email'], $subject, $content ); |
| 3063 | |
| 3064 | if ( $result ) { |
| 3065 | update_post_meta( $request_id, '_wp_admin_notified', true ); |
| 3066 | } |
| 3067 | } |
| 3068 | |
| 3069 | /** |