65 lines
2.5 KiB
PHP
65 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Marketplace\Http\Controllers;
|
|
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\View\View;
|
|
use Modules\Marketplace\Models\Installation;
|
|
use Modules\Marketplace\Models\InstalledPackage;
|
|
use Modules\Marketplace\Models\MarketplacePackage;
|
|
use Modules\Marketplace\Services\MarketplaceManager;
|
|
|
|
final class MarketplaceController extends Controller
|
|
{
|
|
public function index(Request $request): View
|
|
{
|
|
$packages = MarketplacePackage::query()->with('publisher')->where('is_active', true)->when($request->filled('type'), fn ($q) => $q->where('type', $request->string('type')))->when($request->filled('search'), fn ($q) => $q->where(fn ($q) => $q->where('name', 'like', '%'.$request->string('search').'%')->orWhere('description', 'like', '%'.$request->string('search').'%')))->latest('is_featured')->paginate(20)->withQueryString();
|
|
|
|
return view('marketplace::index', compact('packages'));
|
|
}
|
|
|
|
public function installed(): View
|
|
{
|
|
$packages = InstalledPackage::query()->with('package')->latest()->paginate(25);
|
|
|
|
return view('marketplace::installed', compact('packages'));
|
|
}
|
|
|
|
public function install(MarketplacePackage $package, MarketplaceManager $manager, Request $request): RedirectResponse
|
|
{
|
|
$manager->install($package, $request->user()?->id);
|
|
|
|
return back()->with('status', 'Package installed successfully.');
|
|
}
|
|
|
|
public function update(MarketplacePackage $package, MarketplaceManager $manager, Request $request): RedirectResponse
|
|
{
|
|
$manager->install($package, $request->user()?->id);
|
|
|
|
return back()->with('status', 'Package updated successfully.');
|
|
}
|
|
|
|
public function toggle(InstalledPackage $package, MarketplaceManager $manager, Request $request): RedirectResponse
|
|
{
|
|
$manager->setEnabled($package, ! $package->is_enabled, $request->user()?->id);
|
|
|
|
return back()->with('status', 'Package state updated.');
|
|
}
|
|
|
|
public function remove(InstalledPackage $package, MarketplaceManager $manager, Request $request): RedirectResponse
|
|
{
|
|
$manager->remove($package, $request->user()?->id);
|
|
|
|
return back()->with('status', 'Package removed.');
|
|
}
|
|
|
|
public function rollback(InstalledPackage $package, Installation $installation, MarketplaceManager $manager, Request $request): RedirectResponse
|
|
{
|
|
$manager->rollback($package, $installation, $request->user()?->id);
|
|
|
|
return back()->with('status','Package rolled back.');
|
|
}
|
|
}
|