Skip to content

Commit 6abf1fe

Browse files
simonhampclaude
andcommitted
Improve developer terms flow for updated terms and new submissions
- Differentiate between "never onboarded" and "outdated terms" on plugin create page - Add updated terms banner to customer dashboard and developer dashboard - Fix onboarding to skip Stripe redirect when only re-accepting terms - Fix onboarding page to not show "Incomplete" banner for completed accounts - Fix null stripe_price error in CustomerLicenseController - Update onboarding FAQ and copy - Add test for outdated terms version banner Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent eb28338 commit 6abf1fe

File tree

7 files changed

+94
-5
lines changed

7 files changed

+94
-5
lines changed

app/Http/Controllers/CustomerLicenseController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public function index(): View
6464
// Total purchases (licenses + plugins)
6565
$totalPurchases = $licenseCount + $pluginLicenseCount;
6666

67+
$developerAccount = $user->developerAccount;
68+
6769
return view('customer.dashboard', compact(
6870
'licenseCount',
6971
'isEapCustomer',
@@ -73,7 +75,8 @@ public function index(): View
7375
'renewalLicenseKey',
7476
'connectedAccountsCount',
7577
'connectedAccountsDescription',
76-
'totalPurchases'
78+
'totalPurchases',
79+
'developerAccount'
7780
));
7881
}
7982

app/Http/Controllers/DeveloperOnboardingController.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ public function start(Request $request): RedirectResponse
5151
]);
5252
}
5353

