Created
December 1, 2014 10:33
-
-
Save dannewns/92a3000d7e6d5c7f7ca9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Mutators | |
*/ | |
public function setEmailAttribute($value) | |
{ | |
$value = \Import::splitMultipleFieldsData($value); | |
$this->setEmailAddressesAttribute($value); | |
} | |
public function setEmailAddressesAttribute(array $array) | |
{ | |
// Need to save the student to ensure it has an ID to relate to | |
$this->save(); | |
// Collect E-Mail Addresses, so we can remove any that aren't here. | |
$emailAddresses = array(); | |
// Order E-Mail Addresses | |
$order = 1; | |
foreach ($array as $emailAddress) { | |
if ( ! is_array($emailAddress)) { | |
// To match the data from the Student Create/Edit form | |
$emailAddress = array( | |
'email' => $emailAddress | |
); | |
} | |
$emailAddress['email'] = trim($emailAddress['email']); | |
if ( ! strlen($emailAddress['email'])) { | |
// E-Mail Address is empty, but that is ok because empty fields will be ignored. | |
continue; | |
} | |
if (filter_var($emailAddress['email'], FILTER_VALIDATE_EMAIL) === false) { | |
throw new \Exception(sprintf('"%s" does not appear to be a valid e-mail address.', $emailAddress['email'])); | |
} | |
$emailAddress['email'] = strtolower($emailAddress['email']); | |
// Used after the loop to remove any e-mail addresses that aren't here afterwards. | |
$emailAddresses[] = $emailAddress['email']; | |
// Check if Student already has this e-mail address | |
$studentEmailAddress = StudentEmailAddress::where('student_id', $this->id) | |
->where('email', $emailAddress['email']) | |
->first(); | |
if (is_null($studentEmailAddress)) { | |
$studentEmailAddress = new StudentEmailAddress(); | |
$studentEmailAddress->student_id = $this->id; | |
$studentEmailAddress->email = $emailAddress['email']; | |
} | |
if (isset($emailAddress['unsubscribed'])) { | |
$studentEmailAddress->unsubscribed = (bool) $emailAddress['unsubscribed']; | |
} else { | |
$studentEmailAddress->unsubscribed = false; | |
} | |
$studentEmailAddress->order = $order++; | |
$studentEmailAddress->save(); | |
} | |
if (count($emailAddresses)) { | |
// Remove E-Mail addresses that aren't in the input. | |
StudentEmailAddress::where('student_id', $this->id) | |
->whereNotIn('email', $emailAddresses) | |
->delete(); | |
} else { | |
// No E-Mail Addreses were found in the input. | |
// Remove All E-Mail Addresses for Student. | |
StudentEmailAddress::where('student_id', $this->id) | |
->delete(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment