Changeset View
Changeset View
Standalone View
Standalone View
src/app/Traits/UserAliasesTrait.php
<?php | <?php | ||||
namespace App\Traits; | namespace App\Traits; | ||||
use App\UserAlias; | |||||
use Illuminate\Support\Facades\Cache; | |||||
trait UserAliasesTrait | trait UserAliasesTrait | ||||
{ | { | ||||
/** | /** | ||||
* A helper to update user aliases list. | * A helper to update user aliases list. | ||||
* | * | ||||
* Example Usage: | * Example Usage: | ||||
* | * | ||||
* ```php | * ```php | ||||
* $user = User::firstOrCreate(['email' => 'some@other.erg']); | * $user = User::firstOrCreate(['email' => 'some@other.org']); | ||||
* $user->setAliases(['alias1@other.org', 'alias2@other.org']); | * $user->setAliases(['alias1@other.org', 'alias2@other.org']); | ||||
* ``` | * ``` | ||||
* | * | ||||
* @param array $aliases An array of email addresses | * @param array $aliases An array of email addresses | ||||
* | * | ||||
* @return void | * @return void | ||||
*/ | */ | ||||
public function setAliases(array $aliases): void | public function setAliases(array $aliases): void | ||||
{ | { | ||||
$existing_aliases = $this->aliases()->get()->map(function ($alias) { | |||||
return $alias->alias; | |||||
})->toArray(); | |||||
$aliases = array_map('strtolower', $aliases); | $aliases = array_map('strtolower', $aliases); | ||||
$aliases = array_unique($aliases); | $aliases = array_unique($aliases); | ||||
foreach (array_diff($aliases, $existing_aliases) as $alias) { | $existing_aliases = []; | ||||
$this->aliases()->create(['alias' => $alias]); | |||||
foreach ($this->aliases()->get() as $alias) { | |||||
vanmeeuwen: Would this also benefit from `->pluck('alias')`? | |||||
Done Inline ActionsNot here. Because we need a UserALias object to call ->delete() on it. That's the most efficient way (if we want to make use of observers). machniak: Not here. Because we need a UserALias object to call ->delete() on it. That's the most… | |||||
if (!in_array($alias->alias, $aliases)) { | |||||
$alias->delete(); | |||||
} else { | |||||
$existing_aliases[] = $alias->alias; | |||||
} | |||||
} | } | ||||
foreach (array_diff($existing_aliases, $aliases) as $alias) { | foreach (array_diff($aliases, $existing_aliases) as $alias) { | ||||
$this->aliases()->where('alias', $alias)->delete(); | $this->aliases()->create(['alias' => $alias]); | ||||
} | } | ||||
} | } | ||||
} | } |
Would this also benefit from ->pluck('alias')?