orderBy('updated_at', 'desc')->value('updated_at'); $stats = [ 'apps' => App::active()->count(), 'categories' => Category::active()->count(), 'total_downloads' => App::sum('downloads_count'), 'latest_update' => $latestUpdate ? Carbon::parse($latestUpdate) : null, ]; return view('admin.dashboard', [ 'stats' => $stats, 'importSources' => config('import_sources.sources', []), ]); } /** * Trigger the import command from the dashboard. */ public function runImport(Request $request) { $validated = $request->validate([ 'source' => 'nullable|string', 'force' => 'sometimes|boolean', ]); $parameters = []; if (!empty($validated['source'])) { $parameters['--source'] = $validated['source']; } if (!empty($validated['force'])) { $parameters['--force'] = true; } Artisan::call('app:import-new', $parameters); return redirect()->route('admin.dashboard')->with('status', __('Import command queued. Check logs for details.')); } } class AdminController extends Controller { public function index(): RedirectResponse { return redirect()->route('admin.apk-import'); } public function runImport(Request $request): RedirectResponse { $request->validate([ 'source' => ['nullable', 'string'], 'query' => ['nullable', 'string', 'max:255'], ]); return redirect() ->route('admin.apk-import', $request->only(['source', 'query'])) ->with('status', __('Import triggered from admin panel.')); } }