Merge branch '6.x.x' into Refund-System

This commit is contained in:
HDVinnie
2022-12-15 17:30:03 -05:00
committed by GitHub
81 changed files with 5297 additions and 4149 deletions
+1 -11
View File
@@ -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
+2 -3
View File
@@ -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,
+1 -1
View File
@@ -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');
}
/**
+18
View File
@@ -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,
]);
}
}
+3 -6
View File
@@ -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,
+5 -1
View File
@@ -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();
+8 -14
View File
@@ -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
+53
View File
@@ -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,
]);
}
}
+22
View File
@@ -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);
}
-4
View File
@@ -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))
-13
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
-39
View File
@@ -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
View File
@@ -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');
}
};
+238 -238
View File
@@ -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": {}
}
+4
View File
@@ -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,
+10
View File
@@ -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));
}
}
+5
View File
@@ -6,3 +6,8 @@
background-color: inherit;
max-width: 100%;
}
.form--horizontal {
flex-direction: row;
padding-top: 0;
}
+242
View File
@@ -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);
}
+18
View File
@@ -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;
+15
View File
@@ -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;
+15
View File
@@ -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;
+1 -71
View File
@@ -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>
+43 -104
View File
@@ -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
+80 -131
View File
@@ -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
+33 -29
View File
@@ -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
+51 -104
View File
@@ -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
+42 -109
View File
@@ -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
+41 -97
View File
@@ -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
+22 -36
View File
@@ -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
+10 -12
View File
@@ -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>
+301 -400
View File
@@ -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' : '' }}>
&raquo; {{ $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)
>
&raquo; {{ $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
+302 -381
View File
@@ -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' : '' }}>
&raquo; {{ $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)
>
&raquo; {{ $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
+10 -9
View File
@@ -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>
+45 -156
View File
@@ -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
+255 -360
View File
@@ -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')
+2 -2
View File
@@ -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>
+12 -7
View File
@@ -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>&nbsp;
<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>&nbsp;
<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>&nbsp;
<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>&nbsp;
</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
+1
View File
@@ -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>
+5
View File
@@ -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 }}
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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>
+1
View File
@@ -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
+1 -2
View File
@@ -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 -3
View File
@@ -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.
*
+1 -2
View File
@@ -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);
}
/**
@@ -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()
@@ -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();