Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117742247
D2960.1775166010.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
10 KB
Referenced Files
None
Subscribers
None
D2960.1775166010.diff
View Options
diff --git a/src/app/Console/Commands/Domain/SetWalletCommand.php b/src/app/Console/Commands/Domain/SetWalletCommand.php
--- a/src/app/Console/Commands/Domain/SetWalletCommand.php
+++ b/src/app/Console/Commands/Domain/SetWalletCommand.php
@@ -45,8 +45,8 @@
return 1;
}
- if ($domain->entitlement) {
- $this->error("Domain already assigned to a wallet: {$domain->entitlement->wallet->id}.");
+ if ($entitlement = $domain->entitlements()->first()) {
+ $this->error("Domain already assigned to a wallet: {$entitlement->wallet->id}.");
return 1;
}
diff --git a/src/app/Domain.php b/src/app/Domain.php
--- a/src/app/Domain.php
+++ b/src/app/Domain.php
@@ -3,10 +3,11 @@
namespace App;
use App\Wallet;
-use App\Traits\UuidIntKeyTrait;
use App\Traits\BelongsToTenantTrait;
+use App\Traits\EntitleableTrait;
use App\Traits\DomainConfigTrait;
use App\Traits\SettingsTrait;
+use App\Traits\UuidIntKeyTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -20,11 +21,12 @@
*/
class Domain extends Model
{
- use UuidIntKeyTrait;
use BelongsToTenantTrait;
+ use EntitleableTrait;
use DomainConfigTrait;
use SettingsTrait;
use SoftDeletes;
+ use UuidIntKeyTrait;
// we've simply never heard of this domain
public const STATUS_NEW = 1 << 0;
@@ -104,27 +106,6 @@
return $this;
}
- /**
- * The domain entitlement.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphOne
- */
- public function entitlement()
- {
- return $this->morphOne('App\Entitlement', 'entitleable');
- }
-
- /**
- * Entitlements for this domain.
- *
- * @return \Illuminate\Database\Eloquent\Relations\HasMany
- */
- public function entitlements()
- {
- return $this->hasMany('App\Entitlement', 'entitleable_id', 'id')
- ->where('entitleable_type', Domain::class);
- }
-
/**
* Return list of public+active domain names (for current tenant)
*/
@@ -526,17 +507,4 @@
return false;
}
-
- /**
- * Returns the wallet by which the domain is controlled
- *
- * @return \App\Wallet A wallet object
- */
- public function wallet(): ?Wallet
- {
- // Note: Not all domains have a entitlement/wallet
- $entitlement = $this->entitlement()->withTrashed()->orderBy('created_at', 'desc')->first();
-
- return $entitlement ? $entitlement->wallet : null;
- }
}
diff --git a/src/app/Group.php b/src/app/Group.php
--- a/src/app/Group.php
+++ b/src/app/Group.php
@@ -3,6 +3,7 @@
namespace App;
use App\Traits\BelongsToTenantTrait;
+use App\Traits\EntitleableTrait;
use App\Traits\UuidIntKeyTrait;
use App\Wallet;
use Illuminate\Database\Eloquent\Model;
@@ -20,8 +21,9 @@
class Group extends Model
{
use BelongsToTenantTrait;
- use UuidIntKeyTrait;
+ use EntitleableTrait;
use SoftDeletes;
+ use UuidIntKeyTrait;
// we've simply never heard of this domain
public const STATUS_NEW = 1 << 0;
@@ -54,7 +56,7 @@
throw new \Exception("Group not yet exists");
}
- if ($this->entitlement()->count()) {
+ if ($this->entitlements()->count()) {
throw new \Exception("Group already assigned to a wallet");
}
@@ -110,16 +112,6 @@
return false;
}
- /**
- * The group entitlement.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphOne
- */
- public function entitlement()
- {
- return $this->morphOne('App\Entitlement', 'entitleable');
- }
-
/**
* Group members propert accessor. Converts internal comma-separated list into an array
*
@@ -266,17 +258,4 @@
$this->status ^= Group::STATUS_SUSPENDED;
$this->save();
}
-
- /**
- * Returns the wallet by which the group is controlled
- *
- * @return \App\Wallet A wallet object
- */
- public function wallet(): ?Wallet
- {
- // Note: Not all domains have a entitlement/wallet
- $entitlement = $this->entitlement()->withTrashed()->orderBy('created_at', 'desc')->first();
-
- return $entitlement ? $entitlement->wallet : null;
- }
}
diff --git a/src/app/Traits/EntitleableTrait.php b/src/app/Traits/EntitleableTrait.php
new file mode 100644
--- /dev/null
+++ b/src/app/Traits/EntitleableTrait.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Traits;
+
+trait EntitleableTrait
+{
+ /**
+ * Entitlements for this object.
+ *
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
+ */
+ public function entitlements()
+ {
+ return $this->hasMany(\App\Entitlement::class, 'entitleable_id', 'id')
+ ->where('entitleable_type', self::class);
+ }
+
+ /**
+ * Returns the wallet by which the object is controlled
+ *
+ * @return ?\App\Wallet A wallet object
+ */
+ public function wallet(): ?\App\Wallet
+ {
+ $entitlement = $this->entitlements()->withTrashed()->orderBy('created_at', 'desc')->first();
+
+ if ($entitlement) {
+ return $entitlement->wallet;
+ }
+
+ // TODO: No entitlement should not happen, but in tests we have
+ // such cases, so we fallback to the user's wallet in this case
+ if ($this instanceof \App\User) {
+ return $this->wallets()->first();
+ }
+
+ return null;
+ }
+}
diff --git a/src/app/User.php b/src/app/User.php
--- a/src/app/User.php
+++ b/src/app/User.php
@@ -5,10 +5,11 @@
use App\Entitlement;
use App\UserAlias;
use App\Sku;
-use App\Traits\UuidIntKeyTrait;
use App\Traits\BelongsToTenantTrait;
+use App\Traits\EntitleableTrait;
use App\Traits\UserConfigTrait;
use App\Traits\UserAliasesTrait;
+use App\Traits\UuidIntKeyTrait;
use App\Traits\SettingsTrait;
use App\Wallet;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -29,6 +30,7 @@
*/
class User extends Authenticatable
{
+ use EntitleableTrait;
use UuidIntKeyTrait;
use BelongsToTenantTrait;
use NullableFields;
@@ -214,7 +216,7 @@
// TODO: For now controller can delete/update the account owner,
// this may change in future, controllers are not 0-regression feature
- return $this->wallets->contains($wallet) || $this->accounts->contains($wallet);
+ return $wallet && ($wallet->user_id == $this->id || $this->accounts->contains($wallet));
}
/**
@@ -256,7 +258,7 @@
$wallet = $object->wallet();
- return $wallet && ($this->wallets->contains($wallet) || $this->accounts->contains($wallet));
+ return $wallet && ($wallet->user_id == $this->id || $this->accounts->contains($wallet));
}
/**
@@ -341,30 +343,6 @@
return $domains;
}
- /**
- * The user entitlement.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphOne
- */
- public function entitlement()
- {
- return $this->morphOne('App\Entitlement', 'entitleable');
- }
-
- /**
- * Entitlements for this user.
- *
- * Note that these are entitlements that apply to the user account, and not entitlements that
- * this user owns.
- *
- * @return \Illuminate\Database\Eloquent\Relations\HasMany
- */
- public function entitlements()
- {
- return $this->hasMany('App\Entitlement', 'entitleable_id', 'id')
- ->where('entitleable_type', User::class);
- }
-
/**
* Find whether an email address exists as a user (including deleted users).
*
@@ -696,20 +674,6 @@
return $this->hasMany('App\VerificationCode', 'user_id', 'id');
}
- /**
- * Returns the wallet by which the user is controlled
- *
- * @return ?\App\Wallet A wallet object
- */
- public function wallet(): ?Wallet
- {
- $entitlement = $this->entitlement()->withTrashed()->orderBy('created_at', 'desc')->first();
-
- // TODO: No entitlement should not happen, but in tests we have
- // such cases, so we fallback to the user's wallet in this case
- return $entitlement ? $entitlement->wallet : $this->wallets()->first();
- }
-
/**
* Wallets this user owns.
*
diff --git a/src/tests/Feature/Console/Domain/SetWalletTest.php b/src/tests/Feature/Console/Domain/SetWalletTest.php
--- a/src/tests/Feature/Console/Domain/SetWalletTest.php
+++ b/src/tests/Feature/Console/Domain/SetWalletTest.php
@@ -60,11 +60,11 @@
$this->assertSame('', $output);
$domain->refresh();
- $sku = \App\Sku::withObjectTenantContext($domain)
- ->where('title', 'domain-hosting')->first();
+ $sku = \App\Sku::withObjectTenantContext($domain)->where('title', 'domain-hosting')->first();
+ $entitlement = $domain->entitlements()->first();
- $this->assertSame($sku->id, $domain->entitlement->sku_id);
- $this->assertSame($wallet->id, $domain->entitlement->wallet_id);
+ $this->assertSame($sku->id, $entitlement->sku_id);
+ $this->assertSame($wallet->id, $entitlement->wallet_id);
// Already assigned to a wallet
$code = \Artisan::call("domain:set-wallet domain-delete.com " . $wallet->id);
diff --git a/src/tests/Feature/Console/OwnerSwapTest.php b/src/tests/Feature/Console/OwnerSwapTest.php
--- a/src/tests/Feature/Console/OwnerSwapTest.php
+++ b/src/tests/Feature/Console/OwnerSwapTest.php
@@ -107,7 +107,7 @@
// Test case when the target user does not belong to the same account
$john = $this->getTestUser('john@kolab.org');
- $owner->entitlement()->update(['wallet_id' => $john->wallets->first()->id]);
+ $owner->entitlements()->update(['wallet_id' => $john->wallets->first()->id]);
$code = \Artisan::call("owner:swap user2@owner-swap.com user1@owner-swap.com");
$output = trim(\Artisan::output());
diff --git a/src/tests/Feature/Controller/DomainsTest.php b/src/tests/Feature/Controller/DomainsTest.php
--- a/src/tests/Feature/Controller/DomainsTest.php
+++ b/src/tests/Feature/Controller/DomainsTest.php
@@ -537,7 +537,7 @@
// Test creating a domain that is soft-deleted and belongs to another user
$domain->delete();
- $domain->entitlement()->withTrashed()->update(['wallet_id' => $jack->wallets->first()->id]);
+ $domain->entitlements()->withTrashed()->update(['wallet_id' => $jack->wallets->first()->id]);
$response = $this->actingAs($john)->post("/api/v4/domains", $post);
$response->assertStatus(422);
diff --git a/src/tests/Feature/GroupTest.php b/src/tests/Feature/GroupTest.php
--- a/src/tests/Feature/GroupTest.php
+++ b/src/tests/Feature/GroupTest.php
@@ -35,7 +35,7 @@
$result = $group->assignToWallet($user->wallets->first());
$this->assertSame($group, $result);
- $this->assertSame(1, $group->entitlement()->count());
+ $this->assertSame(1, $group->entitlements()->count());
// Can't be done twice on the same group
$this->expectException(\Exception::class);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 2, 9:40 PM (3 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18821019
Default Alt Text
D2960.1775166010.diff (10 KB)
Attached To
Mode
D2960: Introduce EntitleableTrait for code deduplication
Attached
Detach File
Event Timeline