Form analytics now paid feature (#547)
Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
parent
8e777ecca6
commit
89513e3b4a
|
|
@ -3,8 +3,8 @@
|
||||||
namespace App\Http\Controllers\Forms;
|
namespace App\Http\Controllers\Forms;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\Forms\Form;
|
|
||||||
use Carbon\CarbonPeriod;
|
use Carbon\CarbonPeriod;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class FormStatsController extends Controller
|
class FormStatsController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -13,10 +13,9 @@ class FormStatsController extends Controller
|
||||||
$this->middleware('auth');
|
$this->middleware('auth');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFormStats(string $workspaceId, string $formId)
|
public function getFormStats(Request $request)
|
||||||
{
|
{
|
||||||
$form = Form::findOrFail($formId);
|
$form = $request->form; // Added by ProForm middleware
|
||||||
|
|
||||||
$this->authorize('view', $form);
|
$this->authorize('view', $form);
|
||||||
|
|
||||||
$formStats = $form->statistics()->where('date', '>', now()->subDays(29)->startOfDay())->get();
|
$formStats = $form->statistics()->where('date', '>', now()->subDays(29)->startOfDay())->get();
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,9 @@ Route::group(['middleware' => 'auth:api'], function () {
|
||||||
Route::put('/custom-domains', [WorkspaceController::class, 'saveCustomDomain'])->name('save-custom-domains');
|
Route::put('/custom-domains', [WorkspaceController::class, 'saveCustomDomain'])->name('save-custom-domains');
|
||||||
Route::delete('/', [WorkspaceController::class, 'delete'])->name('delete');
|
Route::delete('/', [WorkspaceController::class, 'delete'])->name('delete');
|
||||||
|
|
||||||
Route::get('form-stats/{formId}', [FormStatsController::class, 'getFormStats'])->name('form.stats');
|
Route::middleware('pro-form')->group(function () {
|
||||||
|
Route::get('form-stats/{formId}', [FormStatsController::class, 'getFormStats'])->name('form.stats');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
|
||||||
it('check formstat chart data', function () {
|
it('check formstat chart data', function () {
|
||||||
$user = $this->actingAsUser();
|
$user = $this->actingAsProUser();
|
||||||
$workspace = $this->createUserWorkspace($user);
|
$workspace = $this->createUserWorkspace($user);
|
||||||
$form = $this->createForm($user, $workspace, []);
|
$form = $this->createForm($user, $workspace, []);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
class="border border-nt-blue-light bg-blue-50 dark:bg-notion-dark-light rounded-md p-4 mb-5 w-full mx-auto mt-4 select-all"
|
class="border border-nt-blue-light bg-blue-50 dark:bg-notion-dark-light rounded-md p-4 mb-5 w-full mx-auto mt-4 select-all"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-if="false"
|
v-if="!form.is_pro"
|
||||||
class="relative"
|
class="relative"
|
||||||
>
|
>
|
||||||
<div class="absolute inset-0 z-10">
|
<div class="absolute inset-0 z-10">
|
||||||
|
|
@ -16,7 +16,10 @@
|
||||||
analytics.
|
analytics.
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-5 text-center">
|
<p class="mt-5 text-center">
|
||||||
<v-button :to="{ name: 'pricing' }">
|
<v-button
|
||||||
|
class="w-full"
|
||||||
|
@click.prevent="subscriptionModalStore.openModal()"
|
||||||
|
>
|
||||||
Subscribe
|
Subscribe
|
||||||
</v-button>
|
</v-button>
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -76,6 +79,12 @@ export default {
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
setup() {
|
||||||
|
const subscriptionModalStore = useSubscriptionModalStore()
|
||||||
|
return {
|
||||||
|
subscriptionModalStore
|
||||||
|
}
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
|
|
@ -115,9 +124,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getChartData() {
|
getChartData() {
|
||||||
if (!this.form) {
|
if (!this.form || !this.form.is_pro) { return null }
|
||||||
return null
|
|
||||||
}
|
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
opnFetch(
|
opnFetch(
|
||||||
"/open/workspaces/" +
|
"/open/workspaces/" +
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue