Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117784515
D5646.1775250764.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
33 KB
Referenced Files
None
Subscribers
None
D5646.1775250764.diff
View Options
diff --git a/src/app/Http/Controllers/API/V4/Admin/WalletsController.php b/src/app/Http/Controllers/API/V4/Admin/WalletsController.php
--- a/src/app/Http/Controllers/API/V4/Admin/WalletsController.php
+++ b/src/app/Http/Controllers/API/V4/Admin/WalletsController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\API\V4\Admin;
use App\Discount;
-use App\Http\Resources\WalletResource;
+use App\Http\Resources\WalletInfoResource;
use App\User;
use App\Wallet;
use Illuminate\Http\JsonResponse;
@@ -26,10 +26,7 @@
return $this->errorResponse(404);
}
- $result = new WalletResource($wallet);
- $result->extended = true;
-
- return $result->response();
+ return (new WalletInfoResource($wallet))->response();
}
/**
diff --git a/src/app/Http/Controllers/API/V4/PackagesController.php b/src/app/Http/Controllers/API/V4/PackagesController.php
--- a/src/app/Http/Controllers/API/V4/PackagesController.php
+++ b/src/app/Http/Controllers/API/V4/PackagesController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\API\V4;
use App\Http\Controllers\ResourceController;
+use App\Http\Resources\PackageResource;
use App\Package;
use Illuminate\Http\JsonResponse;
@@ -14,20 +15,18 @@
public function index(): JsonResponse
{
// TODO: Packages should have an 'active' flag too, I guess
- $response = [];
- $packages = Package::withSubjectTenantContext()->select()->orderBy('title')->get();
+ $result = Package::withSubjectTenantContext()->select()->orderBy('title')->get();
- foreach ($packages as $package) {
- $response[] = [
- 'id' => $package->id,
- 'title' => $package->title,
- 'name' => $package->name,
- 'description' => $package->description,
- 'cost' => $package->cost(),
- 'isDomain' => $package->isDomain(),
- ];
- }
-
- return response()->json($response);
+ return response()->json([
+ 'status' => 'success',
+ // @var string Response message
+ 'message' => self::trans("app.search-foundxpackages", ['x' => count($result)]),
+ // List of packages
+ 'list' => PackageResource::collection($result),
+ // @var int Number of entries in the list
+ 'count' => count($result),
+ // @var bool Indicates that there are more entries available
+ 'hasMore' => false,
+ ]);
}
}
diff --git a/src/app/Http/Controllers/API/V4/SkusController.php b/src/app/Http/Controllers/API/V4/SkusController.php
--- a/src/app/Http/Controllers/API/V4/SkusController.php
+++ b/src/app/Http/Controllers/API/V4/SkusController.php
@@ -2,7 +2,6 @@
namespace App\Http\Controllers\API\V4;
-use App\Entitlement;
use App\Handlers\Mailbox;
use App\Http\Controllers\ResourceController;
use App\Sku;
@@ -14,7 +13,7 @@
class SkusController extends ResourceController
{
/**
- * Get a list of active SKUs.
+ * List of active SKUs.
*/
#[QueryParameter('type', description: 'SKU type', type: 'string')]
public function index(): JsonResponse
@@ -98,29 +97,6 @@
return response()->json($response);
}
- /**
- * Include SKUs/Wallet information in the object's response.
- *
- * @param object $object User/Domain/etc object
- * @param array $response The response to put the data into
- */
- public static function objectEntitlements($object, &$response = []): array
- {
- // Object's entitlements information
- $response['skus'] = Entitlement::objectEntitlementsSummary($object);
-
- // Some basic information about the object's wallet
- if ($wallet = $object->wallet()) {
- $response['wallet'] = $wallet->toArray();
- if ($wallet->discount) {
- $response['wallet']['discount'] = $wallet->discount->discount;
- $response['wallet']['discount_description'] = $wallet->discount->description;
- }
- }
-
- return $response;
- }
-
/**
* Update object entitlements.
*
diff --git a/src/app/Http/Controllers/API/V4/WalletsController.php b/src/app/Http/Controllers/API/V4/WalletsController.php
--- a/src/app/Http/Controllers/API/V4/WalletsController.php
+++ b/src/app/Http/Controllers/API/V4/WalletsController.php
@@ -4,7 +4,7 @@
use App\Documents\Receipt;
use App\Http\Controllers\ResourceController;
-use App\Http\Resources\WalletResource;
+use App\Http\Resources\WalletInfoResource;
use App\Payment;
use App\ReferralCode;
use App\ReferralProgram;
@@ -40,7 +40,7 @@
return $this->errorResponse(403);
}
- return (new WalletResource($wallet))->response();
+ return (new WalletInfoResource($wallet))->response();
}
/**
diff --git a/src/app/Http/Resources/ApiResource.php b/src/app/Http/Resources/ApiResource.php
new file mode 100644
--- /dev/null
+++ b/src/app/Http/Resources/ApiResource.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Http\Resources;
+
+use App\Entitlement;
+use App\User;
+use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Auth;
+
+/**
+ * Common resource.
+ */
+class ApiResource extends JsonResource
+{
+ /**
+ * Check if an authenticated user is admin or reseller
+ */
+ public static function isAdmin(): bool
+ {
+ $user = Auth::guard()->user();
+ return $user && in_array($user->role, [User::ROLE_ADMIN, User::ROLE_RESELLER]);
+ }
+
+ /**
+ * Include SKUs/Wallet information in the object's response.
+ *
+ * @param object $object User/Domain/etc object
+ */
+ public static function objectEntitlements($object): array
+ {
+ $wallet = $object->wallet();
+
+ return [
+ // Entitlements information
+ 'skus' => Entitlement::objectEntitlementsSummary($object),
+ // Wallet information
+ 'wallet' => $wallet ? new WalletResource($wallet) : null,
+ ];
+ }
+}
diff --git a/src/app/Http/Resources/AuthAttemptResource.php b/src/app/Http/Resources/AuthAttemptResource.php
--- a/src/app/Http/Resources/AuthAttemptResource.php
+++ b/src/app/Http/Resources/AuthAttemptResource.php
@@ -4,14 +4,13 @@
use App\AuthAttempt;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* AuthAttempt response
*
* @mixin AuthAttempt
*/
-class AuthAttemptResource extends JsonResource
+class AuthAttemptResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/AuthErrorResource.php b/src/app/Http/Resources/AuthErrorResource.php
--- a/src/app/Http/Resources/AuthErrorResource.php
+++ b/src/app/Http/Resources/AuthErrorResource.php
@@ -3,12 +3,11 @@
namespace App\Http\Resources;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Authentication error response
*/
-class AuthErrorResource extends JsonResource
+class AuthErrorResource extends ApiResource
{
public string $status = 'error';
public string $message;
diff --git a/src/app/Http/Resources/AuthResource.php b/src/app/Http/Resources/AuthResource.php
--- a/src/app/Http/Resources/AuthResource.php
+++ b/src/app/Http/Resources/AuthResource.php
@@ -3,12 +3,11 @@
namespace App\Http\Resources;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Authentication response
*/
-class AuthResource extends JsonResource
+class AuthResource extends ApiResource
{
public string $status = 'success';
public ?string $message = null;
diff --git a/src/app/Http/Resources/CompanionAppResource.php b/src/app/Http/Resources/CompanionAppResource.php
--- a/src/app/Http/Resources/CompanionAppResource.php
+++ b/src/app/Http/Resources/CompanionAppResource.php
@@ -4,14 +4,13 @@
use App\CompanionApp;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* CompanionApp response
*
* @mixin CompanionApp
*/
-class CompanionAppResource extends JsonResource
+class CompanionAppResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/DomainInfoResource.php b/src/app/Http/Resources/DomainInfoResource.php
--- a/src/app/Http/Resources/DomainInfoResource.php
+++ b/src/app/Http/Resources/DomainInfoResource.php
@@ -4,7 +4,6 @@
use App\Domain;
use App\Http\Controllers\API\V4\DomainsController;
-use App\Http\Controllers\API\V4\SkusController;
use Illuminate\Http\Request;
/**
@@ -48,7 +47,7 @@
'statusInfo' => DomainsController::statusInfo($this->resource),
// Entitlements/Wallet information
- $this->merge(SkusController::objectEntitlements($this->resource)),
+ $this->merge(self::objectEntitlements($this->resource)),
];
}
diff --git a/src/app/Http/Resources/DomainResource.php b/src/app/Http/Resources/DomainResource.php
--- a/src/app/Http/Resources/DomainResource.php
+++ b/src/app/Http/Resources/DomainResource.php
@@ -5,14 +5,13 @@
use App\Domain;
use App\Http\Controllers\RelationController;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Domain response
*
* @mixin Domain
*/
-class DomainResource extends JsonResource
+class DomainResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/GroupInfoResource.php b/src/app/Http/Resources/GroupInfoResource.php
--- a/src/app/Http/Resources/GroupInfoResource.php
+++ b/src/app/Http/Resources/GroupInfoResource.php
@@ -4,7 +4,6 @@
use App\Group;
use App\Http\Controllers\API\V4\GroupsController;
-use App\Http\Controllers\API\V4\SkusController;
use Illuminate\Http\Request;
/**
@@ -39,7 +38,7 @@
'statusInfo' => GroupsController::statusInfo($this->resource),
// Entitlements/Wallet information
- $this->merge(SkusController::objectEntitlements($this->resource)),
+ $this->merge(self::objectEntitlements($this->resource)),
];
}
}
diff --git a/src/app/Http/Resources/GroupResource.php b/src/app/Http/Resources/GroupResource.php
--- a/src/app/Http/Resources/GroupResource.php
+++ b/src/app/Http/Resources/GroupResource.php
@@ -5,14 +5,13 @@
use App\Group;
use App\Http\Controllers\RelationController;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Group response
*
* @mixin Group
*/
-class GroupResource extends JsonResource
+class GroupResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/PackageResource.php b/src/app/Http/Resources/PackageResource.php
new file mode 100644
--- /dev/null
+++ b/src/app/Http/Resources/PackageResource.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Http\Resources;
+
+use App\Package;
+use Illuminate\Http\Request;
+
+/**
+ * Package response
+ *
+ * @mixin Package
+ */
+class PackageResource extends ApiResource
+{
+ /**
+ * Transform the resource into an array.
+ */
+ public function toArray(Request $request): array
+ {
+ return [
+ // Package identifier
+ 'id' => $this->resource->id,
+ // Package title
+ 'title' => $this->resource->title,
+ // Package name
+ 'name' => $this->resource->name,
+ // Package description
+ 'description' => $this->resource->description,
+ // Package cost (in cents)
+ 'cost' => $this->resource->cost(),
+ // Is this a User or Domain package?
+ 'isDomain' => $this->resource->isDomain(),
+ ];
+ }
+}
diff --git a/src/app/Http/Resources/PlanResource.php b/src/app/Http/Resources/PlanResource.php
--- a/src/app/Http/Resources/PlanResource.php
+++ b/src/app/Http/Resources/PlanResource.php
@@ -5,14 +5,13 @@
use App\Http\Controllers\Controller;
use App\Plan;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Plan response
*
* @mixin Plan
*/
-class PlanResource extends JsonResource
+class PlanResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/ResourceInfoResource.php b/src/app/Http/Resources/ResourceInfoResource.php
--- a/src/app/Http/Resources/ResourceInfoResource.php
+++ b/src/app/Http/Resources/ResourceInfoResource.php
@@ -3,7 +3,6 @@
namespace App\Http\Resources;
use App\Http\Controllers\API\V4\ResourcesController;
-use App\Http\Controllers\API\V4\SkusController;
use App\Resource;
use Illuminate\Http\Request;
@@ -36,7 +35,7 @@
'statusInfo' => ResourcesController::statusInfo($this->resource),
// Entitlements/Wallet information
- $this->merge(SkusController::objectEntitlements($this->resource)),
+ $this->merge(self::objectEntitlements($this->resource)),
];
}
}
diff --git a/src/app/Http/Resources/ResourceResource.php b/src/app/Http/Resources/ResourceResource.php
--- a/src/app/Http/Resources/ResourceResource.php
+++ b/src/app/Http/Resources/ResourceResource.php
@@ -5,14 +5,13 @@
use App\Http\Controllers\RelationController;
use App\Resource;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Resource response
*
* @mixin Resource
*/
-class ResourceResource extends JsonResource
+class ResourceResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/SharedFolderInfoResource.php b/src/app/Http/Resources/SharedFolderInfoResource.php
--- a/src/app/Http/Resources/SharedFolderInfoResource.php
+++ b/src/app/Http/Resources/SharedFolderInfoResource.php
@@ -3,7 +3,6 @@
namespace App\Http\Resources;
use App\Http\Controllers\API\V4\SharedFoldersController;
-use App\Http\Controllers\API\V4\SkusController;
use Illuminate\Http\Request;
/**
@@ -38,7 +37,7 @@
'statusInfo' => SharedFoldersController::statusInfo($this->resource),
// Entitlements/Wallet information
- $this->merge(SkusController::objectEntitlements($this->resource)),
+ $this->merge(self::objectEntitlements($this->resource)),
];
}
}
diff --git a/src/app/Http/Resources/SharedFolderResource.php b/src/app/Http/Resources/SharedFolderResource.php
--- a/src/app/Http/Resources/SharedFolderResource.php
+++ b/src/app/Http/Resources/SharedFolderResource.php
@@ -5,14 +5,13 @@
use App\Http\Controllers\RelationController;
use App\SharedFolder;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Shared folder response
*
* @mixin SharedFolder
*/
-class SharedFolderResource extends JsonResource
+class SharedFolderResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/UserInfoExtendedResource.php b/src/app/Http/Resources/UserInfoExtendedResource.php
--- a/src/app/Http/Resources/UserInfoExtendedResource.php
+++ b/src/app/Http/Resources/UserInfoExtendedResource.php
@@ -2,7 +2,6 @@
namespace App\Http\Resources;
-use App\Entitlement;
use App\User;
use App\VerificationCode;
use Carbon\Carbon;
@@ -29,8 +28,7 @@
return [
$this->merge(parent::toArray($request)),
- // @var array User subscriptions summary
- 'skus' => Entitlement::objectEntitlementsSummary($this->resource),
+
// @var array User configuration
'config' => $this->resource->getConfig(true),
// @var array<string> Email address aliases
diff --git a/src/app/Http/Resources/UserInfoResource.php b/src/app/Http/Resources/UserInfoResource.php
--- a/src/app/Http/Resources/UserInfoResource.php
+++ b/src/app/Http/Resources/UserInfoResource.php
@@ -4,7 +4,6 @@
use App\Http\Controllers\API\V4\UsersController;
use App\Plan;
-use App\Providers\PaymentProvider;
use App\User;
use Illuminate\Http\Request;
@@ -41,14 +40,6 @@
$keys = array_merge(self::USER_SETTINGS, ['password_expired', 'debug']);
$settings = $this->resource->settings()->whereIn('key', $keys)->pluck('value', 'key')->all();
- // Status info
- $statusInfo = UsersController::statusInfo($this->resource);
-
- // Information about wallets and accounts for access checks
- $wallets = $this->resource->wallets->map([$this, 'walletPropsMap'])->toArray();
- $accounts = $this->resource->accounts->map([$this, 'walletPropsMap'])->toArray();
- $wallet = $this->walletPropsMap($wallet);
-
return [
$this->merge(parent::toArray($request)),
@@ -57,37 +48,15 @@
// @var array<strig, mixed> User settings (first_name, last_name, phone, etc.)
'settings' => $settings,
- // @var array Wallets controlled by the user
- 'accounts' => $accounts,
- // @var array Wallets owned by the user
- 'wallets' => $wallets,
- // @var array Wallet the user is in
- 'wallet' => $wallet,
+ // Wallets controlled by the user
+ 'accounts' => WalletResource::collection($this->resource->accounts),
+ // Wallets owned by the user
+ 'wallets' => WalletResource::collection($this->resource->wallets),
// @var array Extended status/permissions information
- 'statusInfo' => $statusInfo,
- ];
- }
-
- /**
- * Add more info to the wallet object output
- */
- public function walletPropsMap($wallet): array
- {
- $result = $wallet->toArray();
-
- if ($wallet->discount) {
- $result['discount'] = $wallet->discount->discount;
- $result['discount_description'] = $wallet->discount->description;
- }
+ 'statusInfo' => UsersController::statusInfo($this->resource),
- if ($wallet->user_id != $this->resource->id) {
- // FIXME: This one probably is relevant for an admin/reseller UI only
- $result['user_email'] = $wallet->owner->email;
- }
-
- $provider = PaymentProvider::factory($wallet);
- $result['provider'] = $provider->name();
-
- return $result;
+ // Entitlements/Wallet information
+ $this->merge(self::objectEntitlements($this->resource)),
+ ];
}
}
diff --git a/src/app/Http/Resources/UserResource.php b/src/app/Http/Resources/UserResource.php
--- a/src/app/Http/Resources/UserResource.php
+++ b/src/app/Http/Resources/UserResource.php
@@ -5,24 +5,19 @@
use App\Http\Controllers\RelationController;
use App\User;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
-use Illuminate\Support\Facades\Auth;
/**
* User response
*
* @mixin User
*/
-class UserResource extends JsonResource
+class UserResource extends ApiResource
{
/**
* Transform the resource into an array.
*/
public function toArray(Request $request): array
{
- $actor = Auth::guard()->user();
- $isAdmin = $actor && in_array($actor->role, [User::ROLE_ADMIN, User::ROLE_RESELLER]);
-
$state = RelationController::objectState($this->resource);
return [
@@ -33,7 +28,7 @@
// User status
'status' => $this->resource->status,
- $this->mergeWhen($isAdmin, [
+ $this->mergeWhen(self::isAdmin(), [
// User creation date-time
'created_at' => (string) $this->resource->created_at,
// User deletion date-time
diff --git a/src/app/Http/Resources/WalletResource.php b/src/app/Http/Resources/WalletInfoResource.php
copy from src/app/Http/Resources/WalletResource.php
copy to src/app/Http/Resources/WalletInfoResource.php
--- a/src/app/Http/Resources/WalletResource.php
+++ b/src/app/Http/Resources/WalletInfoResource.php
@@ -7,61 +7,34 @@
use App\Wallet;
use Carbon\Carbon;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
- * Wallet response
+ * Wallet information response
*
* @mixin Wallet
*/
-class WalletResource extends JsonResource
+class WalletInfoResource extends WalletResource
{
- public bool $extended = false;
-
/**
* Transform the resource into an array.
*/
public function toArray(Request $request): array
{
- $provider = PaymentProvider::factory($this->resource);
-
- $discount = 0;
- $discount_description = '';
-
- if ($this->extended) {
- if ($this->resource->discount) {
- $discount = $this->resource->discount->discount;
- $discount_description = $this->resource->discount->description;
- }
-
+ if ($isAdmin = self::isAdmin()) {
+ $provider = PaymentProvider::factory($this->resource);
$mandate = new WalletMandateResource($this->resource->getMandate());
$providerLink = $provider->customerLink($this->resource);
}
return [
- // Wallet identifier
- 'id' => $this->resource->id,
- // Wallet balance (in cents)
- 'balance' => $this->resource->balance,
- // Wallet currency
- 'currency' => $this->resource->currency,
- // Wallet description
- 'description' => $this->resource->description,
- // Wallet owner (user identifier)
- 'user_id' => $this->resource->user_id,
- // Payment provider name
- 'provider' => $provider->name(),
+ $this->merge(parent::toArray($request)),
+
// Wallet state notice
'notice' => $this->getWalletNotice(),
-
- // Wallet discount (percent)
- 'discount' => $this->when($this->extended, $discount),
- // Wallet discount description
- 'discount_description' => $this->when($this->extended, $discount_description),
// Recurring payment mandate information
- 'mandate' => $this->when($this->extended, $mandate ?? null),
+ 'mandate' => $this->when($isAdmin, $mandate ?? null),
// Link to the customer page at the payment provider site
- 'providerLink' => $this->when($this->extended, $providerLink ?? null),
+ 'providerLink' => $this->when($isAdmin, $providerLink ?? null),
];
}
diff --git a/src/app/Http/Resources/WalletMandateResource.php b/src/app/Http/Resources/WalletMandateResource.php
--- a/src/app/Http/Resources/WalletMandateResource.php
+++ b/src/app/Http/Resources/WalletMandateResource.php
@@ -3,12 +3,11 @@
namespace App\Http\Resources;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Wallet mandate response
*/
-class WalletMandateResource extends JsonResource
+class WalletMandateResource extends ApiResource
{
/**
* Transform the resource into an array.
diff --git a/src/app/Http/Resources/WalletResource.php b/src/app/Http/Resources/WalletResource.php
--- a/src/app/Http/Resources/WalletResource.php
+++ b/src/app/Http/Resources/WalletResource.php
@@ -2,40 +2,29 @@
namespace App\Http\Resources;
-use App\Http\Controllers\Controller;
use App\Providers\PaymentProvider;
use App\Wallet;
-use Carbon\Carbon;
use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
/**
* Wallet response
*
* @mixin Wallet
*/
-class WalletResource extends JsonResource
+class WalletResource extends ApiResource
{
- public bool $extended = false;
-
/**
* Transform the resource into an array.
*/
public function toArray(Request $request): array
{
$provider = PaymentProvider::factory($this->resource);
-
$discount = 0;
$discount_description = '';
- if ($this->extended) {
- if ($this->resource->discount) {
- $discount = $this->resource->discount->discount;
- $discount_description = $this->resource->discount->description;
- }
-
- $mandate = new WalletMandateResource($this->resource->getMandate());
- $providerLink = $provider->customerLink($this->resource);
+ if ($this->resource->discount) {
+ $discount = $this->resource->discount->discount;
+ $discount_description = $this->resource->discount->description;
}
return [
@@ -49,78 +38,16 @@
'description' => $this->resource->description,
// Wallet owner (user identifier)
'user_id' => $this->resource->user_id,
+ // Wallet owner (email address)
+ 'user_email' => $this->when(self::isAdmin(), $this->resource?->owner->email),
// Payment provider name
'provider' => $provider->name(),
- // Wallet state notice
- 'notice' => $this->getWalletNotice(),
-
+ // Wallet discount identifier (if any)
+ 'discount_id' => $this->resource->discount_id,
// Wallet discount (percent)
- 'discount' => $this->when($this->extended, $discount),
- // Wallet discount description
- 'discount_description' => $this->when($this->extended, $discount_description),
- // Recurring payment mandate information
- 'mandate' => $this->when($this->extended, $mandate ?? null),
- // Link to the customer page at the payment provider site
- 'providerLink' => $this->when($this->extended, $providerLink ?? null),
+ 'discount' => $discount,
+ // @var string Wallet discount description
+ 'discount_description' => $discount_description,
];
}
-
- /**
- * Returns human readable notice about the wallet state.
- */
- protected function getWalletNotice(): ?string
- {
- // there is no credit
- if ($this->resource->balance < 0) {
- return Controller::trans('app.wallet-notice-nocredit');
- }
-
- // the discount is 100%, no credit is needed
- if ($this->resource->discount && $this->resource->discount->discount == 100) {
- return null;
- }
-
- $plan = $this->resource->plan();
- $freeMonths = $plan ? $plan->free_months : 0;
- $trialEnd = $freeMonths ? $this->resource->owner->created_at->copy()->addMonthsWithoutOverflow($freeMonths) : null;
-
- // the owner is still in the trial period
- if ($trialEnd && $trialEnd > Carbon::now()) {
- // notice of trial ending if less than 2 weeks left
- if ($trialEnd < Carbon::now()->addWeeks(2)) {
- return Controller::trans('app.wallet-notice-trial-end');
- }
-
- return Controller::trans('app.wallet-notice-trial');
- }
-
- if ($until = $this->resource->balanceLastsUntil()) {
- if ($until->isToday()) {
- return Controller::trans('app.wallet-notice-today');
- }
-
- // Once in a while we got e.g. "3 weeks" instead of expected "4 weeks".
- // It's because $until uses full seconds, but $now is more precise.
- // We make sure both have the same time set.
- $now = Carbon::now()->setTimeFrom($until);
-
- $diffOptions = [
- 'syntax' => Carbon::DIFF_ABSOLUTE,
- 'parts' => 1,
- ];
-
- if ($now->diffAsDateInterval($until)->days > 31) {
- $diffOptions['parts'] = 2;
- }
-
- $params = [
- 'date' => $until->toDateString(),
- 'days' => $now->diffForHumans($until, $diffOptions),
- ];
-
- return Controller::trans('app.wallet-notice-date', $params);
- }
-
- return null;
- }
}
diff --git a/src/resources/lang/en/app.php b/src/resources/lang/en/app.php
--- a/src/resources/lang/en/app.php
+++ b/src/resources/lang/en/app.php
@@ -141,6 +141,7 @@
'search-foundxdomains' => ':x domains have been found.',
'search-foundxdistlists' => ':x distribution lists have been found.',
+ 'search-foundxpackages' => ':x packages have been found.',
'search-foundxresources' => ':x resources have been found.',
'search-foundxshared-folders' => ':x shared folders have been found.',
'search-foundxusers' => ':x user accounts have been found.',
diff --git a/src/resources/vue/Widgets/PackageSelect.vue b/src/resources/vue/Widgets/PackageSelect.vue
--- a/src/resources/vue/Widgets/PackageSelect.vue
+++ b/src/resources/vue/Widgets/PackageSelect.vue
@@ -60,7 +60,7 @@
axios.get('/api/v4/packages', { loader: true })
.then(response => {
- this.packages = response.data.filter(pkg => {
+ this.packages = response.data.list.filter(pkg => {
if (this.type == 'domain') {
return pkg.isDomain
}
diff --git a/src/tests/Feature/Controller/PackagesTest.php b/src/tests/Feature/Controller/PackagesTest.php
--- a/src/tests/Feature/Controller/PackagesTest.php
+++ b/src/tests/Feature/Controller/PackagesTest.php
@@ -27,27 +27,31 @@
$json = $response->json();
- $this->assertCount(3, $json);
-
- $this->assertSame($packageDomain->id, $json[0]['id']);
- $this->assertSame($packageDomain->title, $json[0]['title']);
- $this->assertSame($packageDomain->name, $json[0]['name']);
- $this->assertSame($packageDomain->description, $json[0]['description']);
- $this->assertSame($packageDomain->isDomain(), $json[0]['isDomain']);
- $this->assertSame($packageDomain->cost(), $json[0]['cost']);
-
- $this->assertSame($packageKolab->id, $json[1]['id']);
- $this->assertSame($packageKolab->title, $json[1]['title']);
- $this->assertSame($packageKolab->name, $json[1]['name']);
- $this->assertSame($packageKolab->description, $json[1]['description']);
- $this->assertSame($packageKolab->isDomain(), $json[1]['isDomain']);
- $this->assertSame($packageKolab->cost(), $json[1]['cost']);
-
- $this->assertSame($packageLite->id, $json[2]['id']);
- $this->assertSame($packageLite->title, $json[2]['title']);
- $this->assertSame($packageLite->name, $json[2]['name']);
- $this->assertSame($packageLite->description, $json[2]['description']);
- $this->assertSame($packageLite->isDomain(), $json[2]['isDomain']);
- $this->assertSame($packageLite->cost(), $json[2]['cost']);
+ $this->assertCount(3, $json['list']);
+ $this->assertSame(3, $json['count']);
+ $this->assertSame('success', $json['status']);
+ $this->assertSame('3 packages have been found.', $json['message']);
+ $this->assertFalse($json['hasMore']);
+
+ $this->assertSame($packageDomain->id, $json['list'][0]['id']);
+ $this->assertSame($packageDomain->title, $json['list'][0]['title']);
+ $this->assertSame($packageDomain->name, $json['list'][0]['name']);
+ $this->assertSame($packageDomain->description, $json['list'][0]['description']);
+ $this->assertSame($packageDomain->isDomain(), $json['list'][0]['isDomain']);
+ $this->assertSame($packageDomain->cost(), $json['list'][0]['cost']);
+
+ $this->assertSame($packageKolab->id, $json['list'][1]['id']);
+ $this->assertSame($packageKolab->title, $json['list'][1]['title']);
+ $this->assertSame($packageKolab->name, $json['list'][1]['name']);
+ $this->assertSame($packageKolab->description, $json['list'][1]['description']);
+ $this->assertSame($packageKolab->isDomain(), $json['list'][1]['isDomain']);
+ $this->assertSame($packageKolab->cost(), $json['list'][1]['cost']);
+
+ $this->assertSame($packageLite->id, $json['list'][2]['id']);
+ $this->assertSame($packageLite->title, $json['list'][2]['title']);
+ $this->assertSame($packageLite->name, $json['list'][2]['name']);
+ $this->assertSame($packageLite->description, $json['list'][2]['description']);
+ $this->assertSame($packageLite->isDomain(), $json['list'][2]['isDomain']);
+ $this->assertSame($packageLite->cost(), $json['list'][2]['cost']);
}
}
diff --git a/src/tests/Feature/Controller/UsersTest.php b/src/tests/Feature/Controller/UsersTest.php
--- a/src/tests/Feature/Controller/UsersTest.php
+++ b/src/tests/Feature/Controller/UsersTest.php
@@ -1504,7 +1504,6 @@
$this->assertCount(0, $result['accounts']);
$this->assertCount(1, $result['wallets']);
$this->assertSame($wallet->id, $result['wallet']['id']);
- $this->assertArrayNotHasKey('discount', $result['wallet']);
$this->assertFalse($result['isLocked']);
$this->assertTrue($result['statusInfo']['enableDomains']);
diff --git a/src/tests/Feature/Resources/WalletTest.php b/src/tests/Feature/Resources/WalletInfoTest.php
rename from src/tests/Feature/Resources/WalletTest.php
rename to src/tests/Feature/Resources/WalletInfoTest.php
--- a/src/tests/Feature/Resources/WalletTest.php
+++ b/src/tests/Feature/Resources/WalletInfoTest.php
@@ -3,12 +3,12 @@
namespace Tests\Feature\Resources;
use App\Discount;
-use App\Http\Resources\WalletResource;
+use App\Http\Resources\WalletInfoResource;
use App\Plan;
use Carbon\Carbon;
use Tests\TestCase;
-class WalletTest extends TestCase
+class WalletInfoTest extends TestCase
{
protected function setUp(): void
{
@@ -34,7 +34,7 @@
$user->assignPlan($plan);
$wallet = $user->wallets()->first();
- $resource = new WalletResource($wallet);
+ $resource = new WalletInfoResource($wallet);
$method = new \ReflectionMethod($resource, 'getWalletNotice');
// User/entitlements created today, balance=0
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Apr 3, 9:12 PM (18 h, 15 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18825763
Default Alt Text
D5646.1775250764.diff (33 KB)
Attached To
Mode
D5646: API Docs: More details on some responses, unification
Attached
Detach File
Event Timeline