Page MenuHomePhorge

D5646.1775250764.diff
No OneTemporary

Authored By
Unknown
Size
33 KB
Referenced Files
None
Subscribers
None

D5646.1775250764.diff

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

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)

Event Timeline