Changeset View
Changeset View
Standalone View
Standalone View
src/app/Traits/AliasesTrait.php
- This file was moved from src/app/Traits/UserAliasesTrait.php.
<?php | <?php | ||||
namespace App\Traits; | namespace App\Traits; | ||||
trait UserAliasesTrait | use Illuminate\Support\Str; | ||||
trait AliasesTrait | |||||
{ | |||||
/** | |||||
* Email aliases of this object. | |||||
* | |||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany | |||||
*/ | |||||
public function aliases() | |||||
{ | { | ||||
return $this->hasMany(static::class . 'Alias'); | |||||
} | |||||
/** | /** | ||||
* Find whether an email address exists as an alias | * Find whether an email address exists as an alias | ||||
* (including aliases of deleted users). | |||||
* | * | ||||
* @param string $email Email address | * @param string $email Email address | ||||
* | * | ||||
* @return bool True if found, False otherwise | * @return bool True if found, False otherwise | ||||
*/ | */ | ||||
public static function aliasExists(string $email): bool | public static function aliasExists(string $email): bool | ||||
{ | { | ||||
if (strpos($email, '@') === false) { | if (strpos($email, '@') === false) { | ||||
return false; | return false; | ||||
} | } | ||||
$email = \strtolower($email); | $email = \strtolower($email); | ||||
$class = static::class . 'Alias'; | |||||
$count = \App\UserAlias::where('alias', $email)->count(); | return $class::where('alias', $email)->count() > 0; | ||||
return $count > 0; | |||||
} | } | ||||
/** | /** | ||||
* A helper to update user aliases list. | * A helper to update object's aliases list. | ||||
* | * | ||||
* Example Usage: | * Example Usage: | ||||
* | * | ||||
* ```php | * ```php | ||||
* $user = User::firstOrCreate(['email' => 'some@other.org']); | * $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 | ||||
{ | { | ||||
$aliases = array_map('strtolower', $aliases); | $aliases = array_map('strtolower', $aliases); | ||||
$aliases = array_unique($aliases); | $aliases = array_unique($aliases); | ||||
$existing_aliases = []; | $existing_aliases = []; | ||||
foreach ($this->aliases()->get() as $alias) { | foreach ($this->aliases()->get() as $alias) { | ||||
/** @var \App\UserAlias|\App\SharedFolderAlias $alias */ | |||||
if (!in_array($alias->alias, $aliases)) { | if (!in_array($alias->alias, $aliases)) { | ||||
$alias->delete(); | $alias->delete(); | ||||
} else { | } else { | ||||
$existing_aliases[] = $alias->alias; | $existing_aliases[] = $alias->alias; | ||||
} | } | ||||
} | } | ||||
foreach (array_diff($aliases, $existing_aliases) as $alias) { | foreach (array_diff($aliases, $existing_aliases) as $alias) { | ||||
$this->aliases()->create(['alias' => $alias]); | $this->aliases()->create(['alias' => $alias]); | ||||
} | } | ||||
} | } | ||||
} | } |