1
0
mirror of https://github.com/Kovah/LinkAce.git synced 2025-04-21 07:22:20 +02:00

Fix several issues where categories references were not migrated to the new list model

This commit is contained in:
Kovah 2019-11-28 11:15:22 +01:00
parent ffe0bcd116
commit 394b03a9e5
No known key found for this signature in database
GPG Key ID: AAAA031BA9830D7B
16 changed files with 105 additions and 91 deletions

View File

@ -3,8 +3,9 @@
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\LinkList;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class BookmarkletController extends Controller
{
@ -12,7 +13,7 @@ class BookmarkletController extends Controller
* Show the application dashboard.
*
* @param Request $request
* @return \Illuminate\Http\Response
* @return Response
*/
public function getLinkAddForm(Request $request)
{
@ -42,18 +43,13 @@ class BookmarkletController extends Controller
return view('actions.bookmarklet.create')
->with('bookmark_url', $new_url)
->with('bookmark_title', $new_title)
->with('categories', Category::parentOnly()
->byUser(auth()->user()->id)
->orderBy('name', 'asc')
->get()
);
->with('bookmark_title', $new_title);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function getCompleteView()
{
@ -63,7 +59,7 @@ class BookmarkletController extends Controller
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function getLoginForm()
{

View File

@ -3,18 +3,18 @@
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Link;
use App\Models\LinkList;
use App\Models\Note;
use App\Models\Tag;
use Illuminate\Http\Response;
class DashboardController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function index()
{

View File

@ -5,13 +5,14 @@ namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Models\Link;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ExportController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function getExport()
{
@ -22,7 +23,7 @@ class ExportController extends Controller
* Permanently delete entries for a model from the trash
*
* @param Request $request
* @return \Illuminate\Http\Response
* @return Response
*/
public function doExport(Request $request)
{

View File

@ -9,6 +9,8 @@ use App\Http\Requests\DoImportRequest;
use App\Models\Link;
use App\Models\Tag;
use Carbon\Carbon;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Http\Response;
use Shaarli\NetscapeBookmarkParser\NetscapeBookmarkParser;
class ImportController extends Controller
@ -16,7 +18,7 @@ class ImportController extends Controller
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function getImport()
{
@ -27,8 +29,8 @@ class ImportController extends Controller
* Permanently delete entries for a model from the trash
*
* @param DoImportRequest $request
* @return \Illuminate\Http\Response
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
* @return Response
* @throws FileNotFoundException
*/
public function doImport(DoImportRequest $request)
{
@ -58,7 +60,6 @@ class ImportController extends Controller
$new_link = Link::create([
'user_id' => $user_id,
'category_id' => null,
'url' => $link['uri'],
'title' => $title,
'description' => $link['note'] ?: $link_meta['description'],

View File

@ -4,9 +4,10 @@ namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Http\Requests\SearchRequest;
use App\Models\Category;
use App\Models\Link;
use App\Models\Tag;
use App\Models\LinkList;
use Illuminate\Contracts\View\Factory;
use Illuminate\View\View;
/**
* Class SearchController
@ -26,7 +27,7 @@ class SearchController extends Controller
];
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function getSearch()
{
@ -38,17 +39,15 @@ class SearchController extends Controller
'search_title' => false,
'search_description' => false,
'private_only' => false,
'only_category' => 0,
'only_lists' => '',
'only_tags' => '',
'order_by' => $this->order_by_options[0],
])
->with('categories', Category::byUser(auth()->user()->id)
->orderBy('name', 'asc')->get());
]);
}
/**
* @param SearchRequest $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function doSearch(SearchRequest $request)
{
@ -79,10 +78,10 @@ class SearchController extends Controller
$search->where('is_private', true);
}
// Show by specific category only if applicable
if ($category_id = $request->get('only_category', false)) {
$search->whereHas('category', function ($query) use ($category_id) {
$query->where('id', $category_id);
// Show by specific list only if applicable
if ($list_names = $request->get('only_lists', false)) {
$search->whereHas('lists', function ($query) use ($list_names) {
$query->whereIn('name', explode(',', $list_names));
});
}
@ -110,11 +109,9 @@ class SearchController extends Controller
'search_title' => $search_title,
'search_description' => $search_description,
'private_only' => $private_only,
'only_category' => $category_id,
'only_lists' => $list_names,
'only_tags' => $tag_names,
'order_by' => $orderby,
])
->with('categories', Category::byUser(auth()->user()->id)
->orderBy('name', 'asc')->get());
]);
}
}

View File

@ -4,8 +4,12 @@ namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\View\View;
/**
* Class SystemSettingsController
@ -15,7 +19,7 @@ use Illuminate\Support\Str;
class SystemSettingsController extends Controller
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function getSystemSettings()
{
@ -26,7 +30,7 @@ class SystemSettingsController extends Controller
* Syve the new system settings to the database
*
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
* @return RedirectResponse
*/
public function saveSystemSettings(Request $request)
{
@ -56,7 +60,7 @@ class SystemSettingsController extends Controller
* Generate a new API token for the current user
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @return JsonResponse
*/
public function generateCronToken(Request $request)
{

View File

@ -7,14 +7,17 @@ use App\Models\Link;
use App\Models\LinkList;
use App\Models\Note;
use App\Models\Tag;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
class TrashController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function index()
{
@ -46,8 +49,8 @@ class TrashController extends Controller
* Permanently delete entries for a model from the trash
*
* @param Request $reques
* @param $model
* @return \Illuminate\Http\Response
* @param string $model
* @return Response
*/
public function clearTrash(Request $reques, $model)
{
@ -94,9 +97,9 @@ class TrashController extends Controller
* Restore an entry from the trash
*
* @param Request $request
* @param $model
* @param $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @param string $model
* @param string $id
* @return Factory|View
*/
public function restoreEntry(Request $request, $model, $id)
{

View File

@ -7,11 +7,15 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\UserAccountUpdateRequest;
use App\Http\Requests\UserSettingsUpdateRequest;
use App\Models\Setting;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Illuminate\View\View;
/**
* Class UserSettingsController
@ -21,7 +25,7 @@ use Illuminate\Support\Str;
class UserSettingsController extends Controller
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function getUserSettings()
{
@ -35,7 +39,7 @@ class UserSettingsController extends Controller
/**
* @param UserAccountUpdateRequest $request
* @return \Illuminate\Http\RedirectResponse
* @return RedirectResponse
*/
public function saveAccountSettings(UserAccountUpdateRequest $request)
{
@ -52,7 +56,7 @@ class UserSettingsController extends Controller
/**
* @param UserSettingsUpdateRequest $request
* @return \Illuminate\Http\RedirectResponse
* @return RedirectResponse
*/
public function saveAppSettings(UserSettingsUpdateRequest $request)
{
@ -90,7 +94,7 @@ class UserSettingsController extends Controller
/**
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
* @return RedirectResponse
*/
public function changeUserPassword(Request $request)
{
@ -125,7 +129,7 @@ class UserSettingsController extends Controller
* Generate a new API token for the current user
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @return JsonResponse
*/
public function generateApiToken(Request $request)
{

View File

@ -23,7 +23,6 @@ class ListController extends Controller
abort(404);
}
// Get links of the category
$links = $list->links()->privateOnly(false);
if ($request->has('orderBy') && $request->has('orderDir')) {

View File

@ -23,7 +23,6 @@ class TagController extends Controller
abort(404);
}
// Get links of the category
$links = $tag->links()->privateOnly(false);
if ($request->has('orderBy') && $request->has('orderDir')) {

View File

@ -2,18 +2,17 @@
namespace App\Http\Controllers\Models;
use App\Helper\LinkAce;
use App\Helper\LinkIconMapper;
use App\Helper\WaybackMachine;
use App\Http\Controllers\Controller;
use App\Http\Requests\LinkDeleteRequest;
use App\Http\Requests\LinkStoreRequest;
use App\Http\Requests\LinkUpdateRequest;
use App\Models\Category;
use App\Models\Link;
use App\Models\Tag;
use App\Repositories\LinkRepository;
use Exception;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class LinkController extends Controller
{
@ -21,7 +20,7 @@ class LinkController extends Controller
* Display a listing of the resource.
*
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function index(Request $request)
{
@ -46,7 +45,7 @@ class LinkController extends Controller
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @return Factory|View
*/
public function create()
{
@ -60,7 +59,7 @@ class LinkController extends Controller
* Store a newly created resource in storage.
*
* @param LinkStoreRequest $request
* @return \Illuminate\Http\RedirectResponse
* @return RedirectResponse
*/
public function store(LinkStoreRequest $request)
{
@ -92,8 +91,8 @@ class LinkController extends Controller
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @param int $id
* @return Factory|View
*/
public function show($id)
{
@ -114,8 +113,8 @@ class LinkController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @param int $id
* @return Factory|View
*/
public function edit($id)
{
@ -137,8 +136,8 @@ class LinkController extends Controller
* Update the specified resource in storage.
*
* @param LinkUpdateRequest $request
* @param int $id
* @return \Illuminate\Http\RedirectResponse
* @param int $id
* @return RedirectResponse
*/
public function update(LinkUpdateRequest $request, $id)
{
@ -163,9 +162,9 @@ class LinkController extends Controller
* Remove the specified resource from storage.
*
* @param LinkDeleteRequest $request
* @param int $id
* @return \Illuminate\Http\RedirectResponse
* @throws \Exception
* @param int $id
* @return RedirectResponse
* @throws Exception
*/
public function destroy(LinkDeleteRequest $request, $id)
{

View File

@ -2,7 +2,6 @@
namespace App\Http\Requests;
use App\Models\Category;
use App\Models\LinkList;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
@ -17,14 +16,14 @@ class ListDeleteRequest extends FormRequest
*/
public function authorize(Request $request)
{
// Check if the category ID was provided
// Check if the list ID was provided
if (!$request->get('list_id')) {
return false;
}
$list = LinkList::find($request->get('list_id'));
// Check if the category belongs to the user
// Check if the list belongs to the user
if ($list->user_id !== auth()->user()->id) {
return false;
}

View File

@ -2,7 +2,6 @@
namespace App\Http\Requests;
use App\Models\Category;
use App\Models\LinkList;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
@ -17,14 +16,14 @@ class ListUpdateRequest extends FormRequest
*/
public function authorize(Request $request)
{
// Check if the category ID was provided
// Check if the list ID was provided
if (!$request->get('list_id')) {
return false;
}
$list = LinkList::find($request->get('list_id'));
// Check if the category belongs to the user
// Check if the list belongs to the user
if ($list->user_id !== auth()->user()->id) {
return false;
}

View File

@ -3,9 +3,12 @@
namespace App\Models;
use App\Scopes\OrderNameScope;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
@ -17,8 +20,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property string $name
* @property ?string $description
* @property int $is_private
* @property \Carbon\Carbon|null $created_at
* @property \Carbon\Carbon|null $updated_at
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
* @property string|null $deleted_at
* @property-read Collection|Link[] $links
* @property-read User $user
@ -70,7 +73,7 @@ class LinkList extends Model
*/
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
* @return BelongsTo
*/
public function user()
{
@ -78,10 +81,27 @@ class LinkList extends Model
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
* @return BelongsToMany
*/
public function links()
{
return $this->belongsToMany('App\Models\Link', 'link_lists', 'list_id', 'link_id');
}
/*
| ========================================================================
| METHODS
*/
/**
* Get a collection of all lists for the current user, ordered by name
*
* @return Builder[]|Collection
*/
public static function getAllForCurrentUser()
{
return self::byUser(auth()->id())
->orderBy('name')
->get();
}
}

View File

@ -3,7 +3,7 @@ return [
'search' => 'Search',
'results' => 'results',
'filter_by_category' => 'Filter by Category',
'filter_by_list' => 'Filter by List(s)',
'filter_by_tag' => 'Filter by Tag(s)',
'query' => 'Search for...',
'search_title' => 'Search Title',

View File

@ -62,31 +62,24 @@
<div class="row mt-3">
<div class="col-md mb-2 mb-md-0">
<label for="only_category" class="d-none" aria-hidden="true">
@lang('search.filter_by_category')
<label for="only_lists" class="d-none" aria-hidden="true">
@lang('search.filter_by_list')
</label>
<select id="only_category" name="only_category" class="custom-select">
<option value="0">@lang('search.filter_by_category')</option>
@foreach($categories as $category)
<option value="{{ $category->id }}"
@if($query_settings['only_category'] == $category->id) selected="selected" @endif>
{{ $category->name }}
</option>
@endforeach
</select>
<input name="only_lists" id="only_lists" type="text" class="tags-select" data-tag-search="lists"
placeholder="@lang('search.filter_by_list')" value="{{ $query_settings['only_lists'] }}">
</div>
<div class="col-md mb-2 mb-md-0">
<label for="only_tags" class="d-none" aria-hidden="true">
@lang('search.filter_by_tag')
</label>
<input name="only_tags" id="only_tags" type="text" class="tags-select"
<input name="only_tags" id="only_tags" type="text" class="tags-select" data-tag-search="tags"
placeholder="@lang('search.filter_by_tag')" value="{{ $query_settings['only_tags'] }}">
</div>
<div class="col-md">
<label for="order_by" class="d-none" aria-hidden="true">
@lang('search.filter_by_tag')
@lang('search.order_by')
</label>
<select id="order_by" name="order_by" class="custom-select">
<option value="0">@lang('search.order_by')</option>