user()->principal_uri )->get(); return view('subscription.index', compact('subs')); } public function create() { return view('subscription.create'); } public function store(Request $request) { $data = $request->validate([ 'source' => 'required|url', 'displayname' => 'nullable|string|max:255', 'calendarcolor' => 'nullable|regex:/^#[0-9A-Fa-f]{6}$/', 'refreshrate' => 'nullable|string|max:10', ]); Subscription::createWithMeta($request->user(), $data); return redirect() ->route('calendar.index') ->with('toast', __('Subscription added!')); } public function edit(Subscription $subscription) { $this->authorize('update', $subscription); return view('subscription.edit', ['subscription' => $subscription]); } public function update(Request $request, Subscription $subscription) { $this->authorize('update', $subscription); $data = $request->validate([ 'displayname' => 'nullable|string|max:255', 'calendarcolor' => 'nullable|regex:/^#[0-9A-Fa-f]{6}$/', 'refreshrate' => 'nullable|string|max:10', 'striptodos' => 'sometimes|boolean', 'stripalarms' => 'sometimes|boolean', 'stripattachments' => 'sometimes|boolean', ]); // update calendarsubscriptions record $subscription->update($data); // update corresponding calendar_meta record $subscription->meta()->updateOrCreate( [], // no “where” clause → look at subscription_id FK [ 'title' => $subscription->displayname, 'color' => $subscription->calendarcolor ?? '#1a1a1a', 'color_fg' => contrast_text_color( $subscription->calendarcolor ?? '#1a1a1a' ), 'updated_at'=> now(), ] ); return back()->with('toast', __('Subscription updated!')); } public function destroy(Subscription $subscription) { $this->authorize('delete', $subscription); $subscription->delete(); return back()->with('toast', __('Subscription removed!')); } }