diff --git a/modules/invite_by_email/invite_by_email.module b/modules/invite_by_email/invite_by_email.module index bbc95b9..c7f32d2 100644 --- a/modules/invite_by_email/invite_by_email.module +++ b/modules/invite_by_email/invite_by_email.module @@ -263,10 +263,36 @@ function invite_by_email_invite_presave($invite) { } $entity = entity_metadata_wrapper('invite', $invite); - $mail_address = $entity->field_invitation_email_address->value(); - if ($account = user_load_by_mail($mail_address)) { - $invite->invitee = $account->uid; + + // Create a new invite entity for each additional email address + $mail_addresses = explode(',', $entity->field_invitation_email_address->value()); + while($mail_address = array_pop($mail_addresses)) { + $mail_address = trim($mail_address); + + if(empty($mail_addresses)) { + $entity->field_invitation_email_address = $mail_address; + if ($account = user_load_by_mail($mail_address)) { + $invite->invitee = $account->uid; + } + } + else { + // Create copy of invite + $new_invite = entity_ui_clone_entity('invite', $invite); + // Set new reg_code for entity + $new_invite->reg_code = invite_generate_code(); + + // Set email address for the new invite + $new_entity = entity_metadata_wrapper('invite', $new_invite); + $new_entity->field_invitation_email_address = $mail_address; + + // Recursive call; + // invite_by_email_invite_presave will be called again for the new invite entity + // this time with a single email address + $new_entity->save(); + } } + + // Process invite entity which now only has 1 email address $invite->data['subject'] = $entity->field_invitation_email_subject->value(); $invite->data['message'] = $entity->field_invitation_email_body->value(); @@ -447,30 +473,35 @@ function invite_by_email_form_invite_form_alter(&$form, &$form_state, $form_id) function invite_by_email_form_invite_form_validate($form, &$form_state) { $invite = $form_state['invite']; $entity = entity_metadata_wrapper('invite', $invite); - $mail_address = $form_state['values']['field_invitation_email_address'][LANGUAGE_NONE][0]['value']; - // Validate is email address valid. - if (!valid_email_address($mail_address)) { - form_set_error('field_invitation_email_address', t('Email address %email is not valid.', array('%email' => $mail_address))); - } - // Check that we are not inviting invite's author. - if ($entity->inviter->mail->value() == $mail_address) { - form_set_error('field_invitation_email_address', t('You couldn\'t invite yourself.')); - } + $mail_addresses = explode(',', $form_state['values']['field_invitation_email_address'][LANGUAGE_NONE][0]['value']); + foreach($mail_addresses as $mail_address) { + $mail_address = trim($mail_address); + + // Validate is email address valid. + if (!valid_email_address($mail_address)) { + form_set_error('field_invitation_email_address', t('Email address %email is not valid.', array('%email' => $mail_address))); + } - // Check that this email address wasn't used by user before. - $query = db_select('field_data_field_invitation_email_address', 'address'); - $query->join('invite', 'i', 'i.iid=address.entity_id'); - $duplicate = $query->condition('i.uid', $entity->inviter->uid->value(), '=') - ->fields('address', array('field_invitation_email_address_value')) - ->condition('address.field_invitation_email_address_value', $mail_address, '=') - ->condition('address.deleted', 0, '=') - ->range(0, 1) - ->execute() - ->fetchField(); - if ($duplicate) { + // Check that we are not inviting invite's author. if ($entity->inviter->mail->value() == $mail_address) { - form_set_error('field_invitation_email_address', t('You have invited this user already.')); + form_set_error('field_invitation_email_address', t('You couldn\'t invite yourself.')); + } + + // Check that this email address wasn't used by user before. + $query = db_select('field_data_field_invitation_email_address', 'address'); + $query->join('invite', 'i', 'i.iid=address.entity_id'); + $duplicate = $query->condition('i.uid', $entity->inviter->uid->value(), '=') + ->fields('address', array('field_invitation_email_address_value')) + ->condition('address.field_invitation_email_address_value', $mail_address, '=') + ->condition('address.deleted', 0, '=') + ->range(0, 1) + ->execute() + ->fetchField(); + if ($duplicate) { + if ($entity->inviter->mail->value() == $mail_address) { + form_set_error('field_invitation_email_address', t('You have invited %email already.', array('%email' => $mail_address))); + } } } }