From a63ce3cdac43f0fe6fe37fd6f9e87281d68b710f Mon Sep 17 00:00:00 2001 From: Jonathan Labreuille Date: Thu, 14 Jan 2016 15:18:44 +0100 Subject: [PATCH] Subscribe on registration --- lib/Config/Hooks.php | 30 ++++++++++++++ lib/Models/Setting.php | 45 ++++++++++++--------- lib/Models/Subscriber.php | 4 +- lib/Subscription/Comment.php | 12 +++--- lib/Subscription/Registration.php | 67 +++++++++++++++++++++++++++++++ 5 files changed, 129 insertions(+), 29 deletions(-) create mode 100644 lib/Subscription/Registration.php diff --git a/lib/Config/Hooks.php b/lib/Config/Hooks.php index d2cf7ad45c..5bd560522b 100644 --- a/lib/Config/Hooks.php +++ b/lib/Config/Hooks.php @@ -36,6 +36,36 @@ class Hooks { } } + // Subscribe in registration form + if( + isset($subscribe_settings['on_register']['enabled']) + && $subscribe_settings['on_register']['enabled'] + ) { + if(is_multisite()) { + add_action( + 'signup_extra_fields', + '\MailPoet\Subscription\Registration::extendForm' + ); + add_action( + 'wpmu_validate_user_signup', + '\MailPoet\Subscription\Registration::onMSRegister', + 60, + 1 + ); + } else { + add_action( + 'register_form', + '\MailPoet\Subscription\Registration::extendForm' + ); + add_action( + 'register_post', + '\MailPoet\Subscription\Registration::onRegister', + 60, + 3 + ); + } + } + // WP Users synchronization add_action( 'user_register', diff --git a/lib/Models/Setting.php b/lib/Models/Setting.php index 93b6cc3eb6..36cc8cddd5 100644 --- a/lib/Models/Setting.php +++ b/lib/Models/Setting.php @@ -16,15 +16,34 @@ class Setting extends Model { } public static function getValue($key, $default = null) { - $setting = Setting::where('name', $key)->findOne(); - if($setting === false) { - return $default; - } else { - if(is_serialized($setting->value)) { - return unserialize($setting->value); + $keys = explode('.', $key); + + if(count($keys) === 1) { + $setting = Setting::where('name', $key)->findOne(); + if($setting === false) { + return $default; } else { - return $setting->value; + if(is_serialized($setting->value)) { + return unserialize($setting->value); + } else { + return $setting->value; + } } + } else { + $main_key = array_shift($keys); + + $setting = static::getValue($main_key, $default); + + if($setting !== $default) { + for($i = 0, $count = count($keys); $i < $count; $i++) { + if(array_key_exists($keys[$i], $setting)) { + $setting = $setting[$keys[$i]]; + } else { + return $default; + } + } + } + return $setting; } } @@ -67,16 +86,4 @@ class Setting extends Model { $exists->value = $model['value']; return $exists->save(); } - - public static function hasSignupConfirmation() { - $signup_confirmation = Setting::getValue('signup_confirmation', array()); - $has_signup_confirmation = true; - if(array_key_exists('enabled', $signup_confirmation)) { - $has_signup_confirmation = filter_var( - $signup_confirmation['enabled'], - FILTER_VALIDATE_BOOLEAN - ); - } - return $has_signup_confirmation; - } } diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index c8d4e42338..fa54549050 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -61,9 +61,7 @@ class Subscriber extends Model { $subscriber->setExpr('deleted_at', 'NULL'); } - if(Setting::hasSignupConfirmation()) { - // reset status of existing subscribers if signup confirmation - // is turned on + if((bool)Setting::getValue('signup_confirmation.enabled')) { if($subscriber->status !== 'subscribed') { $subscriber->sendConfirmationEmail(); } diff --git a/lib/Subscription/Comment.php b/lib/Subscription/Comment.php index 4bacfe0f85..10346f526b 100644 --- a/lib/Subscription/Comment.php +++ b/lib/Subscription/Comment.php @@ -9,10 +9,9 @@ class Comment { const PENDING_APPROVAL = 0; static function extendForm() { - $subscribe_settings = Setting::getValue('subscribe'); - $label = (isset($subscribe_settings['on_comment']['label']) - ? $subscribe_settings['on_comment']['label'] - : __('Yes, add me to your mailing list.') + $label = Setting::getValue( + 'subscribe.on_comment.label', + __('Yes, add me to your mailing list.') ); print '

@@ -73,10 +72,9 @@ class Comment { } private static function subscribeAuthorOfComment($comment_id) { - $subscribe_settings = Setting::getValue('subscribe'); - $segment_ids = (array)$subscribe_settings['on_comment']['segments']; + $segment_ids = Setting::getValue('subscribe.on_comment.segments', array()); - if($subscribe_settings !== null) { + if(!empty($segment_ids)) { $comment = get_comment($comment_id); $result = Subscriber::subscribe( diff --git a/lib/Subscription/Registration.php b/lib/Subscription/Registration.php new file mode 100644 index 0000000000..b9647d51e3 --- /dev/null +++ b/lib/Subscription/Registration.php @@ -0,0 +1,67 @@ + + +

'; + } + + static function onMSRegister($result) { + if(empty($result['errors']->errors)) { + if( + isset($_POST['mailpoet']['subscribe_on_register']) + && $_POST['mailpoet']['subscribe_on_register'] + ) { + static::subscribeNewUser( + $result['user_name'], + $result['user_email'] + ); + } + } + return $result; + } + + static function onRegister( + $user_login, + $user_email = null, + $errors = null + ) { + if( + isset($_POST['mailpoet']['subscribe_on_register']) + && $_POST['mailpoet']['subscribe_on_register'] + ) { + static::subscribeNewUser($user_login, $user_email); + } + } + + private static function subscribeNewUser($login, $email) { + $segment_ids = Setting::getValue('subscribe.on_comment.segments', array()); + + if(!empty($segment_ids)) { + Subscriber::subscribe( + array( + 'email' => $email, + 'first_name' => $login + ), + $segment_ids + ); + } + } +} \ No newline at end of file