Skip to content

Commit

Permalink
Enroll link view toggles across the application (#553)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kovah committed Feb 8, 2024
1 parent c191380 commit 0b70d74
Show file tree
Hide file tree
Showing 47 changed files with 625 additions and 520 deletions.
98 changes: 98 additions & 0 deletions app/Http/Controllers/App/SystemSettingsController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?php

namespace App\Http\Controllers\App;

use App\Helper\UpdateHelper;
use App\Http\Controllers\Controller;
use App\Http\Requests\SystemSettingsUpdateRequest;
use App\Models\Setting;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;

class SystemSettingsController extends Controller
{
/**
* Display the system settings forms.
*
* @return View
*/
public function getSystemSettings(): View
{
return view('app.settings.system', [
'pageTitle' => trans('settings.system_settings'),
'linkaceVersion' => UpdateHelper::currentVersion(),
]);
}

/**
* Save the updated system settings to the database.
*
* @param SystemSettingsUpdateRequest $request
* @return RedirectResponse
*/
public function saveSystemSettings(SystemSettingsUpdateRequest $request): RedirectResponse
{
$settings = $request->except(['_token', 'guest_share']);

foreach ($settings as $key => $value) {
Setting::updateOrCreate([
'key' => $key,
'user_id' => null,
], [
'key' => $key,
'value' => $value,
'user_id' => null,
]);
}

// Enable / disable sharing services
$guestSharingSettings = $request->input('guest_share');

if ($guestSharingSettings) {
foreach (config('sharing.services') as $service => $details) {
$toggle = array_key_exists($service, $guestSharingSettings);

Setting::updateOrCreate([
'user_id' => null,
'key' => 'guest_share_' . $service,
], [
'key' => 'guest_share_' . $service,
'value' => $toggle,
'user_id' => null,
]);
}
}

Cache::forget('systemsettings');

flash(trans('settings.settings_saved'));
return redirect()->route('get-systemsettings');
}

/**
* Generate a new API token for the current user.
*
* @return JsonResponse
*/
public function generateCronToken(): JsonResponse
{
$newToken = Str::random(32);

Setting::updateOrCreate(
[
'key' => 'cron_token',
'user_id' => null,
],
['value' => $newToken]
);

Cache::forget('systemsettings');

return response()->json([
'new_token' => $newToken,
]);
}
}
4 changes: 4 additions & 0 deletions app/Http/Controllers/Guest/LinkController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Models\Link;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;

class LinkController extends Controller
{
use ChecksOrdering;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand All @@ -19,6 +21,8 @@ public function __construct()

public function index(Request $request): View
{
$this->updateLinkDisplayForGuest();

$links = Link::publicOnly()->with(['tags' => fn ($query) => $query->publicOnly()]);

$this->orderBy = $request->input('orderBy', 'created_at');
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/Guest/ListController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Models\LinkList;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;

class ListController extends Controller
{
use ChecksOrdering;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand Down Expand Up @@ -38,6 +40,8 @@ public function index(Request $request): View

public function show(Request $request, int $listID): View
{
$this->updateLinkDisplayForGuest();

$list = LinkList::publicOnly()->findOrFail($listID);

$this->orderBy = $request->input('orderBy', 'created_at');
Expand All @@ -52,7 +56,7 @@ public function show(Request $request, int $listID): View
return view('guest.lists.show', [
'pageTitle' => trans('list.list') . ': ' . $list->name,
'list' => $list,
'listLinks' => $links,
'links' => $links,
'route' => $request->getBaseUrl(),
'orderBy' => $this->orderBy,
'orderDir' => $this->orderDir,
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/Guest/TagController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Http\Controllers\Traits\HandlesQueryOrder;
use App\Models\Tag;
use Illuminate\Contracts\View\View;
Expand All @@ -12,6 +13,7 @@
class TagController extends Controller
{
use ChecksOrdering;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand Down Expand Up @@ -40,6 +42,8 @@ public function index(Request $request): View

public function show(Request $request, int $tagID): View
{
$this->updateLinkDisplayForGuest();

$this->orderBy = $request->input('orderBy', 'created_at');
$this->orderDir = $request->input('orderBy', 'desc');
$this->checkOrdering();
Expand All @@ -54,7 +58,7 @@ public function show(Request $request, int $tagID): View
return view('guest.tags.show', [
'pageTitle' => trans('tag.tag') . ': ' . $tag->name,
'tag' => $tag,
'tagLinks' => $links,
'links' => $links,
'route' => $request->getBaseUrl(),
'orderBy' => $this->orderBy,
'orderDir' => $this->orderDir,
Expand Down
6 changes: 3 additions & 3 deletions app/Http/Controllers/Models/LinkController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresListDisplay;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Http\Controllers\Traits\HandlesQueryOrder;
use App\Http\Requests\Models\LinkStoreRequest;
use App\Http\Requests\Models\LinkUpdateRequest;
Expand All @@ -18,7 +18,7 @@
class LinkController extends Controller
{
use ChecksOrdering;
use ConfiguresListDisplay;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand All @@ -28,7 +28,7 @@ public function __construct()

public function index(Request $request): View
{
$this->saveNewListDisplay();
$this->updateLinkDisplayForUser();

$this->orderBy = $request->input('orderBy', session()->get('links.index.orderBy', 'created_at'));
$this->orderDir = $request->input('orderDir', session()->get('links.index.orderDir', 'desc'));
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/Models/ListController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Http\Requests\Models\ListStoreRequest;
use App\Http\Requests\Models\ListUpdateRequest;
use App\Models\LinkList;
Expand All @@ -15,6 +16,7 @@
class ListController extends Controller
{
use ChecksOrdering;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand Down Expand Up @@ -75,6 +77,8 @@ public function store(ListStoreRequest $request): RedirectResponse

public function show(Request $request, LinkList $list): View
{
$this->updateLinkDisplayForUser();

$this->orderBy = $request->input('orderBy', 'created_at');
$this->orderDir = $request->input('orderBy', 'desc');
$this->checkOrdering();
Expand All @@ -88,7 +92,7 @@ public function show(Request $request, LinkList $list): View
'pageTitle' => trans('list.list') . ': ' . $list->name,
'list' => $list,
'history' => $list->audits()->latest()->get(),
'listLinks' => $links,
'links' => $links,
'route' => $request->getBaseUrl(),
'orderBy' => $this->orderBy,
'orderDir' => $this->orderDir,
Expand Down
6 changes: 5 additions & 1 deletion app/Http/Controllers/Models/TagController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ChecksOrdering;
use App\Http\Controllers\Traits\ConfiguresLinkDisplay;
use App\Http\Controllers\Traits\HandlesQueryOrder;
use App\Http\Requests\Models\TagStoreRequest;
use App\Http\Requests\Models\TagUpdateRequest;
Expand All @@ -18,6 +19,7 @@
class TagController extends Controller
{
use ChecksOrdering;
use ConfiguresLinkDisplay;

public function __construct()
{
Expand Down Expand Up @@ -77,6 +79,8 @@ public function store(TagStoreRequest $request): RedirectResponse

public function show(Request $request, Tag $tag): View
{
$this->updateLinkDisplayForUser();

$this->allowedOrderBy = Link::$allowOrderBy;
$this->orderBy = $request->input('orderBy', 'created_at');
$this->orderDir = $request->input('orderBy', 'desc');
Expand All @@ -91,7 +95,7 @@ public function show(Request $request, Tag $tag): View
'pageTitle' => trans('tag.tag') . ': ' . $tag->name,
'tag' => $tag,
'history' => $tag->audits()->latest()->get(),
'tagLinks' => $links,
'links' => $links,
'route' => $request->getBaseUrl(),
'orderBy' => $this->orderBy,
'orderDir' => $this->orderDir,
Expand Down
34 changes: 34 additions & 0 deletions app/Http/Controllers/Traits/ConfiguresLinkDisplay.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Http\Controllers\Traits;

use App\Models\Link;
use App\Settings\UserSettings;

trait ConfiguresLinkDisplay
{
protected function updateLinkDisplayForUser(): void
{
$newSetting = request()?->integer('link-display');
if ($newSetting === null) {
return;
}

if (in_array($newSetting, [Link::DISPLAY_LIST_SIMPLE, Link::DISPLAY_LIST_DETAILED, Link::DISPLAY_CARDS])) {
$userSettings = app(UserSettings::class);
$userSettings->link_display_mode = $newSetting;
}
}

protected function updateLinkDisplayForGuest(): void
{
$newSetting = request()?->integer('link-display');
if ($newSetting === null) {
return;
}

if (in_array($newSetting, [Link::DISPLAY_LIST_SIMPLE, Link::DISPLAY_LIST_DETAILED, Link::DISPLAY_CARDS])) {
session()->put('link_display_mode', $newSetting);
}
}
}
22 changes: 0 additions & 22 deletions app/Http/Controllers/Traits/ConfiguresListDisplay.php

This file was deleted.

3 changes: 1 addition & 2 deletions app/Models/Link.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,8 @@ class Link extends Model implements Auditable
public const STATUS_BROKEN = 3;

public const DISPLAY_CARDS = 1;
public const DISPLAY_CARDS_DETAILED = 3;
public const DISPLAY_LIST_SIMPLE = 2;
public const DISPLAY_LIST_DETAILED = 0;
public const DISPLAY_LIST_DETAILED = 3;

/*
* ========================================================================
Expand Down
3 changes: 1 addition & 2 deletions database/migrations/2022_06_23_112431_migrate_user_data.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;

return new class extends Migration
{
return new class extends Migration {
private bool $guestAccessEnabled = false;

public function up()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ protected function migrateSystemSettings(): void
protected function migrateGuestSettings()
{
$this->migrator->add('guest.listitem_count', (int)$this->sysSettings->get('guest_listitem_count', 24));
$this->migrator->add('guest.link_display_mode', (int)$this->sysSettings->get('guest_link_display_mode', 1));
$this->migrator->add('guest.links_new_tab', (bool)$this->sysSettings->get('guest_links_new_tab', true));
$this->migrator->add('guest.darkmode_setting', (int)$this->sysSettings->get('guest_darkmode_setting', 1));

Expand Down Expand Up @@ -124,7 +123,10 @@ protected function migrateUserSettings(int $userId): void

$this->migrator->add($id . '.listitem_count', (int)$this->userSettings->get('listitem_count', 24));
$this->migrator->add($id . '.darkmode_setting', (int)$this->userSettings->get('darkmode_setting', 2));
$this->migrator->add($id . '.link_display_mode', (int)$this->userSettings->get('link_display_mode', 1));
$this->migrator->add($id . '.link_display_mode', match ((int)$this->userSettings->get('link_display_mode', 1)) {
0 => \App\Models\Link::DISPLAY_LIST_DETAILED,
3 => \App\Models\Link::DISPLAY_CARDS,
});
$this->migrator->add($id . '.links_new_tab', (bool)$this->userSettings->get('links_new_tab', false));
$this->migrator->add($id . '.markdown_for_text', (bool)$this->userSettings->get('markdown_for_text', true));

Expand Down
Loading

0 comments on commit 0b70d74

Please sign in to comment.