/** * @since 1.0.0 * * @param array $recipients * @param string $subject * @param string $message */ public function schedule_invites($recipients, $subject, $message) { $users_data = array(); $address_index = array(); $failures = array(); $lists = Prompt_Subscribing::get_signup_lists(); $current_user = wp_get_current_user(); foreach ($recipients as $recipient) { $to_address = Prompt_Email_Batch::address($recipient); $lower_case_to_address = strtolower($to_address); if (isset($address_index[$lower_case_to_address])) { $failures[] = __('Duplicate email address', 'Postmatic') . ': ' . $recipient; continue; } if (!is_email($to_address)) { $failures[] = __('Invalid email address', 'Postmatic') . ': ' . $recipient; continue; } $user = get_user_by('email', $to_address); if ($user and $this->is_subscribed_to_any($user->ID, $lists)) { $failures[] = __('Already subscribed', 'Postmatic') . ': ' . $recipient; continue; } $address_index[$lower_case_to_address] = true; $to_name = Prompt_Email_Batch::name($recipient); $users_data[] = array('user_email' => $to_address, 'display_name' => $to_name); } if (!empty($users_data)) { $message_data = array('subject' => html_entity_decode($subject, ENT_QUOTES), 'invite_introduction' => $message, 'message_type' => Prompt_Enum_Message_Types::INVITATION, 'from_name' => $current_user->display_name . ' - ' . get_option('blogname')); Prompt_Subscription_Mailing::schedule_agreements($lists, $users_data, $message_data); $confirmation_format = _n('Success. %d invite sent.', 'Success. %d invites sent.', count($users_data), 'Postmatic'); $this->add_notice(sprintf($confirmation_format, count($users_data))); } if (!empty($failures)) { $failure_notice = __('Something went wrong and these invites were not sent: ', 'Postmatic') . '<br/>' . implode('<br/>', $failures); $this->add_notice($failure_notice, 'error'); } }
/** * Render handlebars fields in the batch template using a set of individual message values. * * @since 2.0.0 * * @param array $values * @param object $outbound_message * @return array */ protected function render_individual_email($values, $outbound_message) { $template = $this->batch->get_batch_message_template(); $values = array_merge($this->batch->get_default_values(), $values); $email_fields = array(); $reply_to = isset($values['reply_to']) ? $values['reply_to'] : null; if ($reply_to) { $email_fields['metadata'] = $reply_to['trackable-address']; unset($values['reply_to']); } $values['ref_id'] = $outbound_message ? $outbound_message->id : 'noreply'; foreach ($template as $field_name => $field_template) { $email_fields[$field_name] = $this->handlebars->render_string($field_template, $values); } if ($outbound_message) { $email_fields['reply_address'] = Prompt_Email_Batch::address($outbound_message->reply_to); $email_fields['reply_name'] = Prompt_Email_Batch::name($outbound_message->reply_to); } return $email_fields; }