/**
  * @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');
     }
 }
Example #2
0
 /**
  * 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;
 }