diff --git a/lib/Form/Block/Select.php b/lib/Form/Block/Select.php index 9d5c82dcb0..714bcf85c2 100644 --- a/lib/Form/Block/Select.php +++ b/lib/Form/Block/Select.php @@ -23,8 +23,17 @@ class Select extends Base { foreach($block['params']['values'] as $option) { $is_selected = (isset($option['is_checked']) && $option['is_checked']) ? 'selected="selected"' : ''; - $html .= ''; } $html .= ''; diff --git a/lib/Form/Renderer.php b/lib/Form/Renderer.php index 51ba032906..a7bea54f62 100644 --- a/lib/Form/Renderer.php +++ b/lib/Form/Renderer.php @@ -39,8 +39,7 @@ class Renderer { } } - // private: rendering methods - private static function renderBlocks($blocks = array()) { + static function renderBlocks($blocks = array()) { $html = ''; foreach ($blocks as $key => $block) { $html .= static::renderBlock($block)."\n"; @@ -49,7 +48,7 @@ class Renderer { return $html; } - private static function renderBlock($block = array()) { + static function renderBlock($block = array()) { $html = ''; switch($block['type']) { case 'html': diff --git a/lib/Router/Router.php b/lib/Router/Router.php index d9e3ce7be1..8f2d728072 100644 --- a/lib/Router/Router.php +++ b/lib/Router/Router.php @@ -1,7 +1,13 @@ withCustomFields() - ->withSubscriptions(); - $content = 'TODO'; + if($subscriber !== false) { + $subscriber = $subscriber + ->withCustomFields() + ->withSubscriptions(); + + $custom_fields = array_map(function($custom_field) use($subscriber) { + $custom_field->id = 'cf_'.$custom_field->id; + $custom_field = $custom_field->asArray(); + $custom_field['params']['value'] = $subscriber->{$custom_field['id']}; + return $custom_field; + }, CustomField::findMany()); + + $segment_ids = Setting::getValue('subscription.segments', array()); + if(!empty($segment_ids)) { + $segments = Segment::getPublic() + ->whereIn('id', $segment_ids) + ->findMany(); + } else { + $segments = Segment::getPublic()->findMany(); + } + + $subscribed_segment_ids = Helpers::arrayColumn( + $subscriber->subscriptions, 'id' + ); + + $segments = array_map(function($segment) use($subscribed_segment_ids) { + return array( + 'id' => $segment->id, + 'name' => $segment->name, + 'is_checked' => in_array($segment->id, $subscribed_segment_ids) + ); + }, $segments); + + $fields = array( + array( + 'id' => 'email', + 'type' => 'text', + 'params' => array( + 'label' => __('Email'), + 'required' => true, + 'value' => $subscriber->email + ) + ), + array( + 'id' => 'first_name', + 'type' => 'text', + 'params' => array( + 'label' => __('First name'), + 'value' => $subscriber->first_name + ) + ), + array( + 'id' => 'last_name', + 'type' => 'text', + 'params' => array( + 'label' => __('Last name'), + 'value' => $subscriber->last_name + ) + ), + array( + 'id' => 'status', + 'type' => 'select', + 'params' => array( + 'label' => __('Status'), + 'values' => array( + array( + 'value' => array( + Subscriber::STATUS_SUBSCRIBED => __('Subscribed') + ), + 'is_checked' => ( + $subscriber->status === Subscriber::STATUS_SUBSCRIBED + ) + ), + array( + 'value' => array( + Subscriber::STATUS_UNSUBSCRIBED => __('Unsubscribed') + ), + 'is_checked' => ( + $subscriber->status === Subscriber::STATUS_UNSUBSCRIBED + ) + ), + array( + 'value' => array( + Subscriber::STATUS_UNCONFIRMED => __('Unconfirmed') + ), + 'is_checked' => ( + $subscriber->status === Subscriber::STATUS_UNCONFIRMED + ) + ) + ) + ) + ) + ); + + $form = array_merge( + $fields, + $custom_fields, + array( + array( + 'id' => 'segment', + 'type' => 'segment', + 'params' => array( + 'label' => __('Your lists'), + 'values' => $segments + ) + ), + array( + 'id' => 'submit', + 'type' => 'submit', + 'params' => array( + 'label' => __('Subscribe!') + ) + ) + ) + ); + + $content = \MailPoet\Form\Renderer::renderBlocks($form); + } break; case 'unsubscribe': $content = '
'.__("Great, you'll never hear from us again!").'
'; diff --git a/lib/Router/Subscribers.php b/lib/Router/Subscribers.php index a1aa12376d..9557f0d253 100644 --- a/lib/Router/Subscribers.php +++ b/lib/Router/Subscribers.php @@ -15,7 +15,7 @@ class Subscribers { function __construct() { } - function get($id = false) { + function get($id = null) { $subscriber = Subscriber::findOne($id); if($subscriber !== false) { $subscriber = $subscriber