mirror of
https://github.com/HDInnovations/UNIT3D-Community-Edition.git
synced 2026-04-21 09:20:08 -05:00
Merge branch '6.x.x' into Refund-System
This commit is contained in:
@@ -104,9 +104,7 @@ config/secure-headers.php <-- Content Security Policy must be disabled
|
||||
**A UNIT3D Installer has been released by Poppabear.**
|
||||
|
||||
**Officially Supported OS's**
|
||||
- Ubuntu 20.04 LTS (Recommended)
|
||||
- Ubuntu 18.04 LTS
|
||||
- Ubuntu 16.04 LTS
|
||||
- Ubuntu 20.04 LTS
|
||||
|
||||
**For Ubuntu 20.04 LTS:**
|
||||
```
|
||||
@@ -115,14 +113,6 @@ cd installer
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
**For Ubuntu 16.04 LTS or Ubuntu 18.04 LTS:**
|
||||
```
|
||||
git clone https://github.com/poppabear8883/UNIT3D-INSTALLER.git installer
|
||||
cd installer
|
||||
git checkout Ubuntu-16.04-18.04
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
Check it out here for more information: https://github.com/poppabear8883/UNIT3D-INSTALLER
|
||||
|
||||
### Demo Data
|
||||
|
||||
@@ -69,7 +69,6 @@ class RequestController extends Controller
|
||||
$user = $request->user();
|
||||
$torrentRequestClaim = TorrentRequestClaim::where('request_id', '=', $id)->first();
|
||||
$voters = $torrentRequest->requestBounty()->get();
|
||||
$comments = $torrentRequest->comments()->latest('created_at')->paginate(6);
|
||||
$carbon = Carbon::now()->addDay();
|
||||
|
||||
$meta = null;
|
||||
@@ -95,8 +94,8 @@ class RequestController extends Controller
|
||||
|
||||
return \view('requests.request', [
|
||||
'torrentRequest' => $torrentRequest,
|
||||
'voters' => $voters, 'user' => $user,
|
||||
'comments' => $comments,
|
||||
'voters' => $voters,
|
||||
'user' => $user,
|
||||
'carbon' => $carbon,
|
||||
'meta' => $meta,
|
||||
'torrentRequestClaim' => $torrentRequestClaim,
|
||||
|
||||
@@ -165,7 +165,7 @@ class RssController extends Controller
|
||||
|
||||
$search = $rss->object_torrent;
|
||||
|
||||
$cacheKey = \md5(\sprintf('%s.%s.%s', $rss->id, $user->id, $user->rsskey));
|
||||
$cacheKey = 'rss:'.$rss->id;
|
||||
|
||||
$torrents = \cache()->remember($cacheKey, 300, function () use ($search, $user) {
|
||||
return Torrent::with('user', 'category', 'type', 'resolution')
|
||||
|
||||
@@ -36,8 +36,8 @@ class CheatedTorrentController extends Controller
|
||||
'balance_offset',
|
||||
'created_at',
|
||||
])
|
||||
->selectRaw('balance + balance_offset AS current_balance')
|
||||
->selectRaw('(CAST((balance + balance_offset) AS float) / CAST((size + 1) AS float)) AS times_cheated')
|
||||
->selectRaw('balance + COALESCE(balance_offset, 0) AS current_balance')
|
||||
->selectRaw('(CAST((balance + COALESCE(balance_offset, 0)) AS float) / CAST((size + 1) AS float)) AS times_cheated')
|
||||
->having('current_balance', '<>', '0')
|
||||
->orderByDesc('times_cheated')
|
||||
->paginate(25);
|
||||
|
||||
@@ -28,9 +28,7 @@ class NoteController extends Controller
|
||||
*/
|
||||
public function index(): \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
{
|
||||
$notes = Note::latest()->paginate(25);
|
||||
|
||||
return \view('Staff.note.index', ['notes' => $notes]);
|
||||
return \view('Staff.note.index');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -367,4 +367,22 @@ class StatsController extends Controller
|
||||
|
||||
return \view('stats.clients.clients', ['clients' => $clients]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show Extra-Stats Themes.
|
||||
*/
|
||||
public function themes(): \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
{
|
||||
$siteThemes = User::select(DB::raw('style, count(*) as value'))->groupBy('style')->latest('value')->get();
|
||||
$customThemes = User::where('custom_css', '!=', '')->select(DB::raw('custom_css, count(*) as value'))->groupBy('custom_css')->latest('value')->get();
|
||||
$standaloneThemes = User::whereNotNull('standalone_css')->select(DB::raw('standalone_css, count(*) as value'))->groupBy('standalone_css')->latest('value')->get();
|
||||
|
||||
|
||||
|
||||
return \view('stats.themes.index', [
|
||||
'siteThemes' => $siteThemes,
|
||||
'customThemes' => $customThemes,
|
||||
'standaloneThemes' => $standaloneThemes,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,14 +83,13 @@ class TorrentController extends Controller
|
||||
*/
|
||||
public function show(Request $request, int|string $id): \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
{
|
||||
$torrent = Torrent::withAnyStatus()->with(['comments', 'category', 'type', 'resolution', 'subtitles', 'playlists'])->findOrFail($id);
|
||||
$uploader = $torrent->user;
|
||||
$user = $request->user();
|
||||
|
||||
$torrent = Torrent::withAnyStatus()->with(['user', 'comments', 'category', 'type', 'resolution', 'subtitles', 'playlists'])->findOrFail($id);
|
||||
$freeleechToken = FreeleechToken::where('user_id', '=', $user->id)->where('torrent_id', '=', $torrent->id)->first();
|
||||
$personalFreeleech = PersonalFreeleech::where('user_id', '=', $user->id)->first();
|
||||
$comments = $torrent->comments()->latest()->paginate(10);
|
||||
$totalTips = BonTransactions::where('torrent_id', '=', $id)->sum('cost');
|
||||
$userTips = BonTransactions::where('torrent_id', '=', $id)->where('sender', '=', $request->user()->id)->sum('cost');
|
||||
$userTips = BonTransactions::where('torrent_id', '=', $id)->where('sender', '=', $user->id)->sum('cost');
|
||||
$lastSeedActivity = History::where('torrent_id', '=', $torrent->id)->where('seeder', '=', 1)->latest('updated_at')->first();
|
||||
$audits = Audit::with('user')->where('model_entry_id', '=', $torrent->id)->where('model_name', '=', 'Torrent')->latest()->get();
|
||||
|
||||
@@ -133,7 +132,6 @@ class TorrentController extends Controller
|
||||
|
||||
return \view('torrent.torrent', [
|
||||
'torrent' => $torrent,
|
||||
'comments' => $comments,
|
||||
'user' => $user,
|
||||
'personal_freeleech' => $personalFreeleech,
|
||||
'freeleech_token' => $freeleechToken,
|
||||
@@ -144,7 +142,6 @@ class TorrentController extends Controller
|
||||
'user_tips' => $userTips,
|
||||
'featured' => $featured,
|
||||
'mediaInfo' => $mediaInfo,
|
||||
'uploader' => $uploader,
|
||||
'last_seed_activity' => $lastSeedActivity,
|
||||
'playlists' => $playlists,
|
||||
'audits' => $audits,
|
||||
|
||||
@@ -50,7 +50,11 @@ class UserController extends Controller
|
||||
*/
|
||||
public function show(string $username): \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
{
|
||||
$user = User::with(['privacy', 'history'])->withCount('torrents')->where('username', '=', $username)->firstOrFail();
|
||||
$user = User::with(['privacy', 'history'])
|
||||
->withCount('torrents')
|
||||
->where('username', '=', $username)
|
||||
->when(\auth()->user()->group->is_modo == true, fn ($query) => $query->withTrashed())
|
||||
->firstOrFail();
|
||||
|
||||
$groups = Group::all();
|
||||
$followers = Follow::where('target_id', '=', $user->id)->latest()->limit(25)->get();
|
||||
|
||||
@@ -76,28 +76,22 @@ class Comment extends Component
|
||||
|
||||
final public function editComment(): void
|
||||
{
|
||||
if (\auth()->user()->id !== $this->comment->user_id || ! \auth()->user()->group->is_modo) {
|
||||
if (\auth()->user()->id == $this->comment->user_id || \auth()->user()->group->is_modo) {
|
||||
$this->comment->update((new AntiXSS())->xss_clean($this->editState));
|
||||
$this->isEditing = false;
|
||||
} else {
|
||||
$this->dispatchBrowserEvent('error', ['type' => 'error', 'message' => 'Permission Denied!']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->comment->update((new AntiXSS())->xss_clean($this->editState));
|
||||
|
||||
$this->isEditing = false;
|
||||
}
|
||||
|
||||
final public function deleteComment(): void
|
||||
{
|
||||
if (\auth()->user()->id !== $this->comment->user_id || ! \auth()->user()->group->is_modo) {
|
||||
if (\auth()->user()->id == $this->comment->user_id || \auth()->user()->group->is_modo) {
|
||||
$this->comment->delete();
|
||||
$this->emitUp('refresh');
|
||||
} else {
|
||||
$this->dispatchBrowserEvent('error', ['type' => 'error', 'message' => 'Permission Denied!']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->comment->delete();
|
||||
|
||||
$this->emitUp('refresh');
|
||||
}
|
||||
|
||||
final public function postReply(): void
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire;
|
||||
|
||||
use App\Models\Note;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
class NoteSearch extends Component
|
||||
{
|
||||
use WithPagination;
|
||||
|
||||
public int $perPage = 25;
|
||||
|
||||
public string $search = '';
|
||||
|
||||
protected $queryString = [
|
||||
'search' => ['except' => ''],
|
||||
'page' => ['except' => 1],
|
||||
'perPage' => ['except' => ''],
|
||||
];
|
||||
|
||||
final public function paginationView(): string
|
||||
{
|
||||
return 'vendor.pagination.livewire-pagination';
|
||||
}
|
||||
|
||||
final public function updatedPage(): void
|
||||
{
|
||||
$this->emit('paginationChanged');
|
||||
}
|
||||
|
||||
final public function updatingSearch(): void
|
||||
{
|
||||
$this->resetPage();
|
||||
}
|
||||
|
||||
final public function getNotesProperty(): \Illuminate\Contracts\Pagination\LengthAwarePaginator
|
||||
{
|
||||
return Note::query()
|
||||
->with(['noteduser', 'staffuser'])
|
||||
->when($this->search, fn ($query) => $query->where('message', 'LIKE', '%'.$this->search.'%'))
|
||||
->latest()
|
||||
->paginate($this->perPage);
|
||||
}
|
||||
|
||||
final public function render(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application
|
||||
{
|
||||
return \view('livewire.note-search', [
|
||||
'notes' => $this->notes,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,8 @@ class UserSearch extends Component
|
||||
{
|
||||
use WithPagination;
|
||||
|
||||
public bool $show = false;
|
||||
|
||||
public int $perPage = 25;
|
||||
|
||||
public string $search = '';
|
||||
@@ -29,6 +31,13 @@ class UserSearch extends Component
|
||||
|
||||
public string $sortDirection = 'desc';
|
||||
|
||||
protected $queryString = [
|
||||
'search' => ['except' => ''],
|
||||
'show' => ['except' => false],
|
||||
'page' => ['except' => 1],
|
||||
'perPage' => ['except' => ''],
|
||||
];
|
||||
|
||||
final public function paginationView(): string
|
||||
{
|
||||
return 'vendor.pagination.livewire-pagination';
|
||||
@@ -44,11 +53,24 @@ class UserSearch extends Component
|
||||
$this->resetPage();
|
||||
}
|
||||
|
||||
final public function updatingShow(): void
|
||||
{
|
||||
$this->resetPage();
|
||||
}
|
||||
|
||||
final public function toggleProperties($property): void
|
||||
{
|
||||
if ($property === 'show') {
|
||||
$this->show = ! $this->show;
|
||||
}
|
||||
}
|
||||
|
||||
final public function getUsersProperty(): \Illuminate\Contracts\Pagination\LengthAwarePaginator
|
||||
{
|
||||
return User::query()
|
||||
->with('group')
|
||||
->when($this->search, fn ($query) => $query->where('username', 'LIKE', '%'.$this->search.'%')->orWhere('email', 'LIKE', '%'.$this->search.'%'))
|
||||
->when($this->show === true, fn ($query) => $query->onlyTrashed())
|
||||
->orderBy($this->sortField, $this->sortDirection)
|
||||
->paginate($this->perPage);
|
||||
}
|
||||
|
||||
@@ -132,9 +132,6 @@ class UserTorrents extends Component
|
||||
fn ($query) => $query
|
||||
->where('name', 'like', '%'.str_replace(' ', '%', $this->name).'%')
|
||||
)
|
||||
->when(
|
||||
\config('hitrun.enabled') === true,
|
||||
fn ($query) => $query
|
||||
->when(
|
||||
$this->unsatisfied === 'exclude',
|
||||
fn ($query) => $query
|
||||
@@ -152,7 +149,6 @@ class UserTorrents extends Component
|
||||
->where('immune', '=', 0)
|
||||
->whereRaw('actual_downloaded > (torrents.size * ? / 100)', [\config('hitrun.buffer')])
|
||||
)
|
||||
)
|
||||
->when($this->active === 'include', fn ($query) => $query->where('active', '=', 1))
|
||||
->when($this->active === 'exclude', fn ($query) => $query->where(fn ($query) => $query->where('active', '=', 0)->orWhereNull('active')))
|
||||
->when($this->completed === 'include', fn ($query) => $query->where('seeder', '=', 1))
|
||||
|
||||
@@ -46,19 +46,6 @@ class Torrent extends Model
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Belongs To A Uploader.
|
||||
*/
|
||||
public function uploader(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
// Not needed yet but may use this soon.
|
||||
|
||||
return $this->belongsTo(User::class)->withDefault([
|
||||
'username' => 'System',
|
||||
'id' => '1',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Belongs To A Category.
|
||||
*/
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@
|
||||
"hootlex/laravel-moderation": "^1.0",
|
||||
"intervention/image": "^2.5",
|
||||
"joypixels/assets": "^6.0",
|
||||
"laravel/framework": "v9.30.0",
|
||||
"laravel/framework": "^v9.30.0",
|
||||
"laravel/tinker": "^2.7",
|
||||
"laravel/ui": "^3.1.0",
|
||||
"league/flysystem-sftp-v3": "^3.0",
|
||||
|
||||
Generated
+316
-160
File diff suppressed because it is too large
Load Diff
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* NOTICE OF LICENSE.
|
||||
*
|
||||
* UNIT3D Community Edition is open-sourced software licensed under the GNU Affero General Public License v3.0
|
||||
* The details is bundled with this project in the file LICENSE.txt.
|
||||
*
|
||||
* @project UNIT3D Community Edition
|
||||
*
|
||||
* @author HDVinnie <hdinnovations@protonmail.com>
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Enabled
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Blacklist On/Off
|
||||
|
|
||||
*/
|
||||
|
||||
'enabled' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Blacklist Clients
|
||||
|--------------------------------------------------------------------------
|
||||
| An array of clients to be blacklisted which will reject them from announcing
|
||||
| to the sites tracker.
|
||||
|
|
||||
|
|
||||
*/
|
||||
'clients' => [
|
||||
'Transmission/2.93', 'Transmission/2.04',
|
||||
],
|
||||
];
|
||||
+2
-2
@@ -22,7 +22,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'powered-by' => 'Powered By UNIT3D Community Edition v6.4.1',
|
||||
'powered-by' => 'Powered By UNIT3D Community Edition v6.5.0',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -44,7 +44,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'version' => 'v6.4.1',
|
||||
'version' => 'v6.5.0',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
use App\Models\History;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$duplicates = DB::table('history')
|
||||
->select(
|
||||
'torrent_id',
|
||||
'user_id',
|
||||
DB::raw('COUNT(*) as `count`')
|
||||
)
|
||||
->groupBy('torrent_id', 'user_id')
|
||||
->having('count', '>', 1)
|
||||
->get();
|
||||
|
||||
foreach ($duplicates as $duplicate) {
|
||||
$records = History::query()
|
||||
->where('torrent_id', '=', $duplicate->torrent_id)
|
||||
->where('user_id', '=', $duplicate->user_id)
|
||||
->get();
|
||||
|
||||
$merged = $records->first();
|
||||
|
||||
$merged->seedtime = $records->sum('seedtime');
|
||||
$merged->downloaded = $records->sum('downloaded');
|
||||
$merged->actual_downloaded = $records->sum('actual_downloaded');
|
||||
$merged->uploaded = $records->sum('uploaded');
|
||||
$merged->actual_uploaded = $records->sum('actual_uploaded');
|
||||
$merged->save();
|
||||
|
||||
foreach ($records->where('id', '!=', $merged->id) as $record) {
|
||||
$record->delete();
|
||||
}
|
||||
}
|
||||
|
||||
Schema::table('history', function (Blueprint $table) {
|
||||
$table->unique(['user_id', 'torrent_id']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$duplicates = DB::table('peers')
|
||||
->select(
|
||||
'torrent_id',
|
||||
'user_id',
|
||||
'peer_id',
|
||||
DB::raw('COUNT(*) as `count`')
|
||||
)
|
||||
->groupBy('torrent_id', 'user_id', 'peer_id')
|
||||
->having('count', '>', 1)
|
||||
->get();
|
||||
|
||||
foreach ($duplicates as $duplicate) {
|
||||
$records = Peer::query()
|
||||
->where('torrent_id', '=', $duplicate->torrent_id)
|
||||
->where('user_id', '=', $duplicate->user_id)
|
||||
->where('peer_id', '=', $duplicate->peer_id)
|
||||
->get();
|
||||
|
||||
$first = $records->first();
|
||||
|
||||
foreach ($records->where('id', '!=', $first->id) as $record) {
|
||||
$record->delete();
|
||||
}
|
||||
}
|
||||
|
||||
Schema::table('peers', function (Blueprint $table) {
|
||||
$table->unique(['user_id', 'torrent_id', 'peer_id']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Torrent;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Torrent::withAnyStatus()
|
||||
->whereNull('imdb')
|
||||
->orWhere('imdb', '<', 0)
|
||||
->orWhere('imdb', '>', 2_000_000_000)
|
||||
->orWhere('imdb', 'not regex', '\d+')
|
||||
->update(['imdb' => '0']);
|
||||
|
||||
Torrent::withAnyStatus()
|
||||
->whereNull('tmdb')
|
||||
->orWhere('tmdb', '<', 0)
|
||||
->orWhere('tmdb', '>', 2_000_000_000)
|
||||
->orWhere('tmdb', 'not regex', '\d+')
|
||||
->update(['tmdb' => '0']);
|
||||
|
||||
Torrent::withAnyStatus()
|
||||
->whereNull('tvdb')
|
||||
->orWhere('tvdb', '<', 0)
|
||||
->orWhere('tvdb', '>', 2_000_000_000)
|
||||
->orWhere('tvdb', 'not regex', '\d+')
|
||||
->update(['tvdb' => '0']);
|
||||
|
||||
Torrent::withAnyStatus()
|
||||
->whereNull('mal')
|
||||
->orWhere('mal', '<', 0)
|
||||
->orWhere('mal', '>', 2_000_000_000)
|
||||
->orWhere('mal', 'not regex', '\d+')
|
||||
->update(['mal' => '0']);
|
||||
|
||||
Schema::table('torrents', function (Blueprint $table) {
|
||||
$table->integer('imdb')->unsigned()->change();
|
||||
$table->integer('tvdb')->unsigned()->change();
|
||||
$table->integer('tmdb')->unsigned()->change();
|
||||
$table->integer('mal')->unsigned()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
use App\Models\TorrentRequest;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
TorrentRequest::withAnyStatus()
|
||||
->whereNull('imdb')
|
||||
->orWhere('imdb', '<', 0)
|
||||
->orWhere('imdb', '>', 2_000_000_000)
|
||||
->orWhere('imdb', 'not regex', '\d+')
|
||||
->update(['imdb' => '0']);
|
||||
|
||||
TorrentRequest::withAnyStatus()
|
||||
->whereNull('tmdb')
|
||||
->orWhere('tmdb', '<', 0)
|
||||
->orWhere('tmdb', '>', 2_000_000_000)
|
||||
->orWhere('tmdb', 'not regex', '\d+')
|
||||
->update(['tmdb' => '0']);
|
||||
|
||||
TorrentRequest::withAnyStatus()
|
||||
->whereNull('tvdb')
|
||||
->orWhere('tvdb', '<', 0)
|
||||
->orWhere('tvdb', '>', 2_000_000_000)
|
||||
->orWhere('tvdb', 'not regex', '\d+')
|
||||
->update(['tvdb' => '0']);
|
||||
|
||||
TorrentRequest::withAnyStatus()
|
||||
->whereNull('mal')
|
||||
->orWhere('mal', '<', 0)
|
||||
->orWhere('mal', '>', 2_000_000_000)
|
||||
->orWhere('mal', 'not regex', '\d+')
|
||||
->update(['mal' => '0']);
|
||||
|
||||
Schema::table('requests', function (Blueprint $table) {
|
||||
$table->integer('imdb')->unsigned()->change();
|
||||
$table->integer('tvdb')->unsigned()->change();
|
||||
$table->integer('tmdb')->unsigned()->change();
|
||||
$table->integer('mal')->unsigned()->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::dropIfExists('images');
|
||||
Schema::dropIfExists('albums');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,777 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Application;
|
||||
use App\Models\Article;
|
||||
use App\Models\Audit;
|
||||
use App\Models\Ban;
|
||||
use App\Models\BonTransactions;
|
||||
use App\Models\Bookmark;
|
||||
use App\Models\BotTransaction;
|
||||
use App\Models\Comment;
|
||||
use App\Models\FailedLoginAttempt;
|
||||
use App\Models\FeaturedTorrent;
|
||||
use App\Models\Follow;
|
||||
use App\Models\Forum;
|
||||
use App\Models\FreeleechToken;
|
||||
use App\Models\Graveyard;
|
||||
use App\Models\History;
|
||||
use App\Models\Invite;
|
||||
use App\Models\Like;
|
||||
use App\Models\Message;
|
||||
use App\Models\Note;
|
||||
use App\Models\Notification;
|
||||
use App\Models\Peer;
|
||||
use App\Models\PersonalFreeleech;
|
||||
use App\Models\Playlist;
|
||||
use App\Models\Poll;
|
||||
use App\Models\Post;
|
||||
use App\Models\PrivateMessage;
|
||||
use App\Models\Report;
|
||||
use App\Models\Rss;
|
||||
use App\Models\Seedbox;
|
||||
use App\Models\Subscription;
|
||||
use App\Models\Subtitle;
|
||||
use App\Models\Thank;
|
||||
use App\Models\Ticket;
|
||||
use App\Models\TicketAttachment;
|
||||
use App\Models\Topic;
|
||||
use App\Models\Torrent;
|
||||
use App\Models\TorrentDownload;
|
||||
use App\Models\TorrentRequest;
|
||||
use App\Models\TorrentRequestBounty;
|
||||
use App\Models\TwoStepAuth;
|
||||
use App\Models\User;
|
||||
use App\Models\UserActivation;
|
||||
use App\Models\UserAudible;
|
||||
use App\Models\UserEcho;
|
||||
use App\Models\UserNotification;
|
||||
use App\Models\UserPrivacy;
|
||||
use App\Models\Voter;
|
||||
use App\Models\Warning;
|
||||
use App\Models\Watchlist;
|
||||
use App\Models\Wish;
|
||||
use Assada\Achievements\Model\AchievementProgress;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$userIds = User::withoutGlobalScopes()->pluck('id');
|
||||
|
||||
// 1 is ID of the System account
|
||||
User::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('deleted_by', $userIds)
|
||||
->whereNotNull('deleted_by')
|
||||
->update(['deleted_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
AchievementProgress::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('achiever_id', $userIds)
|
||||
->whereNotNull('achiever_id')
|
||||
->update(['achiever_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Application::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('moderated_by', $userIds)
|
||||
->whereNotNull('moderated_by')
|
||||
->update(['moderated_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Application::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('accepted_by', $userIds)
|
||||
->whereNotNull('accepted_by')
|
||||
->update(['accepted_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Article::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Audit::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Ban::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('owned_by', $userIds)
|
||||
->whereNotNull('owned_by')
|
||||
->update(['owned_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Ban::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('created_by', $userIds)
|
||||
->whereNotNull('created_by')
|
||||
->update(['created_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
BonTransactions::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('sender', $userIds)
|
||||
->whereNotNull('sender')
|
||||
->update(['sender' => 1]);
|
||||
BonTransactions::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('receiver', $userIds)
|
||||
->whereNotNull('receiver')
|
||||
->update(['receiver' => 1]);
|
||||
Bookmark::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
BotTransaction::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Seedbox::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Comment::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
FailedLoginAttempt::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
FeaturedTorrent::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Follow::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Follow::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('target_id', $userIds)
|
||||
->whereNotNull('target_id')
|
||||
->update(['target_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Forum::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('last_post_user_id', $userIds)
|
||||
->whereNotNull('last_post_user_id')
|
||||
->update(['last_post_user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
FreeleechToken::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Graveyard::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
History::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Invite::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Invite::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('accepted_by', $userIds)
|
||||
->whereNotNull('accepted_by')
|
||||
->update(['accepted_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Like::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Message::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Message::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('receiver_id', $userIds)
|
||||
->whereNotNull('receiver_id')
|
||||
->update(['receiver_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Notification::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('notifiable_id', $userIds)
|
||||
->whereNotNull('notifiable_id')
|
||||
->update(['notifiable_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Peer::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
PersonalFreeleech::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Playlist::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Poll::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Post::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
PrivateMessage::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('sender_id', $userIds)
|
||||
->whereNotNull('sender_id')
|
||||
->update(['sender_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
PrivateMessage::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('receiver_id', $userIds)
|
||||
->whereNotNull('receiver_id')
|
||||
->update(['receiver_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Report::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('reporter_id', $userIds)
|
||||
->whereNotNull('reporter_id')
|
||||
->update(['reporter_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Report::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('staff_id', $userIds)
|
||||
->whereNotNull('staff_id')
|
||||
->update(['staff_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Report::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('reported_user', $userIds)
|
||||
->whereNotNull('reported_user')
|
||||
->update(['reported_user' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TorrentRequestBounty::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TorrentRequest::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TorrentRequest::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('filled_by', $userIds)
|
||||
->whereNotNull('filled_by')
|
||||
->update(['filled_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TorrentRequest::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('approved_by', $userIds)
|
||||
->whereNotNull('approved_by')
|
||||
->update(['approved_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Rss::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Rss::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('staff_id', $userIds)
|
||||
->whereNotNull('staff_id')
|
||||
->update(['staff_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Subscription::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Subtitle::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Subtitle::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('moderated_by', $userIds)
|
||||
->whereNotNull('moderated_by')
|
||||
->update(['moderated_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Thank::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TicketAttachment::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Ticket::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Ticket::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('staff_id', $userIds)
|
||||
->whereNotNull('staff_id')
|
||||
->update(['staff_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Topic::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('first_post_user_id', $userIds)
|
||||
->whereNotNull('first_post_user_id')
|
||||
->update(['first_post_user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Topic::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('last_post_user_id', $userIds)
|
||||
->whereNotNull('last_post_user_id')
|
||||
->update(['last_post_user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TorrentDownload::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Torrent::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
TwoStepAuth::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('userId', $userIds)
|
||||
->whereNotNull('userId')
|
||||
->update(['userId' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserActivation::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserAudible::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserAudible::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('target_id', $userIds)
|
||||
->whereNotNull('target_id')
|
||||
->update(['target_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserEcho::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserEcho::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('target_id', $userIds)
|
||||
->whereNotNull('target_id')
|
||||
->update(['target_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Note::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Note::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('staff_id', $userIds)
|
||||
->whereNotNull('staff_id')
|
||||
->update(['staff_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
UserNotification::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1]);
|
||||
UserPrivacy::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1]);
|
||||
Voter::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Warning::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Warning::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('warned_by', $userIds)
|
||||
->whereNotNull('warned_by')
|
||||
->update(['warned_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Warning::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('deleted_by', $userIds)
|
||||
->whereNotNull('deleted_by')
|
||||
->update(['deleted_by' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Watchlist::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Watchlist::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('staff_id', $userIds)
|
||||
->whereNotNull('staff_id')
|
||||
->update(['staff_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
Wish::withoutGlobalScopes()
|
||||
->whereIntegerNotInRaw('user_id', $userIds)
|
||||
->whereNotNull('user_id')
|
||||
->update(['user_id' => 1, 'updated_at' => DB::raw('updated_at')]);
|
||||
|
||||
// Remove constraint
|
||||
Schema::table('articles', function (Blueprint $table) {
|
||||
$table->dropForeign('fk_articles_users1');
|
||||
});
|
||||
|
||||
Schema::table('bans', function (Blueprint $table) {
|
||||
$table->dropForeign('foreign_ban_user_id');
|
||||
$table->dropForeign('foreign_staff_ban_user_id');
|
||||
});
|
||||
|
||||
Schema::table('bot_transactions', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('clients', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('comments', function (Blueprint $table) {
|
||||
$table->dropForeign('fk_comments_users_1');
|
||||
});
|
||||
|
||||
Schema::table('history', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('peers', function (Blueprint $table) {
|
||||
$table->dropForeign('fk_peers_users1');
|
||||
});
|
||||
|
||||
Schema::table('reports', function (Blueprint $table) {
|
||||
$table->dropForeign('foreign_reporting_user_id');
|
||||
$table->dropForeign('foreign_staff_user_id');
|
||||
});
|
||||
|
||||
Schema::table('user_audibles', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('user_echoes', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('user_notifications', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('user_privacy', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::table('warnings', function (Blueprint $table) {
|
||||
$table->dropForeign(['user_id']);
|
||||
$table->dropForeign('warnings_warned_by_foreign');
|
||||
});
|
||||
|
||||
// Alter column type, remove indexes, and add foreign key constraint
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->increments('id')->change();
|
||||
|
||||
$table->unsignedInteger('deleted_by')->nullable()->change();
|
||||
$table->foreign('deleted_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('achievement_progress', function (Blueprint $table) {
|
||||
$table->unsignedInteger('achiever_id')->change();
|
||||
$table->foreign('achiever_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('applications', function (Blueprint $table) {
|
||||
$table->unsignedInteger('moderated_by')->nullable()->change();
|
||||
$table->dropIndex(['moderated_by']);
|
||||
$table->foreign('moderated_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('accepted_by')->nullable()->change();
|
||||
$table->dropIndex(['accepted_by']);
|
||||
$table->foreign('accepted_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('articles', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('fk_articles_users1_idx');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('audits', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->nullable()->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('bans', function (Blueprint $table) {
|
||||
$table->unsignedInteger('owned_by')->change();
|
||||
$table->dropIndex('owned_by');
|
||||
$table->foreign('owned_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('created_by')->nullable()->change();
|
||||
$table->dropIndex('created_by');
|
||||
$table->foreign('created_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('bon_transactions', function (Blueprint $table) {
|
||||
$table->dropIndex(['sender']);
|
||||
$table->foreign('sender')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->dropIndex(['receiver']);
|
||||
$table->foreign('receiver')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('bookmarks', function (Blueprint $table) {
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('bot_transactions', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->default('0')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('clients', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('comments', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->nullable()->change();
|
||||
$table->dropIndex('fk_comments_users_1');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('failed_login_attempts', function (Blueprint $table) {
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('featured_torrents', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('follows', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('target_id')->change();
|
||||
$table->dropIndex(['target_id']);
|
||||
$table->foreign('target_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('forums', function (Blueprint $table) {
|
||||
$table->unsignedInteger('last_post_user_id')->nullable()->change();
|
||||
$table->foreign('last_post_user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('freeleech_tokens', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('graveyard', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('history', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('invites', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('user_id');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('accepted_by')->nullable()->change();
|
||||
$table->dropIndex('accepted_by');
|
||||
$table->foreign('accepted_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('likes', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('messages', function (Blueprint $table) {
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
$table->foreign('receiver_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('notifications', function (Blueprint $table) {
|
||||
$table->unsignedInteger('notifiable_id')->change();
|
||||
$table->foreign('notifiable_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('peers', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('fk_peers_users1_idx');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('personal_freeleech', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('playlists', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('polls', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->default('0')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('posts', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('fk_forum_posts_users1_idx');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('private_messages', function (Blueprint $table) {
|
||||
$table->dropIndex(['sender_id']);
|
||||
$table->foreign('sender_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->dropIndex('private_messages_reciever_id_index');
|
||||
$table->foreign('receiver_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('reports', function (Blueprint $table) {
|
||||
$table->unsignedInteger('reporter_id')->change();
|
||||
$table->dropIndex('reporter_id');
|
||||
$table->foreign('reporter_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('staff_id')->nullable()->change();
|
||||
$table->dropIndex('staff_id');
|
||||
$table->foreign('staff_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->foreign('reported_user')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('request_bounty', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('addedby');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('requests', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('requests_user_id_foreign');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('filled_by')->change();
|
||||
$table->dropIndex('filled_by');
|
||||
$table->foreign('filled_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('approved_by')->change();
|
||||
$table->dropIndex('approved_by');
|
||||
$table->foreign('approved_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('rss', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->default('1')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('staff_id')->default('0')->change();
|
||||
$table->foreign('staff_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('sessions', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->nullable()->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('subscriptions', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('subtitles', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('moderated_by')->change();
|
||||
$table->dropIndex(['moderated_by']);
|
||||
$table->foreign('moderated_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('thanks', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('ticket_attachments', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('tickets', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('staff_id')->nullable()->change();
|
||||
$table->dropIndex(['staff_id']);
|
||||
$table->foreign('staff_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('topics', function (Blueprint $table) {
|
||||
$table->unsignedInteger('first_post_user_id')->nullable()->change();
|
||||
$table->foreign('first_post_user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('last_post_user_id')->nullable()->change();
|
||||
$table->foreign('last_post_user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('torrent_downloads', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('torrents', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex('fk_torrents_users1_idx');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('twostep_auth', function (Blueprint $table) {
|
||||
$table->dropIndex(['userId']);
|
||||
$table->foreign('userId')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_activations', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_audibles', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('target_id')->nullable()->change();
|
||||
$table->dropIndex(['target_id']);
|
||||
$table->foreign('target_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_echoes', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('target_id')->nullable()->change();
|
||||
$table->dropIndex(['target_id']);
|
||||
$table->foreign('target_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_notes', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->dropIndex(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('staff_id')->change();
|
||||
$table->dropIndex(['staff_id']);
|
||||
$table->foreign('staff_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_notifications', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->unique()->change();
|
||||
$table->dropUnique(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('user_privacy', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->unique()->change();
|
||||
$table->dropUnique(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('voters', function (Blueprint $table) {
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('warnings', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('warned_by')->change();
|
||||
$table->foreign('warned_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('deleted_by')->nullable()->change();
|
||||
$table->foreign('deleted_by')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('watchlists', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->unique()->change();
|
||||
$table->dropUnique(['user_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
|
||||
$table->unsignedInteger('staff_id')->change();
|
||||
$table->dropIndex(['staff_id']);
|
||||
$table->foreign('staff_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
|
||||
Schema::table('wishes', function (Blueprint $table) {
|
||||
$table->unsignedInteger('user_id')->change();
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnUpdate();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::dropIfExists('conversation_messages');
|
||||
Schema::dropIfExists('conversation_user');
|
||||
Schema::dropIfExists('conversations');
|
||||
}
|
||||
};
|
||||
Generated
+238
-238
@@ -132,9 +132,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz",
|
||||
"integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==",
|
||||
"version": "7.20.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz",
|
||||
"integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.20.2",
|
||||
@@ -610,9 +610,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz",
|
||||
"integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==",
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz",
|
||||
"integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -1433,12 +1433,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-parameters": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.1.tgz",
|
||||
"integrity": "sha512-nDvKLrAvl+kf6BOy1UJ3MGwzzfTMgppxwiD2Jb4LO3xjYyZq30oQzDNJbCQpMdG9+j2IXHoiMrw5Cm/L6ZoxXQ==",
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz",
|
||||
"integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.19.0"
|
||||
"@babel/helper-plugin-utils": "^7.20.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -2137,9 +2137,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__core": {
|
||||
"version": "7.1.19",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
|
||||
"integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
|
||||
"version": "7.1.20",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
|
||||
"integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.1.0",
|
||||
@@ -2346,9 +2346,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.14.188",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz",
|
||||
"integrity": "sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w=="
|
||||
"version": "4.14.190",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz",
|
||||
"integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw=="
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "3.0.1",
|
||||
@@ -2436,9 +2436,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-sfc": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.13.tgz",
|
||||
"integrity": "sha512-zzu2rLRZlgIU+OT3Atbr7Y6PG+LW4wVQpPfNRrGDH3dM9PsrcVfa+1pKb8bW467bGM3aDOvAnsYLWVpYIv3GRg==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
|
||||
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.18.4",
|
||||
@@ -2763,9 +2763,9 @@
|
||||
"integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA=="
|
||||
},
|
||||
"node_modules/ajv": {
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
|
||||
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
|
||||
"integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
@@ -2869,9 +2869,9 @@
|
||||
"integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
|
||||
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"normalize-path": "^3.0.0",
|
||||
@@ -3484,9 +3484,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001430",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz",
|
||||
"integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==",
|
||||
"version": "1.0.30001434",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
|
||||
"integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -3890,9 +3890,9 @@
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
},
|
||||
"node_modules/core-js-compat": {
|
||||
"version": "3.26.0",
|
||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz",
|
||||
"integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==",
|
||||
"version": "3.26.1",
|
||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
|
||||
"integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"browserslist": "^4.21.4"
|
||||
@@ -3909,9 +3909,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cosmiconfig": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
|
||||
"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
|
||||
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/parse-json": "^4.0.0",
|
||||
@@ -4043,20 +4043,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/css-loader": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
|
||||
"integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==",
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz",
|
||||
"integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"icss-utils": "^5.1.0",
|
||||
"postcss": "^8.4.7",
|
||||
"postcss": "^8.4.18",
|
||||
"postcss-modules-extract-imports": "^3.0.0",
|
||||
"postcss-modules-local-by-default": "^4.0.0",
|
||||
"postcss-modules-scope": "^3.0.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"semver": "^7.3.5"
|
||||
"semver": "^7.3.8"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.13.0"
|
||||
@@ -4574,9 +4574,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.0.tgz",
|
||||
"integrity": "sha512-Kc8fo5bbg8F4a2f3HPHTEpGyq/IRIQpyeHu3H1ThR14XDD7VrLcsGBo16HUpahgp8YkHJDaU5gNxJZbuGcuueg==",
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.1.tgz",
|
||||
"integrity": "sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==",
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "2.0.0",
|
||||
@@ -4650,9 +4650,9 @@
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
|
||||
"integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
|
||||
"version": "5.12.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
|
||||
"integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
@@ -5896,9 +5896,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/img-loader/node_modules/loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -6380,9 +6380,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/laravel-echo": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.14.1.tgz",
|
||||
"integrity": "sha512-elCwcgBy0QxWUJN6b+hF5bqBZrQb1AdwGx7puv+eh3cBN3UHkJ+Jvjy1cHjaOBkkuPNA+GLJl13rp2QG/HsSfQ==",
|
||||
"version": "1.14.2",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.14.2.tgz",
|
||||
"integrity": "sha512-oSQOlkdU9xCzW79g45/RN/zAQdjX7aHiVTAswv1pPv1aLukU/kZjMf2NDnkNQAwkORbh0255gahNIUN8M/Ev9g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
@@ -6690,9 +6690,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/loader-utils": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
|
||||
"integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -6834,9 +6834,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/memfs": {
|
||||
"version": "3.4.10",
|
||||
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.10.tgz",
|
||||
"integrity": "sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==",
|
||||
"version": "3.4.12",
|
||||
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
|
||||
"integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fs-monkey": "^1.0.3"
|
||||
@@ -7688,9 +7688,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.18",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
|
||||
"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
|
||||
"version": "8.4.19",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
|
||||
"integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -8208,9 +8208,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.10",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
|
||||
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
|
||||
"version": "6.0.11",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
|
||||
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cssesc": "^3.0.0",
|
||||
@@ -8258,9 +8258,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
|
||||
"integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz",
|
||||
"integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"bin": {
|
||||
@@ -8370,9 +8370,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pusher-js": {
|
||||
"version": "7.4.0",
|
||||
"resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-7.4.0.tgz",
|
||||
"integrity": "sha512-4ewETSlJEdRZ2eHGEMH3pHxMVB+sB4oMmOWbgYbSRsYbTFPOpRBumSEm9NSNse3pfjiluTrB98PaXijJ6BL3lg==",
|
||||
"version": "7.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-7.5.0.tgz",
|
||||
"integrity": "sha512-R8eL3v2hnOC7NY8ufvrcDPdEjit//2pqVmcC7h1sUyoZQ4M+bwlwkszmMVuVbYNKZUS8WRFmSvdeb9LkfLyvZQ==",
|
||||
"dependencies": {
|
||||
"@types/node": "^14.14.31",
|
||||
"tweetnacl": "^1.0.3"
|
||||
@@ -8573,14 +8573,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.13.10",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
|
||||
"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
|
||||
"version": "0.13.11",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
|
||||
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
|
||||
},
|
||||
"node_modules/regenerator-transform": {
|
||||
"version": "0.15.0",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
|
||||
"integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
|
||||
"version": "0.15.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
|
||||
"integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.8.4"
|
||||
@@ -8593,9 +8593,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/regexpu-core": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
|
||||
"integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
|
||||
"integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"regenerate": "^1.4.2",
|
||||
@@ -8603,7 +8603,7 @@
|
||||
"regjsgen": "^0.7.1",
|
||||
"regjsparser": "^0.9.1",
|
||||
"unicode-match-property-ecmascript": "^2.0.0",
|
||||
"unicode-match-property-value-ecmascript": "^2.0.0"
|
||||
"unicode-match-property-value-ecmascript": "^2.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
@@ -8912,9 +8912,9 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.56.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.56.0.tgz",
|
||||
"integrity": "sha512-WFJ9XrpkcnqZcYuLRJh5qiV6ibQOR4AezleeEjTjMsCocYW59dEG19U3fwTTXxzi2Ed3yjPBp727hbbj53pHFw==",
|
||||
"version": "1.56.1",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz",
|
||||
"integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
@@ -9566,9 +9566,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/std-env": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz",
|
||||
"integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==",
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz",
|
||||
"integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/stream-browserify": {
|
||||
@@ -9766,9 +9766,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/sweetalert2": {
|
||||
"version": "11.6.5",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.5.tgz",
|
||||
"integrity": "sha512-4/2dD+HoGbMnemYJlY/IXhLUgVFVxLgH3dlEDLY1yufOAW9HLEI8VHmgCo4+pmXbUBlKZU/pDbSgw3wkysi8jQ==",
|
||||
"version": "11.6.14",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.14.tgz",
|
||||
"integrity": "sha512-W8+vtsucIJg5BrFhHcqguNZMzmHGvVZVAYHaMGQ9dzrleOMZcHCGmnB46L9qUNdx5snr1GpMUVFjNuki7EBbuQ==",
|
||||
"dev": true,
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
@@ -9785,9 +9785,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.15.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
|
||||
"integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
|
||||
"integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
@@ -10077,9 +10077,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/unicode-match-property-value-ecmascript": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
|
||||
"integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
|
||||
"integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
@@ -10240,9 +10240,9 @@
|
||||
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
|
||||
},
|
||||
"node_modules/virtual-select-plugin": {
|
||||
"version": "1.0.34",
|
||||
"resolved": "https://registry.npmjs.org/virtual-select-plugin/-/virtual-select-plugin-1.0.34.tgz",
|
||||
"integrity": "sha512-5CuFVjByMGk6sDFSR2XgCYaHjk2R7rBOSQF+bM8LCnzV06JPyDMSwZV3GnlOHClGOc7mGmEcd3eJNErLT92H3Q==",
|
||||
"version": "1.0.35",
|
||||
"resolved": "https://registry.npmjs.org/virtual-select-plugin/-/virtual-select-plugin-1.0.35.tgz",
|
||||
"integrity": "sha512-1MmEXlvm1Jys7AdKmJ+P4yHzo/TU8PFkV2NiAg0dc6lFwf0aawn6CIa1GN3J/ijcJqOiX51iXutw1JWc02K/tg==",
|
||||
"dependencies": {
|
||||
"tooltip-plugin": "^1.0.16"
|
||||
}
|
||||
@@ -10254,12 +10254,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vue": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.13.tgz",
|
||||
"integrity": "sha512-QnM6ULTNnPmn71eUO+4hdjfBIA3H0GLsBnchnI/kS678tjI45GOUZhXd0oP/gX9isikXz1PAzSnkPspp9EUNfQ==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
|
||||
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-sfc": "2.7.13",
|
||||
"@vue/compiler-sfc": "2.7.14",
|
||||
"csstype": "^3.1.0"
|
||||
}
|
||||
},
|
||||
@@ -10270,9 +10270,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vue-loader": {
|
||||
"version": "15.10.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz",
|
||||
"integrity": "sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==",
|
||||
"version": "15.10.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
|
||||
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
@@ -10307,9 +10307,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vue-loader/node_modules/loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -10343,9 +10343,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vue-style-loader/node_modules/loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -10357,9 +10357,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vue-template-compiler": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz",
|
||||
"integrity": "sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
|
||||
"integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"de-indent": "^1.0.2",
|
||||
@@ -10395,9 +10395,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack": {
|
||||
"version": "5.74.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz",
|
||||
"integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
|
||||
"version": "5.75.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
|
||||
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
@@ -10614,9 +10614,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-dev-server/node_modules/ws": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz",
|
||||
"integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
||||
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
@@ -11023,9 +11023,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz",
|
||||
"integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==",
|
||||
"version": "7.20.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz",
|
||||
"integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.20.2",
|
||||
@@ -11387,9 +11387,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz",
|
||||
"integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==",
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz",
|
||||
"integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
|
||||
@@ -11919,12 +11919,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-parameters": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.1.tgz",
|
||||
"integrity": "sha512-nDvKLrAvl+kf6BOy1UJ3MGwzzfTMgppxwiD2Jb4LO3xjYyZq30oQzDNJbCQpMdG9+j2IXHoiMrw5Cm/L6ZoxXQ==",
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz",
|
||||
"integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.19.0"
|
||||
"@babel/helper-plugin-utils": "^7.20.2"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-property-literals": {
|
||||
@@ -12458,9 +12458,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/babel__core": {
|
||||
"version": "7.1.19",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
|
||||
"integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
|
||||
"version": "7.1.20",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
|
||||
"integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.1.0",
|
||||
@@ -12667,9 +12667,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/lodash": {
|
||||
"version": "4.14.188",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz",
|
||||
"integrity": "sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w=="
|
||||
"version": "4.14.190",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz",
|
||||
"integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw=="
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "3.0.1",
|
||||
@@ -12757,9 +12757,9 @@
|
||||
}
|
||||
},
|
||||
"@vue/compiler-sfc": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.13.tgz",
|
||||
"integrity": "sha512-zzu2rLRZlgIU+OT3Atbr7Y6PG+LW4wVQpPfNRrGDH3dM9PsrcVfa+1pKb8bW467bGM3aDOvAnsYLWVpYIv3GRg==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
|
||||
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.18.4",
|
||||
@@ -13050,9 +13050,9 @@
|
||||
"integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA=="
|
||||
},
|
||||
"ajv": {
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
|
||||
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
|
||||
"integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
@@ -13120,9 +13120,9 @@
|
||||
"integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
|
||||
},
|
||||
"anymatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
|
||||
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"normalize-path": "^3.0.0",
|
||||
@@ -13630,9 +13630,9 @@
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001430",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz",
|
||||
"integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==",
|
||||
"version": "1.0.30001434",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
|
||||
"integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
|
||||
"dev": true
|
||||
},
|
||||
"caseless": {
|
||||
@@ -13945,9 +13945,9 @@
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
},
|
||||
"core-js-compat": {
|
||||
"version": "3.26.0",
|
||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz",
|
||||
"integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==",
|
||||
"version": "3.26.1",
|
||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
|
||||
"integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"browserslist": "^4.21.4"
|
||||
@@ -13960,9 +13960,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
|
||||
"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
|
||||
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/parse-json": "^4.0.0",
|
||||
@@ -14070,20 +14070,20 @@
|
||||
"requires": {}
|
||||
},
|
||||
"css-loader": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
|
||||
"integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==",
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz",
|
||||
"integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"icss-utils": "^5.1.0",
|
||||
"postcss": "^8.4.7",
|
||||
"postcss": "^8.4.18",
|
||||
"postcss-modules-extract-imports": "^3.0.0",
|
||||
"postcss-modules-local-by-default": "^4.0.0",
|
||||
"postcss-modules-scope": "^3.0.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"semver": "^7.3.5"
|
||||
"semver": "^7.3.8"
|
||||
}
|
||||
},
|
||||
"css-select": {
|
||||
@@ -14479,9 +14479,9 @@
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
|
||||
},
|
||||
"engine.io": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.0.tgz",
|
||||
"integrity": "sha512-Kc8fo5bbg8F4a2f3HPHTEpGyq/IRIQpyeHu3H1ThR14XDD7VrLcsGBo16HUpahgp8YkHJDaU5gNxJZbuGcuueg==",
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.1.tgz",
|
||||
"integrity": "sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==",
|
||||
"requires": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "2.0.0",
|
||||
@@ -14552,9 +14552,9 @@
|
||||
}
|
||||
},
|
||||
"enhanced-resolve": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
|
||||
"integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
|
||||
"version": "5.12.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
|
||||
"integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
@@ -15499,9 +15499,9 @@
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -15864,9 +15864,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"laravel-echo": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.14.1.tgz",
|
||||
"integrity": "sha512-elCwcgBy0QxWUJN6b+hF5bqBZrQb1AdwGx7puv+eh3cBN3UHkJ+Jvjy1cHjaOBkkuPNA+GLJl13rp2QG/HsSfQ==",
|
||||
"version": "1.14.2",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.14.2.tgz",
|
||||
"integrity": "sha512-oSQOlkdU9xCzW79g45/RN/zAQdjX7aHiVTAswv1pPv1aLukU/kZjMf2NDnkNQAwkORbh0255gahNIUN8M/Ev9g==",
|
||||
"dev": true
|
||||
},
|
||||
"laravel-echo-server": {
|
||||
@@ -16097,9 +16097,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
|
||||
"integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -16222,9 +16222,9 @@
|
||||
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
|
||||
},
|
||||
"memfs": {
|
||||
"version": "3.4.10",
|
||||
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.10.tgz",
|
||||
"integrity": "sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==",
|
||||
"version": "3.4.12",
|
||||
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
|
||||
"integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs-monkey": "^1.0.3"
|
||||
@@ -16890,9 +16890,9 @@
|
||||
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.4.18",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
|
||||
"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
|
||||
"version": "8.4.19",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
|
||||
"integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"nanoid": "^3.3.4",
|
||||
@@ -17199,9 +17199,9 @@
|
||||
}
|
||||
},
|
||||
"postcss-selector-parser": {
|
||||
"version": "6.0.10",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
|
||||
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
|
||||
"version": "6.0.11",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
|
||||
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cssesc": "^3.0.0",
|
||||
@@ -17234,9 +17234,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"prettier": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
|
||||
"integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz",
|
||||
"integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
@@ -17326,9 +17326,9 @@
|
||||
}
|
||||
},
|
||||
"pusher-js": {
|
||||
"version": "7.4.0",
|
||||
"resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-7.4.0.tgz",
|
||||
"integrity": "sha512-4ewETSlJEdRZ2eHGEMH3pHxMVB+sB4oMmOWbgYbSRsYbTFPOpRBumSEm9NSNse3pfjiluTrB98PaXijJ6BL3lg==",
|
||||
"version": "7.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-7.5.0.tgz",
|
||||
"integrity": "sha512-R8eL3v2hnOC7NY8ufvrcDPdEjit//2pqVmcC7h1sUyoZQ4M+bwlwkszmMVuVbYNKZUS8WRFmSvdeb9LkfLyvZQ==",
|
||||
"requires": {
|
||||
"@types/node": "^14.14.31",
|
||||
"tweetnacl": "^1.0.3"
|
||||
@@ -17485,14 +17485,14 @@
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.10",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
|
||||
"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
|
||||
"version": "0.13.11",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
|
||||
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
|
||||
},
|
||||
"regenerator-transform": {
|
||||
"version": "0.15.0",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
|
||||
"integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
|
||||
"version": "0.15.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
|
||||
"integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.8.4"
|
||||
@@ -17505,9 +17505,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"regexpu-core": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
|
||||
"integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
|
||||
"integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerate": "^1.4.2",
|
||||
@@ -17515,7 +17515,7 @@
|
||||
"regjsgen": "^0.7.1",
|
||||
"regjsparser": "^0.9.1",
|
||||
"unicode-match-property-ecmascript": "^2.0.0",
|
||||
"unicode-match-property-value-ecmascript": "^2.0.0"
|
||||
"unicode-match-property-value-ecmascript": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"regjsgen": {
|
||||
@@ -17736,9 +17736,9 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sass": {
|
||||
"version": "1.56.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.56.0.tgz",
|
||||
"integrity": "sha512-WFJ9XrpkcnqZcYuLRJh5qiV6ibQOR4AezleeEjTjMsCocYW59dEG19U3fwTTXxzi2Ed3yjPBp727hbbj53pHFw==",
|
||||
"version": "1.56.1",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz",
|
||||
"integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
@@ -18270,9 +18270,9 @@
|
||||
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
|
||||
},
|
||||
"std-env": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz",
|
||||
"integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==",
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz",
|
||||
"integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==",
|
||||
"dev": true
|
||||
},
|
||||
"stream-browserify": {
|
||||
@@ -18419,9 +18419,9 @@
|
||||
}
|
||||
},
|
||||
"sweetalert2": {
|
||||
"version": "11.6.5",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.5.tgz",
|
||||
"integrity": "sha512-4/2dD+HoGbMnemYJlY/IXhLUgVFVxLgH3dlEDLY1yufOAW9HLEI8VHmgCo4+pmXbUBlKZU/pDbSgw3wkysi8jQ==",
|
||||
"version": "11.6.14",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.14.tgz",
|
||||
"integrity": "sha512-W8+vtsucIJg5BrFhHcqguNZMzmHGvVZVAYHaMGQ9dzrleOMZcHCGmnB46L9qUNdx5snr1GpMUVFjNuki7EBbuQ==",
|
||||
"dev": true
|
||||
},
|
||||
"tapable": {
|
||||
@@ -18431,9 +18431,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"terser": {
|
||||
"version": "5.15.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
|
||||
"integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
|
||||
"integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
@@ -18647,9 +18647,9 @@
|
||||
}
|
||||
},
|
||||
"unicode-match-property-value-ecmascript": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
|
||||
"integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
|
||||
"integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
|
||||
"dev": true
|
||||
},
|
||||
"unicode-property-aliases-ecmascript": {
|
||||
@@ -18774,9 +18774,9 @@
|
||||
}
|
||||
},
|
||||
"virtual-select-plugin": {
|
||||
"version": "1.0.34",
|
||||
"resolved": "https://registry.npmjs.org/virtual-select-plugin/-/virtual-select-plugin-1.0.34.tgz",
|
||||
"integrity": "sha512-5CuFVjByMGk6sDFSR2XgCYaHjk2R7rBOSQF+bM8LCnzV06JPyDMSwZV3GnlOHClGOc7mGmEcd3eJNErLT92H3Q==",
|
||||
"version": "1.0.35",
|
||||
"resolved": "https://registry.npmjs.org/virtual-select-plugin/-/virtual-select-plugin-1.0.35.tgz",
|
||||
"integrity": "sha512-1MmEXlvm1Jys7AdKmJ+P4yHzo/TU8PFkV2NiAg0dc6lFwf0aawn6CIa1GN3J/ijcJqOiX51iXutw1JWc02K/tg==",
|
||||
"requires": {
|
||||
"tooltip-plugin": "^1.0.16"
|
||||
}
|
||||
@@ -18788,12 +18788,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"vue": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.13.tgz",
|
||||
"integrity": "sha512-QnM6ULTNnPmn71eUO+4hdjfBIA3H0GLsBnchnI/kS678tjI45GOUZhXd0oP/gX9isikXz1PAzSnkPspp9EUNfQ==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
|
||||
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/compiler-sfc": "2.7.13",
|
||||
"@vue/compiler-sfc": "2.7.14",
|
||||
"csstype": "^3.1.0"
|
||||
}
|
||||
},
|
||||
@@ -18804,9 +18804,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"vue-loader": {
|
||||
"version": "15.10.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz",
|
||||
"integrity": "sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==",
|
||||
"version": "15.10.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
|
||||
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
@@ -18826,9 +18826,9 @@
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -18858,9 +18858,9 @@
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz",
|
||||
"integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
@@ -18871,9 +18871,9 @@
|
||||
}
|
||||
},
|
||||
"vue-template-compiler": {
|
||||
"version": "2.7.13",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz",
|
||||
"integrity": "sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==",
|
||||
"version": "2.7.14",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
|
||||
"integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"de-indent": "^1.0.2",
|
||||
@@ -18906,9 +18906,9 @@
|
||||
}
|
||||
},
|
||||
"webpack": {
|
||||
"version": "5.74.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz",
|
||||
"integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
|
||||
"version": "5.75.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
|
||||
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
@@ -19084,9 +19084,9 @@
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz",
|
||||
"integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
||||
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
@import 'components/form/select';
|
||||
@import 'components/form/text';
|
||||
@import 'components/form/textarea';
|
||||
@import 'components/forum/post';
|
||||
@import 'components/forum/subforum-listing';
|
||||
@import 'components/forum/topic-listing';
|
||||
@import 'components/forum/topic-tag';
|
||||
@import 'components/key-value';
|
||||
@import 'components/pagination';
|
||||
@import 'components/panel';
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-left: max(0px, 50% - 50vw);
|
||||
}
|
||||
|
||||
.comparison__image--hidden,
|
||||
|
||||
@@ -39,6 +39,16 @@
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.panel__header-link {
|
||||
color: var(--panel-head-fg);
|
||||
|
||||
&:hover {
|
||||
color: var(--panel-head-fg);
|
||||
filter: brightness(1.1);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.panel__actions {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
padding: 8px 12px;
|
||||
align-self: flex-start;
|
||||
filter: brightness(1);
|
||||
text-align: center;
|
||||
transition: filter 300ms;
|
||||
cursor: pointer;
|
||||
display: inline-flex;
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
||||
}
|
||||
}
|
||||
@@ -6,3 +6,8 @@
|
||||
background-color: inherit;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.form--horizontal {
|
||||
flex-direction: row;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
.topic-posts {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 18px;
|
||||
}
|
||||
|
||||
.topic-posts__header {
|
||||
// background-color: var(--panel-bg);
|
||||
border-radius: 5px;
|
||||
padding: 21px 18px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 14px;
|
||||
}
|
||||
|
||||
.topic-posts__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.post {
|
||||
display: grid;
|
||||
grid-template-areas:
|
||||
'aside header'
|
||||
'aside content'
|
||||
'aside footer';
|
||||
grid-template-columns: 153px 1fr;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
border-radius: 5px;
|
||||
box-shadow: var(--post-shadow);
|
||||
background-color: var(--post-bg);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.post__header {
|
||||
grid-area: header;
|
||||
display: grid;
|
||||
grid-template-areas: 'datetime topic . tip-stats toolbar';
|
||||
grid-template-columns: auto auto 1fr auto auto;
|
||||
align-items: center;
|
||||
gap: 9px;
|
||||
font-size: 13px;
|
||||
color: var(--post-head-fg);
|
||||
background-color: var(--post-head-bg);
|
||||
padding-left: 9px;
|
||||
}
|
||||
|
||||
.post__datetime {
|
||||
grid-area: datetime;
|
||||
}
|
||||
|
||||
.post__topic {
|
||||
grid-area: topic;
|
||||
}
|
||||
|
||||
.post__tip-stats {
|
||||
grid-area: tip-stats;
|
||||
display: flex;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.post__tip-stats dt {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.post__tip-stats dt:after {
|
||||
content: ':';
|
||||
margin-right: 0.5ch;
|
||||
}
|
||||
|
||||
.post__toolbar {
|
||||
grid-area: toolbar;
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
background-color: var(--post-toolbar-bg);
|
||||
border-bottom-left-radius: 9px;
|
||||
overflow: hidden;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: var(--post-toolbar-fg);
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.post__toolbar-item {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.post__permalink,
|
||||
.post__quote,
|
||||
.post__edit,
|
||||
.post__delete-button,
|
||||
.votes__like,
|
||||
.votes__dislike,
|
||||
.post__tip-button {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
height: 100%;
|
||||
padding: 7px 14px;
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
min-width: 54px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.votes__like,
|
||||
.votes__dislike {
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
|
||||
.post__permalink:hover,
|
||||
.post__quote:hover,
|
||||
.post__edit:hover,
|
||||
.post__delete:hover,
|
||||
.votes__like:hover,
|
||||
.votes__dislike:hover,
|
||||
.post__tip-button:hover {
|
||||
background-color: var(--post-toolbar-hover-bg);
|
||||
}
|
||||
|
||||
.post__permalink:hover,
|
||||
.post__quote:hover,
|
||||
.post__edit:hover,
|
||||
.post__delete:hover,
|
||||
.post__tip-button:hover {
|
||||
color: var(--post-toolbar-hover-fg);
|
||||
}
|
||||
|
||||
.post__tip {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.post__tip-label {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.post__tip-input {
|
||||
margin: 5px 5px 2px 9px;
|
||||
border-width: 0 0 2px 0;
|
||||
border-style: solid;
|
||||
border-color: var(--post-toolbar-bg);
|
||||
width: 72px;
|
||||
background-color: transparent;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.post__votes {
|
||||
grid-area: votes;
|
||||
padding: 5px 9px 0;
|
||||
}
|
||||
|
||||
.votes__like {
|
||||
background-color: transparent;
|
||||
color: var(--post-like-fg);
|
||||
}
|
||||
.votes__dislike {
|
||||
background-color: transparent;
|
||||
color: var(--post-dislike-fg);
|
||||
}
|
||||
|
||||
.post__delete {
|
||||
height: 100%;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
}
|
||||
|
||||
.post__aside {
|
||||
grid-area: aside;
|
||||
padding: 9px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
background-color: var(--post-aside-bg);
|
||||
color: var(--post-aside-fg);
|
||||
}
|
||||
|
||||
.post__figure {
|
||||
margin-bottom: 9px;
|
||||
}
|
||||
|
||||
.post__avatar {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.post__author {
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.post__author-title {
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.post__author-join,
|
||||
.post__author-topics,
|
||||
.post__author-posts {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 13px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.post__author-join dt,
|
||||
.post__author-topics dt,
|
||||
.post__author-posts dt {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.post__author-join dt:after,
|
||||
.post__author-topics dt:after,
|
||||
.post__author-posts dt:after {
|
||||
content: ':';
|
||||
}
|
||||
|
||||
.post__author-join-datetime {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.post__content {
|
||||
grid-area: content;
|
||||
padding: 14px 9px 9px 9px;
|
||||
font-size: 14px;
|
||||
color: var(--post-fg);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.post__footer {
|
||||
grid-area: footer;
|
||||
border-top: 2px solid var(--post-aside-bg);
|
||||
padding: 9px;
|
||||
font-size: 13px;
|
||||
color: var(--post-footer-fg);
|
||||
}
|
||||
|
||||
.post__signature {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
/* SubForum listings
|
||||
=========================================================================== */
|
||||
|
||||
.subforum-listings {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.subforum-listings__item:nth-child(odd) {
|
||||
background-color: var(--subforum-listing-odd-bg);
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.subforum-listings__item:nth-child(even) {
|
||||
background-color: var(--subforum-listing-even-bg);
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.subforum-listing {
|
||||
display: grid;
|
||||
grid-template-areas: 'figure header topics posts latest';
|
||||
grid-template-columns: 54px 1fr 72px 72px 360px;
|
||||
align-items: center;
|
||||
gap: 0 9px;
|
||||
padding: 9px;
|
||||
color: var(--panel-fg);
|
||||
}
|
||||
|
||||
.subforum-listing__header {
|
||||
grid-area: header;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.subforum-listing__heading {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.subforum-listing__link {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.subforum-listing__description {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.subforum-listing__figure {
|
||||
grid-area: figure;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.subforum-listing__icon {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.subforum-listing__topic-stats,
|
||||
.subforum-listing__post-stats {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.subforum-listing__topic-stats dt,
|
||||
.subforum-listing__post-stats dt {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.subforum-listing__topic-stats {
|
||||
grid-area: topics;
|
||||
}
|
||||
|
||||
.subforum-listing__post-stats {
|
||||
grid-area: posts;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-topic {
|
||||
grid-area: latest;
|
||||
display: grid;
|
||||
grid-template-areas: 'heading heading' 'datetime author';
|
||||
grid-template-columns: auto 1fr;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-heading {
|
||||
grid-area: heading;
|
||||
font-size: 14px;
|
||||
white-space: nowrap;
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-datetime {
|
||||
grid-area: datetime;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-author {
|
||||
grid-area: author;
|
||||
margin: 0 0 0 0.5ch;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-author::before {
|
||||
content: '\00B7';
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1720px) {
|
||||
.subforum-listing {
|
||||
grid-template-areas:
|
||||
'figure header header latest'
|
||||
'figure topics posts latest';
|
||||
grid-template-columns: 54px auto 1fr 288px;
|
||||
}
|
||||
|
||||
.subforum-listing__topic-stats,
|
||||
.subforum-listing__post-stats {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.subforum-listing__topic-stats dt:after,
|
||||
.subforum-listing__post-stats dt:after {
|
||||
content: ':';
|
||||
margin-right: 0.5ch;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.subforum-listing {
|
||||
grid-template-areas:
|
||||
'figure header header'
|
||||
'figure topics posts'
|
||||
'figure latest latest';
|
||||
grid-template-columns: 54px auto 1fr;
|
||||
}
|
||||
|
||||
.subforum-listing__description {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.subforum-listing__latest-topic {
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
.topic-listings {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.topic-listings__item {
|
||||
&:nth-child(odd) {
|
||||
background-color: var(--subforum-listing-odd-bg);
|
||||
}
|
||||
|
||||
&:nth-child(even) {
|
||||
background-color: var(--subforum-listing-even-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.topic-listing {
|
||||
display: grid;
|
||||
grid-template-areas: 'figure header posts views latest';
|
||||
grid-template-columns: 54px 1fr 72px 72px 180px;
|
||||
align-items: center;
|
||||
gap: 0 9px;
|
||||
padding: 9px;
|
||||
color: var(--panel-fg);
|
||||
}
|
||||
|
||||
.topic-listing__header {
|
||||
grid-area: header;
|
||||
}
|
||||
|
||||
.topic-listing__heading {
|
||||
display: inline;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.topic-listing__author {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.topic-listing__figure {
|
||||
grid-area: figure;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.topic-listing__forum {
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.topic-listing__icon {
|
||||
max-width: 36px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
column-gap: 1ch;
|
||||
}
|
||||
|
||||
.topic-listing__icon abbr {
|
||||
border-bottom: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.topic-listing__post-stats,
|
||||
.topic-listing__view-stats {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.topic-listing__post-stats dt,
|
||||
.topic-listing__view-stats dt {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.topic-listing__post-stats {
|
||||
grid-area: posts;
|
||||
}
|
||||
|
||||
.topic-listing__view-stats {
|
||||
grid-area: views;
|
||||
}
|
||||
|
||||
.topic-listing__latest-post {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.topic-listing__latest-datetime {
|
||||
grid-area: datetime;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.topic-listing__latest-author {
|
||||
grid-area: author;
|
||||
margin: 0 0 0 0.5ch;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.topic-listing {
|
||||
grid-template-areas:
|
||||
'figure header header'
|
||||
'figure posts latest';
|
||||
grid-template-columns: 54px auto 1fr;
|
||||
}
|
||||
|
||||
.topic-listing__view-stats {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.topic-listing__post-stats {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.topic-listing__post-stats dt:after {
|
||||
content: ':';
|
||||
margin-right: 0.5ch;
|
||||
}
|
||||
|
||||
.topic-listing__latest-post {
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.topic-listing__latest-author {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.topic-listing__latest-datetime::before {
|
||||
content: '\00B7';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
.topic-tags {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
padding: 0 ;
|
||||
}
|
||||
|
||||
.topic-tag {
|
||||
display: inline-block;
|
||||
border-radius: 5px;
|
||||
padding: 0 8px;
|
||||
font-size: 11px;
|
||||
line-height: 18px;
|
||||
|
||||
--forum-tag-pinned-bg: transparent;
|
||||
--forum-tag-pinned-fg: inherit;
|
||||
--forum-tag-closed-bg: transparent;
|
||||
--forum-tag-closed-fg: inherit;
|
||||
--forum-tag-approved-bg: #008672;
|
||||
--forum-tag-approved-fg: #fff;
|
||||
--forum-tag-denied-bg: #fff;
|
||||
--forum-tag-denied-fg: #000;
|
||||
--forum-tag-solved-bg: #7057ff;
|
||||
--forum-tag-solved-fg: #fff;
|
||||
--forum-tag-invalid-bg: #e4e669;
|
||||
--forum-tag-invalid-fg: #000;
|
||||
--forum-tag-bug-bg: #d73a4a;
|
||||
--forum-tag-bug-fg: #fff;
|
||||
--forum-tag-suggestion-bg: #d876e3;
|
||||
--forum-tag-suggestion-fg: #000;
|
||||
--forum-tag-implemented-bg: #A2EEEF;
|
||||
--forum-tag-implemented-fg: #000;
|
||||
|
||||
|
||||
|
||||
--forum-tag-pinned-bg: transparent;
|
||||
--forum-tag-pinned-fg: inherit;
|
||||
--forum-tag-closed-bg: transparent;
|
||||
--forum-tag-closed-fg: inherit;
|
||||
--forum-tag-approved-bg: rgba(0, 134, 114, 0.18);
|
||||
--forum-tag-approved-fg: rgb(0, 230, 196);
|
||||
--forum-tag-denied-bg: rgba(255, 255, 255, 0.18);
|
||||
--forum-tag-denied-fg: #fff;
|
||||
--forum-tag-solved-bg: rgba(112, 87, 255, 0.18);
|
||||
--forum-tag-solved-fg: rgb(193, 184, 255);
|
||||
--forum-tag-invalid-bg: rgba(228, 230, 105, 0.18);
|
||||
--forum-tag-invalid-fg: rgb(229, 229, 102);
|
||||
--forum-tag-bug-bg: rgba(215, 58, 74, 0.18);
|
||||
--forum-tag-bug-fg: rgb(235, 156, 166);
|
||||
--forum-tag-suggestion-bg: rgba(216, 118, 227, 0.18);
|
||||
--forum-tag-suggestion-fg: rgb(217, 126, 229);
|
||||
--forum-tag-implemented-bg: rgba(162, 238, 239, 0.18);
|
||||
--forum-tag-implemented-fg: rgb(160, 238, 238);
|
||||
}
|
||||
|
||||
.topic-tag--pinned {
|
||||
background-color: var(--forum-tag-pinned-bg);
|
||||
color: var(--forum-tag-pinned-fg);
|
||||
}
|
||||
|
||||
.topic-tag--closed {
|
||||
background-color: var(--forum-tag-closed-bg);
|
||||
color: var(--forum-tag-closed-fg);
|
||||
}
|
||||
|
||||
.topic-tag--approved {
|
||||
background-color: var(--forum-tag-approved-bg);
|
||||
color: var(--forum-tag-approved-fg);
|
||||
}
|
||||
|
||||
.topic-tag--denied {
|
||||
background-color: var(--forum-tag-denied-bg);
|
||||
color: var(--forum-tag-denied-fg);
|
||||
}
|
||||
|
||||
.topic-tag--solved {
|
||||
background-color: var(--forum-tag-solved-bg);
|
||||
color: var(--forum-tag-solved-fg);
|
||||
}
|
||||
|
||||
.topic-tag--invalid {
|
||||
background-color: var(--forum-tag-invalid-bg);
|
||||
color: var(--forum-tag-invalid-fg);
|
||||
}
|
||||
|
||||
.topic-tag--bug {
|
||||
background-color: var(--forum-tag-bug-bg);
|
||||
color: var(--forum-tag-bug-fg);
|
||||
}
|
||||
|
||||
.topic-tag--suggestion {
|
||||
background-color: var(--forum-tag-suggestion-bg);
|
||||
color: var(--forum-tag-suggestion-fg);
|
||||
}
|
||||
|
||||
.topic-tag--implemented {
|
||||
background-color: var(--forum-tag-implemented-bg);
|
||||
color: var(--forum-tag-implemented-fg);
|
||||
}
|
||||
@@ -102,6 +102,21 @@
|
||||
--panel-head-bg: #373d43;
|
||||
--panel-head-fg: #fff;
|
||||
|
||||
--post-bg: #e9e9e9;
|
||||
--post-fg: #212121;
|
||||
--post-shadow: 0 3px 4px 0 rgba(0,0,0,0.14), 0 3px 3px -2px rgba(0,0,0,0.12), 0 1px 8px 0 rgba(0,0,0,0.20);
|
||||
--post-head-fg: var(--panel-fg);
|
||||
--post-head-bg: none;
|
||||
--post-toolbar-bg: #989898;
|
||||
--post-toolbar-fg: #e5e5e5;
|
||||
--post-toolbar-hover-bg: #777;
|
||||
--post-toolbar-hover-fg: inherit;
|
||||
--post-like-fg: green;
|
||||
--post-dislike-fg: red;
|
||||
--post-aside-bg: #d6d6d6;
|
||||
--post-aside-fg: #696969;
|
||||
--post-footer-fg: var(--panel-fg);
|
||||
|
||||
--select-border: 1px solid #555;
|
||||
--select-border-active: 2px solid #2195f3;
|
||||
--select-border-error: 1px solid #ba1b1b;
|
||||
@@ -109,6 +124,9 @@
|
||||
--select-border-radius: 5px;
|
||||
--select-fg: #444;
|
||||
|
||||
--subforum-listing-odd-bg: #ddd;
|
||||
--subforum-listing-even-bg: transparent;
|
||||
|
||||
--textarea-border: 1px solid #555;
|
||||
--textarea-border-active: 2px solid #2196f3;
|
||||
--textarea-border-error: 1px solid #ba1b1b;
|
||||
|
||||
@@ -94,6 +94,21 @@
|
||||
--panel-head-bg: #19191b;
|
||||
--panel-head-fg: #fff;
|
||||
|
||||
--post-bg: #2b2b2b;
|
||||
--post-fg: #ccc;
|
||||
--post-shadow: none;
|
||||
--post-head-fg: var(--text-color);
|
||||
--post-head-bg: none;
|
||||
--post-toolbar-bg: #242424;
|
||||
--post-toolbar-fg: #b0b0b0;
|
||||
--post-toolbar-hover-bg: #2a2a2a;
|
||||
--post-toolbar-hover-fg: inherit;
|
||||
--post-like-fg: green;
|
||||
--post-dislike-fg: red;
|
||||
--post-aside-bg: #303030;
|
||||
--post-aside-fg: #ccc;
|
||||
--post-footer-fg: var(--text-color);
|
||||
|
||||
--select-border: 1px solid #555;
|
||||
--select-border-active: 2px solid #2195f3;
|
||||
--select-border-error: 1px solid #ba1b1b;
|
||||
|
||||
@@ -117,6 +117,21 @@
|
||||
--panel-head-bg: #1c1c1c;
|
||||
--panel-head-fg: #fff;
|
||||
|
||||
--post-bg: #2b2b2b;
|
||||
--post-fg: #ccc;
|
||||
--post-shadow: none;
|
||||
--post-head-fg: var(--text-color);
|
||||
--post-head-bg: none;
|
||||
--post-toolbar-bg: #1d1d1d;
|
||||
--post-toolbar-fg: #ccc;
|
||||
--post-toolbar-hover-bg: #262626;
|
||||
--post-toolbar-hover-fg: inherit;
|
||||
--post-like-fg: green;
|
||||
--post-dislike-fg: red;
|
||||
--post-aside-bg: #393939;
|
||||
--post-aside-fg: #ccc;
|
||||
--post-footer-fg: var(--text-color);
|
||||
|
||||
--select-border: 1px solid #555;
|
||||
--select-border-active: 2px solid #2195f3;
|
||||
--select-border-error: 1px solid #ba1b1b;
|
||||
|
||||
@@ -22,75 +22,5 @@
|
||||
@section('page', 'page__notes-log--index')
|
||||
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('staff.user-notes') }}</h2>
|
||||
<div class="data-table-wrapper">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>{{ __('common.user') }}</th>
|
||||
<th>{{ __('common.staff') }}</th>
|
||||
<th>{{ __('common.message') }}</th>
|
||||
<th>{{ __('user.created-on') }}</th>
|
||||
<th>{{ __('common.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($notes as $note)
|
||||
<tr>
|
||||
<td>{{ $note->id }}</td>
|
||||
<td>
|
||||
<x-user_tag :anon="false" :user="$note->noteduser" />
|
||||
</td>
|
||||
<td>
|
||||
<x-user_tag :anon="false" :user="$note->staffuser" />
|
||||
</td>
|
||||
<td>{{ $note->message }}</td>
|
||||
<td>
|
||||
<time datetime="{{ $note->created_at }}" title="{{ $note->created_at }}">
|
||||
{{ $note->created_at->diffForHumans() }}
|
||||
</time>
|
||||
</td>
|
||||
<td>
|
||||
<menu class="data-table__actions">
|
||||
<li class="data-table__action">
|
||||
<form
|
||||
action="{{ route('staff.notes.destroy', ['id' => $note->id]) }}"
|
||||
method="POST"
|
||||
x-data
|
||||
>
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button
|
||||
x-on:click.prevent="Swal.fire({
|
||||
title: 'Are you sure?',
|
||||
text: 'Are you sure you want to delete this note: {{ $note->message }}?',
|
||||
icon: 'warning',
|
||||
showConfirmButton: true,
|
||||
showCancelButton: true,
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
$root.submit();
|
||||
}
|
||||
})"
|
||||
class="form__button form__button--text"
|
||||
>
|
||||
{{ __('common.delete') }}
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
</menu>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="6">No notes</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{ $notes->links('partials.pagination') }}
|
||||
</section>
|
||||
@livewire('note-search')
|
||||
@endsection
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
@props([
|
||||
'post' => (object) [
|
||||
'id' => 1,
|
||||
'topic' => (object) [
|
||||
'id' => 1,
|
||||
'name' => '',
|
||||
'state' => 'closed',
|
||||
'tips' => [
|
||||
(object) ['cost' => 0],
|
||||
],
|
||||
],
|
||||
'page' => -1,
|
||||
'created_at' => '',
|
||||
'user' => [
|
||||
'id' => 1,
|
||||
'image' => null,
|
||||
'group' => (object) [
|
||||
'color' => '',
|
||||
'effect' => '',
|
||||
'group' => '',
|
||||
'icon' => '',
|
||||
],
|
||||
'posts' => [],
|
||||
'signature' => '',
|
||||
'title' => '',
|
||||
'topics' => [],
|
||||
'username' => '',
|
||||
],
|
||||
'content' => '',
|
||||
],
|
||||
])
|
||||
|
||||
<article class="post" id="post-{{ $post->id }}">
|
||||
<header class="post__header">
|
||||
<time
|
||||
class="post__datetime"
|
||||
datetime="{{ $post->created_at }}"
|
||||
title="{{ $post->created_at }}"
|
||||
>
|
||||
{{ $post->created_at?->diffForHumans() }}
|
||||
</time>
|
||||
@if (! Route::is('forum_topic'))
|
||||
<span class="post__topic">
|
||||
{{ __('forum.in') }}
|
||||
<a href="{{ route('forum_topic', ['id' => $post->topic->id]) }}">{{ $post->topic->name }}</a>
|
||||
</span>
|
||||
@endif
|
||||
@if($post->tips?->sum('cost') > 0)
|
||||
<dl class="post__tip-stats">
|
||||
<dt>{{ __('torrent.bon-tipped') }}</dt>
|
||||
<dd>{{ $post->tips?->sum('cost') ?? 0 }}</dd>
|
||||
</dl>
|
||||
@endif
|
||||
<menu class="post__toolbar">
|
||||
<li class="post__toolbar-item">
|
||||
<form
|
||||
class="post__tip"
|
||||
role="form"
|
||||
method="POST"
|
||||
action="{{ route('tips.store', ['username' => auth()->user()->username]) }}"
|
||||
>
|
||||
@csrf
|
||||
<input type="hidden" name="recipient" value="{{ $post->user->id }}">
|
||||
<input type="hidden" name="post" value="{{ $post->id }}">
|
||||
<input
|
||||
class="post__tip-input"
|
||||
inputmode="numeric"
|
||||
list="quick-tip-values"
|
||||
name="tip"
|
||||
pattern="[0-9]*"
|
||||
placeholder="0"
|
||||
type="text"
|
||||
value="0"
|
||||
>
|
||||
<button class="post__tip-button" type="submit" title="{{ __('forum.tip-this-post') }}">
|
||||
Tip
|
||||
</button>
|
||||
<datalist id="quick-tip-values">
|
||||
<option value="10">
|
||||
<option value="20">
|
||||
<option value="50">
|
||||
<option value="100">
|
||||
<option value="200">
|
||||
<option value="500">
|
||||
<option value="1000">
|
||||
</datalist>
|
||||
</form>
|
||||
</li>
|
||||
<li class="post__toolbar-item">
|
||||
@livewire('like-button', ['post' => $post->id])
|
||||
</li>
|
||||
<li class="post__toolbar-item">
|
||||
@livewire('dislike-button', ['post' => $post->id])
|
||||
</li>
|
||||
<li class="post__toolbar-item">
|
||||
<a
|
||||
class="post__permalink"
|
||||
href="{{ route('forum_topic', ['id' => $post->topic->id]) }}?page={{ $post->getPageNumber() }}#post-{{ $post->id }}"
|
||||
title="{{ __('forum.permalink') }}"
|
||||
>
|
||||
<i class="{{ \config('other.font-awesome') }} fa-link"></i>
|
||||
</a>
|
||||
</li>
|
||||
@if (auth()->user()->group->is_modo || $post->topic->state === 'open')
|
||||
<li class="post__toolbar-item">
|
||||
<button
|
||||
class="post__quote"
|
||||
title="{{ __('forum.quote') }}"
|
||||
x-data
|
||||
x-on:click="
|
||||
document.getElementById('forum_reply_form').style.display = 'block';
|
||||
input = document.getElementById('bbcode-content');
|
||||
input.value += '[quote={{ \htmlspecialchars('@'.$post->user->username) }}]{{ \htmlspecialchars($post->content) }}[/quote]';
|
||||
input.dispatchEvent(new Event('input'));
|
||||
input.focus();
|
||||
"
|
||||
>
|
||||
<i class="{{ \config('other.font-awesome') }} fa-quote-left"></i>
|
||||
</button>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo || $post->user->id === auth()->user()->id)
|
||||
<li class="post__toolbar-item">
|
||||
<a
|
||||
class="post__edit"
|
||||
href="{{ route('forum_post_edit_form', ['id' => $post->topic->id, 'postId' => $post->id]) }}"
|
||||
title="{{ __('common.edit') }}"
|
||||
>
|
||||
<i class="{{ \config('other.font-awesome') }} fa-pencil"></i>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo || ($post->user->id === auth()->user()->id && $post->topic->state === 'open'))
|
||||
<li class="post__toolbar-item">
|
||||
<form
|
||||
class="post__delete"
|
||||
role="form"
|
||||
method="POST"
|
||||
action="{{ route('forum_post_delete', ['id' => $post->topic->id, 'postId' => $post->id]) }}"
|
||||
>
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button
|
||||
class="post__delete-button"
|
||||
type="submit"
|
||||
title="{{ __('common.delete') }}"
|
||||
>
|
||||
<i class="{{ \config('other.font-awesome') }} fa-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
@endif
|
||||
</menu>
|
||||
</header>
|
||||
<aside class="post__aside">
|
||||
<figure class="post__figure">
|
||||
<img
|
||||
class="post__avatar"
|
||||
src="{{ url($post->user->image === null ? 'img/profile.png' : 'files/img/'.$post->user->image) }}"
|
||||
alt=""
|
||||
>
|
||||
</figure>
|
||||
<x-user_tag
|
||||
class="post__author"
|
||||
:anon="false"
|
||||
:user="$post->user"
|
||||
>
|
||||
<x-slot:appended-icons>
|
||||
@if ($post->user->isOnline())
|
||||
<i class="{{ config('other.font-awesome') }} fa-circle text-green" title="Online"></i>
|
||||
@else
|
||||
<i class="{{ config('other.font-awesome') }} fa-circle text-red" title="Offline"></i>
|
||||
@endif
|
||||
<a href="{{ route('create', ['receiver_id' => $post->user->id, 'username' => $post->user->username]) }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-envelope text-info"></i>
|
||||
</a>
|
||||
</x-slot>
|
||||
</x-user_tag>
|
||||
@if (! empty($post->user->title))
|
||||
<p class="post__author-title">
|
||||
{{ $post->user->title }}
|
||||
</p>
|
||||
@endif
|
||||
<dl class="post__author-join">
|
||||
<dt>Joined</dt>
|
||||
<dd>
|
||||
<time
|
||||
class="post__author-join-datetime"
|
||||
datetime="{{ $post->user->created_at }}"
|
||||
title="{{ $post->user->created_at }}"
|
||||
>
|
||||
{{ date('d M Y', $post->user->created_at?->getTimestamp() ?? '') }}
|
||||
</time>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="post__author-topics">
|
||||
<dt>
|
||||
<a href="{{ route('user_topics', ['username' => $post->user->username]) }}">
|
||||
{{ __('forum.topics') }}
|
||||
</a>
|
||||
</dt>
|
||||
<dd>{{ $post->user->topics?->count() ?? '0' }}</dd>
|
||||
</dl>
|
||||
<dl class="post__author-posts">
|
||||
<dt>
|
||||
<a href="{{ route('user_posts', ['username' => $post->user->username]) }}">
|
||||
{{ __('forum.posts') }}
|
||||
</a>
|
||||
</dt>
|
||||
<dd>{{ $post->user->posts?->count() ?? '0' }}</dd>
|
||||
</dl>
|
||||
</aside>
|
||||
<div
|
||||
class="post__content"
|
||||
data-bbcode="{{ $post->content }}"
|
||||
>
|
||||
@joypixels($post->getContentHtml())
|
||||
</div>
|
||||
@if (! empty($post->user->signature))
|
||||
<footer class="post__footer" x-init>
|
||||
<p class="post__signature">
|
||||
{!! $post->user->getSignature() !!}
|
||||
</p>
|
||||
</footer>
|
||||
@endif
|
||||
</article>
|
||||
@@ -0,0 +1,69 @@
|
||||
@props([
|
||||
'subforum' => (object) [
|
||||
'name' => '',
|
||||
'id' => 0,
|
||||
'description' => '',
|
||||
'num_topic' => 0,
|
||||
'num_post' => 0,
|
||||
'last_topic_id' => null,
|
||||
'last_topic_name' => null,
|
||||
'last_post_user_username' => null,
|
||||
'updated_at' => '',
|
||||
]
|
||||
])
|
||||
|
||||
<article class="subforum-listing">
|
||||
<header class="subforum-listing__header">
|
||||
<h3 class="subforum-listing__heading">
|
||||
<a
|
||||
class="subforum-listing__link"
|
||||
href="{{ route('forums.show', ['id' => $subforum->id]) }}"
|
||||
>
|
||||
{{ $subforum->name }}
|
||||
</a>
|
||||
</h3>
|
||||
<p class="subforum-listing__description">
|
||||
{{ $subforum->description }}
|
||||
</p>
|
||||
</header>
|
||||
<figure class="subforum-listing__figure">
|
||||
<i class="fad fa-comments subforum-listing__icon"></i>
|
||||
</figure>
|
||||
<dl class="subforum-listing__topic-stats">
|
||||
<dt>{{ __('forum.topics') }}</dt>
|
||||
<dd>{{ $subforum->num_topic ?: 0 }}</dd>
|
||||
</dl>
|
||||
<dl class="subforum-listing__post-stats">
|
||||
<dt>{{ __('forum.posts') }}</dt>
|
||||
<dd>{{ $subforum->num_post ?: 0 }}</dd>
|
||||
</dl>
|
||||
<article class="subforum-listing__latest-topic">
|
||||
@if ($subforum->last_topic_id !== null && $subforum->last_topic_name !== null)
|
||||
<p class="subforum-listing__latest-heading">
|
||||
<a
|
||||
class="subforum-listing__latest-link"
|
||||
href="{{ route('forum_topic', ['id' => $subforum->last_topic_id ?? 1]) }}"
|
||||
>
|
||||
{{ $subforum->last_topic_name }}
|
||||
</a>
|
||||
</p>
|
||||
@endif
|
||||
<time
|
||||
class="subforum-listing__latest-datetime"
|
||||
datetime="{{ $subforum->updated_at }}"
|
||||
title="{{ $subforum->updated_at }}"
|
||||
>
|
||||
{{ $subforum->updated_at?->diffForHumans() ?? __('common.unknown') }}
|
||||
</time>
|
||||
@if ($subforum->last_topic_id !== null && $subforum->last_post_user_username !== null)
|
||||
<address class="subforum-listing__latest-author">
|
||||
<a
|
||||
class="subforum-listing__latest-author-link"
|
||||
href="{{ route('users.show', ['username' => $subforum->last_post_user_username]) }}"
|
||||
>
|
||||
{{ $subforum->last_post_user_username }}
|
||||
</a>
|
||||
</address>
|
||||
@endif
|
||||
</article>
|
||||
</article>
|
||||
@@ -0,0 +1,110 @@
|
||||
@props([
|
||||
'topic' => (object) [
|
||||
'name' => '',
|
||||
'id' => 1,
|
||||
'first_post_user_username' => 'System',
|
||||
'num_post' => 0,
|
||||
'views' => 0,
|
||||
'pinned' => false,
|
||||
'state' => 'close',
|
||||
'approved' => false,
|
||||
'denied' => false,
|
||||
'solved' => false,
|
||||
'invalid' => false,
|
||||
'bug' => false,
|
||||
'suggestion' => false,
|
||||
'implemented' => false,
|
||||
'last_post_user_username' => 'System',
|
||||
'last_reply_at' => null,
|
||||
'forum' => (object) [
|
||||
'name' => '',
|
||||
],
|
||||
],
|
||||
])
|
||||
|
||||
<article class="topic-listing">
|
||||
<header class="topic-listing__header">
|
||||
<h2 class="topic-listing__heading">
|
||||
<a
|
||||
class="topic-listing__link"
|
||||
href="{{ route('forum_topic', ['id' => $topic->id]) }}"
|
||||
>
|
||||
{{ $topic->name }}
|
||||
</a>
|
||||
</h2>
|
||||
<ul class="topic-tags">
|
||||
@if ($topic->approved)
|
||||
<li class="topic-tag topic-tag--approved">{{ __('forum.approved') }}</li>
|
||||
@endif
|
||||
@if ($topic->denied)
|
||||
<li class="topic-tag topic-tag--denied">{{ __('forum.denied') }}</li>
|
||||
@endif
|
||||
@if ($topic->solved)
|
||||
<li class="topic-tag topic-tag--solved">{{ __('forum.solved') }}</li>
|
||||
@endif
|
||||
@if ($topic->invalid)
|
||||
<li class="topic-tag topic-tag--invalid">{{ __('forum.invalid') }}</li>
|
||||
@endif
|
||||
@if ($topic->bug)
|
||||
<li class="topic-tag topic-tag--bug">{{ __('forum.bug') }}</li>
|
||||
@endif
|
||||
@if ($topic->suggestion)
|
||||
<li class="topic-tag topic-tag--suggestion">{{ __('forum.suggestion') }}</li>
|
||||
@endif
|
||||
@if ($topic->implemented)
|
||||
<li class="topic-tag topic-tag--implemented">{{ __('forum.implemented') }}</li>
|
||||
@endif
|
||||
</ul>
|
||||
<address class="topic-listing__author">
|
||||
<a href="{{ route('users.show', ['username' => $topic->first_post_user_username]) }}">
|
||||
{{ $topic->first_post_user_username }}
|
||||
</a>
|
||||
</address>
|
||||
</header>
|
||||
<figure class="topic-listing__figure">
|
||||
@if ($topic->pinned || $topic->state === 'close')
|
||||
<span class="topic-listing__icon">
|
||||
@if ($topic->pinned)
|
||||
<abbr title="{{ __('common.sticked') }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbtack"></i>
|
||||
</abbr>
|
||||
@endif
|
||||
@if ($topic->state === 'close')
|
||||
<abbr title="{{ __('user.locked') }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-lock"></i>
|
||||
</abbr>
|
||||
@endif
|
||||
</span>
|
||||
@else
|
||||
<i class="fad fa-comments topic-listing__icon"></i>
|
||||
@endif
|
||||
<figcaption class="topic-listing__forum">
|
||||
{{ $topic->forum->name }}
|
||||
</figcaption>
|
||||
</figure>
|
||||
<dl class="topic-listing__post-stats">
|
||||
<dt>{{ __('forum.replies') }}</dt>
|
||||
<dd>{{ $topic->num_post - 1 }}</dd>
|
||||
</dl>
|
||||
<dl class="topic-listing__view-stats">
|
||||
<dt>{{ __('forum.views') }}</dt>
|
||||
<dd>{{ $topic->views }}</dd>
|
||||
</dl>
|
||||
<article class="topic-listing__latest-post">
|
||||
<address class="topic-listing__latest-author">
|
||||
<a
|
||||
class="topic-listing__latest-author-link"
|
||||
href="{{ route('users.show', ['username' => $topic->last_post_user_username]) }}"
|
||||
>
|
||||
{{ $topic->last_post_user_username }}
|
||||
</a>
|
||||
</address>
|
||||
<time
|
||||
class="topic-listing__latest-datetime"
|
||||
datetime="{{ $topic->last_reply_at ?? '' }}"
|
||||
title="{{ $topic->last_reply_at ?? '' }}"
|
||||
>
|
||||
{{ $topic->last_reply_at?->diffForHumans() ?? __('common.unknown') }}
|
||||
</time>
|
||||
</article>
|
||||
</article>
|
||||
@@ -23,109 +23,48 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="container box">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="updated_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<input type="hidden" name="category" value="{{ $forum->id }}">
|
||||
<label for="name"></label>
|
||||
<input type="text" name="name" id="name"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder="{{ __('forum.category-quick-search') }}" class="form-control">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="6" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ $forum->name }}</h1>
|
||||
<div class="text-center some-padding">{{ $forum->description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($topics as $t)
|
||||
<tr>
|
||||
@if ($t->pinned == 0)
|
||||
<td class="f-display-topic-icon"><img src="{{ url('img/f_icon_read.png') }}" alt="read">
|
||||
</td>
|
||||
@else
|
||||
<td class="f-display-topic-icon"><span class="text-green"><i
|
||||
class="{{ config('other.font-awesome') }} fa-thumbtack fa-2x"></i></span>
|
||||
</td>
|
||||
@endif
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $t->forum->name }}</span>
|
||||
</td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a href="{{ route('forum_topic', ['id' => $t->id]) }}">{{ $t->name }}</a></strong>
|
||||
@if ($t->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($t->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($t->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($t->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($t->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($t->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($t->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@endif
|
||||
@if ($t->implemented == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.implemented')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $t->first_post_user_username]) }}">{{ $t->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $t->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $t->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
@php $last_post = DB::table('posts')->where('topic_id', '=', $t->id)->orderBy('id',
|
||||
'desc')->first() @endphp
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $t->last_post_user_username]) }}">{{ $t->last_post_user_username }}</a>
|
||||
on
|
||||
<time datetime="{{ date('M d Y', strtotime($last_post->created_at ?? 'UNKNOWN')) }}">
|
||||
{{ date('M d Y', strtotime($last_post->created_at ?? 'UNKNOWN')) }}
|
||||
</time>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $topics->links() }}
|
||||
</div>
|
||||
@section('page', 'page__forum--category')
|
||||
|
||||
@include('forum.stats')
|
||||
</div>
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ $forum->description }}</h2>
|
||||
<ul class="topic-listings">
|
||||
@foreach ($topics as $topic)
|
||||
<li class="topic-listings__item">
|
||||
<x-forum.topic-listing :topic="$topic" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
{{ $topics->links('partials.pagination') }}
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.category-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<input type="hidden" name="sorting" value="updated_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<input type="hidden" name="category" value="{{ $forum->id }}">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">
|
||||
{{ __('forum.topic-name') }}
|
||||
</label>
|
||||
</p>
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
|
||||
@@ -23,136 +23,85 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="container box">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<input type="hidden" name="category" value="{{ $forum->id }}">
|
||||
<label for="name"></label>
|
||||
<input type="text" name="name" id="name"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder="{{ __('forum.category-quick-search') }}" class="form-control">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
@section('page', 'page__forum--display')
|
||||
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<header class="panel__header">
|
||||
<h2 class="panel__heading">{{ $forum->description }}</h2>
|
||||
<div class="panel__actions">
|
||||
@if ($category->getPermission()->start_topic == true)
|
||||
<a
|
||||
href="{{ route('forum_new_topic_form', ['id' => $forum->id]) }}"
|
||||
class="panel__action form__button form__button--text"
|
||||
>
|
||||
{{ __('forum.create-new-topic') }}
|
||||
</a>
|
||||
@endif
|
||||
@if ($category->getPermission()->show_forum == true)
|
||||
@if (auth()->user()->subscriptions()->ofForum($forum->id)->exists())
|
||||
<form
|
||||
class="panel__action"
|
||||
action="{{ route('unsubscribe_forum', ['forum' => $forum->id, 'route' => 'forum']) }}"
|
||||
method="POST"
|
||||
>
|
||||
@csrf
|
||||
<button class="panel__action form__button form__button--text">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i>
|
||||
{{ __('forum.unsubscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form
|
||||
class="panel__action"
|
||||
action="{{ route('subscribe_forum', ['forum' => $forum->id, 'route' => 'forum']) }}"
|
||||
method="POST"
|
||||
>
|
||||
@csrf
|
||||
<button class="panel__action form__button form__button--text">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i>
|
||||
{{ __('forum.subscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ $forum->name }}</h1>
|
||||
<div class="text-center some-padding">{{ $forum->description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<div class="button-holder">
|
||||
<div class="button-left"></div>
|
||||
<div class="button-right">
|
||||
@if ($category->getPermission()->start_topic == true)
|
||||
<a href="{{ route('forum_new_topic_form', ['id' => $forum->id]) }}"
|
||||
class="btn btn-sm btn-primary">{{ __('forum.create-new-topic') }}</a>
|
||||
@endif
|
||||
@if ($category->getPermission()->show_forum == true)
|
||||
@if (auth()->user()->subscriptions()->ofForum($forum->id)->exists())
|
||||
<form action="{{ route('unsubscribe_forum', ['forum' => $forum->id, 'route' => 'forum']) }}"
|
||||
method="POST" style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-sm btn-danger">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i> {{ __('forum.unsubscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('subscribe_forum', ['forum' => $forum->id, 'route' => 'forum']) }}"
|
||||
method="POST" style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-sm btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i> {{ __('forum.subscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($topics as $t)
|
||||
<tr>
|
||||
@if ($t->pinned == 0)
|
||||
<td class="f-display-topic-icon"><img src="{{ url('img/f_icon_read.png') }}" alt="read">
|
||||
</td>
|
||||
@else
|
||||
<td class="f-display-topic-icon"><span class="text-green"><i
|
||||
class="{{ config('other.font-awesome') }} fa-thumbtack fa-2x"></i></span>
|
||||
</td>
|
||||
@endif
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a href="{{ route('forum_topic', ['id' => $t->id]) }}">{{ $t->name }}</a></strong>
|
||||
@if ($t->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($t->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($t->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($t->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($t->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($t->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($t->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@endif
|
||||
@if ($t->implemented == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.implemented')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $t->first_post_user_username]) }}">{{ $t->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $t->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $t->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $t->last_post_user_username]) }}">{{ $t->last_post_user_username }}</a>
|
||||
on
|
||||
<time datetime="{{ optional($t->last_reply_at)->format('M d Y') ?? 'UNKNOWN' }}">
|
||||
{{ optional($t->last_reply_at)->format('M d Y') ?? 'UNKNOWN' }}
|
||||
</time>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $topics->links() }}
|
||||
</div>
|
||||
@include('forum.stats')
|
||||
</div>
|
||||
</header>
|
||||
<ul class="topic-listings">
|
||||
@foreach($topics as $topic)
|
||||
<li class="topic-listings__item">
|
||||
<x-forum.topic-listing :topic="$topic" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
{{ $topics->links('partials.pagination') }}
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.category-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<input type="hidden" name="category" value="{{ $forum->id }}">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">{{ __('forum.topic-name') }}</label>
|
||||
</p>
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
|
||||
@@ -28,37 +28,41 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="forum box container">
|
||||
<div class="col-md-12">
|
||||
<h2><span>{{ __('forum.edit-topic') }}</span></h2>
|
||||
<form role="form" method="POST" action="{{ route('forum_edit_topic', ['id' => $topic->id]) }}">
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.edit-topic') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" method="POST" action="{{ route('forum_edit_topic', ['id' => $topic->id]) }}">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="forum_name">{{ __('forum.topic-name') }}</label>
|
||||
<label for="name"></label><input id="name" type="text" name="name" maxlength="75"
|
||||
class="form-control"
|
||||
placeholder="{{ __('forum.topic-title') }}" value="{{ $topic->name }}"
|
||||
required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="forum_id">{{ __('forum.forum') }}</label>
|
||||
<label>
|
||||
<select name="forum_id" class="form-control">
|
||||
<option value="{{ $topic->forum_id }}" selected>{{ $topic->forum->name }}
|
||||
({{ __('forum.current') }})
|
||||
</option>
|
||||
@foreach ($categories as $c)
|
||||
<option value="{{ $c->id }}">{{ $c->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="forum_name"
|
||||
class="form__text"
|
||||
maxlength="75"
|
||||
name="name"
|
||||
placeholder=""
|
||||
required
|
||||
type="text"
|
||||
value="{{ $topic->name }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="forum_name">
|
||||
{{ __('forum.topic-name') }}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<button type="submit" name="post" value="true" id="post"
|
||||
class="btn btn-primary">{{ __('forum.edit-topic') }}</button>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<select id="forum_id" name="forum_id" class="form__select">
|
||||
@foreach ($categories as $category)
|
||||
<option value="{{ $category->id }}" @selected($topic->forum_id === $category->id )>
|
||||
{{ $category->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="forum_id">{{ __('forum.forum') }}</label>
|
||||
</p>
|
||||
<button class="form__button form__button--filled" name="post" value="true" id="post">
|
||||
{{ __('forum.edit-topic') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@@ -18,108 +18,55 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<label for="name"></label>
|
||||
<input type="text" name="name" id="name"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder="{{ __('forum.topic-quick-search') }}" class="form-control">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null && $category->getPermission()->show_forum == true &&
|
||||
$category->getForumsInCategory()->count() > 0)
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ $category->name }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<div class="button-holder">
|
||||
<div class="button-left"></div>
|
||||
<div class="button-right">
|
||||
<a href="{{ route('forums.categories.show', ['id' => $category->id]) }}"
|
||||
class="btn btn-sm btn-primary">{{ __('forum.view-all') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th class="text-left">{{ strtoupper(__('forum.name')) }}</th>
|
||||
<th class="text-left">{{ strtoupper(__('forum.posts')) }}</th>
|
||||
<th class="text-left">{{ strtoupper(__('forum.topics')) }}</th>
|
||||
<th class="text-left">{{ strtoupper(__('forum.latest')) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as $categoryChild)
|
||||
@if ($categoryChild->getPermission() != null && $categoryChild->getPermission()->show_forum == true)
|
||||
<tr>
|
||||
<td><img src="{{ url('img/forum.png') }}" alt="forum"></td>
|
||||
<td>
|
||||
<span>
|
||||
<h4><a href="{{ route('forums.show', ['id' => $categoryChild->id]) }}"><span
|
||||
class="text-bold">{{ $categoryChild->name }}</span></a></h4>
|
||||
</span>
|
||||
<span class="">{{ $categoryChild->description }}</span>
|
||||
</td>
|
||||
<td>{{ $categoryChild->num_post }}</td>
|
||||
<td>{{ $categoryChild->num_topic }}</td>
|
||||
<td>
|
||||
<span>
|
||||
<span>{{ __('forum.last-message') }} - {{ strtolower(__('forum.author')) }}</span>
|
||||
<i class="{{ config('other.font-awesome') }} fa-user"></i>
|
||||
@if ($categoryChild->last_post_user_username !== null)
|
||||
<a href="{{ route('users.show', ['username' => $categoryChild->last_post_user_username]) }}">
|
||||
{{ $categoryChild->last_post_user_username }}
|
||||
</a>
|
||||
@endif
|
||||
</span>
|
||||
<br>
|
||||
<span>
|
||||
<span>{{ __('forum.topic') }}</span>
|
||||
<i class="{{ config('other.font-awesome') }} fa-chevron-right"></i>
|
||||
@if ($categoryChild->last_topic_id !== null)
|
||||
<a href="{{ route('forum_topic', ['id' => $categoryChild->last_topic_id]) }}">
|
||||
{{ $categoryChild->last_topic_name }}</a>
|
||||
@endif
|
||||
</span>
|
||||
<br>
|
||||
<span>
|
||||
<span><i class="{{ config('other.font-awesome') }} fa-clock"></i></span>
|
||||
{{ $categoryChild->updated_at->diffForHumans() }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
@endif
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@include('forum.stats')
|
||||
</div>
|
||||
@section('page', 'page__forums--index')
|
||||
|
||||
@section('main')
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null && $category->getPermission()->show_forum == true &&
|
||||
$category->getForumsInCategory()->count() > 0)
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">
|
||||
<a class="panel__header-link" href="{{ route('forums.categories.show', ['id' => $category->id]) }}">
|
||||
{{ $category->name }}
|
||||
</a>
|
||||
</h2>
|
||||
<ul class="subforum-listings">
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as $subforum)
|
||||
@if ($subforum->getPermission() != null && $subforum->getPermission()->show_forum == true)
|
||||
<li class="subforum-listings__item">
|
||||
<x-forum.subforum-listing :subforum="$subforum" />
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</section>
|
||||
@endif
|
||||
@endforeach
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.topic-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder=""
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">{{ __('forum.topic-name') }}</label>
|
||||
</p>
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
|
||||
@@ -23,114 +23,47 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<label>
|
||||
<input type="text" name="body"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
placeholder="{{ __('forum.post-quick-search') }}" class="form-control">
|
||||
</label>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ __('common.latest-posts') }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($results as $r)
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $r->topic->forum->name }}</span></td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a
|
||||
href="{{ route('forum_topic', ['id' => $r->topic->id]) }}">{{ $r->topic->name }}</a></strong>
|
||||
@if ($r->topic->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($r->topic->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($r->topic->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($r->topic->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($r->topic->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($r->topic->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($r->topic->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $r->topic->first_post_user_username]) }}">{{ $r->topic->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $r->topic->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $r->topic->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $r->topic->last_post_user_username]) }}">{{ $r->topic->last_post_user_username }}</a>,
|
||||
<time datetime="{{ date('d-m-Y h:m', strtotime($r->topic->updated_at)) }}">
|
||||
{{ date('M d Y', strtotime($r->topic->updated_at)) }}
|
||||
</time>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5" class="some-padding button-padding">
|
||||
<div class="topic-posts button-padding">
|
||||
<div class="post" id="post-{{ $r->id }}">
|
||||
<div class="button-holder">
|
||||
<div class="button-left">
|
||||
<a href="{{ route('users.show', ['username' => $r->user->username]) }}"
|
||||
class="post-info-username"
|
||||
style="color:{{ $r->user->group->color }}; display:inline;">{{ $r->user->username }}</a>
|
||||
@ {{ date('M d Y h:i:s', $r->created_at->getTimestamp()) }}
|
||||
</div>
|
||||
<div class="button-right">
|
||||
<a class="text-bold"
|
||||
href="{{ route('forum_topic', ['id' => $r->topic->id]) }}?page={{ $r->getPageNumber() }}#post-{{ $r->id }}">#{{ $r->id }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="some-margin">
|
||||
@joypixels($r->getContentHtml())
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $results->links() }}
|
||||
</div>
|
||||
@include('forum.stats')
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('common.latest-posts') }}</h2>
|
||||
</section>
|
||||
<div class="panel__body">
|
||||
<ul class="topic-posts">
|
||||
@foreach ($results as $post)
|
||||
<li class="post-listings__item">
|
||||
<x-forum.post :post="$post" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
{{ $results->links('partials.pagination') }}
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.post-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="body"
|
||||
class="form__text"
|
||||
name="body"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="body">
|
||||
{{ __('forum.forums-post-search') }}
|
||||
</label>
|
||||
</p>
|
||||
<button type="submit" class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
|
||||
@@ -22,101 +22,45 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<label for="name"></label><input type="text" name="name" id="name"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder="{{ __('forum.topic-quick-search') }}"
|
||||
class="form-control">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ __('common.latest-topics') }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($results as $r)
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $r->forum->name }}</span>
|
||||
</td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a href="{{ route('forum_topic', ['id' => $r->id]) }}">{{ $r->name }}</a></strong>
|
||||
@if ($r->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($r->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($r->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($r->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($r->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($r->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($r->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@endif
|
||||
@if ($r->implemented == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.implemented')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $r->first_post_user_username]) }}">{{ $r->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $r->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $r->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $r->last_post_user_username]) }}">{{ $r->last_post_user_username }}</a>,
|
||||
@if($r->last_reply_at && $r->last_reply_at != null)
|
||||
<time datetime="{{ date('d-m-Y h:m', strtotime($r->last_reply_at)) }}">
|
||||
{{ date('M d Y', strtotime($r->last_reply_at)) }}
|
||||
</time>
|
||||
@else
|
||||
<time datetime="N/A">
|
||||
N/A
|
||||
</time>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $results->links() }}
|
||||
</div>
|
||||
@include('forum.stats')
|
||||
</div>
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('common.latest-topics') }}</h2>
|
||||
<ul class="topic-listings">
|
||||
@foreach ($results as $topic)
|
||||
<li class="topic-listings__item">
|
||||
<x-forum.topic-listing :topic="$topic" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
{{ $results->links('partials.pagination') }}
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.topic-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">
|
||||
{{ __('forum.topic-name') }}
|
||||
</label>
|
||||
</p>
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
@@ -29,43 +29,29 @@
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="forum box container">
|
||||
<div class="col-md-12">
|
||||
<h2><span>{{ __('forum.create-new-topic') }}</span><span id="thread-title">{{ $title }}</span></h2>
|
||||
<form role="form" method="POST" action="{{ route('forum_new_topic', ['id' => $forum->id]) }}">
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.create-new-topic') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" method="POST" action="{{ route('forum_new_topic', ['id' => $forum->id]) }}">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="input-thread-title"></label><input id="input-thread-title" type="text" name="title"
|
||||
maxlength="75" class="form-control"
|
||||
placeholder="{{ __('forum.topic-title') }}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="new-thread-content"></label>
|
||||
<textarea id="new-thread-content" name="content" cols="30" rows="10"
|
||||
class="form-control"></textarea>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">{{ __('forum.send-new-topic') }}</button>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="input-thread-title"
|
||||
class="form__text"
|
||||
maxlength="75"
|
||||
name="title"
|
||||
placeholder=""
|
||||
type="text"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="input-thread-title">
|
||||
{{ __('forum.topic-title') }}
|
||||
</label>
|
||||
</p>
|
||||
@livewire('bbcode-input', ['name' => 'content', 'label' => __('forum.post') ])
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('forum.send-new-topic') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('javascripts')
|
||||
<script nonce="{{ HDVinnie\SecureHeaders\SecureHeaders::nonce('script') }}">
|
||||
$(document).ready(function () {
|
||||
const title = '{{ $title }}'
|
||||
if (title.length != 0) {
|
||||
$('#thread-title').text(': ' + title)
|
||||
}
|
||||
|
||||
$('#input-thread-title').on('input', function () {
|
||||
$('#thread-title').text(': ' + $('#input-thread-title').val())
|
||||
})
|
||||
|
||||
$('#new-thread-content').wysibb({})
|
||||
})
|
||||
|
||||
</script>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@@ -35,19 +35,17 @@
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="forum box container">
|
||||
<div class="col-md-12">
|
||||
<h2>{{ __('common.edit') }} {{ __('forum.post') }} {{ strtolower(__('forum.in')) }}
|
||||
: {{ $forum->name }}</h2>
|
||||
<form role="form" method="POST"
|
||||
action="{{ route('forum_post_edit', ['id' => $topic->id, 'postId' => $post->id]) }}">
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">
|
||||
{{ __('common.edit') }} {{ __('forum.post') }} {{ strtolower(__('forum.in')) }}: {{ $forum->name }}
|
||||
</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" method="POST" action="{{ route('forum_post_edit', ['id' => $topic->id, 'postId' => $post->id]) }}">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="content"></label>
|
||||
<textarea id="editor" name="content" cols="30" rows="10"
|
||||
class="form-control">{{ $post->content }}</textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ __('common.submit') }}</button>
|
||||
@livewire('bbcode-input', ['name' => 'content', 'label' => __('forum.post'), 'content' => $post->content])
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.submit') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -23,406 +23,307 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ __('forum.forum') }} {{ __('forum.forums-post-search') }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead class="no-space">
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<div>
|
||||
<div class="box">
|
||||
<div class="container well search mt-5 fatten-me table-me"
|
||||
style="width: 90% !important; margin: auto !important;">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}"
|
||||
class="form-horizontal form-condensed form-torrent-search form-bordered table-me">
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="name"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.topic') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label>
|
||||
<input type="text" name="name" placeholder="{{ __('forum.topic') }}"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
class="form-control">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="body"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.post') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label>
|
||||
<input type="text" name="body" placeholder="{{ __('forum.post') }}"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
class="form-control">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.forum') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label for="category"></label><select id="category" name="category"
|
||||
class="form-control">
|
||||
<option value="">{{ __('forum.select-all-forum') }}</option>
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null &&
|
||||
$category->getPermission()->show_forum == true &&
|
||||
$category->getForumsInCategory()->count() > 0)
|
||||
<option value="{{ $category->id }}"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $category->id ? 'SELECTED' : '' }}>
|
||||
{{ $category->name }}</option>
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as
|
||||
$categoryChild)
|
||||
@if ($categoryChild->getPermission() != null &&
|
||||
$categoryChild->getPermission()->show_forum == true)
|
||||
<option value="{{ $categoryChild->id }}"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $categoryChild->id ? 'SELECTED' : '' }}>
|
||||
» {{ $categoryChild->name }}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.label') }}</label>
|
||||
<div class="col-sm-10">
|
||||
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('implemented',$params) &&
|
||||
$params['implemented'] == 1)
|
||||
<input type="checkbox" value="1" name="implemented"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-check text-purple"></span>
|
||||
{{ __('forum.implemented') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="implemented">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-check text-purple"></span>
|
||||
{{ __('forum.implemented') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
|
||||
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('approved',$params) && $params['approved'] ==
|
||||
1)
|
||||
<input type="checkbox" value="1" name="approved"
|
||||
CHECKED> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-green"></span>
|
||||
{{ __('forum.approved') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="approved"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-green"></span>
|
||||
{{ __('forum.approved') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('denied',$params) && $params['denied'] == 1)
|
||||
<input type="checkbox" value="1" name="denied" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-red"></span>
|
||||
{{ __('forum.denied') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="denied"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-red"></span>
|
||||
{{ __('forum.denied') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('solved',$params) && $params['solved'] == 1)
|
||||
<input type="checkbox" value="1" name="solved" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></span>
|
||||
{{ __('forum.solved') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="solved"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></span>
|
||||
{{ __('forum.solved') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('invalid',$params) && $params['invalid'] == 1)
|
||||
<input type="checkbox" value="1" name="invalid" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></span>
|
||||
{{ __('forum.invalid') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="invalid"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></span>
|
||||
{{ __('forum.invalid') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('bug',$params) && $params['bug'] == 1)
|
||||
<input type="checkbox" value="1" name="bug" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bug text-red"></span>
|
||||
{{ __('forum.bug') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="bug"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-bug text-red"></span>
|
||||
{{ __('forum.bug') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('suggestion',$params) && $params['suggestion']
|
||||
== 1)
|
||||
<input type="checkbox" value="1" name="suggestion"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-info text-blue"></span>
|
||||
{{ __('forum.suggestion') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="suggestion">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-info text-blue"></span>
|
||||
{{ __('forum.suggestion') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.state') }}</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('open',$params) && $params['open'] == 1)
|
||||
<input type="checkbox" value="1" name="open" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-lock-open text-green"></span>
|
||||
{{ __('forum.open') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="open"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-lock-open text-green"></span>
|
||||
{{ __('forum.open') }}
|
||||
@endif
|
||||
</label>
|
||||
</span><span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('closed',$params) && $params['closed'] == 1)
|
||||
<input type="checkbox" value="1" name="closed" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-lock text-red"></span>
|
||||
{{ __('forum.closed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="closed"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-lock text-red"></span>
|
||||
{{ __('forum.closed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.activity') }}</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('subscribed',$params) && $params['subscribed']
|
||||
== 1)
|
||||
<input type="checkbox" value="1" name="subscribed"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell text-green"></span>
|
||||
{{ __('forum.subscribed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="subscribed">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell text-green"></span>
|
||||
{{ __('forum.subscribed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span><span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('notsubscribed',$params) &&
|
||||
$params['notsubscribed'] == 1)
|
||||
<input type="checkbox" value="1" name="notsubscribed"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></span>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="notsubscribed">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></span>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.sort') }}</label>
|
||||
<div class="col-sm-2">
|
||||
<label for="sorting"></label><select id="sorting" name="sorting"
|
||||
class="form-control">
|
||||
<option value="updated_at"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'updated_at' ? 'SELECTED' : '' }}>
|
||||
{{ __('forum.updated-at') }}</option>
|
||||
<option value="created_at"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'created_at' ? 'SELECTED' : '' }}>
|
||||
{{ __('forum.created-at') }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.direction') }}</label>
|
||||
<div class="col-sm-2">
|
||||
<label for="direction"></label><select id="direction" name="direction"
|
||||
class="form-control">
|
||||
<option value="desc"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'desc' ? 'SELECTED' : '' }}>
|
||||
{{ __('common.descending') }}</option>
|
||||
<option value="asc"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'asc' ? 'SELECTED' : '' }}>
|
||||
{{ __('common.ascending') }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="button-holder" style="margin-top: 20px !important;">
|
||||
<div class="button-center">
|
||||
<button type="submit"
|
||||
class="btn btn-primary">{{ __('common.search') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
@foreach ($results as $r)
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $r->topic->forum->name }}</span></td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a
|
||||
href="{{ route('forum_topic', ['id' => $r->topic->id]) }}">{{ $r->topic->name }}</a></strong>
|
||||
@if ($r->topic->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($r->topic->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($r->topic->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($r->topic->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($r->topic->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($r->topic->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($r->topic->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.forums-topic-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">
|
||||
{{ __('forum.topic') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="body"
|
||||
class="form__text"
|
||||
name="body"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="body">
|
||||
{{ __('forum.post') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<select
|
||||
name="category"
|
||||
id="category"
|
||||
class="form__select"
|
||||
required
|
||||
>
|
||||
<option value="0">{{ __('forum.select-all-forum') }}</option>
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null && $category->getPermission()->show_forum == true && $category->getForumsInCategory()->count() > 0)
|
||||
<option
|
||||
value="{{ $category->id }}"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $category->id)
|
||||
>
|
||||
{{ $category->name }}
|
||||
</option>
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as $categoryChild)
|
||||
@if ($categoryChild->getPermission() != null && $categoryChild->getPermission()->show_forum == true)
|
||||
<option
|
||||
value="{{ $categoryChild->id }}"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $categoryChild->id)
|
||||
>
|
||||
» {{ $categoryChild->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $r->topic->first_post_user_username]) }}">{{ $r->topic->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $r->topic->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $r->topic->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $r->topic->last_post_user_username]) }}">{{ $r->topic->last_post_user_username }}</a>,
|
||||
<time datetime="{{ date('d-m-Y h:m', strtotime($r->topic->updated_at)) }}">
|
||||
{{ date('M d Y', strtotime($r->topic->updated_at)) }}
|
||||
</time>
|
||||
</td>
|
||||
</tr>
|
||||
@if(isset($params) && is_array($params) && array_key_exists('body',$params))
|
||||
<tr>
|
||||
<td colspan="5" class="some-padding button-padding">
|
||||
<div class="topic-posts button-padding">
|
||||
<div class="post" id="post-{{ $r->id }}">
|
||||
<div class="button-holder">
|
||||
<div class="button-left">
|
||||
<a href="{{ route('users.show', ['username' => $r->user->username]) }}"
|
||||
class="post-info-username"
|
||||
style="color:{{ $r->user->group->color }}; display:inline;">{{ $r->user->username }}</a>
|
||||
@ {{ date('M d Y h:i:s', $r->created_at->getTimestamp()) }}
|
||||
</div>
|
||||
<div class="button-right">
|
||||
<a class="text-bold"
|
||||
href="{{ route('forum_topic', ['id' => $r->topic->id]) }}?page={{ $r->getPageNumber() }}#post-{{ $r->id }}">#{{ $r->id }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="some-margin">
|
||||
@joypixels($r->getContentHtml())
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endforeach
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="category">
|
||||
{{ __('common.forum') }}
|
||||
</label>
|
||||
</p>
|
||||
<div class="form__group--horizontal">
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.label') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="implemented"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="implemented"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('implemented', $params) && $params['implemented'])
|
||||
>
|
||||
<label class="form__label" for="implemented">
|
||||
<i class="{{ config('other.font-awesome') }} fa-check text-purple"></i>
|
||||
{{ __('forum.implemented') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="approved"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="approved"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('approved', $params) && $params['approved'])
|
||||
>
|
||||
<label class="form__label" for="approved">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag text-green"></i>
|
||||
{{ __('forum.approved') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="denied"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="denied"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('denied', $params) && $params['denied'])
|
||||
>
|
||||
<label class="form__label" for="denied">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag text-red"></i>
|
||||
{{ __('forum.denied') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="solved"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="solved"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('solved', $params) && $params['solved'])
|
||||
>
|
||||
<label class="form__label" for="solved">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></i>
|
||||
{{ __('forum.solved') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="invalid"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="invalid"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('invalid', $params) && $params['invalid'])
|
||||
>
|
||||
<label class="form__label" for="invalid">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></i>
|
||||
{{ __('forum.invalid') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="bug"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="bug"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('bug', $params) && $params['bug'])
|
||||
>
|
||||
<label class="form__label" for="bug">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bug text-red"></i>
|
||||
{{ __('forum.bug') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="suggestion"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="suggestion"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('suggestion', $params) && $params['suggestion'])
|
||||
>
|
||||
<label class="form__label" for="suggestion">
|
||||
<i class="{{ config('other.font-awesome') }} fa-info text-blue"></i>
|
||||
{{ __('forum.suggestion') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.state') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="open"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="open"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('open', $params) && $params['open'])
|
||||
>
|
||||
<label class="form__label" for="open">
|
||||
<i class="{{ config('other.font-awesome') }} fa-lock-open text-green"></i>
|
||||
{{ __('forum.open') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="closed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="closed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('closed', $params) && $params['closed'])
|
||||
>
|
||||
<label class="form__label" for="closed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-lock text-red"></i>
|
||||
{{ __('forum.closed') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.activity') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="subscribed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="subscribed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('subscribed', $params) && $params['subscribed'])
|
||||
>
|
||||
<label class="form__label" for="subscribed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell text-green"></i>
|
||||
{{ __('forum.subscribed') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="notsubscribed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="notsubscribed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('notsubscribed', $params) && $params['notsubscribed'])
|
||||
>
|
||||
<label class="form__label" for="notsubscribed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></i>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<p class="form__group">
|
||||
<select
|
||||
id="sorting"
|
||||
class="form__select"
|
||||
name="sorting"
|
||||
required
|
||||
>
|
||||
<option
|
||||
value="updated_at"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'updated_at')
|
||||
>
|
||||
{{ __('forum.updated-at') }}
|
||||
</option>
|
||||
<option
|
||||
value="created_at"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'created_at')
|
||||
>
|
||||
{{ __('forum.created-at') }}
|
||||
</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="sorting">
|
||||
{{ __('common.sort') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<select
|
||||
id="direction"
|
||||
class="form__select"
|
||||
name="direction"
|
||||
required
|
||||
>
|
||||
<option
|
||||
value="desc"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'desc')
|
||||
>
|
||||
{{ __('common.descending') }}
|
||||
</option>
|
||||
<option
|
||||
value="asc"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'asc')
|
||||
>
|
||||
{{ __('common.ascending') }}
|
||||
</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="direction">
|
||||
{{ __('common.direction') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group--horizontal">
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $results->links() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('main')
|
||||
<h2 class="panel__heading">{{ __('common.search-results') }}</h2>
|
||||
<ul class="topic-posts">
|
||||
@foreach($results as $post)
|
||||
<li class="post-listings__item">
|
||||
<x-forum.post :post="$post" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
{{ $results->links('partials.pagination') }}
|
||||
@endsection
|
||||
|
||||
@@ -23,388 +23,309 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="5" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ __('forum.forum') }} {{ __('forum.forums-topic-search') }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead class="no-space">
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<div>
|
||||
<div class="box">
|
||||
<div class="container well search mt-5 fatten-me table-me"
|
||||
style="width: 90% !important; margin: auto !important;">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}"
|
||||
class="form-horizontal form-condensed form-torrent-search form-bordered table-me">
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="name"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.topic') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label>
|
||||
<input type="text" name="name" placeholder="{{ __('forum.topic') }}"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
class="form-control">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="body"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.post') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label>
|
||||
<input type="text" name="body" placeholder="{{ __('forum.post') }}"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
class="form-control">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.forum') }}</label>
|
||||
<div class="col-sm-9 fatten-me">
|
||||
<label for="category"></label><select id="category" name="category"
|
||||
class="form-control">
|
||||
<option value="0">{{ __('forum.select-all-forum') }}</option>
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null &&
|
||||
$category->getPermission()->show_forum == true &&
|
||||
$category->getForumsInCategory()->count() > 0)
|
||||
<option value="{{ $category->id }}"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $category->id ? 'SELECTED' : '' }}>
|
||||
{{ $category->name }}</option>
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as
|
||||
$categoryChild)
|
||||
@if ($categoryChild->getPermission() != null &&
|
||||
$categoryChild->getPermission()->show_forum == true)
|
||||
<option value="{{ $categoryChild->id }}"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $categoryChild->id ? 'SELECTED' : '' }}>
|
||||
» {{ $categoryChild->name }}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.label') }}</label>
|
||||
<div class="col-sm-10">
|
||||
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('implemented',$params) &&
|
||||
$params['implemented'] == 1)
|
||||
<input type="checkbox" value="1" name="implemented"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-check text-purple"></span>
|
||||
{{ __('forum.implemented') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="implemented">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-check text-purple"></span>
|
||||
{{ __('forum.implemented') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
|
||||
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('approved',$params) && $params['approved'] ==
|
||||
1)
|
||||
<input type="checkbox" value="1" name="approved"
|
||||
CHECKED> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-green"></span>
|
||||
{{ __('forum.approved') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="approved"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-green"></span>
|
||||
{{ __('forum.approved') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('denied',$params) && $params['denied'] == 1)
|
||||
<input type="checkbox" value="1" name="denied" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-red"></span>
|
||||
{{ __('forum.denied') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="denied"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-tag text-red"></span>
|
||||
{{ __('forum.denied') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('solved',$params) && $params['solved'] == 1)
|
||||
<input type="checkbox" value="1" name="solved" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></span>
|
||||
{{ __('forum.solved') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="solved"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></span>
|
||||
{{ __('forum.solved') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('invalid',$params) && $params['invalid'] == 1)
|
||||
<input type="checkbox" value="1" name="invalid" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></span>
|
||||
{{ __('forum.invalid') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="invalid"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></span>
|
||||
{{ __('forum.invalid') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('bug',$params) && $params['bug'] == 1)
|
||||
<input type="checkbox" value="1" name="bug" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bug text-red"></span>
|
||||
{{ __('forum.bug') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="bug"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-bug text-red"></span>
|
||||
{{ __('forum.bug') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('suggestion',$params) && $params['suggestion']
|
||||
== 1)
|
||||
<input type="checkbox" value="1" name="suggestion"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-info text-blue"></span>
|
||||
{{ __('forum.suggestion') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="suggestion">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-info text-blue"></span>
|
||||
{{ __('forum.suggestion') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.state') }}</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('open',$params) && $params['open'] == 1)
|
||||
<input type="checkbox" value="1" name="open" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-lock-open text-green"></span>
|
||||
{{ __('forum.open') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="open"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-lock-open text-green"></span>
|
||||
{{ __('forum.open') }}
|
||||
@endif
|
||||
</label>
|
||||
</span><span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('closed',$params) && $params['closed'] == 1)
|
||||
<input type="checkbox" value="1" name="closed" CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-lock text-red"></span>
|
||||
{{ __('forum.closed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="closed"> <span
|
||||
class="{{ config('other.font-awesome') }} fa-lock text-red"></span>
|
||||
{{ __('forum.closed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="type"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('forum.activity') }}</label>
|
||||
<div class="col-sm-10">
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('subscribed',$params) && $params['subscribed']
|
||||
== 1)
|
||||
<input type="checkbox" value="1" name="subscribed"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell text-green"></span>
|
||||
{{ __('forum.subscribed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="subscribed">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell text-green"></span>
|
||||
{{ __('forum.subscribed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span><span class="badge-user">
|
||||
<label class="inline">
|
||||
@if(isset($params) && is_array($params) &&
|
||||
array_key_exists('notsubscribed',$params) &&
|
||||
$params['notsubscribed'] == 1)
|
||||
<input type="checkbox" value="1" name="notsubscribed"
|
||||
CHECKED>
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></span>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
@else
|
||||
<input type="checkbox" value="1" name="notsubscribed">
|
||||
<span
|
||||
class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></span>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
@endif
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.sort') }}</label>
|
||||
<div class="col-sm-2">
|
||||
<label for="sorting"></label><select id="sorting" name="sorting"
|
||||
class="form-control">
|
||||
<option value="updated_at"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'updated_at' ? 'SELECTED' : '' }}>
|
||||
{{ __('forum.updated-at') }}</option>
|
||||
<option value="created_at"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'created_at' ? 'SELECTED' : '' }}>
|
||||
{{ __('forum.created-at') }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-0 mt-5 form-group fatten-me">
|
||||
<label for="sort"
|
||||
class="mt-5 col-sm-1 label label-default fatten-me">{{ __('common.direction') }}</label>
|
||||
<div class="col-sm-2">
|
||||
<label for="direction"></label><select id="direction" name="direction"
|
||||
class="form-control">
|
||||
<option value="desc"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'desc' ? 'SELECTED' : '' }}>
|
||||
{{ __('common.descending') }}</option>
|
||||
<option value="asc"
|
||||
{{ isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'asc' ? 'SELECTED' : '' }}>
|
||||
{{ __('common.ascending') }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="button-holder" style="margin-top: 20px !important;">
|
||||
<div class="button-center">
|
||||
<button type="submit"
|
||||
class="btn btn-primary">{{ __('common.search') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($results as $r)
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $r->forum->name }}</span>
|
||||
</td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a href="{{ route('forum_topic', ['id' => $r->id]) }}">{{ $r->name }}</a></strong>
|
||||
@if ($r->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($r->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($r->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($r->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($r->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($r->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($r->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.forums-topic-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="name"
|
||||
class="form__text"
|
||||
name="name"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="name">
|
||||
{{ __('forum.topic') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="body"
|
||||
class="form__text"
|
||||
name="body"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="body">
|
||||
{{ __('forum.post') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<select
|
||||
name="category"
|
||||
id="category"
|
||||
class="form__select"
|
||||
required
|
||||
>
|
||||
<option value="0">{{ __('forum.select-all-forum') }}</option>
|
||||
@foreach ($categories as $category)
|
||||
@if ($category->getPermission() != null && $category->getPermission()->show_forum == true && $category->getForumsInCategory()->count() > 0)
|
||||
<option
|
||||
value="{{ $category->id }}"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $category->id)
|
||||
>
|
||||
{{ $category->name }}
|
||||
</option>
|
||||
@foreach ($category->getForumsInCategory()->sortBy('position') as $categoryChild)
|
||||
@if ($categoryChild->getPermission() != null && $categoryChild->getPermission()->show_forum == true)
|
||||
<option
|
||||
value="{{ $categoryChild->id }}"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('category', $params) && $params['category'] == $categoryChild->id)
|
||||
>
|
||||
» {{ $categoryChild->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@if ($r->implemented == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.implemented')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $r->first_post_user_username]) }}">{{ $r->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $r->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $r->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $r->last_post_user_username]) }}">{{ $r->last_post_user_username }}</a>,
|
||||
@if($r->last_reply_at && $r->last_reply_at != null)
|
||||
<time datetime="{{ date('d-m-Y h:m', strtotime($r->last_reply_at)) }}">
|
||||
{{ date('M d Y', strtotime($r->last_reply_at)) }}
|
||||
</time>
|
||||
@else
|
||||
<time datetime="N/A">
|
||||
N/A
|
||||
</time>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endforeach
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="category">
|
||||
{{ __('common.forum') }}
|
||||
</label>
|
||||
</p>
|
||||
<div class="form__group--horizontal">
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.label') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="implemented"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="implemented"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('implemented', $params) && $params['implemented'])
|
||||
>
|
||||
<label class="form__label" for="implemented">
|
||||
<i class="{{ config('other.font-awesome') }} fa-check text-purple"></i>
|
||||
{{ __('forum.implemented') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="approved"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="approved"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('approved', $params) && $params['approved'])
|
||||
>
|
||||
<label class="form__label" for="approved">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag text-green"></i>
|
||||
{{ __('forum.approved') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="denied"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="denied"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('denied', $params) && $params['denied'])
|
||||
>
|
||||
<label class="form__label" for="denied">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag text-red"></i>
|
||||
{{ __('forum.denied') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="solved"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="solved"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('solved', $params) && $params['solved'])
|
||||
>
|
||||
<label class="form__label" for="solved">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbs-up text-green"></i>
|
||||
{{ __('forum.solved') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="invalid"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="invalid"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('invalid', $params) && $params['invalid'])
|
||||
>
|
||||
<label class="form__label" for="invalid">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbs-down text-red"></i>
|
||||
{{ __('forum.invalid') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="bug"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="bug"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('bug', $params) && $params['bug'])
|
||||
>
|
||||
<label class="form__label" for="bug">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bug text-red"></i>
|
||||
{{ __('forum.bug') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="suggestion"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="suggestion"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('suggestion', $params) && $params['suggestion'])
|
||||
>
|
||||
<label class="form__label" for="suggestion">
|
||||
<i class="{{ config('other.font-awesome') }} fa-info text-blue"></i>
|
||||
{{ __('forum.suggestion') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.state') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="open"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="open"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('open', $params) && $params['open'])
|
||||
>
|
||||
<label class="form__label" for="open">
|
||||
<i class="{{ config('other.font-awesome') }} fa-lock-open text-green"></i>
|
||||
{{ __('forum.open') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="closed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="closed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('closed', $params) && $params['closed'])
|
||||
>
|
||||
<label class="form__label" for="closed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-lock text-red"></i>
|
||||
{{ __('forum.closed') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('forum.activity') }}</legend>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="subscribed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="subscribed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('subscribed', $params) && $params['subscribed'])
|
||||
>
|
||||
<label class="form__label" for="subscribed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell text-green"></i>
|
||||
{{ __('forum.subscribed') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="notsubscribed"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
name="notsubscribed"
|
||||
@checked(isset($params) && is_array($params) && array_key_exists('notsubscribed', $params) && $params['notsubscribed'])
|
||||
>
|
||||
<label class="form__label" for="notsubscribed">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash text-red"></i>
|
||||
{{ __('forum.not-subscribed') }}
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<p class="form__group">
|
||||
<select
|
||||
id="sorting"
|
||||
class="form__select"
|
||||
name="sorting"
|
||||
required
|
||||
>
|
||||
<option
|
||||
value="updated_at"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'updated_at')
|
||||
>
|
||||
{{ __('forum.updated-at') }}
|
||||
</option>
|
||||
<option
|
||||
value="created_at"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('sorting', $params) && $params['sorting'] == 'created_at')
|
||||
>
|
||||
{{ __('forum.created-at') }}
|
||||
</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="sorting">
|
||||
{{ __('common.sort') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<select
|
||||
id="direction"
|
||||
class="form__select"
|
||||
name="direction"
|
||||
required
|
||||
>
|
||||
<option
|
||||
value="desc"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'desc')
|
||||
>
|
||||
{{ __('common.descending') }}
|
||||
</option>
|
||||
<option
|
||||
value="asc"
|
||||
@selected(isset($params) && is_array($params) && array_key_exists('direction', $params) && $params['direction'] == 'asc')
|
||||
>
|
||||
{{ __('common.ascending') }}
|
||||
</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating" for="direction">
|
||||
{{ __('common.direction') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group--horizontal">
|
||||
<button class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $results->links() }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('common.search-results') }}</h2>
|
||||
<ul class="topic-listings">
|
||||
@foreach($results as $topic)
|
||||
<li class="topic-listings__item">
|
||||
<x-forum.topic-listing :topic="$topic" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
{{ $results->links('partials.pagination') }}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
<br>
|
||||
<div class="container-fluid well">
|
||||
<div class="text-center">
|
||||
<span class="badge-user">
|
||||
<strong>{{ __('forum.forums') }}:</strong> {{ $num_forums }} |
|
||||
<strong>{{ __('forum.topics') }}:</strong> {{ $num_topics }} |
|
||||
<strong>{{ __('forum.posts') }}:</strong> {{ $num_posts }}
|
||||
</span>
|
||||
</div>
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.stats') }}</h2>
|
||||
<dl class="key-value">
|
||||
<dt>{{ __('forum.forums') }}</dt>
|
||||
<dd>{{ $num_forums }}</dd>
|
||||
<dt>{{ __('forum.topics') }}</dt>
|
||||
<dd>{{ $num_topics }}</dd>
|
||||
<dt>{{ __('forum.posts') }}</dt>
|
||||
<dd>{{ $num_posts }}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
@@ -23,160 +23,49 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="box container">
|
||||
<div class="button-holder">
|
||||
<div class="button-right">
|
||||
<form role="form" method="GET" action="{{ route('forum_search_form') }}" class="form-inline">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<input type="hidden" name="subscribed" value="1">
|
||||
<label for="name"></label><input type="text" name="name" id="name"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('name', $params) ? $params['name'] : '' }}"
|
||||
placeholder="{{ __('forum.subscription-quick-search') }}"
|
||||
class="form-control">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-search"></i> {{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="forum-categories">
|
||||
<table class="table table-bordered table-hover">
|
||||
<thead class="no-space">
|
||||
<tr class="no-space">
|
||||
<td colspan="6" class="no-space">
|
||||
<div class="header gradient teal some-padding">
|
||||
<div class="inner_content">
|
||||
<h1 class="no-space">{{ __('common.subscriptions') }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('forum.forum') }}</th>
|
||||
<th>{{ __('forum.topic') }}</th>
|
||||
<th>{{ __('forum.author') }}</th>
|
||||
<th>{{ __('forum.stats') }}</th>
|
||||
<th>{{ __('forum.last-post-info') }}</th>
|
||||
<th>{{ __('forum.action') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($results as $r)
|
||||
@php
|
||||
if(in_array($r->id, $forum_neos, true)) {
|
||||
@endphp
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><a href="{{ route('forums.show', ['id' => $r->id]) }}"><span
|
||||
class="badge-extra text-bold">{{ $r->name }}</span></a></td>
|
||||
<td class="f-display-topic-title">
|
||||
--
|
||||
</td>
|
||||
<td class="f-display-topic-started">
|
||||
--
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
--
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
--
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
@if (auth()->user()->subscriptions()->ofForum($r->id)->exists())
|
||||
<form action="{{ route('unsubscribe_forum', ['forum' => $r->id, 'route' => 'subscriptions']) }}"
|
||||
method="POST" style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i> {{ __('forum.unsubscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('subscribe_forum', ['forum' => $r->id, 'route' => 'subscriptions']) }}"
|
||||
method="POST" style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i> {{ __('forum.subscribe') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@php
|
||||
}
|
||||
if($r->subscription_topics) {
|
||||
@endphp
|
||||
@foreach($r->subscription_topics as $t)
|
||||
<tr>
|
||||
<td class="f-display-topic-icon"><span
|
||||
class="badge-extra text-bold">{{ $t->forum->name }}</span>
|
||||
</td>
|
||||
<td class="f-display-topic-title">
|
||||
<strong><a href="{{ route('forum_topic', ['id' => $t->id]) }}">{{ $t->name }}</a></strong>
|
||||
@if ($t->state == "close") <span
|
||||
class='label label-sm label-default'>{{ strtoupper(__('forum.closed')) }}</span> @endif
|
||||
@if ($t->approved == "1") <span
|
||||
class='label label-sm label-success'>{{ strtoupper(__('forum.approved')) }}</span> @endif
|
||||
@if ($t->denied == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.denied')) }}</span> @endif
|
||||
@if ($t->solved == "1") <span
|
||||
class='label label-sm label-info'>{{ strtoupper(__('forum.solved')) }}</span> @endif
|
||||
@if ($t->invalid == "1") <span
|
||||
class='label label-sm label-warning'>{{ strtoupper(__('forum.invalid')) }}</span> @endif
|
||||
@if ($t->bug == "1") <span
|
||||
class='label label-sm label-danger'>{{ strtoupper(__('forum.bug')) }}</span> @endif
|
||||
@if ($t->suggestion == "1") <span
|
||||
class='label label-sm label-primary'>{{ strtoupper(__('forum.suggestion')) }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-started"><a
|
||||
href="{{ route('users.show', ['username' => $t->first_post_user_username]) }}">{{ $t->first_post_user_username }}</a>
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
{{ $t->num_post - 1 }} {{ __('forum.replies') }}
|
||||
\ {{ $t->views }} {{ __('forum.views') }}
|
||||
</td>
|
||||
<td class="f-display-topic-last-post">
|
||||
<a
|
||||
href="{{ route('users.show', ['username' => $t->last_post_user_username]) }}">{{ $t->last_post_user_username }}</a>,
|
||||
@if($t->last_reply_at && $t->last_reply_at != null)
|
||||
<time datetime="{{ date('d-m-Y h:m', strtotime($t->last_reply_at)) }}">
|
||||
{{ date('M d Y', strtotime($t->last_reply_at)) }}
|
||||
</time>
|
||||
@else
|
||||
<time datetime="N/A">
|
||||
N/A
|
||||
</time>
|
||||
@endif
|
||||
</td>
|
||||
<td class="f-display-topic-stats">
|
||||
@if (auth()->user()->subscriptions()->ofTopic($t->id)->exists())
|
||||
<a href="{{ route('unsubscribe_topic', ['topic' => $t->id, 'route' => 'subscriptions']) }}"
|
||||
class="label label-sm label-danger">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i> {{ __('forum.unsubscribe') }}
|
||||
</a>
|
||||
@else
|
||||
<a href="{{ route('subscribe_topic', ['topic' => $t->id, 'route' => 'subscriptions']) }}"
|
||||
class="label label-sm label-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i> {{ __('forum.subscribe') }}
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@php
|
||||
}
|
||||
@endphp
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-center col-md-12">
|
||||
{{ $results->links() }}
|
||||
</div>
|
||||
@include('forum.stats')
|
||||
</div>
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.forums') }}</h2>
|
||||
@foreach ($results->whereIn('id', $forum_neos) as $subforum)
|
||||
<x-forum.subforum-listing :subforum="$subforum" />
|
||||
@endforeach
|
||||
</section>
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.topics') }}</h2>
|
||||
@foreach ($results as $result)
|
||||
@foreach($result->subscription_topics as $topic)
|
||||
<x-forum.topic-listing :topic="$topic" />
|
||||
@endforeach
|
||||
@endforeach
|
||||
</section>
|
||||
{{ $results->links('partials.pagination') }}
|
||||
@endsection
|
||||
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.post-quick-search') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form form--horizontal" method="GET" action="{{ route('forum_search_form') }}">
|
||||
<input type="hidden" name="sorting" value="created_at">
|
||||
<input type="hidden" name="direction" value="desc">
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="body"
|
||||
class="form__text"
|
||||
name="body"
|
||||
placeholder=""
|
||||
type="text"
|
||||
value="{{ isset($params) && is_array($params) && array_key_exists('body', $params) ? $params['body'] : '' }}"
|
||||
>
|
||||
<label class="form__label form__label--floating" for="body">
|
||||
{{ __('forum.forums-post-search') }}
|
||||
</label>
|
||||
</p>
|
||||
<button type="submit" class="form__button form__button--filled">
|
||||
{{ __('common.search') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@include('forum.stats')
|
||||
@endsection
|
||||
|
||||
@@ -24,384 +24,279 @@
|
||||
@include('forum.buttons')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="topic container">
|
||||
@section('page', 'page__forum--topic')
|
||||
|
||||
<h2>{{ $topic->name }}</h2>
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ $topic->name }}</h2>
|
||||
@if ($topic->approved || $topic->denied || $topic->solved || $topic->invalid || $topic->bug || $topic->suggestion || $topic->implemented)
|
||||
<ul class="topic-tags">
|
||||
<li class="topic-tag">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tags"></i>
|
||||
</li>
|
||||
@if ($topic->approved)
|
||||
<li class="topic-tag topic-tag--approved">{{ __('forum.approved') }}</li>
|
||||
@endif
|
||||
@if ($topic->denied)
|
||||
<li class="topic-tag topic-tag--denied">{{ __('forum.denied') }}</li>
|
||||
@endif
|
||||
@if ($topic->solved)
|
||||
<li class="topic-tag topic-tag--solved">{{ __('forum.solved') }}</li>
|
||||
@endif
|
||||
@if ($topic->invalid)
|
||||
<li class="topic-tag topic-tag--invalid">{{ __('forum.invalid') }}</li>
|
||||
@endif
|
||||
@if ($topic->bug)
|
||||
<li class="topic-tag topic-tag--bug">{{ __('forum.bug') }}</li>
|
||||
@endif
|
||||
@if ($topic->suggestion)
|
||||
<li class="topic-tag topic-tag--suggestion">{{ __('forum.suggestion') }}</li>
|
||||
@endif
|
||||
@if ($topic->implemented)
|
||||
<li class="topic-tag topic-tag--implemented">{{ __('forum.implemented') }}</li>
|
||||
@endif
|
||||
</ul>
|
||||
@endif
|
||||
</section>
|
||||
{{ $posts->links('partials.pagination') }}
|
||||
<div class="panel__body">
|
||||
<ol class="topic-posts">
|
||||
@foreach ($posts as $k => $post)
|
||||
<li class="topic-posts__item">
|
||||
<x-forum.post :post="$post" />
|
||||
</li>
|
||||
@endforeach
|
||||
</ol>
|
||||
</div>
|
||||
{{ $posts->links('partials.pagination') }}
|
||||
@if ($topic->state === 'close')
|
||||
<p>This topic is closed, but you can still reply due to you being {{ auth()->user()->group->name }}.</p>
|
||||
@endif
|
||||
@if ($topic->state === 'open' || auth()->user()->group->is_modo)
|
||||
<form
|
||||
id="forum_reply_form"
|
||||
method="POST"
|
||||
action="{{ route('forum_reply', ['id' => $topic->id]) }}"
|
||||
x-data="{ showReply: {{ $posts->onLastPage() ? 'true' : 'false' }} }"
|
||||
x-show="showReply"
|
||||
>
|
||||
@csrf
|
||||
@livewire('bbcode-input', ['name' => 'content', 'label' => __('forum.post') ])
|
||||
<p class="form__group">
|
||||
<button type="submit" class="form__button form__button--filled">
|
||||
{{ __('common.submit') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@elseif ($topic->state === "close")
|
||||
<p>{{ __('forum.topic-closed') }}</p>
|
||||
@endif
|
||||
@endsection
|
||||
|
||||
<div class="topic-info">
|
||||
{{ __('forum.author') }}
|
||||
<a href="{{ route('users.show', ['username' => $topic->first_post_user_username]) }}">
|
||||
{{ $topic->first_post_user_username }}
|
||||
</a>,
|
||||
{{ date('M d Y H:m', strtotime($topic->created_at)) }}
|
||||
<span class='label label-primary'>{{ $topic->num_post - 1 }} {{ strtolower(__('forum.replies')) }}</span>
|
||||
<span class='label label-info'>{{ $topic->views - 1 }} {{ strtolower(__('forum.views')) }}</span>
|
||||
@section('sidebar')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('stat.stats') }}</h2>
|
||||
<dl class="key-value">
|
||||
<dt>{{ __('forum.author') }}</dt>
|
||||
<dd>
|
||||
<a href="{{ route('users.show', ['username' => $topic->first_post_user_username]) }}">
|
||||
{{ $topic->first_post_user_username }}
|
||||
</a>
|
||||
</dd>
|
||||
<dt>{{ __('forum.created-at') }}</dt>
|
||||
<dd>{{ date('M d Y H:m', strtotime($topic->created_at)) }}</dd>
|
||||
<dt>{{ __('forum.replies') }}</dt>
|
||||
<dd>{{ $topic->num_post - 1 }}</dd>
|
||||
<dt>{{ __('forum.views') }}</dt>
|
||||
<dd>{{ $topic->views - 1 }}</dd>
|
||||
</dl>
|
||||
<div class="panel__body">
|
||||
@if(auth()->user()->subscriptions()->ofTopic($topic->id)->exists())
|
||||
<form action="{{ route('unsubscribe_topic', ['topic' => $topic->id, 'route' => 'topic']) }}"
|
||||
method="POST" style="display: inline;">
|
||||
<form class="form" action="{{ route('unsubscribe_topic', ['topic' => $topic->id, 'route' => 'topic']) }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i> {{ __('forum.unsubscribe') }}
|
||||
</button>
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell-slash"></i>
|
||||
{{ __('forum.unsubscribe') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('subscribe_topic', ['topic' => $topic->id, 'route' => 'topic']) }}" method="POST"
|
||||
style="display: inline;">
|
||||
<form class="form" action="{{ route('subscribe_topic', ['topic' => $topic->id, 'route' => 'topic']) }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i> {{ __('forum.subscribe') }}
|
||||
</button>
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
<i class="{{ config('other.font-awesome') }} fa-bell"></i> {{ __('forum.subscribe') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@endif
|
||||
<span style="float: right;"> {{ $posts->links() }}</span>
|
||||
</div>
|
||||
<br>
|
||||
<div class="topic-posts">
|
||||
@foreach ($posts as $k => $p)
|
||||
<div class="post" id="post-{{ $p->id }}">
|
||||
<div class="block">
|
||||
<div class="profil">
|
||||
<div class="head">
|
||||
<p>{{ date('M d Y', $p->created_at->getTimestamp()) }}
|
||||
({{ $p->created_at->diffForHumans() }}) <a class="text-bold permalink"
|
||||
href="{{ route('forum_topic', ['id' => $p->topic->id]) }}?page={{ $p->getPageNumber() }}#post-{{ $p->id }}">{{ __('forum.permalink') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
<aside class="col-md-2 post-info">
|
||||
@if ($p->user->image != null)
|
||||
<img src="{{ url('files/img/' . $p->user->image) }}" alt="{{ $p->user->username }}"
|
||||
class="img-thumbnail post-info-image">
|
||||
@else
|
||||
<img src="{{ url('img/profile.png') }}" alt="{{ $p->user->username }}"
|
||||
class="img-thumbnail post-info-image">
|
||||
@endif
|
||||
<p>
|
||||
<span class="badge-user text-bold">
|
||||
<a href="{{ route('users.show', ['username' => $p->user->username]) }}"
|
||||
class="post-info-username"
|
||||
style="color:{{ $p->user->group->color }}; display:inline;">{{ $p->user->username }}</a>
|
||||
@if ($p->user->isOnline())
|
||||
<i class="{{ config('other.font-awesome') }} fa-circle text-green"
|
||||
data-toggle="tooltip"
|
||||
data-original-title="Online"></i>
|
||||
@else
|
||||
<i class="{{ config('other.font-awesome') }} fa-circle text-red"
|
||||
data-toggle="tooltip"
|
||||
data-original-title="Offline"></i>
|
||||
@endif
|
||||
<a
|
||||
href="{{ route('create', ['receiver_id' => $p->user->id, 'username' => $p->user->username]) }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-envelope text-info"></i>
|
||||
</a>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p><span class="badge-user text-bold"
|
||||
style="color:{{ $p->user->group->color }}; background-image:{{ $p->user->group->effect }};"><i
|
||||
class="{{ $p->user->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $p->user->group->name }}"></i>
|
||||
{{ $p->user->group->name }}</span>
|
||||
</p>
|
||||
@if (!empty($p->user->title))
|
||||
<p><span class="badge-user title">{{ $p->user->title }}</span></p>
|
||||
@endif
|
||||
<p>
|
||||
<span class="badge-user text-bold">Joined: {{ date('d M Y', $p->user->created_at->getTimestamp()) }}</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@if($p->user->topics && $p->user->topics->count() > 0)
|
||||
<span class="badge-user text-bold">
|
||||
<a href="{{ route('user_topics', ['username' => $p->user->username]) }}"
|
||||
class="post-info-username">{{ $p->user->topics->count() }} {{ __('forum.topics') }}</a>
|
||||
</span>
|
||||
@endif
|
||||
@if($p->user->posts && $p->user->posts->count() > 0)
|
||||
<span class="badge-user text-bold">
|
||||
<a href="{{ route('user_posts', ['username' => $p->user->username]) }}"
|
||||
class="post-info-username">{{ $p->user->posts->count() }} {{ __('forum.posts') }}</a>
|
||||
</span>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
|
||||
<span class="inline">
|
||||
@if ($topic->state == 'open')
|
||||
<button id="quote"
|
||||
class="btn btn-xs btn-xxs btn-info">{{ __('forum.quote') }}</button>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo || $p->user_id === auth()->user()->id)
|
||||
<a href="{{ route('forum_post_edit_form', ['id' => $topic->id, 'postId' => $p->id]) }}"><button
|
||||
class="btn btn-xs btn-xxs btn-warning">{{ __('common.edit') }}</button></a>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo || ($p->user_id === auth()->user()->id && $topic->state === 'open'))
|
||||
<form role="form" method="POST"
|
||||
action="{{ route('forum_post_delete', ['id' => $topic->id, 'postId' => $p->id]) }}"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-xs btn-xxs btn-danger">
|
||||
{{ __('common.delete') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
</span>
|
||||
</aside>
|
||||
|
||||
<article class="col-md-10 post-content" data-bbcode="{{ $p->content }}">
|
||||
@joypixels($p->getContentHtml())
|
||||
</article>
|
||||
|
||||
<div class="post-signature col-md-12 mt-10">
|
||||
<div id="forumTip{{ $p->id }}" class="text-center">
|
||||
@if($p->tips && $p->tips->sum('cost') > 0)
|
||||
<div>{{ __('forum.tip-post-total') }} {{ $p->tips->sum('cost') }}
|
||||
BON
|
||||
</div>
|
||||
@endif
|
||||
<div id="forumTip" route="{{ route('tips.store', ['username' => auth()->user()->username]) }}"
|
||||
leaveTip="{{ __('torrent.leave-tip') }}" quickTip="{{ __('torrent.quick-tip') }}">
|
||||
<a class="forumTip" href="#/" post="{{ $p->id }}"
|
||||
user="{{ $p->user->id }}">{{ __('forum.tip-this-post') }}</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="likes">
|
||||
<span class="badge-extra">
|
||||
@livewire('like-button', ['post' => $p->id])
|
||||
@livewire('dislike-button', ['post' => $p->id])
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@if ($p->user->signature != null)
|
||||
<div class="post-signature col-md-12">
|
||||
{!! $p->user->getSignature() !!}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@if (auth()->user()->group->is_modo || $topic->first_post_user_id == auth()->user()->id)
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('forum.topic') }} {{ __('user.settings') }}</h2>
|
||||
<div class="panel__body">
|
||||
@if ($topic->state === 'close')
|
||||
<form class="form" action="{{ route('forum_open', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
{{ __('forum.open') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@else
|
||||
<form class="form" action="{{ route('forum_close', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
{{ __('common.close') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@endif
|
||||
<div class="form">
|
||||
<p class="form__group form__group--horizontal">
|
||||
<a
|
||||
href="{{ route('forum_edit_topic_form', ['id' => $topic->id]) }}"
|
||||
class="form__button form__button--filled form__button--centered"
|
||||
>
|
||||
{{ __('common.edit') }}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<br>
|
||||
@endforeach
|
||||
<div class="text-center">{{ $posts->links() }}</div>
|
||||
<br>
|
||||
<br>
|
||||
<div class="block">
|
||||
<div class="topic-new-post">
|
||||
@if ($topic->state == "close" && auth()->user()->group->is_modo)
|
||||
<form role="form" method="POST" action="{{ route('forum_reply', ['id' => $topic->id]) }}">
|
||||
<form class="form" action="{{ route('forum_delete_topic', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
{{ __('common.delete') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@if (auth()->user()->group->is_modo)
|
||||
@if ($topic->pinned === 0)
|
||||
<form class="form" action="{{ route('forum_pin_topic', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<div class="text-danger">This topic is closed, but you can still reply due to you
|
||||
being {{ auth()->user()->group->name }}.
|
||||
</div>
|
||||
<div class="from-group">
|
||||
<label for="topic-response"></label>
|
||||
<textarea name="content" id="topic-response" cols="30" rows="10"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ __('common.submit') }}</button>
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
{{ __('forum.pin') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@elseif ($topic->state == "close")
|
||||
<div class="col-md-12 alert alert-danger">{{ __('forum.topic-closed') }}</div>
|
||||
@else
|
||||
<form role="form" method="POST" action="{{ route('forum_reply', ['id' => $topic->id]) }}">
|
||||
<form class="form" action="{{ route('forum_unpin_topic', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<div class="from-group">
|
||||
<label for="topic-response"></label>
|
||||
<textarea name="content" id="topic-response" cols="30" rows="10"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{ __('common.submit') }}</button>
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled form__button--centered">
|
||||
{{ __('forum.unpin') }}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
@endif
|
||||
|
||||
<div class="text-center">
|
||||
@if (auth()->user()->group->is_modo || $topic->first_post_user_id == auth()->user()->id)
|
||||
<h3>{{ __('forum.moderation') }}</h3>
|
||||
@if ($topic->state === 'close')
|
||||
<form action="{{ route('forum_open', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-success">
|
||||
{{ __('forum.open-topic') }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('forum_close', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-success">
|
||||
{{ __('forum.close-topic') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo || $topic->first_post_user_id == auth()->user()->id)
|
||||
<a href="{{ route('forum_edit_topic_form', ['id' => $topic->id]) }}"
|
||||
class="btn btn-warning">
|
||||
{{ __('forum.edit-topic') }}
|
||||
</a>
|
||||
<form action="{{ route('forum_delete_topic', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger">
|
||||
{{ __('forum.delete-topic') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo)
|
||||
@if ($topic->pinned === 0)
|
||||
<form action="{{ route('forum_pin_topic', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('forum.pin') }} {{ __('forum.topic') }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('forum_unpin_topic', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-default">
|
||||
{{ __('forum.unpin') }} {{ __('forum.topic') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
<br>
|
||||
|
||||
@if (auth()->user()->group->is_modo)
|
||||
<h3>{{ __('forum.label-system') }}</h3>
|
||||
@if ($topic->approved === 0)
|
||||
<form action="{{ route('topics.approve', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.approved')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.approve', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.approved')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->denied === 0)
|
||||
<form action="{{ route('topics.deny', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.denied')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.deny', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.denied')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->solved === 0)
|
||||
<form action="{{ route('topics.solve', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.solved')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.solve', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.solved')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->invalid === 0)
|
||||
<form action="{{ route('topics.invalid', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.invalid')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.invalid', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.invalid')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->bug === 0)
|
||||
<form action="{{ route('topics.bug', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.bug')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.bug', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.bug')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->suggestion === 0)
|
||||
<form action="{{ route('topics.suggest', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.suggestion')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.suggest', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.suggestion')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@if ($topic->implemented === 0)
|
||||
<form action="{{ route('topics.implement', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-success">
|
||||
{{ __('common.add') }} {{ strtoupper(__('forum.implemented')) }}
|
||||
</button>
|
||||
</form>
|
||||
@else
|
||||
<form action="{{ route('topics.implement', ['id' => $topic->id]) }}" method="POST"
|
||||
style="display: inline;">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-xs btn-danger">
|
||||
{{ __('common.remove') }} {{ strtoupper(__('forum.implemented')) }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@endif
|
||||
@if (auth()->user()->group->is_modo)
|
||||
<section class="panelV2" x-data>
|
||||
<h2 class="panel__heading">{{ __('forum.label-system') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form class="form" action="{{ route('topics.approve', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="approved-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->approved === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="approved-label">{{ __('forum.approved') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.deny', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="denied-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->denied === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="denied-label">{{ __('forum.denied') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.solve', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="solved-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->solved === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="solved-label">{{ __('forum.solved') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.invalid', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="invalid-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->invalid === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="invalid-label">{{ __('forum.invalid') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.bug', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="bug-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->bug === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="bug-label">{{ __('forum.bug') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.suggest', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="suggestion-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->suggestion === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="suggestion-label">{{ __('forum.suggestion') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
<form class="form" action="{{ route('topics.implement', ['id' => $topic->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group">
|
||||
<input
|
||||
id="implemented-label"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
@checked($topic->implemented === 1)
|
||||
x-on:change="$el.form.submit()"
|
||||
>
|
||||
<label for="implemented-label">{{ __('forum.implemented') }}</label>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
@endif
|
||||
@endsection
|
||||
|
||||
@section('javascripts')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<i class="{{ config('other.font-awesome') }} fa-comment"></i>
|
||||
{{ __('common.comments') }}
|
||||
</h4>
|
||||
<div class="panel-body no-padding">
|
||||
<div class="panel__body">
|
||||
<form wire:submit.prevent="postComment" class="form new-comment">
|
||||
<p class="form__group">
|
||||
<textarea
|
||||
@@ -49,7 +49,7 @@
|
||||
</ul>
|
||||
@if ($comments->hasMorePages())
|
||||
<div class="text-center">
|
||||
<button class="btn btn-md btn-primary" wire:click.prevent="loadMore">Load More Comments</button>
|
||||
<button class="form__button form__button--filled" wire:click.prevent="loadMore">Load More Comments</button>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
<div style="display: inline;">
|
||||
<a wire:click="store({{ $post->id }})" class="text-red" data-toggle="tooltip"
|
||||
data-original-title="{{ __('forum.dislike-post') }}">
|
||||
<i class="icon-dislike {{ config('other.font-awesome') }} fa-thumbs-down fa-2x @if(auth()->user()->likes()->where('post_id', '=', $post->id)->where('dislike', '=', 1)->first()) fa-beat @endif"></i>
|
||||
<span class="count" style="font-size: 20px;">{{ $post->dislikes()->count() }}</span>
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
class="votes__dislike"
|
||||
wire:click="store({{ $post->id }})"
|
||||
title="{{ __('forum.dislike-post') }}"
|
||||
>
|
||||
@if(auth()->user()->likes()->where('post_id', '=', $post->id)->where('dislike', '=', 1)->first())
|
||||
<i class="votes__dislike-icon {{ config('other.font-awesome') }} fa-thumbs-down fa-beat"></i>
|
||||
@else
|
||||
<i class="votes__dislike-icon {{ config('other.font-awesome') }} fa-thumbs-down"></i>
|
||||
@endif
|
||||
<span class="votes__dislike-count">{{ $post->dislikes()->count() }}</span>
|
||||
</button>
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
<div style="display: inline;">
|
||||
<a wire:click="store({{ $post->id }})" class="text-green" data-toggle="tooltip" style="margin-right: 16px;"
|
||||
data-original-title="{{ __('forum.like-post') }}">
|
||||
<i class="icon-like {{ config('other.font-awesome') }} fa-thumbs-up fa-2x @if(auth()->user()->likes()->where('post_id', '=', $post->id)->where('like', '=', 1)->first()) fa-beat @endif"></i>
|
||||
<span class="count" style="font-size: 20px;">{{ $post->likes()->count() }}</span>
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
class="votes__like"
|
||||
wire:click="store({{ $post->id }})"
|
||||
title="{{ __('forum.like-post') }}"
|
||||
>
|
||||
@if(auth()->user()->likes()->where('post_id', '=', $post->id)->where('like', '=', 1)->first())
|
||||
<i class="votes__like-icon {{ config('other.font-awesome') }} fa-thumbs-up fa-beat"></i>
|
||||
@else
|
||||
<i class="votes__like-icon {{ config('other.font-awesome') }} fa-thumbs-up"></i>
|
||||
@endif
|
||||
<span class="votes__like-count">{{ $post->likes()->count() }}</span>
|
||||
</button>
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
<section class="panelV2">
|
||||
<header class="panel__header">
|
||||
<h2 class="panel__heading">{{ __('staff.user-notes') }}</h2>
|
||||
<div class="panel__actions">
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<select
|
||||
id="quantity"
|
||||
class="form__select"
|
||||
wire:model="perPage"
|
||||
required
|
||||
>
|
||||
<option>25</option>
|
||||
<option>50</option>
|
||||
<option>100</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating">
|
||||
{{ __('common.quantity') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<input
|
||||
id="search"
|
||||
class="form__text"
|
||||
type="text"
|
||||
wire:model="search"
|
||||
placeholder=""
|
||||
/>
|
||||
<label class="form__label form__label--floating">
|
||||
Message
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="data-table-wrapper">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>{{ __('common.user') }}</th>
|
||||
<th>{{ __('common.staff') }}</th>
|
||||
<th>{{ __('common.message') }}</th>
|
||||
<th>{{ __('user.created-on') }}</th>
|
||||
<th>{{ __('common.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($notes as $note)
|
||||
<tr>
|
||||
<td>{{ $note->id }}</td>
|
||||
<td>
|
||||
<x-user_tag :anon="false" :user="$note->noteduser" />
|
||||
</td>
|
||||
<td>
|
||||
<x-user_tag :anon="false" :user="$note->staffuser" />
|
||||
</td>
|
||||
<td>{{ $note->message }}</td>
|
||||
<td>
|
||||
<time datetime="{{ $note->created_at }}" title="{{ $note->created_at }}">
|
||||
{{ $note->created_at->diffForHumans() }}
|
||||
</time>
|
||||
</td>
|
||||
<td>
|
||||
<menu class="data-table__actions">
|
||||
<li class="data-table__action">
|
||||
<form
|
||||
action="{{ route('staff.notes.destroy', ['id' => $note->id]) }}"
|
||||
method="POST"
|
||||
x-data
|
||||
>
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button
|
||||
x-on:click.prevent="Swal.fire({
|
||||
title: 'Are you sure?',
|
||||
text: 'Are you sure you want to delete this note: {{ $note->message }}?',
|
||||
icon: 'warning',
|
||||
showConfirmButton: true,
|
||||
showCancelButton: true,
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
$root.submit();
|
||||
}
|
||||
})"
|
||||
class="form__button form__button--text"
|
||||
>
|
||||
{{ __('common.delete') }}
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
</menu>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="6">No notes</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{ $notes->links('partials.pagination') }}
|
||||
</section>
|
||||
@@ -1,432 +1,122 @@
|
||||
<div>
|
||||
<div class="container-fluid">
|
||||
<style>
|
||||
.form-group {
|
||||
margin-bottom: 5px !important;
|
||||
}
|
||||
|
||||
.badge-extra {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
<div x-data="{ open: false }" class="container box" id="torrent-list-search"
|
||||
style="margin-bottom: 0; padding: 10px 100px; border-radius: 5px;">
|
||||
<div class="mt-5">
|
||||
<div class="row">
|
||||
<div class="form-group col-xs-9">
|
||||
<input wire:model="name" type="search" class="form-control" placeholder="Name"/>
|
||||
</div>
|
||||
<div class="form-group col-xs-3">
|
||||
<button class="btn btn-md btn-primary" @click="open = ! open"
|
||||
x-text="open ? '{{ __('common.search-hide') }}' : '{{ __('common.search-advanced') }}'"></button>
|
||||
<div class="container-fluid">
|
||||
@include('torrent.partials.search')
|
||||
<br>
|
||||
<section class="panelV2">
|
||||
<header class="panel__header">
|
||||
<h2 class="panel__heading">{{ __('torrent.torrents') }}</h2>
|
||||
<div class="panel__actions">
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<select
|
||||
class="form__select"
|
||||
wire:model="perPage"
|
||||
required
|
||||
>
|
||||
<option>25</option>
|
||||
<option>50</option>
|
||||
<option>75</option>
|
||||
<option>100</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating">
|
||||
{{ __('common.quantity') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div x-cloak x-show="open" id="torrent-advanced-search">
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-description">
|
||||
<label for="description" class="label label-default">{{ __('torrent.description') }}</label>
|
||||
<input wire:model="description" type="text" class="form-control" placeholder="Description">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-mediainfo">
|
||||
<label for="mediainfo" class="label label-default">{{ __('torrent.media-info') }}</label>
|
||||
<input wire:model="mediainfo" type="text" class="form-control" placeholder="Mediainfo">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-keywords">
|
||||
<label for="keywords" class="label label-default">{{ __('torrent.keywords') }}</label>
|
||||
<input wire:model="keywords" type="text" class="form-control" placeholder="Keywords">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-uploader">
|
||||
<label for="uploader" class="label label-default">{{ __('torrent.uploader') }}</label>
|
||||
<input wire:model="uploader" type="text" class="form-control" placeholder="Uploader">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-tmdb">
|
||||
<label for="tmdbId" class="label label-default">TMDb</label>
|
||||
<input wire:model="tmdbId" type="text" class="form-control" placeholder="TMDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-imdb">
|
||||
<label for="imdbId" class="label label-default">IMDb</label>
|
||||
<input wire:model="imdbId" type="text" class="form-control" placeholder="IMDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-tvdb">
|
||||
<label for="tvdbId" class="label label-default">TVDb</label>
|
||||
<input wire:model="tvdbId" type="text" class="form-control" placeholder="TVDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-mal">
|
||||
<label for="malId" class="label label-default">MAL</label>
|
||||
<input wire:model="malId" type="text" class="form-control" placeholder="MAL ID">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-startYear">
|
||||
<label for="startYear" class="label label-default">{{ __('torrent.start-year') }}</label>
|
||||
<input wire:model="startYear" type="text" class="form-control" placeholder="Start Year">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-endYear">
|
||||
<label for="endYear" class="label label-default">{{ __('torrent.end-year') }}</label>
|
||||
<input wire:model="endYear" type="text" class="form-control" placeholder="End Year">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-playlist">
|
||||
<label for="playlist" class="label label-default">Playlist</label>
|
||||
<input wire:model="playlistId" type="text" class="form-control" placeholder="Playlist ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-collection">
|
||||
<label for="collection" class="label label-default">Collection</label>
|
||||
<input wire:model="collectionId" type="text" class="form-control"
|
||||
placeholder="Collection ID">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-6 col-xs-12 adv-search-region">
|
||||
@php $regions = cache()->remember('regions', 3_600, fn () => App\Models\Region::all()->sortBy('position')) @endphp
|
||||
<label for="region" class="label label-default">Region</label>
|
||||
<div id="regions" wire:ignore></div>
|
||||
</div>
|
||||
<div class="form-group col-sm-6 col-xs-12 adv-search-distributor">
|
||||
@php $distributors = cache()->remember('distributors', 3_600, fn () => App\Models\Distributor::all()->sortBy('position')) @endphp
|
||||
<label for="distributor" class="label label-default">Distributor</label>
|
||||
<div id="distributors" wire:ignore></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-categories">
|
||||
<label for="categories" class="label label-default">{{ __('common.category') }}</label>
|
||||
@php $categories = cache()->remember('categories', 3_600, fn () => App\Models\Category::all()->sortBy('position')) @endphp
|
||||
@foreach ($categories as $category)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model="categories" value="{{ $category->id }}"> {{ $category->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-types">
|
||||
<label for="types" class="label label-default">{{ __('common.type') }}</label>
|
||||
@php $types = cache()->remember('types', 3_600, fn () => App\Models\Type::all()->sortBy('position')) @endphp
|
||||
@foreach ($types as $type)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model="types" value="{{ $type->id }}"> {{ $type->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-resolutions">
|
||||
<label for="resolutions" class="label label-default">{{ __('common.resolution') }}</label>
|
||||
@php $resolutions = cache()->remember('resolutions', 3_600, fn () => App\Models\Resolution::all()->sortBy('position')) @endphp
|
||||
@foreach ($resolutions as $resolution)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model="resolutions" value="{{ $resolution->id }}"> {{ $resolution->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-genres">
|
||||
<label for="genres" class="label label-default">{{ __('common.genre') }}</label>
|
||||
@foreach (App\Models\Genre::all()->sortBy('name') as $genre)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model="genres" value="{{ $genre->id }}"> {{ $genre->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-buffs">
|
||||
<label for="buffs" class="label label-default">Buff</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="0">
|
||||
0% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="25">
|
||||
25% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="50">
|
||||
50% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="75">
|
||||
75% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="100">
|
||||
100% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="doubleup" type="checkbox" value="1">
|
||||
Double Upload
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="featured" type="checkbox" value="1">
|
||||
Featured
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-tags">
|
||||
<label for="tags" class="label label-default">Tags</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="stream" type="checkbox" value="1">
|
||||
Stream Optimized
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="sd" type="checkbox" value="1">
|
||||
SD Content
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="highspeed" type="checkbox" value="1">
|
||||
Highspeed
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-extra">
|
||||
<label for="extra" class="label label-default">{{ __('common.extra') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="internal" type="checkbox" value="1">
|
||||
Internal
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="personalRelease" type="checkbox" value="1">
|
||||
Personal Release
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-misc">
|
||||
<label for="misc" class="label label-default">Misc</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="bookmarked" type="checkbox" value="1">
|
||||
Bookmarked
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="wished" type="checkbox" value="1">
|
||||
Wished
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-health">
|
||||
<label for="health" class="label label-default">{{ __('torrent.health') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="alive" type="checkbox" value="1">
|
||||
{{ __('torrent.alive') }}
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="dying" type="checkbox" value="1">
|
||||
{{ __('torrent.dying-torrent') }}
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="dead" type="checkbox" value="1">
|
||||
{{ __('torrent.dead-torrent') }}
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-history">
|
||||
<label for="history" class="label label-default">{{ __('torrent.history') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="notDownloaded" type="checkbox" value="1">
|
||||
Not Downloaded
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="downloaded" type="checkbox" value="1">
|
||||
Downloaded
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="seeding" type="checkbox" value="1">
|
||||
Seeding
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="leeching" type="checkbox" value="1">
|
||||
Leeching
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model="incomplete" type="checkbox" value="1">
|
||||
Incomplete
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-quantity">
|
||||
<label for="quantity" class="label label-default">{{ __('common.quantity') }}</label>
|
||||
<span>
|
||||
<label class="inline">
|
||||
<select wire:model="perPage" class="form-control">
|
||||
<option value="25">24</option>
|
||||
<option value="50">48</option>
|
||||
<option value="100">72</option>
|
||||
</select>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="text-center">
|
||||
{{ $torrents->links() }}
|
||||
</div>
|
||||
<br>
|
||||
<div class="table-responsive block">
|
||||
<span class="badge-user torrent-listings-stats" style="float: right;">
|
||||
<strong>Total:</strong> {{ number_format($torrentsStat->total) }} |
|
||||
<strong>Alive:</strong> {{ number_format($torrentsStat->alive) }} |
|
||||
<strong>Dead:</strong> {{ number_format($torrentsStat->dead) }}
|
||||
</span>
|
||||
<table class="table table-condensed table-striped table-bordered" id="torrent-list-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="torrent-listings-poster"></th>
|
||||
<th class="torrent-listings-format"></th>
|
||||
<th class="torrents-filename torrent-listings-overview">
|
||||
<div sortable wire:click="sortBy('name')" :direction="$sortField === 'name' ? $sortDirection : null"
|
||||
role="button">
|
||||
{{ __('common.name') }}
|
||||
@include('livewire.includes._sort-icon', ['field' => 'name'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-download">
|
||||
<div>
|
||||
<i class="{{ config('other.font-awesome') }} fa-download"></i>
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-tmdb">
|
||||
<div>
|
||||
<i class="{{ config('other.font-awesome') }} fa-id-badge"></i>
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-size">
|
||||
<div sortable wire:click="sortBy('size')" :direction="$sortField === 'size' ? $sortDirection : null"
|
||||
role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-database"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'size'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-seeders">
|
||||
<div sortable wire:click="sortBy('seeders')"
|
||||
:direction="$sortField === 'seeders' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-arrow-alt-circle-up"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'seeders'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-leechers">
|
||||
<div sortable wire:click="sortBy('leechers')"
|
||||
:direction="$sortField === 'leechers' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-arrow-alt-circle-down"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'leechers'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-completed">
|
||||
<div sortable wire:click="sortBy('times_completed')"
|
||||
:direction="$sortField === 'times_completed' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-check-circle"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-age">
|
||||
<div sortable wire:click="sortBy('created_at')"
|
||||
:direction="$sortField === 'created_at' ? $sortDirection : null" role="button">
|
||||
{{ __('common.created_at') }}
|
||||
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
@foreach($torrents as $torrent)
|
||||
@php $meta = null @endphp
|
||||
@if ($torrent->category->tv_meta)
|
||||
@if ($torrent->tmdb || $torrent->tmdb != 0)
|
||||
@php
|
||||
$meta = cache()->remember('tv.'.$torrent->tmdb, 3_600, function() use ($torrent) {
|
||||
return App\Models\Tv::where('id', '=', $torrent->tmdb)->first();
|
||||
})
|
||||
@endphp
|
||||
</header>
|
||||
<div class="data-table-wrapper">
|
||||
{{ $torrents->links('partials.pagination') }}
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="torrent-listings-poster"></th>
|
||||
<th class="torrent-listings-format"></th>
|
||||
<th class="torrents-filename torrent-listings-overview">
|
||||
<div sortable wire:click="sortBy('name')"
|
||||
:direction="$sortField === 'name' ? $sortDirection : null"
|
||||
role="button">
|
||||
{{ __('common.name') }}
|
||||
@include('livewire.includes._sort-icon', ['field' => 'name'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-download">
|
||||
<div>
|
||||
<i class="{{ config('other.font-awesome') }} fa-download"></i>
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-tmdb">
|
||||
<div>
|
||||
<i class="{{ config('other.font-awesome') }} fa-id-badge"></i>
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-size">
|
||||
<div sortable wire:click="sortBy('size')"
|
||||
:direction="$sortField === 'size' ? $sortDirection : null"
|
||||
role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-database"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'size'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-seeders">
|
||||
<div sortable wire:click="sortBy('seeders')"
|
||||
:direction="$sortField === 'seeders' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-arrow-alt-circle-up"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'seeders'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-leechers">
|
||||
<div sortable wire:click="sortBy('leechers')"
|
||||
:direction="$sortField === 'leechers' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-arrow-alt-circle-down"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'leechers'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-completed">
|
||||
<div sortable wire:click="sortBy('times_completed')"
|
||||
:direction="$sortField === 'times_completed' ? $sortDirection : null" role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-check-circle"></i>
|
||||
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
||||
</div>
|
||||
</th>
|
||||
<th class="torrent-listings-age">
|
||||
<div sortable wire:click="sortBy('created_at')"
|
||||
:direction="$sortField === 'created_at' ? $sortDirection : null" role="button">
|
||||
{{ __('common.created_at') }}
|
||||
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
@foreach($torrents as $torrent)
|
||||
@php $meta = null @endphp
|
||||
@if ($torrent->category->tv_meta)
|
||||
@if ($torrent->tmdb || $torrent->tmdb != 0)
|
||||
@php
|
||||
$meta = cache()->remember('tv.'.$torrent->tmdb, 3_600, function() use ($torrent) {
|
||||
return App\Models\Tv::where('id', '=', $torrent->tmdb)->first();
|
||||
})
|
||||
@endphp
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
@if ($torrent->category->movie_meta)
|
||||
@if ($torrent->tmdb || $torrent->tmdb != 0)
|
||||
@php
|
||||
$meta = cache()->remember('movie.'.$torrent->tmdb, 3_600, function() use ($torrent) {
|
||||
return App\Models\Movie::where('id', '=', $torrent->tmdb)->first();
|
||||
})
|
||||
@endphp
|
||||
@if ($torrent->category->movie_meta)
|
||||
@if ($torrent->tmdb || $torrent->tmdb != 0)
|
||||
@php
|
||||
$meta = cache()->remember('movie.'.$torrent->tmdb, 3_600, function() use ($torrent) {
|
||||
return App\Models\Movie::where('id', '=', $torrent->tmdb)->first();
|
||||
})
|
||||
@endphp
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
@if ($torrent->category->game_meta)
|
||||
@if ($torrent->igdb || $torrent->igdb != 0)
|
||||
@php $meta = MarcReichel\IGDBLaravel\Models\Game::with(['cover' => ['url', 'image_id'], 'genres' => ['name']])->find($torrent->igdb) @endphp
|
||||
@if ($torrent->category->game_meta)
|
||||
@if ($torrent->igdb || $torrent->igdb != 0)
|
||||
@php $meta = MarcReichel\IGDBLaravel\Models\Game::with(['cover' => ['url', 'image_id'], 'genres' => ['name']])->find($torrent->igdb) @endphp
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card is-torrent">
|
||||
<div class="card_head">
|
||||
<div class="col-md-4">
|
||||
<div class="card is-torrent">
|
||||
<div class="card_head">
|
||||
<span class="badge-user text-bold" style="float:right;">
|
||||
<i class="{{ config('other.font-awesome') }} fa-fw fa-arrow-up text-green"></i>
|
||||
{{ $torrent->seeders }} /
|
||||
@@ -435,160 +125,133 @@
|
||||
<i class="{{ config('other.font-awesome') }} fa-fw fa-check text-orange"></i>
|
||||
{{ $torrent->times_completed }}
|
||||
</span>
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
{{ $torrent->getSize() }}
|
||||
</span>
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
{{ $torrent->resolution->name ?? 'No Res' }}
|
||||
</span>
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
{{ $torrent->type->name }}
|
||||
</span>
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
<span class="badge-user text-bold text-blue" style="float:right;">
|
||||
{{ $torrent->category->name }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="card_body">
|
||||
<div class="body_poster">
|
||||
@if ($torrent->category->movie_meta || $torrent->category->tv_meta)
|
||||
<img src="{{ isset($meta->poster) ? tmdb_image('poster_mid', $meta->poster) : 'https://via.placeholder.com/200x300' }}"
|
||||
class="show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
|
||||
@if ($torrent->category->game_meta && isset($meta) && $meta->cover['image_id'] && $meta->name)
|
||||
<img src="https://images.igdb.com/igdb/image/upload/t_cover_big/{{ $meta->cover['image_id'] }}.jpg"
|
||||
class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">{{ $meta->name ?? 'N/A' }}</i>'
|
||||
data-image='<img src="https://images.igdb.com/igdb/image/upload/t_original/{{ $meta->cover['image_id'] }}.jpg"
|
||||
alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
class="torrent-poster-img-small show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
|
||||
@if ($torrent->category->music_meta)
|
||||
<img src="https://via.placeholder.com/200x300" class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">N/A</i>'
|
||||
data-image='<img src="https://via.placeholder.com/200x300"
|
||||
alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
class="torrent-poster-img-small show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
|
||||
@if ($torrent->category->no_meta)
|
||||
@if(file_exists(public_path().'/files/img/torrent-cover_'.$torrent->id.'.jpg'))
|
||||
<img src="{{ url('files/img/torrent-cover_' . $torrent->id . '.jpg') }}"
|
||||
</div>
|
||||
<div class="card_body">
|
||||
<div class="body_poster">
|
||||
@if ($torrent->category->movie_meta || $torrent->category->tv_meta)
|
||||
<img src="{{ isset($meta->poster) ? tmdb_image('poster_mid', $meta->poster) : 'https://via.placeholder.com/200x300' }}"
|
||||
class="show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@else
|
||||
<img src="https://via.placeholder.com/200x300" class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">N/A</i>'
|
||||
data-image='<img src="https://via.placeholder.com/200x300" alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
@endif
|
||||
|
||||
@if ($torrent->category->game_meta && isset($meta) && $meta->cover['image_id'] && $meta->name)
|
||||
<img src="https://images.igdb.com/igdb/image/upload/t_cover_big/{{ $meta->cover['image_id'] }}.jpg"
|
||||
class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">{{ $meta->name ?? 'N/A' }}</i>'
|
||||
data-image='<img src="https://images.igdb.com/igdb/image/upload/t_original/{{ $meta->cover['image_id'] }}.jpg"
|
||||
alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
class="torrent-poster-img-small show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
<div class="body_description">
|
||||
<h3 class="description_title">
|
||||
<a href="{{ route('torrent', ['id' => $torrent->id]) }}">
|
||||
{{ $torrent->name }}
|
||||
</a>
|
||||
</h3>
|
||||
@if (isset($meta->genres) && ($torrent->category->movie_meta || $torrent->category->tv_meta))
|
||||
@foreach ($meta->genres as $genre)
|
||||
<span class="genre-label">
|
||||
|
||||
@if ($torrent->category->music_meta)
|
||||
<img src="https://via.placeholder.com/200x300" class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">N/A</i>'
|
||||
data-image='<img src="https://via.placeholder.com/200x300"
|
||||
alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
class="torrent-poster-img-small show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
|
||||
@if ($torrent->category->no_meta)
|
||||
@if(file_exists(public_path().'/files/img/torrent-cover_'.$torrent->id.'.jpg'))
|
||||
<img src="{{ url('files/img/torrent-cover_' . $torrent->id . '.jpg') }}"
|
||||
class="show-poster" alt="{{ __('torrent.poster') }}">
|
||||
@else
|
||||
<img src="https://via.placeholder.com/200x300" class="show-poster"
|
||||
data-name='<i style="color: #a5a5a5;">N/A</i>'
|
||||
data-image='<img src="https://via.placeholder.com/200x300" alt="{{ __('torrent.poster') }}" style="height: 1000px;">'
|
||||
class="torrent-poster-img-small show-poster"
|
||||
alt="{{ __('torrent.poster') }}">
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
<div class="body_description">
|
||||
<h3 class="description_title">
|
||||
<a href="{{ route('torrent', ['id' => $torrent->id]) }}">
|
||||
{{ $torrent->name }}
|
||||
</a>
|
||||
</h3>
|
||||
@if (isset($meta->genres) && ($torrent->category->movie_meta || $torrent->category->tv_meta))
|
||||
@foreach ($meta->genres as $genre)
|
||||
<span class="genre-label">
|
||||
<a href="{{ route('mediahub.genres.show', ['id' => $genre->id]) }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-theater-masks"></i> {{ $genre->name }}
|
||||
</a>
|
||||
</span>
|
||||
@endforeach
|
||||
@endif
|
||||
@if (isset($meta->genres) && $torrent->category->game_meta)
|
||||
@foreach ($meta->genres as $genre)
|
||||
<span class="genre-label">
|
||||
@endforeach
|
||||
@endif
|
||||
@if (isset($meta->genres) && $torrent->category->game_meta)
|
||||
@foreach ($meta->genres as $genre)
|
||||
<span class="genre-label">
|
||||
<i class="{{ config('other.font-awesome') }} fa-theater-masks"></i> {{ $genre['name'] }}
|
||||
</span>
|
||||
@endforeach
|
||||
@endif
|
||||
<p class="description_plot">
|
||||
@if($torrent->category->movie_meta || $torrent->category->tv_meta)
|
||||
{{ $meta->overview ?? '' }}
|
||||
@endforeach
|
||||
@endif
|
||||
<p class="description_plot">
|
||||
@if($torrent->category->movie_meta || $torrent->category->tv_meta)
|
||||
{{ $meta->overview ?? '' }}
|
||||
@endif
|
||||
|
||||
@if($torrent->category->game_meta)
|
||||
{{ $meta->summary ?? '' }}
|
||||
@endif
|
||||
</p>
|
||||
@if($torrent->category->game_meta)
|
||||
{{ $meta->summary ?? '' }}
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card_footer">
|
||||
<div style="float: left;">
|
||||
@if ($torrent->anon == 1)
|
||||
<span class="badge-user text-orange text-bold">{{ strtoupper(__('common.anonymous')) }}
|
||||
@if ($user->id === $torrent->user->id || $user->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
<div class="card_footer">
|
||||
<div style="float: left;">
|
||||
@if ($torrent->anon == 1)
|
||||
<span class="badge-user text-orange text-bold">{{ strtoupper(__('common.anonymous')) }}
|
||||
@if ($user->id === $torrent->user->id || $user->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
({{ $torrent->user->username }})
|
||||
</a>
|
||||
@endif
|
||||
@endif
|
||||
</span>
|
||||
@else
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
@else
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
<span class="badge-user text-bold"
|
||||
style="color:{{ $torrent->user->group->color }}; background-image:{{ $torrent->user->group->effect }};">
|
||||
<i class="{{ $torrent->user->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $torrent->user->group->name }}"></i>
|
||||
{{ $torrent->user->username }}
|
||||
</span>
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
<span class="badge-user text-bold" style="float: right;">
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
<span class="badge-user text-bold" style="float: right;">
|
||||
<i class="{{ config('other.font-awesome') }} fa-thumbs-up text-gold"></i>
|
||||
@if($torrent->category->movie_meta || $torrent->category->tv_meta)
|
||||
{{ round($meta->vote_average ?? 0) }}/10
|
||||
({{ $meta->vote_count ?? 0 }} {{ __('torrent.votes') }})
|
||||
@endif
|
||||
@if($torrent->category->game_meta)
|
||||
{{ round($meta->rating ?? 0) }}/100
|
||||
({{ $meta->rating_count ?? 0 }} {{ __('torrent.votes') }})
|
||||
@endif
|
||||
{{ round($meta->vote_average ?? 0) }}/10
|
||||
({{ $meta->vote_count ?? 0 }} {{ __('torrent.votes') }})
|
||||
@endif
|
||||
@if($torrent->category->game_meta)
|
||||
{{ round($meta->rating ?? 0) }}/100
|
||||
({{ $meta->rating_count ?? 0 }} {{ __('torrent.votes') }})
|
||||
@endif
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@if (! $torrents->count())
|
||||
<div class="margin-10 torrent-listings-no-result">
|
||||
{{ __('common.no-result') }}
|
||||
</div>
|
||||
@endif
|
||||
<br>
|
||||
<div class="text-center torrent-listings-pagination">
|
||||
{{ $torrents->links() }}
|
||||
@endforeach
|
||||
@if (! $torrents->count())
|
||||
<div class="margin-10 torrent-listings-no-result">
|
||||
{{ __('common.no-result') }}
|
||||
</div>
|
||||
@endif
|
||||
{{ $torrents->links('partials.pagination') }}
|
||||
</div>
|
||||
<br>
|
||||
<div class="container-fluid well torrent-listings-legend">
|
||||
<div class="text-center">
|
||||
<strong>{{ __('common.legend') }}:</strong>
|
||||
<button class='btn btn-success btn-circle torrent-listings-seeding' type='button' data-toggle='tooltip'
|
||||
title=''
|
||||
data-original-title='{{ __('torrent.currently-seeding') }}!'>
|
||||
<i class='{{ config('other.font-awesome') }} fa-arrow-up'></i>
|
||||
</button>
|
||||
<button class='btn btn-warning btn-circle torrent-listings-leeching' type='button' data-toggle='tooltip'
|
||||
title=''
|
||||
data-original-title='{{ __('torrent.currently-leeching') }}!'>
|
||||
<i class='{{ config('other.font-awesome') }} fa-arrow-down'></i>
|
||||
</button>
|
||||
<button class='btn btn-info btn-circle torrent-listings-incomplete' type='button' data-toggle='tooltip'
|
||||
title=''
|
||||
data-original-title='{{ __('torrent.not-completed') }}!'>
|
||||
<i class='{{ config('other.font-awesome') }} fa-spinner'></i>
|
||||
</button>
|
||||
<button class='btn btn-danger btn-circle torrent-listings-complete' type='button' data-toggle='tooltip'
|
||||
title=''
|
||||
data-original-title='{{ __('torrent.completed-not-seeding') }}!'>
|
||||
<i class='{{ config('other.font-awesome') }} fa-thumbs-down'></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<script nonce="{{ HDVinnie\SecureHeaders\SecureHeaders::nonce('script') }}">
|
||||
|
||||
@@ -1,384 +1,34 @@
|
||||
<div>
|
||||
<div class="container-fluid">
|
||||
<style>
|
||||
.form-group {
|
||||
margin-bottom: 5px !important;
|
||||
}
|
||||
|
||||
.badge-extra {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
<div x-data="{ open: false }" class="container box" id="torrent-list-search"
|
||||
style="margin-bottom: 0; padding: 10px 100px; border-radius: 5px;">
|
||||
<div class="mt-5">
|
||||
<div class="row">
|
||||
<div class="form-group col-xs-9">
|
||||
<input wire:model.debounce.500ms="name" type="search" class="form-control" placeholder="Name"/>
|
||||
</div>
|
||||
<div class="form-group col-xs-3">
|
||||
<button class="btn btn-md btn-primary" @click="open = ! open"
|
||||
x-text="open ? '{{ __('common.search-hide') }}' : '{{ __('common.search-advanced') }}'">
|
||||
</button>
|
||||
<div class="container-fluid">
|
||||
@include('torrent.partials.search')
|
||||
<br>
|
||||
<section class="panelV2">
|
||||
<header class="panel__header">
|
||||
<h2 class="panel__heading">{{ __('torrent.torrents') }}</h2>
|
||||
<div class="panel__actions">
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<select
|
||||
class="form__select"
|
||||
wire:model="perPage"
|
||||
required
|
||||
>
|
||||
<option>25</option>
|
||||
<option>50</option>
|
||||
<option>75</option>
|
||||
<option>100</option>
|
||||
</select>
|
||||
<label class="form__label form__label--floating">
|
||||
{{ __('common.quantity') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div x-cloak x-show="open" id="torrent-advanced-search">
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-description">
|
||||
<label for="description" class="label label-default">{{ __('torrent.description') }}</label>
|
||||
<input wire:model.debounce.500ms="description" type="text" class="form-control"
|
||||
placeholder="Description">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-mediainfo">
|
||||
<label for="mediainfo" class="label label-default">{{ __('torrent.media-info') }}</label>
|
||||
<input wire:model.debounce.500ms="mediainfo" type="text" class="form-control"
|
||||
placeholder="Mediainfo">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-keywords">
|
||||
<label for="keywords" class="label label-default">{{ __('torrent.keywords') }}</label>
|
||||
<input wire:model.debounce.500ms="keywords" type="text" class="form-control"
|
||||
placeholder="Keywords">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-uploader">
|
||||
<label for="uploader" class="label label-default">{{ __('torrent.uploader') }}</label>
|
||||
<input wire:model.debounce.500ms="uploader" type="text" class="form-control"
|
||||
placeholder="Uploader">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-tmdb">
|
||||
<label for="tmdbId" class="label label-default">TMDb</label>
|
||||
<input wire:model.debounce.500ms="tmdbId" type="text" class="form-control"
|
||||
placeholder="TMDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-imdb">
|
||||
<label for="imdbId" class="label label-default">IMDb</label>
|
||||
<input wire:model.debounce.500ms="imdbId" type="text" class="form-control"
|
||||
placeholder="IMDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-tvdb">
|
||||
<label for="tvdbId" class="label label-default">TVDb</label>
|
||||
<input wire:model.debounce.500ms="tvdbId" type="text" class="form-control"
|
||||
placeholder="TVDb ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-mal">
|
||||
<label for="malId" class="label label-default">MAL</label>
|
||||
<input wire:model.debounce.500ms="malId" type="text" class="form-control"
|
||||
placeholder="MAL ID">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-startYear">
|
||||
<label for="startYear" class="label label-default">{{ __('torrent.start-year') }}</label>
|
||||
<input wire:model.debounce.500ms="startYear" type="text" class="form-control"
|
||||
placeholder="Start Year">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-endYear">
|
||||
<label for="endYear" class="label label-default">{{ __('torrent.end-year') }}</label>
|
||||
<input wire:model.debounce.500ms="endYear" type="text" class="form-control"
|
||||
placeholder="End Year">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-playlist">
|
||||
<label for="playlist" class="label label-default">Playlist</label>
|
||||
<input wire:model.debounce.500ms="playlistId" type="text" class="form-control"
|
||||
placeholder="Playlist ID">
|
||||
</div>
|
||||
<div class="form-group col-sm-3 col-xs-6 adv-search-collection">
|
||||
<label for="collection" class="label label-default">Collection</label>
|
||||
<input wire:model.debounce.500ms="collectionId" type="text" class="form-control"
|
||||
placeholder="Collection ID">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-6 col-xs-12 adv-search-region">
|
||||
@php $regions = cache()->remember('regions', 3_600, fn () => App\Models\Region::all()->sortBy('position')) @endphp
|
||||
<label for="region" class="label label-default">Region</label>
|
||||
<div id="regions" wire:ignore></div>
|
||||
</div>
|
||||
<div class="form-group col-sm-6 col-xs-12 adv-search-distributor">
|
||||
@php $distributors = cache()->remember('distributors', 3_600, fn () => App\Models\Distributor::all()->sortBy('position')) @endphp
|
||||
<label for="distributor" class="label label-default">Distributor</label>
|
||||
<div id="distributors" wire:ignore></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-categories">
|
||||
<label for="categories" class="label label-default">{{ __('common.category') }}</label>
|
||||
@php $categories = cache()->remember('categories', 3_600, fn () => App\Models\Category::all()->sortBy('position')) @endphp
|
||||
@foreach ($categories as $category)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model.prefetch="categories"
|
||||
value="{{ $category->id }}"> {{ $category->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-types">
|
||||
<label for="types" class="label label-default">{{ __('common.type') }}</label>
|
||||
@php $types = cache()->remember('types', 3_600, fn () => App\Models\Type::all()->sortBy('position')) @endphp
|
||||
@foreach ($types as $type)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model.prefetch="types" value="{{ $type->id }}"> {{ $type->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-resolutions">
|
||||
<label for="resolutions" class="label label-default">{{ __('common.resolution') }}</label>
|
||||
@php $resolutions = cache()->remember('resolutions', 3_600, fn () => App\Models\Resolution::all()->sortBy('position')) @endphp
|
||||
@foreach ($resolutions as $resolution)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model.prefetch="resolutions"
|
||||
value="{{ $resolution->id }}"> {{ $resolution->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-genres">
|
||||
<label for="genres" class="label label-default">{{ __('common.genre') }}</label>
|
||||
@php $genres = cache()->remember('genres', 3_600, fn () => App\Models\Genre::all()->sortBy('name')) @endphp
|
||||
@foreach ($genres as $genre)
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input type="checkbox" wire:model.prefetch="genres" value="{{ $genre->id }}"> {{ $genre->name }}
|
||||
</label>
|
||||
</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-buffs">
|
||||
<label for="buffs" class="label label-default">Buff</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="0">
|
||||
0% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="25">
|
||||
25% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="50">
|
||||
50% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="75">
|
||||
75% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="free" type="checkbox" value="100">
|
||||
100% Freeleech
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="doubleup" type="checkbox" value="1">
|
||||
Double Upload
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="featured" type="checkbox" value="1">
|
||||
Featured
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-tags">
|
||||
<label for="tags" class="label label-default">Tags</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="stream" type="checkbox" value="1">
|
||||
Stream Optimized
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="sd" type="checkbox" value="1">
|
||||
SD Content
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="highspeed" type="checkbox" value="1">
|
||||
Highspeed
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-extra">
|
||||
<label for="extra" class="label label-default">{{ __('common.extra') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="internal" type="checkbox" value="1">
|
||||
Internal
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="personalRelease" type="checkbox" value="1">
|
||||
Personal Release
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-misc">
|
||||
<label for="misc" class="label label-default">Misc</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="bookmarked" type="checkbox" value="1">
|
||||
Bookmarked
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="wished" type="checkbox" value="1">
|
||||
Wished
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-health">
|
||||
<label for="health" class="label label-default">{{ __('torrent.health') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="alive" type="checkbox" value="1">
|
||||
{{ __('torrent.alive') }}
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="dying" type="checkbox" value="1">
|
||||
{{ __('torrent.dying-torrent') }}
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="dead" type="checkbox" value="1">
|
||||
{{ __('torrent.dead-torrent') }}
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-history">
|
||||
<label for="history" class="label label-default">{{ __('torrent.history') }}</label>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="notDownloaded" type="checkbox" value="1">
|
||||
Not Downloaded
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="downloaded" type="checkbox" value="1">
|
||||
Downloaded
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="seeding" type="checkbox" value="1">
|
||||
Seeding
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="leeching" type="checkbox" value="1">
|
||||
Leeching
|
||||
</label>
|
||||
</span>
|
||||
<span class="badge-user">
|
||||
<label class="inline">
|
||||
<input wire:model.prefetch="incomplete" type="checkbox" value="1">
|
||||
Incomplete
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-sm-12 col-xs-6 adv-search-quantity">
|
||||
<label for="quantity" class="label label-default">{{ __('common.quantity') }}</label>
|
||||
<span>
|
||||
<label class="inline">
|
||||
<select wire:model="perPage" class="form-control">
|
||||
<option value="25">25</option>
|
||||
<option value="50">50</option>
|
||||
<option value="100">100</option>
|
||||
</select>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="text-center">
|
||||
{{-- $torrents->links() --}}
|
||||
</div>
|
||||
<br>
|
||||
<div class="torrent-search--grouped__results block">
|
||||
<div class="dropdown torrent-listings-action-bar">
|
||||
<a class="dropdown btn btn-xs btn-success" data-toggle="dropdown" href="#" aria-expanded="true">
|
||||
{{ __('common.publish') }} {{ __('torrent.torrent') }}
|
||||
<i class="fas fa-caret-circle-right"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
@foreach($categories as $category)
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" target="_blank"
|
||||
href="{{ route('upload_form', ['category_id' => $category->id]) }}">
|
||||
<span class="menu-text">{{ $category->name }}</span>
|
||||
<span class="selected"></span>
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
<div class="torrent-search--grouped__results">
|
||||
{{ $medias->links('partials.pagination') }}
|
||||
<style>
|
||||
/* Sorting row */
|
||||
.torrent-search--grouped__sorting {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: 7fr 57fr 2.5fr 2.5fr 8.5fr 4fr 4fr 4fr 8.5fr;
|
||||
padding: 8px 2px 8px 40px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* All results */
|
||||
.torrent-search--grouped__results {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
/* --bg: #303030;
|
||||
--header-bg: #444;
|
||||
@@ -1145,17 +795,9 @@
|
||||
</article>
|
||||
@endforeach
|
||||
|
||||
@if (! $medias->count())
|
||||
<div class="margin-10 torrent-listings-no-result">
|
||||
{{ __('common.no-result') }}
|
||||
</div>
|
||||
@endif
|
||||
<br>
|
||||
<div class="text-center torrent-listings-pagination">
|
||||
{{ $medias->links() }}
|
||||
</div>
|
||||
<br>
|
||||
{{ $medias->links('partials.pagination') }}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<script nonce="{{ HDVinnie\SecureHeaders\SecureHeaders::nonce('script') }}">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,19 @@
|
||||
<header class="panel__header">
|
||||
<h2 class="panel__heading">{{ __('common.users') }}</h2>
|
||||
<div class="panel__actions">
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<input
|
||||
id="show"
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
wire:click="toggleProperties('show')"
|
||||
>
|
||||
<label class="form__label" for="show">
|
||||
Show Soft Deletes
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel__action">
|
||||
<div class="form__group">
|
||||
<select
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
<h2 class="panel__heading">{{ __('common.actions') }}</h2>
|
||||
<div class="panel__body">
|
||||
<form action="{{ route('delete-pm', ['id' => $pm->id]) }}" method="POST">
|
||||
@csrf
|
||||
<p class="form__group form__group--horizontal">
|
||||
<button class="form__button form__button--filled">
|
||||
<i class="{{ config('other.font-awesome') }} fa-trash"></i>
|
||||
|
||||
@@ -41,6 +41,11 @@
|
||||
{{ __('common.languages') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-tabV2">
|
||||
<a class="nav-tab__link" href="{{ route('themes') }}">
|
||||
Themes
|
||||
</a>
|
||||
</li>
|
||||
@endsection
|
||||
|
||||
@section('main')
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
@extends('layout.default')
|
||||
|
||||
@section('title')
|
||||
<title>{{ __('stat.stats') }} - {{ config('other.title') }}</title>
|
||||
@endsection
|
||||
|
||||
@section('breadcrumbs')
|
||||
<li class="breadcrumbV2">
|
||||
<a href="{{ route('stats') }}" class="breadcrumb__link">
|
||||
{{ __('stat.stats') }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="breadcrumb--active">
|
||||
Themes
|
||||
</li>
|
||||
@endsection
|
||||
|
||||
@section('page', 'page__stats--themes')
|
||||
|
||||
@section('main')
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">Site Stylesheets</h2>
|
||||
<div class="data-table-wrapper">
|
||||
<table class="data-table">
|
||||
@forelse ($siteThemes as $siteTheme)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>
|
||||
@switch($siteTheme->style)
|
||||
@case ('0')
|
||||
Light Theme
|
||||
@break
|
||||
@case ('1')
|
||||
Galactic Theme
|
||||
@break
|
||||
@case ('2')
|
||||
Dark Blue Theme
|
||||
@break
|
||||
@case ('3')
|
||||
Dark Green Theme
|
||||
@break
|
||||
@case ('4')
|
||||
Dark Pink Theme
|
||||
@break
|
||||
@case ('5')
|
||||
Dark Purple Theme
|
||||
@break
|
||||
@case ('6')
|
||||
Dark Red Theme
|
||||
@break
|
||||
@case ('7')
|
||||
Dark Teal Theme
|
||||
@break
|
||||
@case ('8')
|
||||
Dark Yellow Theme
|
||||
@break
|
||||
@case ('9')
|
||||
Cosmic Void Theme
|
||||
@break
|
||||
@endswitch
|
||||
</td>
|
||||
<td>Used By {{ $siteTheme->value }} Users</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="3">None Used</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">External CSS Stylesheets (Stacks on top of above site theme)</h2>
|
||||
<div class="data-table-wrapper">
|
||||
<table class="data-table">
|
||||
@forelse ($customThemes as $customTheme)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $customTheme->custom_css }}</td>
|
||||
<td>Used By {{ $customTheme->value }} Users</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="3">None Used</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">Standalone CSS Stylesheets (No site theme used)</h2>
|
||||
<div class="data-table-wrapper">
|
||||
<table class="data-table">
|
||||
@forelse ($standaloneThemes as $standaloneTheme)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $standaloneTheme->standalone_css }}</td>
|
||||
<td>Used By {{ $standaloneTheme->value }} Users</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="3">None Used</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
@@ -201,30 +201,30 @@
|
||||
{{ __('torrent.uploaded-by') }}
|
||||
@if ($torrent->anon == 1)
|
||||
<span class="badge-user text-orange text-bold">{{ strtoupper(__('common.anonymous')) }}
|
||||
@if (auth()->user()->id == $uploader->id || auth()->user()->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $uploader->username]) }}">
|
||||
({{ $uploader->username }})
|
||||
@if (auth()->user()->id == $torrent->user->id || auth()->user()->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
({{ $torrent->user->username }})
|
||||
</a>
|
||||
@endif
|
||||
</span>
|
||||
@else
|
||||
<a href="{{ route('users.show', ['username' => $uploader->username]) }}">
|
||||
<span class="badge-user text-bold" style="color:{{ $uploader->group->color }}; background-image:{{ $uploader->group->effect }};">
|
||||
<i class="{{ $uploader->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $uploader->group->name }}"></i> {{ $uploader->username }}
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
<span class="badge-user text-bold" style="color:{{ $torrent->user->group->color }}; background-image:{{ $torrent->user->group->effect }};">
|
||||
<i class="{{ $torrent->user->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $torrent->user->group->name }}"></i> {{ $torrent->user->username }}
|
||||
</span>
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@if ($torrent->anon !== 1 && $uploader->private_profile !== 1)
|
||||
@if (auth()->user()->follows()->following($uploader->id)->exists())
|
||||
@if ($torrent->anon !== 1 && $torrent->user->private_profile !== 1)
|
||||
@if (auth()->user()->follows()->following($torrent->user->id)->exists())
|
||||
<form class="form-inline" style="line-height: 0; display: inline-block;" role="form"
|
||||
action="{{ route('follow.destroy', ['username' => $uploader->username]) }}"
|
||||
action="{{ route('follow.destroy', ['username' => $torrent->user->username]) }}"
|
||||
style="display: inline-block;" method="POST">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<div class="form-group">
|
||||
<button type="submit" id="delete-follow-{{ $uploader->target_id }}"
|
||||
<button type="submit" id="delete-follow-{{ $torrent->user->id }}"
|
||||
class="btn btn-xs btn-info"
|
||||
title="{{ __('user.unfollow') }}">
|
||||
{{ __('user.unfollow') }}
|
||||
@@ -233,11 +233,11 @@
|
||||
</form>
|
||||
@else
|
||||
<form class="form-inline" style="line-height: 0; display: inline-block;" role="form"
|
||||
action="{{ route('follow.store', ['username' => $uploader->username]) }}"
|
||||
action="{{ route('follow.store', ['username' => $torrent->user->username]) }}"
|
||||
style="display: inline-block;" method="POST">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<button type="submit" id="follow-user-{{ $uploader->id }}"
|
||||
<button type="submit" id="follow-user-{{ $torrent->user->id }}"
|
||||
class="btn btn-xs btn-success"
|
||||
title="{{ __('user.follow') }}">
|
||||
{{ __('user.follow') }}
|
||||
@@ -437,30 +437,30 @@
|
||||
<td>
|
||||
@if ($torrent->anon == 1)
|
||||
<span class="badge-user text-orange text-bold">{{ strtoupper(__('common.anonymous')) }}
|
||||
@if (auth()->user()->id == $uploader->id || auth()->user()->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $uploader->username]) }}">
|
||||
({{ $uploader->username }})
|
||||
@if (auth()->user()->id == $torrent->user->id || auth()->user()->group->is_modo)
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
({{ $torrent->user->username }})
|
||||
</a>
|
||||
@endif
|
||||
</span>
|
||||
@else
|
||||
<a href="{{ route('users.show', ['username' => $uploader->username]) }}">
|
||||
<span class="badge-user text-bold" style="color:{{ $uploader->group->color }}; background-image:{{ $uploader->group->effect }};">
|
||||
<i class="{{ $uploader->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $uploader->group->name }}"></i> {{ $uploader->username }}
|
||||
<a href="{{ route('users.show', ['username' => $torrent->user->username]) }}">
|
||||
<span class="badge-user text-bold" style="color:{{ $torrent->user->group->color }}; background-image:{{ $torrent->user->group->effect }};">
|
||||
<i class="{{ $torrent->user->group->icon }}" data-toggle="tooltip"
|
||||
data-original-title="{{ $torrent->user->group->name }}"></i> {{ $torrent->user->username }}
|
||||
</span>
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@if ($torrent->anon !== 1 && $uploader->private_profile !== 1)
|
||||
@if (auth()->user()->follows()->following($uploader->id)->exists())
|
||||
@if ($torrent->anon !== 1 && $torrent->user->private_profile !== 1)
|
||||
@if (auth()->user()->follows()->following($torrent->user->id)->exists())
|
||||
<form class="form-inline" role="form"
|
||||
action="{{ route('follow.destroy', ['username' => $uploader->username]) }}"
|
||||
action="{{ route('follow.destroy', ['username' => $torrent->user->username]) }}"
|
||||
style="display: inline-block;" method="POST">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<div class="form-group">
|
||||
<button type="submit" id="delete-follow-{{ $uploader->target_id }}"
|
||||
<button type="submit" id="delete-follow-{{ $torrent->user->id }}"
|
||||
class="btn btn-xs btn-info"
|
||||
title="{{ __('user.unfollow') }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-user"></i> {{ __('user.unfollow') }}
|
||||
@@ -469,11 +469,11 @@
|
||||
</form>
|
||||
@else
|
||||
<form class="form-inline" role="form"
|
||||
action="{{ route('follow.store', ['username' => $uploader->username]) }}"
|
||||
action="{{ route('follow.store', ['username' => $torrent->user->username]) }}"
|
||||
style="display: inline-block;" method="POST">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<button type="submit" id="follow-user-{{ $uploader->id }}"
|
||||
<button type="submit" id="follow-user-{{ $torrent->user->id }}"
|
||||
class="btn btn-xs btn-success"
|
||||
title="{{ __('user.follow') }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-user"></i> {{ __('user.follow') }}
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
<br>
|
||||
@if ($torrent->keywords)
|
||||
@foreach ($torrent->keywords as $keyword)
|
||||
@foreach ($torrent->keywords->take(10) as $keyword)
|
||||
<span class="badge-user text-bold text-green">
|
||||
<a href="{{ route('torrents', ['keywords' => $keyword->name]) }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag"></i> {{ $keyword->name }}
|
||||
|
||||
@@ -0,0 +1,418 @@
|
||||
<div class="container" x-data="{ open: false }">
|
||||
<section class="panelV2">
|
||||
<h2 class="panel__heading">{{ __('common.search') }}</h2>
|
||||
<div class="panel__body" style="padding: 5px;">
|
||||
<div class="form__group--horizontal" style="display: flex; align-items: center;">
|
||||
<p class="form__group">
|
||||
<input wire:model="name" class="form__text" placeholder="" autofocus>
|
||||
<label class="form__label form__label--floating">{{ __('torrent.name') }}</label>
|
||||
</p>
|
||||
<button class="form__button form__button--outlined form__button--centered" style="white-space: nowrap; padding: 12px 12px;" @click="open = ! open"
|
||||
x-text="open ? '{{ __('common.search-hide') }}' : '{{ __('common.search-advanced') }}'">
|
||||
</button>
|
||||
</div>
|
||||
<form class="form" x-cloak x-show="open">
|
||||
<div class="form__group--short-horizontal">
|
||||
<p class="form__group">
|
||||
<input wire:model="description" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.description') }}</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="mediainfo" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.media-info') }}</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="keywords" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.keywords') }}</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="uploader" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.uploader') }}</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="form__group--short-horizontal">
|
||||
<p class="form__group">
|
||||
<input wire:model="startYear" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.start-year') }}</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="endYear" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">{{ __('torrent.end-year') }}</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="playlist" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">Playlist</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="collection" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">Collection</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="form__group--short-horizontal">
|
||||
<div class="row">
|
||||
<div class="col-sm-6 col-xs-12 adv-search-region">
|
||||
@php $regions = cache()->remember('regions', 3_600, fn () => App\Models\Region::all()->sortBy('position')) @endphp
|
||||
<div id="regions" wire:ignore></div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xs-12 adv-search-distributor">
|
||||
@php $distributors = cache()->remember('distributors', 3_600, fn () => App\Models\Distributor::all()->sortBy('position')) @endphp
|
||||
<div id="distributors" wire:ignore></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form__group--short-horizontal">
|
||||
<p class="form__group">
|
||||
<input wire:model="tmdbId" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">TMDb ID</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="imdbId" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">IMDb ID</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="tvdbId" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">TVDb ID</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<input wire:model="malId" class="form__text" placeholder="">
|
||||
<label class="form__label form__label--floating">MAL ID</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="form__group--short-horizontal">
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.category') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
@php $categories = cache()->remember('categories', 3_600, fn () => App\Models\Category::all()->sortBy('position')) @endphp
|
||||
@foreach ($categories as $category)
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="{{ $category->id }}"
|
||||
wire:model="categories"
|
||||
>
|
||||
{{ $category->name }}
|
||||
</label>
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.type') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
@php $types = cache()->remember('types', 3_600, fn () => App\Models\Type::all()->sortBy('position')) @endphp
|
||||
@foreach ($types as $type)
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="{{ $type->id }}"
|
||||
wire:model="types"
|
||||
>
|
||||
{{ $type->name }}
|
||||
</label>
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.resolution') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
@php $resolutions = cache()->remember('resolutions', 3_600, fn () => App\Models\Resolution::all()->sortBy('position')) @endphp
|
||||
@foreach ($resolutions as $resolution)
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="{{ $resolution->id }}"
|
||||
wire:model="resolutions"
|
||||
>
|
||||
{{ $resolution->name }}
|
||||
</label>
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.genre') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
@php $genres = cache()->remember('genres', 3_600, fn () => App\Models\Genre::all()->sortBy('name')) @endphp
|
||||
@foreach ($genres as $genre)
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="{{ $genre->id }}"
|
||||
wire:model="genres"
|
||||
>
|
||||
{{ $genre->name }}
|
||||
</label>
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">Buff</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="0"
|
||||
wire:model="free"
|
||||
>
|
||||
0% Freeleech
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="25"
|
||||
wire:model="free"
|
||||
>
|
||||
25% Freeleech
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="50"
|
||||
wire:model="free"
|
||||
>
|
||||
50% Freeleech
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="75"
|
||||
wire:model="free"
|
||||
>
|
||||
75% Freeleech
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="100"
|
||||
wire:model="free"
|
||||
>
|
||||
100% Freeleech
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="doubleup"
|
||||
>
|
||||
Double Upload
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="featured"
|
||||
>
|
||||
Featured
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">Tags</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="internal"
|
||||
>
|
||||
{{ __('torrent.internal') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="personalRelease"
|
||||
>
|
||||
{{ __('torrent.personal-release') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="stream"
|
||||
>
|
||||
{{ __('torrent.stream-optimized') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="sd"
|
||||
>
|
||||
{{ __('torrent.sd-content') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="highspeed"
|
||||
>
|
||||
{{ __('common.high-speeds') }}
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.health') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="alive"
|
||||
>
|
||||
{{ __('torrent.alive') }}
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="dying"
|
||||
>
|
||||
Dying
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="dead"
|
||||
>
|
||||
Dead
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<fieldset class="form__fieldset">
|
||||
<legend class="form__legend">{{ __('torrent.history') }}</legend>
|
||||
<div class="form__fieldset-checkbox-container">
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="notDownloaded"
|
||||
>
|
||||
Not Downloaded
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="downloaded"
|
||||
>
|
||||
Downloaded
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="seeding"
|
||||
>
|
||||
Seeding
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="leeching"
|
||||
>
|
||||
Leeching
|
||||
</label>
|
||||
</p>
|
||||
<p class="form__group">
|
||||
<label class="form__label">
|
||||
<input
|
||||
class="form__checkbox"
|
||||
type="checkbox"
|
||||
value="1"
|
||||
wire:model="incomplete"
|
||||
>
|
||||
Incomplete
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -9,13 +9,13 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="display: flex; justify-content: space-around; padding: 10px 0">
|
||||
@if (auth()->user()->group->is_modo || auth()->user()->id === $uploader->id)
|
||||
@if (auth()->user()->group->is_modo || auth()->user()->id === $torrent->user->id)
|
||||
<div class="torrent-editing-controls">
|
||||
<a class="btn btn-warning btn-xs" href="{{ route('edit_form', ['id' => $torrent->id]) }}"
|
||||
role="button">
|
||||
<i class="{{ config('other.font-awesome') }} fa-pencil-alt"></i> {{ __('common.edit') }}
|
||||
</a>
|
||||
@if (auth()->user()->group->is_modo || ( auth()->user()->id === $uploader->id && Illuminate\Support\Carbon::now()->lt($torrent->created_at->addDay())))
|
||||
@if (auth()->user()->group->is_modo || ( auth()->user()->id === $torrent->user->id && Illuminate\Support\Carbon::now()->lt($torrent->created_at->addDay())))
|
||||
<button class="btn btn-danger btn-xs" data-toggle="modal"
|
||||
data-target="#modal_torrent_delete">
|
||||
<i class="{{ config('other.font-awesome') }} fa-times"></i> {{ __('common.delete') }}
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
<br>
|
||||
@if ($torrent->keywords)
|
||||
@foreach ($torrent->keywords as $keyword)
|
||||
@foreach ($torrent->keywords->take(10) as $keyword)
|
||||
<span class="badge-user text-bold text-green">
|
||||
<a href="{{ route('torrents', ['keywords' => $keyword->name]) }}">
|
||||
<i class="{{ config('other.font-awesome') }} fa-tag"></i> {{ $keyword->name }}
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
@include('torrent.partials.general')
|
||||
|
||||
{{-- Tools Block --}}
|
||||
@if (auth()->user()->group->is_modo || auth()->user()->id === $uploader->id || auth()->user()->group->is_internal)
|
||||
@if (auth()->user()->group->is_modo || auth()->user()->id === $torrent->user->id || auth()->user()->group->is_internal)
|
||||
@include('torrent.partials.tools')
|
||||
@endif
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
@if ($watched && auth()->user()->group->is_modo)
|
||||
<i class="{{ config('other.font-awesome') }} fa-eye fa-beat text-danger"
|
||||
aria-hidden="true" data-toggle="tooltip"
|
||||
title="" data-original-title="User is being watched!">
|
||||
title="" data-original-title="Watched reason: {{ $watched->message }}">
|
||||
</i>
|
||||
@endif
|
||||
</h2>
|
||||
|
||||
@@ -154,6 +154,7 @@ Route::group(['middleware' => 'language'], function () {
|
||||
Route::get('/groups', [App\Http\Controllers\StatsController::class, 'groups'])->name('groups');
|
||||
Route::get('/groups/group/{id}', [App\Http\Controllers\StatsController::class, 'group'])->name('group');
|
||||
Route::get('/languages', [App\Http\Controllers\StatsController::class, 'languages'])->name('languages');
|
||||
Route::get('/themes', [App\Http\Controllers\StatsController::class, 'themes'])->name('themes');
|
||||
});
|
||||
|
||||
// Private Messages System
|
||||
|
||||
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
|
||||
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
return new class () extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
|
||||
@@ -73,11 +73,15 @@ class ForumControllerTest extends TestCase
|
||||
$this->seed(UsersTableSeeder::class);
|
||||
$this->seed(GroupsTableSeeder::class);
|
||||
|
||||
$user = User::factory()->create();
|
||||
|
||||
// This Forum does not have a parent, which makes it a proper Forum
|
||||
// (and not a "Forum Category").
|
||||
|
||||
$forum = Forum::factory()->create([
|
||||
'parent_id' => 0,
|
||||
'parent_id' => 0,
|
||||
'last_post_user_id' => $user->id,
|
||||
'last_post_user_username' => $user->username,
|
||||
]);
|
||||
|
||||
$permissions = Permission::factory()->create([
|
||||
@@ -85,10 +89,6 @@ class ForumControllerTest extends TestCase
|
||||
'show_forum' => true,
|
||||
]);
|
||||
|
||||
$user = User::factory()->create([
|
||||
'group_id' => $permissions['group_id'],
|
||||
]);
|
||||
|
||||
$this->actingAs($user)->get(route('forums.show', ['id' => $forum->id]))
|
||||
->assertRedirect(route('forums.categories.show', ['id' => $forum->id]));
|
||||
}
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
namespace Tests\Feature\Http\Controllers\Staff;
|
||||
|
||||
use App\Http\Livewire\NoteSearch;
|
||||
use App\Models\Group;
|
||||
use App\Models\Note;
|
||||
use App\Models\User;
|
||||
use Database\Seeders\GroupsTableSeeder;
|
||||
use Livewire\Livewire;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
@@ -54,11 +56,10 @@ class NoteControllerTest extends TestCase
|
||||
|
||||
$user = $this->createStaffUser();
|
||||
|
||||
$response = $this->actingAs($user)->get(route('staff.notes.index'));
|
||||
$this->actingAs($user)->get(route('staff.notes.index'));
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertViewIs('Staff.note.index');
|
||||
$response->assertViewHas('notes');
|
||||
$component = Livewire::test(NoteSearch::class);
|
||||
$component->assertStatus(200);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+13
-7
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Http\Controllers;
|
||||
namespace Tests\Todo\Feature\Http\Controllers;
|
||||
|
||||
use App\Models\Forum;
|
||||
use App\Models\Permission;
|
||||
@@ -17,6 +17,8 @@ class ForumCategoryControllerTest extends TestCase
|
||||
/** @test */
|
||||
public function show_category_returns_an_ok_response(): void
|
||||
{
|
||||
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
|
||||
|
||||
$this->seed(UsersTableSeeder::class);
|
||||
$this->seed(GroupsTableSeeder::class);
|
||||
|
||||
@@ -31,7 +33,9 @@ class ForumCategoryControllerTest extends TestCase
|
||||
]);
|
||||
|
||||
$forum = Forum::factory()->create([
|
||||
'parent_id' => $parentForum->id,
|
||||
'parent_id' => $parentForum->id,
|
||||
'last_post_user_id' => $user->id,
|
||||
'last_post_user_username' => $user->username,
|
||||
]);
|
||||
|
||||
$this->actingAs($user)->get(route('forums.categories.show', ['id' => $forum->id]))
|
||||
@@ -41,14 +45,20 @@ class ForumCategoryControllerTest extends TestCase
|
||||
/** @test */
|
||||
public function show_forum_returns_an_ok_response(): void
|
||||
{
|
||||
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
|
||||
|
||||
$this->seed(UsersTableSeeder::class);
|
||||
$this->seed(GroupsTableSeeder::class);
|
||||
|
||||
$user = User::factory()->create();
|
||||
|
||||
// This Forum does not have a parent, which makes it a proper Forum
|
||||
// (and not a "Forum Category").
|
||||
|
||||
$forum = Forum::factory()->create([
|
||||
'parent_id' => 0,
|
||||
'parent_id' => 0,
|
||||
'last_post_user_id' => $user->id,
|
||||
'last_post_user_username' => $user->username,
|
||||
]);
|
||||
|
||||
$permissions = Permission::factory()->create([
|
||||
@@ -56,10 +66,6 @@ class ForumCategoryControllerTest extends TestCase
|
||||
'show_forum' => true,
|
||||
]);
|
||||
|
||||
$user = User::factory()->create([
|
||||
'group_id' => $permissions['group_id'],
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->get(route('forums.categories.show', ['id' => $forum->id]));
|
||||
|
||||
$response->assertOk()
|
||||
+5
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Http\Controllers\Staff;
|
||||
namespace Tests\Todo\Feature\Http\Controllers\Staff;
|
||||
|
||||
use App\Models\Group;
|
||||
use App\Models\User;
|
||||
@@ -33,6 +33,8 @@ class GiftControllerTest extends TestCase
|
||||
*/
|
||||
public function index_returns_an_ok_response(): void
|
||||
{
|
||||
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
|
||||
|
||||
$this->seed(GroupsTableSeeder::class);
|
||||
|
||||
$user = $this->createStaffUser();
|
||||
@@ -48,6 +50,8 @@ class GiftControllerTest extends TestCase
|
||||
*/
|
||||
public function store_returns_an_ok_response(): void
|
||||
{
|
||||
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
|
||||
|
||||
$this->seed(GroupsTableSeeder::class);
|
||||
|
||||
$staff = $this->createStaffUser();
|
||||
Reference in New Issue
Block a user