Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: send list classes #1629

Merged
merged 11 commits into from
Sep 3, 2024
34 changes: 11 additions & 23 deletions includes/class-newspack-newsletters-subscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
* Manages Settings Subscription Class.
*/
class Newspack_Newsletters_Subscription {

const API_NAMESPACE = 'newspack-newsletters/v1';

const EMAIL_VERIFIED_META = 'newspack_newsletters_email_verified';
const EMAIL_VERIFIED_REQUEST = 'newspack_newsletters_email_verification_request';
const EMAIL_VERIFIED_CONFIRM = 'newspack_newsletters_email_verification';
Expand Down Expand Up @@ -62,7 +59,7 @@ public static function init() {
*/
public static function register_api_endpoints() {
register_rest_route(
self::API_NAMESPACE,
Newspack_Newsletters::API_NAMESPACE,
'/lists_config',
[
'methods' => \WP_REST_Server::READABLE,
Expand All @@ -71,21 +68,21 @@ public static function register_api_endpoints() {
]
);
register_rest_route(
self::API_NAMESPACE,
Newspack_Newsletters::API_NAMESPACE,
'/lists',
[
'methods' => \WP_REST_Server::READABLE,
'callback' => [ __CLASS__, 'api_get_lists' ],
'permission_callback' => [ __CLASS__, 'api_permission_callback' ],
'permission_callback' => [ 'Newspack_Newsletters', 'api_permission_callback' ],
]
);
register_rest_route(
self::API_NAMESPACE,
Newspack_Newsletters::API_NAMESPACE,
'/lists',
[
'methods' => \WP_REST_Server::EDITABLE,
'callback' => [ __CLASS__, 'api_update_lists' ],
'permission_callback' => [ __CLASS__, 'api_permission_callback' ],
'permission_callback' => [ 'Newspack_Newsletters', 'api_permission_callback' ],
'args' => [
'lists' => [
'type' => 'array',
Expand Down Expand Up @@ -113,15 +110,6 @@ public static function register_api_endpoints() {
);
}

/**
* Whether the current user can manage subscription lists.
*
* @return bool Whether the current user can manage subscription lists.
*/
public static function api_permission_callback() {
return current_user_can( 'manage_options' );
}

/**
* API method to retrieve the current lists configuration.
*
Expand Down Expand Up @@ -229,7 +217,7 @@ function ( $list ) {
public static function get_lists_config() {
$provider = Newspack_Newsletters::get_service_provider();
if ( empty( $provider ) ) {
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.' ) );
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.', 'newspack-newsletters' ) );
}

$saved_lists = Subscription_Lists::get_configured_for_current_provider();
Expand Down Expand Up @@ -262,11 +250,11 @@ public static function get_lists_config() {
public static function update_lists( $lists ) {
$provider = Newspack_Newsletters::get_service_provider();
if ( empty( $provider ) ) {
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.' ) );
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.', 'newspack-newsletters' ) );
}
$lists = self::sanitize_lists( $lists );
if ( empty( $lists ) ) {
return new WP_Error( 'newspack_newsletters_invalid_lists', __( 'Invalid list configuration.' ) );
return new WP_Error( 'newspack_newsletters_invalid_lists', __( 'Invalid list configuration.', 'newspack-newsletters' ) );
}

return Subscription_Lists::update_lists( $lists );
Expand Down Expand Up @@ -321,16 +309,16 @@ public static function has_subscription_management() {
*/
public static function get_contact_data( $email_address, $return_details = false ) {
if ( ! $email_address || empty( $email_address ) ) {
return new WP_Error( 'newspack_newsletters_invalid_email', __( 'Missing email address.' ) );
return new WP_Error( 'newspack_newsletters_invalid_email', __( 'Missing email address.', 'newspack-newsletters' ) );
}

$provider = Newspack_Newsletters::get_service_provider();
if ( empty( $provider ) ) {
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.' ) );
return new WP_Error( 'newspack_newsletters_invalid_provider', __( 'Provider is not set.', 'newspack-newsletters' ) );
}

if ( ! method_exists( $provider, 'get_contact_data' ) ) {
return new WP_Error( 'newspack_newsletters_not_implemented', __( 'Provider does not handle the contact-exists check.' ) );
return new WP_Error( 'newspack_newsletters_not_implemented', __( 'Provider does not handle the contact-exists check.', 'newspack-newsletters' ) );
}

return $provider->get_contact_data( $email_address, $return_details );
Expand Down
10 changes: 10 additions & 0 deletions includes/class-newspack-newsletters.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ final class Newspack_Newsletters {
const EMAIL_HTML_META = 'newspack_email_html';
const NEWSPACK_NEWSLETTERS_PALETTE_META = 'newspack_newsletters_color_palette';
const PUBLIC_POST_ID_META = 'newspack_nl_public_post_id';
const API_NAMESPACE = 'newspack-newsletters/v1';

/**
* Supported fonts.
Expand Down Expand Up @@ -834,6 +835,15 @@ public static function api_set_settings( $request ) {
return $wp_error->has_errors() ? $wp_error : self::api_get_settings();
}

/**
* Whether the current user can manage admin settings.
*
* @return bool Whether the current user can manage admin settings.
*/
public static function api_permission_callback() {
return current_user_can( 'manage_options' );
}

/**
* Retrieve settings.
*/
Expand Down
Loading