54+
// If Stripe onboarding is already complete, skip the Stripe redirect
55+
if ($developerAccount->hasCompletedOnboarding()) {
56+
return to_route('customer.plugins.create')
57+
->with('success', 'Terms accepted! You can now submit plugins.');
58+
}
59+
5460
try {
5561
$onboardingUrl = $this->stripeConnectService->createOnboardingLink($developerAccount);
5662

resources/views/customer/dashboard.blade.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,27 @@
2929
</div>
3030
</div>
3131

32+
{{-- Updated Terms Banner --}}
33+
@if ($developerAccount && $developerAccount->hasAcceptedPluginTerms() && !$developerAccount->hasAcceptedCurrentTerms())
34+
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
35+
<div class="mb-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-900/50 dark:bg-amber-900/20">
36+
<div class="flex items-center justify-between gap-4">
37+
<div class="flex items-center gap-3">
38+
<svg class="size-5 shrink-0 text-amber-400" viewBox="0 0 20 20" fill="currentColor">
39+
<path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
40+
</svg>
41+
<p class="text-sm font-medium text-amber-800 dark:text-amber-200">
42+
Our <a href="{{ route('developer-terms') }}" class="underline" target="_blank">Plugin Developer Terms and Conditions</a> have been updated. You must accept the new terms before you can submit new plugins.
43+
</p>
44+
</div>
45+
<a href="{{ route('customer.developer.onboarding') }}" class="shrink-0 rounded-md bg-amber-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-amber-500">
46+
Review &amp; Accept
47+
</a>
48+
</div>
49+
</div>
50+
</div>
51+
@endif
52+
3253
{{-- Dashboard Cards --}}
3354
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
3455
<div class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">

resources/views/customer/developer/dashboard.blade.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,27 @@
3838
@endif
3939
</div>
4040

41+
{{-- Updated Terms Banner --}}
42+
@if ($developerAccount && $developerAccount->hasAcceptedPluginTerms() && !$developerAccount->hasAcceptedCurrentTerms())
43+
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
44+
<div class="mb-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-900/50 dark:bg-amber-900/20">
45+
<div class="flex items-center justify-between gap-4">
46+
<div class="flex items-center gap-3">
47+
<svg class="size-5 shrink-0 text-amber-400" viewBox="0 0 20 20" fill="currentColor">
48+
<path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
49+
</svg>
50+
<p class="text-sm font-medium text-amber-800 dark:text-amber-200">
51+
Our <a href="{{ route('developer-terms') }}" class="underline" target="_blank">Plugin Developer Terms and Conditions</a> have been updated. You must accept the new terms before you can submit new plugins.
52+
</p>
53+
</div>
54+
<a href="{{ route('customer.developer.onboarding') }}" class="shrink-0 rounded-md bg-amber-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-amber-500">
55+
Review &amp; Accept
56+
</a>
57+
</div>
58+
</div>
59+
</div>
60+
@endif
61+
4162
{{-- Content --}}
4263
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
4364
{{-- Stats Grid --}}

resources/views/customer/developer/onboarding.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
</div>
9898

9999
{{-- Status for existing account --}}
100-
@if ($hasExistingAccount && $developerAccount)
100+
@if ($hasExistingAccount && $developerAccount && !$developerAccount->hasCompletedOnboarding())
101101
<div class="mt-8 rounded-lg border border-yellow-200 bg-yellow-50 p-4 dark:border-yellow-800 dark:bg-yellow-900/20">
102102
<div class="flex items-center gap-3">
103103
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-5 text-yellow-600 dark:text-yellow-400">

resources/views/customer/plugins/create.blade.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@
9898
</div>
9999
</div>
100100
</div>
101-
@elseif (!$hasAcceptedTerms)
102-
{{-- Developer Onboarding Required --}}
101+
@elseif (!$hasCompletedOnboarding)
102+
{{-- Developer Onboarding Required (never onboarded) --}}
103103
<div class="rounded-lg border border-amber-200 bg-amber-50 p-6 dark:border-amber-900/50 dark:bg-amber-900/20">
104104
<div class="flex">
105105
<div class="shrink-0">
@@ -127,6 +127,23 @@
127127
</div>
128128
</div>
129129
</div>
130+
@elseif (!$hasAcceptedTerms)
131+
{{-- Updated terms need acceptance (already onboarded) --}}
132+
<div class="rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-900/50 dark:bg-amber-900/20">
133+
<div class="flex items-center justify-between gap-4">
134+
<div class="flex items-center gap-3">
135+
<svg class="size-5 shrink-0 text-amber-400" viewBox="0 0 20 20" fill="currentColor">
136+
<path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
137+
</svg>
138+
<p class="text-sm font-medium text-amber-800 dark:text-amber-200">
139+
Our <a href="{{ route('developer-terms') }}" class="underline" target="_blank">Plugin Developer Terms and Conditions</a> have been updated. You must accept the new terms before you can submit new plugins.
140+
</p>
141+
</div>
142+
<a href="{{ route('customer.developer.onboarding') }}" class="shrink-0 rounded-md bg-amber-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-amber-500">
143+
Review &amp; Accept
144+
</a>
145+
</div>
146+
</div>
130147
@else
131148
<form
132149
method="POST"

tests/Feature/DeveloperTermsTest.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,26 @@ public function plugin_create_page_does_not_show_warning_when_terms_accepted():
251251
'github_id' => '12345',
252252
'github_username' => 'testdev',
253253
]);
254-
DeveloperAccount::factory()->withAcceptedTerms()->create([
254+
DeveloperAccount::factory()->onboarded()->withAcceptedTerms()->create([
255+
'user_id' => $user->id,
256+
]);
257+
258+
$response = $this->actingAs($user)
259+
->get(route('customer.plugins.create'));
260+
261+
$response->assertStatus(200);
262+
$response->assertDontSee('Developer Onboarding Required');
263+
$response->assertDontSee('have been updated');
264+
}
265+
266+
/** @test */
267+
public function plugin_create_page_shows_updated_terms_banner_for_outdated_version(): void
268+
{
269+
$user = User::factory()->create([
270+
'github_id' => '12345',
271+
'github_username' => 'testdev',
272+
]);
273+
DeveloperAccount::factory()->onboarded()->withAcceptedTerms('0.9')->create([
255274
'user_id' => $user->id,
256275
]);
257276

@@ -260,5 +279,7 @@ public function plugin_create_page_does_not_show_warning_when_terms_accepted():
260279

261280
$response->assertStatus(200);
262281
$response->assertDontSee('Developer Onboarding Required');
282+
$response->assertSee('have been updated');
283+
$response->assertSee('Review &amp; Accept', false);
263284
}
264285
}

0 commit comments

Comments
 (0)