feat/factory_creation #1
@ -10,6 +10,9 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./site:/var/www/html
|
- ./site:/var/www/html
|
||||||
- ./static:/static
|
- ./static:/static
|
||||||
|
- ./nginx/default.conf:/etc/nginx/sites-available/default
|
||||||
|
- ./nginx/legacy_mappings.conf:/etc/nginx/snippets/legacy_mappings.conf
|
||||||
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
|
||||||
#- ./legacypublic:/legacypublic
|
#- ./legacypublic:/legacypublic
|
||||||
environment:
|
environment:
|
||||||
TZ: UTC
|
TZ: UTC
|
||||||
|
46
nginx/default.conf
Normal file
46
nginx/default.conf
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
server_name _;
|
||||||
|
root /var/www/html/public;
|
||||||
|
index index.html index.htm index.php;
|
||||||
|
|
||||||
|
# SSL
|
||||||
|
ssl_certificate /etc/ssl/web/server.crt;
|
||||||
|
ssl_certificate_key /etc/ssl/web/server.key;
|
||||||
|
|
||||||
|
# additional config
|
||||||
|
include extra.d/*.conf;
|
||||||
|
|
||||||
|
# health check
|
||||||
|
location /ping {
|
||||||
|
access_log off;
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
fastcgi_read_timeout 5s;
|
||||||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /assets {
|
||||||
|
set $modified_filename "";
|
||||||
|
if ($filename) {
|
||||||
|
set $modified_filename $filename;
|
||||||
|
}
|
||||||
|
rewrite ^ /legacy-asset?asset=$modified_filename last;
|
||||||
|
}
|
||||||
|
|
||||||
|
# handle .php
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
# index.php fallback
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
nginx/legacy_mappings.conf
Normal file
11
nginx/legacy_mappings.conf
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#snippets/legacy_mappings.conf
|
||||||
|
|
||||||
|
map $uri $legacy_mapping {
|
||||||
|
~^/assets/(?<filename>.+)$ $filename;
|
||||||
|
default $uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
map $filename $modified_filename {
|
||||||
|
~/(.*) $1---;
|
||||||
|
default $filename;
|
||||||
|
}
|
146
nginx/nginx.conf
Normal file
146
nginx/nginx.conf
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
# Generated by nginxconfig.io
|
||||||
|
# https://www.serverion.com/nginx-config/#?0.domain=_&0.path=%2Fvar%2Fwww%2Fhtml&0.redirect=false&0.force_https=false&0.cert_type=custom&0.ssl_certificate=%2Fetc%2Fssl%2Fweb%2Fserver.crt&0.ssl_certificate_key=%2Fetc%2Fssl%2Fweb%2Fserver.key&0.wordpress&0.proxy_path=%2Fping&0.proxy_pass=unix:%2Fvar%2Frun%2Fphp%2Fphp-fpm.sock&0.index=index.html&content_security_policy=default-src%20'self'%20http:%20https:%20data:%20blob:%20'unsafe-inline';%20frame-ancestors%20'self';&php_server=%2Fvar%2Frun%2Fphp%2Fphp7.3-fpm.sock&expires_media=max&expires_svg=max&expires_fonts=max&user=www-data%20www-data&client_max_body_size=2048&symlink=false
|
||||||
|
|
||||||
|
pcre_jit on;
|
||||||
|
worker_processes auto;
|
||||||
|
worker_rlimit_nofile 100000;
|
||||||
|
user www-data www-data;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 65535;
|
||||||
|
use epoll;
|
||||||
|
multi_accept on;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
# define common MIME types
|
||||||
|
include mime.types;
|
||||||
|
|
||||||
|
# define the default MIME type
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
# disable emitting nginx version
|
||||||
|
server_tokens off;
|
||||||
|
|
||||||
|
# disable the directory listing output
|
||||||
|
autoindex off;
|
||||||
|
|
||||||
|
# disable automatic generation of the "ETag"
|
||||||
|
etag off;
|
||||||
|
|
||||||
|
# disable warnings about uninitialized variables are logged
|
||||||
|
uninitialized_variable_warn off;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
# the bucket size for the maps hash table
|
||||||
|
map_hash_bucket_size 256;
|
||||||
|
map_hash_max_size 4096;
|
||||||
|
|
||||||
|
# the bucket size for the server names hash tables
|
||||||
|
server_names_hash_bucket_size 256;
|
||||||
|
server_names_hash_max_size 4096;
|
||||||
|
|
||||||
|
# the bucket size for variables hash tables
|
||||||
|
variables_hash_max_size 4096;
|
||||||
|
variables_hash_bucket_size 4096;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
# cache informations about FDs, frequently accessed files
|
||||||
|
# can boost performance, but you need to test those values
|
||||||
|
open_file_cache max=200000 inactive=30s;
|
||||||
|
open_file_cache_valid 30s;
|
||||||
|
open_file_cache_min_uses 1;
|
||||||
|
open_file_cache_errors off;
|
||||||
|
open_log_file_cache max=10 inactive=30s min_uses=1 valid=5m;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
# logging
|
||||||
|
access_log /var/log/nginx/access.log;
|
||||||
|
error_log /var/log/nginx/error.log error;
|
||||||
|
|
||||||
|
# to boost I/O on HDD we can disable access logs
|
||||||
|
log_not_found off;
|
||||||
|
log_subrequest off;
|
||||||
|
rewrite_log on;
|
||||||
|
|
||||||
|
# copies data between one FD and other from within the kernel
|
||||||
|
# faster than read() + write()
|
||||||
|
sendfile off;
|
||||||
|
sendfile_max_chunk 1m;
|
||||||
|
|
||||||
|
# send headers in one piece, it is better than sending them one by one
|
||||||
|
tcp_nopush on;
|
||||||
|
|
||||||
|
# don't buffer data sent, good for small data bursts in real time
|
||||||
|
tcp_nodelay on;
|
||||||
|
|
||||||
|
# large files can be read and sent using multi-threading
|
||||||
|
# without blocking a worker process
|
||||||
|
aio threads;
|
||||||
|
directio 1m;
|
||||||
|
|
||||||
|
# how to compare modification time
|
||||||
|
ssi on;
|
||||||
|
if_modified_since off;
|
||||||
|
|
||||||
|
# set default size of the slice
|
||||||
|
slice 1m;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
# allow the server to close connection on non responding client,
|
||||||
|
# this will free up memory
|
||||||
|
reset_timedout_connection on;
|
||||||
|
|
||||||
|
# timeout for reading client request header -- default: 60
|
||||||
|
client_header_timeout 10s;
|
||||||
|
|
||||||
|
# request timed out -- default: 60
|
||||||
|
client_body_timeout 75s;
|
||||||
|
|
||||||
|
# if the request body size is more than the buffer size, then the entire (or partial)
|
||||||
|
# request body is written into a temporary file
|
||||||
|
client_body_buffer_size 128k;
|
||||||
|
|
||||||
|
# if client stop responding, free up memory -- default: 60
|
||||||
|
send_timeout 30s;
|
||||||
|
|
||||||
|
# server will close connection after this time -- default: 75
|
||||||
|
keepalive_timeout 30s;
|
||||||
|
|
||||||
|
# number of requests client can make over keep-alive
|
||||||
|
keepalive_requests 100000;
|
||||||
|
|
||||||
|
# maximum number and size of buffers
|
||||||
|
# for large headers to read from client request -- default: 4 8k;
|
||||||
|
large_client_header_buffers 4 16k;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
# SSL
|
||||||
|
ssl_session_timeout 1d;
|
||||||
|
ssl_session_cache shared:SSL:10m;
|
||||||
|
ssl_session_tickets off;
|
||||||
|
|
||||||
|
# Diffie-Hellman parameter for DHE ciphersuites
|
||||||
|
ssl_dhparam /etc/ssl/dhparam.pem;
|
||||||
|
|
||||||
|
# Mozilla Intermediate configuration
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||||
|
|
||||||
|
# OCSP Stapling
|
||||||
|
# ssl_stapling on;
|
||||||
|
# ssl_stapling_verify on;
|
||||||
|
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
|
||||||
|
resolver_timeout 2s;
|
||||||
|
|
||||||
|
# ======================================================================== #
|
||||||
|
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
include /etc/nginx/snippets/legacy_mappings.conf;
|
||||||
|
include /etc/nginx/sites-enabled/*;
|
||||||
|
}
|
1977
nginx/phpfpm8_2.ini
Normal file
1977
nginx/phpfpm8_2.ini
Normal file
File diff suppressed because it is too large
Load Diff
46
site/app/Console/Commands/LegacyNginxMappingCommand.php
Normal file
46
site/app/Console/Commands/LegacyNginxMappingCommand.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use App\Models\Artwork;
|
||||||
|
|
||||||
|
class LegacyNginxMappingCommand extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'naart:legacy-nginx-mapping';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Command description';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$oldLocations = [];
|
||||||
|
$newLocations = [];
|
||||||
|
$this->line('# legacy_mappings.conf');
|
||||||
|
$this->line('');
|
||||||
|
$this->line('map $uri $new_location {');
|
||||||
|
$artworks = Artwork::whereNotNull('legacy_filename')->get();
|
||||||
|
foreach ($artworks as $artwork) {
|
||||||
|
if (!in_array($artwork->legacy_filename, $oldLocations) && !in_array($artwork->legacy_filename, $newLocations)) {
|
||||||
|
$oldLocations[] = $artwork->legacy_filename;
|
||||||
|
$newLocations[] = $artwork->legacy_filename;
|
||||||
|
$this->line(' "' . $artwork->legacy_filename . '" "/legacy-asset/?legacy_filename=' . urlencode($artwork->legacy_filename) . '";');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->line(' default $uri;');
|
||||||
|
$this->line('}');
|
||||||
|
$this->line('');
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,9 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
|
use App\Models\Artwork;
|
||||||
|
use App\Models\Podcast;
|
||||||
|
use App\Models\Episode;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class ArtistController extends Controller
|
class ArtistController extends Controller
|
||||||
@ -14,7 +17,18 @@ class ArtistController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
//
|
$user = auth()->user();
|
||||||
|
$artists = Artist::whereHas('artworks')
|
||||||
|
->withCount('artworks')
|
||||||
|
->orderBy('artworks_count', 'desc')
|
||||||
|
->paginate(100);
|
||||||
|
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
||||||
|
return view('profile.artists', [
|
||||||
|
'user' => $user,
|
||||||
|
'pageTitle' => 'Artists',
|
||||||
|
'podcasts' => $podcasts,
|
||||||
|
'artists' => $artists,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,9 +58,23 @@ public function store(Request $request)
|
|||||||
* @param \App\Models\Artist $artist
|
* @param \App\Models\Artist $artist
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function show(Artist $artist)
|
public function show(Request $request, $slug)
|
||||||
{
|
{
|
||||||
//
|
$user = auth()->user();
|
||||||
|
$artist = Artist::where('slug', $slug)
|
||||||
|
->firstOrFail();
|
||||||
|
$artworks = Artwork::where('artist_id', $artist->id)
|
||||||
|
->with('episode')
|
||||||
|
->with('podcast')
|
||||||
|
->orderBy('artworks.created_at', 'desc')
|
||||||
|
->paginate($perPage = 92, $columns = ['*'], $pageName = 'artworks');
|
||||||
|
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
||||||
|
return view('profile.artist', [
|
||||||
|
'user' => $user,
|
||||||
|
'artist' => $artist,
|
||||||
|
'artworks' => $artworks,
|
||||||
|
'podcasts' => $podcasts,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,7 +30,7 @@ public function index()
|
|||||||
->with('artist')
|
->with('artist')
|
||||||
->orderBy('episode_id', 'desc')
|
->orderBy('episode_id', 'desc')
|
||||||
->orderBy('created_at', 'desc')
|
->orderBy('created_at', 'desc')
|
||||||
->paginate($perPage = 100, $columns = ['*'], $pageName = 'artworks');
|
->paginate($perPage = 3, $columns = ['*'], $pageName = 'artworks');
|
||||||
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
||||||
return view('explore.artworks', [
|
return view('explore.artworks', [
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
@ -170,4 +170,11 @@ public function destroy(Artwork $artwork)
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function legacyArtLink(Request $request, $any = null)
|
||||||
|
{
|
||||||
|
phpinfo();
|
||||||
|
dd($request->path());
|
||||||
|
//$artwork = Artwork::where('legacy_filename', '/assets/artwork/')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,12 @@
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Models\Artist;
|
||||||
use App\Providers\RouteServiceProvider;
|
use App\Providers\RouteServiceProvider;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Validation\Rules;
|
use Illuminate\Validation\Rules;
|
||||||
@ -31,17 +33,24 @@ public function create(): View
|
|||||||
public function store(Request $request): RedirectResponse
|
public function store(Request $request): RedirectResponse
|
||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['unique:artists,name', 'required', 'string', 'max:255'],
|
||||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
|
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
|
||||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user = User::create([
|
$user = User::create([
|
||||||
'name' => $request->name,
|
'name' => trim($request->name),
|
||||||
'email' => $request->email,
|
'email' => trim(strtolower($request->email)),
|
||||||
'password' => Hash::make($request->password),
|
'password' => Hash::make($request->password),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$artist = Artist::create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'name' => trim($request->name),
|
||||||
|
'slug' => Str::slug(trim($request->name)),
|
||||||
|
'location' => 'No Agenda Nation',
|
||||||
|
]);
|
||||||
|
|
||||||
event(new Registered($user));
|
event(new Registered($user));
|
||||||
|
|
||||||
Auth::login($user);
|
Auth::login($user);
|
||||||
|
@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Episode;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Models\Podcast;
|
||||||
|
use App\Models\Artworks;
|
||||||
|
use App\Models\Episode;
|
||||||
|
|
||||||
class EpisodeController extends Controller
|
class EpisodeController extends Controller
|
||||||
{
|
{
|
||||||
@ -44,9 +48,26 @@ public function store(Request $request)
|
|||||||
* @param \App\Models\Episode $episode
|
* @param \App\Models\Episode $episode
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function show(Episode $episode)
|
public function show(Request $request, $podcast_slug, $slug)
|
||||||
{
|
{
|
||||||
//
|
$user = auth()->user();
|
||||||
|
$episode = Episode::where('slug', $slug)
|
||||||
|
->with('artworks')
|
||||||
|
->with('artwork')
|
||||||
|
->with('podcast')
|
||||||
|
->firstOrFail();
|
||||||
|
$podcasts = Podcast::where('published', true)->with('episodes', function ($query) {
|
||||||
|
$query->orderBy('episode_number', 'desc');
|
||||||
|
$query->where('published', true);
|
||||||
|
$query->take(10);
|
||||||
|
})->get();
|
||||||
|
return view('episodes.episode', [
|
||||||
|
'user' => $user,
|
||||||
|
'pageTitle' => '"' . $episode->title . '" ' . $episode->podcast->name . ' Episode ' . number_format($episode->episode_number + 0),
|
||||||
|
'podcast' => $episode->podcast,
|
||||||
|
'episode' => $episode,
|
||||||
|
'podcasts' => $podcasts,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3,8 +3,34 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Models\Podcast;
|
||||||
|
use App\Models\Artworks;
|
||||||
|
use App\Models\Episode;
|
||||||
|
|
||||||
|
|
||||||
class PodcastController extends Controller
|
class PodcastController extends Controller
|
||||||
{
|
{
|
||||||
//
|
public function show(Request $request, $slug)
|
||||||
|
{
|
||||||
|
$user = auth()->user();
|
||||||
|
$podcast = Podcast::where('slug', $slug)
|
||||||
|
->where('published', true)
|
||||||
|
->firstOrFail();
|
||||||
|
$episodes = Episode::where('published', true)
|
||||||
|
->whereNotNull('artwork_id')
|
||||||
|
->with('artwork')
|
||||||
|
->with('artworks')
|
||||||
|
->where('podcast_id', $podcast->id)
|
||||||
|
->orderBy('episode_number', 'desc')->paginate(100);
|
||||||
|
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
||||||
|
return view('podcasts.podcast', [
|
||||||
|
'user' => $user,
|
||||||
|
'pageTitle' => $podcast->name,
|
||||||
|
'podcast' => $podcast,
|
||||||
|
'episodes' => $episodes,
|
||||||
|
'podcasts' => $podcasts,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,12 @@ class Themeswitch extends Component
|
|||||||
|
|
||||||
public function light()
|
public function light()
|
||||||
{
|
{
|
||||||
session(['preferred_theme' => 'light']);
|
session()->put('preferred_theme', 'light');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dark()
|
public function dark()
|
||||||
{
|
{
|
||||||
session(['preferred_theme' => 'dark']);
|
session()->put('preferred_theme', 'dark');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
|
@ -22,9 +22,23 @@ class Artist extends Model
|
|||||||
'deleted_at' => 'datetime',
|
'deleted_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'user_id',
|
||||||
|
'name',
|
||||||
|
'slug',
|
||||||
|
'avatar',
|
||||||
|
'header',
|
||||||
|
'location',
|
||||||
|
'website',
|
||||||
|
'bio',
|
||||||
|
'created_at',
|
||||||
|
'updated_at',
|
||||||
|
'deleted_at',
|
||||||
|
];
|
||||||
|
|
||||||
public function user()
|
public function user()
|
||||||
{
|
{
|
||||||
return $this->belongs_to(User::class);
|
return $this->belongsTo(User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function artworks()
|
public function artworks()
|
||||||
|
@ -31,6 +31,11 @@ public function artwork()
|
|||||||
return $this->hasOne(Artwork::class, 'id', 'artwork_id');
|
return $this->hasOne(Artwork::class, 'id', 'artwork_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function artworks()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Artwork::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function artist()
|
public function artist()
|
||||||
{
|
{
|
||||||
return $this->hasOneThrough(Artist::class, Artwork::class);
|
return $this->hasOneThrough(Artist::class, Artwork::class);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
use Illuminate\Support\Facades\Str;
|
||||||
|
|
||||||
class ArtistFactory extends Factory
|
class ArtistFactory extends Factory
|
||||||
{
|
{
|
||||||
@ -22,9 +23,12 @@ class ArtistFactory extends Factory
|
|||||||
*/
|
*/
|
||||||
public function definition()
|
public function definition()
|
||||||
{
|
{
|
||||||
|
$name = fake()->name();
|
||||||
|
$slug = Str::slug(strtolower(trim($name)));
|
||||||
return [
|
return [
|
||||||
'user_id' => User::factory(),
|
'user_id' => User::factory(),
|
||||||
'name' => fake()->name(),
|
'name' => $name,
|
||||||
|
'slug' => $slug,
|
||||||
'avatar' => fake()->imageUrl(512, 512),
|
'avatar' => fake()->imageUrl(512, 512),
|
||||||
'header' => fake()->imageUrl(270, 185),
|
'header' => fake()->imageUrl(270, 185),
|
||||||
'location' => fake()->city() . ', ' . fake()->state(),
|
'location' => fake()->city() . ', ' . fake()->state(),
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('artists', function (Blueprint $table) {
|
||||||
|
$table->string('slug')->after('name');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('artists', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('slug');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -20,6 +20,7 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"aos": "^3.0.0-beta.6",
|
"aos": "^3.0.0-beta.6",
|
||||||
|
"guillotine": "^1.3.1",
|
||||||
"isotope-layout": "^3.0.6",
|
"isotope-layout": "^3.0.6",
|
||||||
"jquery": "^3.7.0",
|
"jquery": "^3.7.0",
|
||||||
"jquery-nice-select": "^1.1.0",
|
"jquery-nice-select": "^1.1.0",
|
||||||
|
BIN
site/resources/img/artist-banner-default.png
Normal file
BIN
site/resources/img/artist-banner-default.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
site/resources/img/artist-dark-banner-default.png
Normal file
BIN
site/resources/img/artist-dark-banner-default.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
3
site/resources/img/dk-artist-bg.png:Zone.Identifier
Normal file
3
site/resources/img/dk-artist-bg.png:Zone.Identifier
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
HostUrl=about:internet
|
3
site/resources/img/lt-artist-bg.png:Zone.Identifier
Normal file
3
site/resources/img/lt-artist-bg.png:Zone.Identifier
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
HostUrl=about:internet
|
@ -70,7 +70,9 @@ Modified by : Paul Couture (bonked@noagendaartgenerator.com)
|
|||||||
@import "components/signup";
|
@import "components/signup";
|
||||||
@import "components/not-found";
|
@import "components/not-found";
|
||||||
@import "components/footer";
|
@import "components/footer";
|
||||||
|
@import "components/auth";
|
||||||
@import "components/nft-gallery";
|
@import "components/nft-gallery";
|
||||||
@import "./../css/vendor/nice-select.css";
|
@import "./../css/vendor/nice-select.css";
|
||||||
@import "components/light-version";
|
@import "components/light-version";
|
||||||
@import "components/pagination";
|
@import "components/pagination";
|
||||||
|
|
||||||
|
10
site/resources/scss/components/_auth.scss
Normal file
10
site/resources/scss/components/_auth.scss
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.authbox {
|
||||||
|
background: $bg-color-1;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 10px;
|
||||||
|
transition: 0.3s;
|
||||||
|
border: 1px solid $bg-color-1;
|
||||||
|
&.button[type=submit] {
|
||||||
|
background: $color-primary;
|
||||||
|
}
|
||||||
|
}
|
@ -143,3 +143,11 @@
|
|||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.alert {
|
||||||
|
&.alert-warning {
|
||||||
|
strong {
|
||||||
|
color: #664d03;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -121,6 +121,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.slider-activation-banner-4 {
|
||||||
|
.explore-style-one {
|
||||||
|
&.selected {
|
||||||
|
background: $bg-color-1;
|
||||||
|
border-color: $bg-color-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.reaction-btn {
|
.reaction-btn {
|
||||||
border: none;
|
border: none;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -256,12 +256,22 @@ body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.explore-style-one {
|
.explore-style-one {
|
||||||
border: 1px solid $border-color-light;
|
border: 1px solid $border-color;
|
||||||
&.selected {
|
&.selected {
|
||||||
background: $bg-color-selected-light;
|
background: $bg-color-selected-light;
|
||||||
|
border-color: $color-primary;
|
||||||
}
|
}
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px solid $color-error;
|
border: 1px solid $color-error;
|
||||||
|
border-color: $color-primary-2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.slider-activation-banner-4 {
|
||||||
|
.explore-style-one {
|
||||||
|
&.selected {
|
||||||
|
border-color: $body-bg-light2;
|
||||||
|
background: $body-bg-light;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.explore-style-two,
|
.explore-style-two,
|
||||||
|
@ -16,9 +16,9 @@ $body-bg-light2: #efefef;
|
|||||||
$body-color-light: #65676b;
|
$body-color-light: #65676b;
|
||||||
$light-color-primary: lighten($color-primary, 30%);
|
$light-color-primary: lighten($color-primary, 30%);
|
||||||
$light-color-primary-2: lighten($color-primary-2, 30%);
|
$light-color-primary-2: lighten($color-primary-2, 30%);
|
||||||
$selected-border: #eae156;
|
$selected-border: $color-primary;
|
||||||
$bg-color-selected: linear-gradient(97.3deg, #7f830b 0%, #be8500 100%);
|
$bg-color-selected: linear-gradient(135deg, $bg-color-1 0%, #854286 100%);
|
||||||
$bg-color-selected-light: linear-gradient(97.3deg, #f8fc9c 0%, #fbe4a1 100%);
|
$bg-color-selected-light: linear-gradient(135deg, #fee0fe 0%, #e1bee1 100%);
|
||||||
|
|
||||||
// font family
|
// font family
|
||||||
$font-1: "Poppins", sans-serif;
|
$font-1: "Poppins", sans-serif;
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
@extends('layouts.master')
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', '"' . $artwork->title . '" by ' . $artwork->artist->name)
|
||||||
|
|
||||||
@section('page-top')
|
@section('page-top')
|
||||||
<section class="inner-page-banner bg-2 bg-image">
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="inner text-center">
|
<div class="inner text-center">
|
||||||
<h1 class="title">Artwork for {{ $artwork->podcast->name }} {{ number_format($artwork->episode->episode_number + 0) }}</h1>
|
<h1 class="title">Artwork for {{ $artwork->podcast->name }}
|
||||||
|
{{ number_format($artwork->episode->episode_number + 0) }}</h1>
|
||||||
<nav class="mt-4">
|
<nav class="mt-4">
|
||||||
<ol class="breadcrumb justify-content-center">
|
<ol class="breadcrumb justify-content-center">
|
||||||
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
@ -19,6 +22,19 @@
|
|||||||
@section('page-content')
|
@section('page-content')
|
||||||
<section class="product-details section-bg-separation-2 pt-120 pb-90">
|
<section class="product-details section-bg-separation-2 pt-120 pb-90">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@if (auth()->user() && $artwork->artist->id == auth()->user()->artists()->first()->id)
|
||||||
|
@if ($artwork->approved_by == null)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<strong>Pending Approval</strong><br>
|
||||||
|
This artwork has been received by our server, but has not been approved and can only be viewed by you.
|
||||||
|
Another artist with approval authority will come along shortly and approve it, give them a few minutes.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xxl-6 mb-6">
|
<div class="col-xxl-6 mb-6">
|
||||||
<div class="explore-style-one">
|
<div class="explore-style-one">
|
||||||
@ -34,37 +50,51 @@
|
|||||||
<h4 class="mb-1">By {{ $artwork->artist->name }}</h4>
|
<h4 class="mb-1">By {{ $artwork->artist->name }}</h4>
|
||||||
<p class="subtitle">
|
<p class="subtitle">
|
||||||
{{ $artwork->episode->artwork_id == $artwork->id ? 'Selected' : 'Submitted' }} for {{ $artwork->podcast->name }}<br>
|
{{ $artwork->episode->artwork_id == $artwork->id ? 'Selected' : 'Submitted' }} for {{ $artwork->podcast->name }}<br>
|
||||||
Episode {{ number_format($artwork->episode->episode_number + 0) }}, {{ $artwork->episode->episode_date->format('l, F j') }}<sup>{{ $artwork->episode->episode_date->format('S') }}</sup>, {{ $artwork->episode->episode_date->format('Y') }}
|
Episode {{ number_format($artwork->episode->episode_number + 0) }} ·
|
||||||
|
{{ $artwork->episode->episode_date->format('l, F j') }}<sup>{{ $artwork->episode->episode_date->format('S') }}</sup>,
|
||||||
|
{{ $artwork->episode->episode_date->format('Y') }}
|
||||||
</p>
|
</p>
|
||||||
@if ($artwork->description)
|
@if ($artwork->description)
|
||||||
<h4 class="mb-1">Description</h4>
|
<h4 class="mb-1">Description</h4>
|
||||||
<p class="subtitle">{{ $artwork->description }}</p>
|
<p class="subtitle">{{ $artwork->description }}</p>
|
||||||
@endif
|
@endif
|
||||||
<a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
|
<div class="d-flex-between mb-5">
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
<ul class="nav custom-tabs">
|
||||||
class="ri-download-cloud-2-line"></i>
|
<li>
|
||||||
Download Full Scale Image
|
<a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}">Download 3k px Image</a>
|
||||||
</span></a>
|
</li>
|
||||||
<a href="http://{{ config('app.static_asset_url') }}/thumbnail/{{ $artwork->filename }}"
|
<li>
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
<a href="http://{{ config('app.static_asset_url') }}/thumbnail/{{ $artwork->filename }}"">Download 512 px Image</a>
|
||||||
class="ri-download-fill"></i>
|
</li>
|
||||||
Download 512px Square Thumbnail
|
</ul>
|
||||||
</span></a>
|
</div>
|
||||||
<a href="/artists/{{ $artwork->artist->id }}"
|
<div class="container">
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
<div class="row">
|
||||||
class="ri-user-fill"></i>
|
<div class="col">
|
||||||
View Artist Profile
|
<a href="/podcast/{{ $artwork->episode->podcast->slug }}/episode/{{ $artwork->episode->slug }}"
|
||||||
</span></a>
|
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
||||||
<a href="/episodes/{{ $artwork->episode->slug }}"
|
class="ri-headphone-fill"></i>
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
View Episode
|
||||||
class="ri-headphone-fill"></i>
|
</span></a>
|
||||||
View This Episode
|
</div>
|
||||||
</span></a>
|
<div class="col">
|
||||||
<a href="/podcasts/{{ $artwork->podcast->slug }}"
|
<a href="/podcasts/{{ $artwork->podcast->slug }}"
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
||||||
class="ri-broadcast-line"></i>
|
class="ri-broadcast-line"></i>
|
||||||
View {{ $artwork->podcast->name }} Podcast
|
{{ $artwork->podcast->name }} Podcast
|
||||||
</span></a>
|
</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<a href="/artist/{{ $artwork->artist->slug }}"
|
||||||
|
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
||||||
|
class="ri-user-fill"></i>
|
||||||
|
View {{ $artwork->artist->name }}'s Artist Profile
|
||||||
|
</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
58
site/resources/views/artworks/card.blade.php
Normal file
58
site/resources/views/artworks/card.blade.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<div class="explore-style-one {{ $thisEpisode->artwork_id == $thisArtwork->id ? 'selected' : '' }}">
|
||||||
|
<div class="thumb">
|
||||||
|
<a href="/artworks/{{ $thisArtwork->id }}">
|
||||||
|
<img src="{{ 'http://'
|
||||||
|
. config('app.static_asset_url')
|
||||||
|
. '/thumbnails/'
|
||||||
|
. $thisArtwork->filename ?? '#'}}"
|
||||||
|
alt="{{ $thisArtwork->title }} by {{ $thisArtwork->artist->name }}">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{-- End .thumb --}}
|
||||||
|
<div class="content">
|
||||||
|
<div class="header d-flex-between pt-4 pb-1">
|
||||||
|
<h3 class="title">
|
||||||
|
<a href="/episode/{{ $thisEpisode->slug }}">"{{ $thisArtwork->title }}"</a>
|
||||||
|
</h3>
|
||||||
|
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-dark">
|
||||||
|
<li><a class="dropdown-item" href="/podcast/{{ $thisPodcast->slug }}">View Podcast</a></li>
|
||||||
|
<li><a class="dropdown-item" href="/episode/{{ $thisEpisode->slug }}">View Episode</a></li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><a class="dropdown-item" href="/artist/{{ $thisArtwork->artist->id }}">View Selected Artist</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- .header --}}
|
||||||
|
<div class="product-owner py-1 d-flex-between">
|
||||||
|
<span class="bid-owner">Artwork By<br><strong><a
|
||||||
|
href="/artist/{{ $thisArtwork->artist->slug }}">{{ $thisArtwork->artist->name ?? 'Unknown' }}</a></strong></span>
|
||||||
|
<span class="profile-share d-flex-center"><a href="/artist/{{ $thisArtwork->artist->slug }}"
|
||||||
|
class="avatar" data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
title="{{ $thisArtwork->artist->name }}">
|
||||||
|
<img src="{{ Vite::asset($thisArtwork->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
||||||
|
alt="{{ $thisArtwork->artist->name }}"></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{{-- End .product-owner --}}
|
||||||
|
<div class="action-wrapper py-1 d-flex-between">
|
||||||
|
<span class="bid-owner">
|
||||||
|
@if($thisArtwork->id == $thisEpisode->artwork_id)
|
||||||
|
Artwork Selected For
|
||||||
|
@else
|
||||||
|
Artwork Submitted For
|
||||||
|
@endif
|
||||||
|
<br>
|
||||||
|
<strong><a href="/podcast/{{ $thisPodcast->slug }}">{{ $thisPodcast->name }}</a></strong>
|
||||||
|
<br>
|
||||||
|
<a href="/episode/{{ $thisEpisode->slug }}">Episode {{ number_format($thisEpisode->episode_number + 0) }}<br><em>
|
||||||
|
{{ $thisEpisode->episode_date->format('D, M j') }}<sup>{{ $thisEpisode->episode_date->format('S') }}</sup>{{ $thisEpisode->episode_date->format(', Y') }}</em></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{{-- action-wrapper --}}
|
||||||
|
</div>
|
||||||
|
{{-- End .content --}}
|
||||||
|
</div>
|
@ -32,16 +32,20 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center justify-end mt-4">
|
<div class="flex items-center justify-end mt-4 mb-4">
|
||||||
@if (Route::has('password.request'))
|
@if (Route::has('password.request'))
|
||||||
<a class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" href="{{ route('password.request') }}">
|
<a class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" href="{{ route('password.request') }}">
|
||||||
{{ __('Forgot your password?') }}
|
{{ __('Forgot your password?') }}
|
||||||
</a>
|
</a>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<x-primary-button class="ml-3">
|
<x-primary-button class="ml-3 btn btn-gradient" style="background:#ff512f;">
|
||||||
{{ __('Log in') }}
|
<span>{{ __('Log in') }}</span>
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
<hr>
|
||||||
|
<div class="flex items-center justify-center mt-4 text-grey-600 text-sm dark:text-grey-400">
|
||||||
|
Not registered yet? <a href="/register" class="ml-3 underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800">Register Now</a>
|
||||||
|
</div>
|
||||||
</x-guest-layout>
|
</x-guest-layout>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div>
|
<div>
|
||||||
<x-input-label for="name" :value="__('Name')" />
|
<x-input-label for="name" :value="__('Display Name')" />
|
||||||
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
|
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
|
||||||
<x-input-error :messages="$errors->get('name')" class="mt-2" />
|
<x-input-error :messages="$errors->get('name')" class="mt-2" />
|
||||||
</div>
|
</div>
|
||||||
@ -44,8 +44,8 @@
|
|||||||
{{ __('Already registered?') }}
|
{{ __('Already registered?') }}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<x-primary-button class="ml-4">
|
<x-primary-button class="ml-4 btn btn-gradient" style="background:#ff512f;">
|
||||||
{{ __('Register') }}
|
<span>{{ __('Register') }}</span>
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
|
<svg viewBox="0 0 311.87 279.03" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
|
||||||
<path d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/>
|
<path d="m132.89,113.34c-3.83-5-6.11-11.23-6.15-17.98-.06-10.67,5.66-20.22,14.2-25.61,5.64-17.37,13.21-36.47,17.32-46.56,1.72-4.19,6.12-6.62,10.59-5.84.59.1,1.19.21,1.79.31,5.52.96,9.62,5.64,9.85,11.22.44,11.29,1,30.69.43,48,4.15,5.4,6.35,12.03,6.07,18.44.03,10.37-5.2,19.5-13.18,24.88-7.5,22.62-19.69,48.42-19.69,48.42l-19.04-3.4s-2.75-28.16-2.2-51.9Zm-93.56,76.84C-13.52,138.26-12.77,51.21,39.54.03c6.27,6.36,12.53,12.71,18.88,19.15-20.29,21.04-31.21,46.42-31.21,76.04,0,29.54,10.86,54.87,31.33,76.16-6.36,6.23-12.73,12.46-19.22,18.81ZM253.32,19.02c6.34-6.36,12.64-12.69,18.95-19.02,53.73,52.17,51.88,140.86,0,190.36-6.29-6.24-12.58-12.49-19.02-18.87,20.54-21.26,31.44-46.66,31.45-76.24,0-29.61-10.89-55.02-31.38-76.22Zm-162.96,120.8c-6.4,6.04-12.69,11.97-18.98,17.91-33.28-32.01-35.51-90.23.53-125.65.27.2.58.38.83.62,5.87,5.87,11.73,11.75,17.75,17.79-11.86,12.38-18.31,27.1-18.41,44.33-.11,17.26,6.15,32.07,18.28,45ZM221.64,50.62c6.21-6.21,12.31-12.32,18.41-18.42,34.65,33.53,35.13,91.68-.02,126.08-6.23-6.05-12.47-12.1-18.7-18.15,24.51-25.18,24.65-64.55.31-89.51Zm-12.58,11.55c15.08,16.75,16.66,46.4.82,65.1-3.47-3.37-6.98-6.71-10.35-10.19-.3-.31.06-1.58.44-2.19,3.76-5.96,5.68-12.48,5.74-19.48.06-7.31-1.92-14.13-6-20.24-1.02-1.52-.97-2.47.39-3.78,3.08-2.96,5.97-6.12,8.96-9.21Zm-107.03,65.2c-15.79-19.15-14.21-48.23.38-64.8,3.56,3.56,7.13,7.13,10.35,10.35-1.86,4.61-4.19,9.01-5.42,13.71-2.59,9.86-.9,19.29,4.48,27.97.89,1.44,1.03,2.34-.33,3.59-3.2,2.94-6.24,6.05-9.45,9.19Zm55.46,92.35c.49,5.5,1.16,11.32-1.96,16.6-15.21,25.68-10.64,28.7-4.53,42.7-18.76-9.71-37.77-44.41-34.49-65.39,1.95.87,3.95,1.68,5.99,2.4,1,.36,2.05.29,2.96-.11.51.85,1.34,1.51,2.35,1.8,2.61.74,5.28,1.35,8,1.83.4.07,1.84.27,2.18.32,2.03.33,2.8.43,4.81.62,1.4.13,2.72-.49,3.53-1.54.71,1.13,1.96,1.87,3.37,1.88,2.52.02,3.21-.08,5.69-.29.78-.07,1.51-.36,2.11-.82Zm-40.03-10.04c7.25-12.91,12.95-26.71,16.95-41.48l3.77.66-1.13,15.32,3.23-14.95,4.12.72-8.51,45.54c-2.59-.46-4.54-.91-7.02-1.61l.4-16.31-5.45,14.71c-2.18-.78-4.31-1.64-6.38-2.59Zm39.4,6.88c-2.36.2-4.74.29-7.14.27l-1.24-7.59-3.61-.63-1.71,7.9c-1.89-.17-1.73-.26-3.64-.58l7.43-45.6,6.27,1.14c-.66,15.36.62,30.38,3.64,45.09Zm-6.97-15.41c-.68-7.31-.69-13.66-.59-19.87l-3.09,19.23,3.68.64Z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.3 KiB |
@ -1,3 +1,3 @@
|
|||||||
<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 dark:bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-white dark:text-gray-800 uppercase tracking-widest hover:bg-gray-700 dark:hover:bg-white focus:bg-gray-700 dark:focus:bg-white active:bg-gray-900 dark:active:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>
|
<button {{ $attributes->merge(['type' => 'submit']) }}>
|
||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</button>
|
</button>
|
||||||
|
112
site/resources/views/episodes/episode.blade.php
Normal file
112
site/resources/views/episodes/episode.blade.php
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', $pageTitle)
|
||||||
|
|
||||||
|
@section('page-top')
|
||||||
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
|
<h1 class="title">"{{ $episode->title }}"</h1>
|
||||||
|
<nav class="mt-4">
|
||||||
|
<ol class="breadcrumb justify-content-center">
|
||||||
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="/podcasts">Podcasts</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="/podcasts/{{ $episode->podcast->slug }}">{{ $episode->podcast->name }}</a></li>
|
||||||
|
<li class="breadcrumb-item active">Ep. {{ number_format($episode->episode_number + 0) }}</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('page-content')
|
||||||
|
<section class="product-details section-bg-separation-2 pt-120 pb-90">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xxl-6 mb-6">
|
||||||
|
<div class="explore-style-one">
|
||||||
|
<div class="thumb"><a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}"
|
||||||
|
><img id="largeImage"src="http://{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}"
|
||||||
|
alt="{{ $episode->artwork->title }} by {{ $episode->artwork->artist->name }} for {{ $episode->artwork->podcast->title }}"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xxl-6 mb-6 mb-6">
|
||||||
|
<div class="details-content">
|
||||||
|
<h2 class="main_title">{{ $episode->podcast->name }}<br> “{{ $episode->title }}”</h2>
|
||||||
|
<h4 class="mb-1">Episode {{ number_format($episode->episode_number + 0) }}</h4>
|
||||||
|
<h4 class="mb-4">{{ $episode->episode_date->format('l, F j') }}<sup>{{ $episode->episode_date->format('S') }}</sup>,
|
||||||
|
{{ $episode->episode_date->format('Y') }}</h4>
|
||||||
|
<h4 class="mb-4">Artwork By: <a href="/artist/{{ $episode->artwork->artist->slug }}">{{ $episode->artwork->artist->name }}</a></h4>
|
||||||
|
<p class="subtitle">
|
||||||
|
{{ number_format($episode->artworks->count()) }} Artworks Submitted.
|
||||||
|
</p>
|
||||||
|
<div class="d-flex-between mb-5">
|
||||||
|
<ul class="nav custom-tabs">
|
||||||
|
<li>
|
||||||
|
<a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}">Download 3k px Image</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="http://{{ config('app.static_asset_url') }}/thumbnail/{{ $episode->artwork->filename }}"">Download 512 px Image</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<a href="{{ $episode->mp3 }}"
|
||||||
|
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
||||||
|
class="ri-headphone-fill"></i>
|
||||||
|
Direct Link to MP3
|
||||||
|
</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<a href="/podcasts/{{ $episode->podcast->slug }}"
|
||||||
|
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
||||||
|
class="ri-broadcast-line"></i>
|
||||||
|
More From {{ $episode->podcast->name }}
|
||||||
|
</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{-- Start Live Auction --}}
|
||||||
|
<section class="ptb-120 live-auction">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-title">
|
||||||
|
<span class="subtitle">Other Submitted Artworks</span>
|
||||||
|
<h3>{{ number_format($episode->artworks->count() - 1) }} other art pieces submitted</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
{{-- End .section-title --}}
|
||||||
|
<div class="grid-filter-wrapper masonry-list">
|
||||||
|
<div class="resizer"></div>
|
||||||
|
@foreach ($episode->artworks as $recent)
|
||||||
|
@if ($recent->id != $episode->artwork_id)
|
||||||
|
@php
|
||||||
|
$thisArtwork = $recent;
|
||||||
|
$thisPodcast = $recent->podcast;
|
||||||
|
$thisEpisode = $recent->episode;
|
||||||
|
@endphp
|
||||||
|
<div class="grid-item">
|
||||||
|
@include('artworks.card')
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
{{-- End .slick-activation-01 --}}
|
||||||
|
</div>
|
||||||
|
{{-- End .container --}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{-- End Live Auction --}}
|
||||||
|
|
||||||
|
|
||||||
|
@endsection
|
@ -1,5 +1,7 @@
|
|||||||
@extends('layouts.master')
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', 'Submitted Artwork')
|
||||||
|
|
||||||
@section('page-top')
|
@section('page-top')
|
||||||
<section class="inner-page-banner bg-2 bg-image">
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@ -35,40 +37,14 @@ class="button-group default-tab-list isotop-filter flex-wrap filters-button-grou
|
|||||||
<div class="grid-filter-wrapper masonry-list">
|
<div class="grid-filter-wrapper masonry-list">
|
||||||
<div class="resizer"></div>
|
<div class="resizer"></div>
|
||||||
@foreach ($artworks as $artwork)
|
@foreach ($artworks as $artwork)
|
||||||
<div class="grid-item podcast--{{ $artwork->podcast->slug }}">
|
@php
|
||||||
<div class="explore-style-one {{ $artwork->episode->artwork_id == $artwork->id ? 'selected' : '' }}">
|
$thisArtwork = $artwork;
|
||||||
<div class="thumb">
|
$thisPodcast = $artwork->podcast;
|
||||||
<a href="/artworks/{{ $artwork->id }}"><img src="http://{{ config('app.static_asset_url') }}/thumbnails/{{ $artwork->filename }}" alt="{{ $artwork->title }} by {{ $artwork->artist->name }} for {{ $artwork->podcast->title }}"></a>
|
$thisEpisode = $artwork->episode;
|
||||||
</div>
|
@endphp
|
||||||
<div class="content">
|
<div class="grid-item podcast--{{ $artwork->podcast->slug }}">
|
||||||
<div class="header d-flex-between pt-4 pb-3">
|
@include('artworks.card')
|
||||||
<h3 class="title"><a href="/artwork/{{ $artwork->id }}">"{{ $artwork->title }}"</a></h3>
|
|
||||||
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-dark">
|
|
||||||
<li><a class="dropdown-item" href="#">Artist Profile</a></li>
|
|
||||||
<li>
|
|
||||||
<hr class="dropdown-divider">
|
|
||||||
</li>
|
|
||||||
<li><a class="dropdown-item" href="#">Episode Submissions</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">Episode Details</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">Report</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{-- .header --}}
|
|
||||||
<div class="product-owner py-4 d-flex-between">
|
|
||||||
<span class="bid-owner">Artwork By<br><strong><a href="/artist/{{ $artwork->artist->id }}">{{ $artwork->artist->name }}</a></strong></span>
|
|
||||||
<span class="profile-share d-flex-center"><a href="/artist/{{ $artwork->artist->id }}" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="{{ $artwork->artist->name }}"><img src="{{ Vite::asset($recent->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" style="width:100%;height:auto;" alt="{{ $artwork->artist->name }}"></a></span>
|
|
||||||
</div>
|
|
||||||
{{-- End .product-owner --}}
|
|
||||||
<div class="action-wrapper d-flex-between pt-4">
|
|
||||||
<span class="bid-owner">{{ $artwork->id == $artwork->episode->artwork_id ? 'Selected' : 'Submitted' }} for <br><strong><a href="/artist/{{ $artwork->artist->id }}">{{ $artwork->podcast->name }}<br> Episode {{ number_format($artwork->episode->episode_number) }}</a></strong></span>
|
|
||||||
</div>
|
|
||||||
{{-- action-wrapper --}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
<div class="explore-style-one">
|
|
||||||
<div class="thumb">
|
|
||||||
<a href="product-details.html"> <img src="{{ 'http://' . config('app.static_asset_url') . '/thumbnails/' . $recentEpisode->artwork->filename ?? '#'}}"
|
|
||||||
alt="nft live auction thumbnail"></a>
|
|
||||||
<!-- End .reaction-count -->
|
|
||||||
</div>
|
|
||||||
<!-- End .thumb -->
|
|
||||||
<div class="content">
|
|
||||||
<div class="header d-flex-between pt-4 pb-1">
|
|
||||||
<h3 class="title">
|
|
||||||
<a href="product-details.html">"{{ $recentEpisode->title }}"</a>
|
|
||||||
</h3>
|
|
||||||
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-dark">
|
|
||||||
<li><a class="dropdown-item" href="#">View Episode</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">View Podcast</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">View Show Notes</a></li>
|
|
||||||
<li>
|
|
||||||
<hr class="dropdown-divider">
|
|
||||||
</li>
|
|
||||||
<li><a class="dropdown-item" href="#">View Selected Artist</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- .header -->
|
|
||||||
<div class="product-owner py-1 d-flex-between">
|
|
||||||
<span class="bid-owner">Artwork Selected For<br>
|
|
||||||
<strong><a href="#">{{ $recentEpisode->podcast->name }}</a></strong>
|
|
||||||
<br>
|
|
||||||
<a href="#">Episode {{ number_format($recentEpisode->episode_number + 0) }}<br>
|
|
||||||
{{ $recentEpisode->episode_date->format('D, M j') }}<sup>{{ $recentEpisode->episode_date->format('S') }}</sup>{{ $recentEpisode->episode_date->format(', Y') }}</a></span>
|
|
||||||
</div>
|
|
||||||
<div class="product-owner py-1 d-flex-between">
|
|
||||||
<span class="bid-owner">Artwork By<br><strong><a
|
|
||||||
href="author-profile.html">{{ $recentEpisode->artwork->artist->name ?? 'Unknown' }}</a></strong></span>
|
|
||||||
<span class="profile-share d-flex-center"><a href="author-profile.html" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="{{ $recentEpisode->artwork->artist->name }}"><img src="{{ Vite::asset($recentEpisode->artwork->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
|
||||||
alt="{{ $recentEpisode->artwork->artist->name }}"></a></span>
|
|
||||||
</div>
|
|
||||||
<!-- End .product-owner -->
|
|
||||||
</div>
|
|
||||||
<!-- End .content -->
|
|
||||||
</div>
|
|
@ -1,7 +1,12 @@
|
|||||||
<div class="slider slider-activation-banner-4 slick-gutter-15 slick-pagination-50">
|
<div class="slider slider-activation-banner-4 slick-gutter-15 slick-pagination-50">
|
||||||
@foreach($recentEpisodes as $recentEpisode)
|
@foreach($recentEpisodes as $recentEpisode)
|
||||||
@if ($recentEpisode->artwork)
|
@if ($recentEpisode->artwork)
|
||||||
@include('home.hero.slider.slide')
|
@php
|
||||||
|
$thisArtwork = $recentEpisode->artwork;
|
||||||
|
$thisEpisode = $recentEpisode;
|
||||||
|
$thisPodcast = $recentEpisode->podcast;
|
||||||
|
@endphp
|
||||||
|
@include('artworks.card')
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
@ -1,35 +0,0 @@
|
|||||||
<div class="explore-style-one podcast--{{ $recent->podcast->slug }} {{ $recent->episode->artwork_id == $recent->id ? 'selected' : '' }}">
|
|
||||||
<div class="thumb">
|
|
||||||
<a href="product-details.html"><img src="http://{{ config('app.static_asset_url') }}/thumbnails/{{ $recent->filename }}" alt="{{ $recent->title }} by {{ $recent->artist->name }} for {{ $recent->podcast->title }}"></a>
|
|
||||||
</div>
|
|
||||||
{{-- End .thumb --}}
|
|
||||||
<div class="content">
|
|
||||||
<div class="header d-flex-between pt-4 pb-3">
|
|
||||||
<h3 class="title"><a href="product-details.html">"{{ $recent->title }}"</a></h3>
|
|
||||||
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-dark">
|
|
||||||
<li><a class="dropdown-item" href="#">Artist Profile</a></li>
|
|
||||||
<li>
|
|
||||||
<hr class="dropdown-divider">
|
|
||||||
</li>
|
|
||||||
<li><a class="dropdown-item" href="#">Episode Submissions</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">Episode Details</a></li>
|
|
||||||
<li><a class="dropdown-item" href="#">Report</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{-- .header --}}
|
|
||||||
<div class="product-owner py-4 d-flex-between">
|
|
||||||
<span class="bid-owner">Artwork By<br><strong><a href="/artist/{{ $recent->artist->id }}">{{ $recent->artist->name }}</a></strong></span>
|
|
||||||
<span class="profile-share d-flex-center"><a href="/artist/{{ $recent->artist->id }}" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="{{ $recent->artist->name }}"><img src="{{ Vite::asset($recent->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" style="width:100%;height:auto;" alt="{{ $recent->artist->name }}"></a></span>
|
|
||||||
</div>
|
|
||||||
{{-- End .product-owner --}}
|
|
||||||
<div class="action-wrapper d-flex-between pt-4">
|
|
||||||
<span class="bid-owner">{{ $recent->id == $recent->episode->artwork_id ? 'Selected' : 'Submitted' }} for<br><strong><a href="/artist/{{ $recent->artist->id }}">{{ $recent->podcast->name }}<br>Episode {{ number_format($recent->episode->episode_number) }}</a></strong></span>
|
|
||||||
</div>
|
|
||||||
{{-- action-wrapper --}}
|
|
||||||
</div>
|
|
||||||
{{-- End .content --}}
|
|
||||||
</div>
|
|
||||||
{{-- End .explore-style-one --}}
|
|
@ -8,7 +8,12 @@
|
|||||||
{{-- End .section-title --}}
|
{{-- End .section-title --}}
|
||||||
<div class="slider slick-activation-001 slick-gutter-15 slick-pagination-50">
|
<div class="slider slick-activation-001 slick-gutter-15 slick-pagination-50">
|
||||||
@foreach ($recentSubmissions as $recent)
|
@foreach ($recentSubmissions as $recent)
|
||||||
@include('home.recents.card')
|
@php
|
||||||
|
$thisArtwork = $recent;
|
||||||
|
$thisPodcast = $recent->podcast;
|
||||||
|
$thisEpisode = $recent->episode;
|
||||||
|
@endphp
|
||||||
|
@include('artworks.card')
|
||||||
@endforeach
|
@endforeach
|
||||||
{{-- End .slick-activation-01 --}}
|
{{-- End .slick-activation-01 --}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
|
|
||||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||||
|
@include('partials/favicon')
|
||||||
|
@vite(['resources/scss/app.scss'])
|
||||||
|
@livewireStyles
|
||||||
|
@yield('additional_headers')
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
||||||
@ -14,17 +17,33 @@
|
|||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
</head>
|
</head>
|
||||||
<body class="font-sans text-gray-900 antialiased">
|
<body class="antialiased">
|
||||||
<div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900">
|
@include('partials/preloader')
|
||||||
|
<div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0">
|
||||||
<div>
|
<div>
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
|
<x-application-logo class="w-20 h-20 fill-current" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-full sm:max-w-md mt-6 px-6 py-4 bg-white dark:bg-gray-800 shadow-md overflow-hidden sm:rounded-lg">
|
<div class="authbox w-full sm:max-w-md mt-6 px-6 py-4 shadow-md overflow-hidden sm:rounded-lg">
|
||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.nice-select.min.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/modernizer.min.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/slick.min.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/bootstrap.min.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/waypoint.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/js.cookie.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/count-down.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/counter-up.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/isotop.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/imageloaded.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/aos.js"></script>
|
||||||
|
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.custom-file-input.js"></script>
|
||||||
|
@livewireScriptConfig
|
||||||
|
@vite(['resources/js/app.js'])
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -5,13 +5,17 @@
|
|||||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
<title>.: {{ $pageTitle ?? 'Site' }} - No Agenda Art Generator :.</title>
|
@if(View::hasSection('page-title'))
|
||||||
|
<title>.: @yield('page-title') - No Agenda Art Generator :.</title>
|
||||||
|
@else
|
||||||
|
<title>.: No Agenda Art Generator :.</title>
|
||||||
|
@endif
|
||||||
@include('partials/favicon')
|
@include('partials/favicon')
|
||||||
@vite(['resources/scss/app.scss'])
|
@vite(['resources/scss/app.scss'])
|
||||||
@livewireStyles
|
@livewireStyles
|
||||||
@yield('additional_headers')
|
@yield('additional_headers')
|
||||||
</head>
|
</head>
|
||||||
<body{!! Session::get('preferred_theme') == 'light' ? ' class="theme-light"' : '' !!}>
|
<body{!! Session::get('preferred_theme') === 'light' ? ' class="theme-light"' : '' !!} data-preferred_theme="{!! Session::get('preferred_theme') !!}">
|
||||||
@include('partials/preloader')
|
@include('partials/preloader')
|
||||||
@include('partials/nav/head')
|
@include('partials/nav/head')
|
||||||
|
|
||||||
|
@ -51,15 +51,32 @@
|
|||||||
alt="user avatar"></a>
|
alt="user avatar"></a>
|
||||||
<ul class="submenu">
|
<ul class="submenu">
|
||||||
@if (Auth::user())
|
@if (Auth::user())
|
||||||
<li><a href="/user-account"><i class="ri-user-line"></i> Profile</a></li>
|
<li><a href="/artist/{{ Auth::user()->artists->first()->slug }}"><i class="ri-user-line"></i> Profile</a></li>
|
||||||
<li><a href="/logout"><i class="ri-logout-box-r-line"></i>Sign Out</a></li>
|
<li><a href="/create-artwork"><i class="ri-image-add-line"></i> Create Artwork</a></li>
|
||||||
|
<form method="post" action="/logout" name="logout" id="logoutForm">
|
||||||
|
@csrf
|
||||||
|
<li><a href="#" onclick="event.preventDefault(); document.getElementById('logoutForm').submit();"><i class="ri-logout-box-r-line"></i>Sign Out</a></li>
|
||||||
|
</form>
|
||||||
|
|
||||||
@else
|
@else
|
||||||
<li><a href="/login"><i class="ri-logout-box-r-line"></i>Sign in</a></li>
|
<li><a href="/login"><i class="ri-logout-box-r-line"></i>Sign in</a></li>
|
||||||
@endif
|
@endif
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@endif
|
@endif
|
||||||
|
@if (auth()->user())
|
||||||
<livewire:themeswitch />
|
<livewire:themeswitch />
|
||||||
|
@else
|
||||||
|
<li>
|
||||||
|
<label class="theme-switcher-label d-flex" for="theme-switcher">
|
||||||
|
<input type="checkbox" class="theme-switcher" id="theme-switcher">
|
||||||
|
<div class="switch-handle">
|
||||||
|
<i class="ri-sun-line light-text"></i>
|
||||||
|
<i class="ri-moon-line dark-text"></i>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
<li class="setting-option mobile-menu-bar d-block d-xl-none">
|
<li class="setting-option mobile-menu-bar d-block d-xl-none">
|
||||||
<button class="hamburger-button">
|
<button class="hamburger-button">
|
||||||
<i class="ri-menu-2-fill"></i>
|
<i class="ri-menu-2-fill"></i>
|
||||||
|
@ -8,6 +8,11 @@
|
|||||||
<li>
|
<li>
|
||||||
<a {!! request()->is(['artists', 'artists/*']) ? 'class="active"' : '' !!} href="/artists">Artists</a>
|
<a {!! request()->is(['artists', 'artists/*']) ? 'class="active"' : '' !!} href="/artists">Artists</a>
|
||||||
</li>
|
</li>
|
||||||
|
@if (auth()->user())
|
||||||
|
<li>
|
||||||
|
<a {!! request()->is(['create-artwork', 'create-artwork/*']) ? 'class="active"' : '' !!} href="/create-artwork">Create</a>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
<li>
|
<li>
|
||||||
<a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/contact.html">Leaderboards</a>
|
<a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/contact.html">Leaderboards</a>
|
||||||
</li>
|
</li>
|
||||||
@ -16,7 +21,7 @@
|
|||||||
<ul class="submenu">
|
<ul class="submenu">
|
||||||
@foreach ($navPodcasts as $cast)
|
@foreach ($navPodcasts as $cast)
|
||||||
<li>
|
<li>
|
||||||
<a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
|
<a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
|
||||||
</li>
|
</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
|
84
site/resources/views/podcasts/podcast.blade.php
Normal file
84
site/resources/views/podcasts/podcast.blade.php
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', $podcast->name)
|
||||||
|
|
||||||
|
@section('page-top')
|
||||||
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
|
<h1 class="title">{{ $podcast->name }}</h1>
|
||||||
|
<nav class="mt-4">
|
||||||
|
<ol class="breadcrumb justify-content-center">
|
||||||
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="/podcasts">Podcasts</a></li>
|
||||||
|
<li class="breadcrumb-item active">Podcast</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('page-content')
|
||||||
|
<section class="pt-120 pb-90 masonary-wrapper-activation">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $episodes->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="grid-filter-wrapper masonry-list">
|
||||||
|
<div class="resizer"></div>
|
||||||
|
@foreach ($episodes as $episode)
|
||||||
|
<div class="grid-item podcast--{{ $episode->podcast->slug }}">
|
||||||
|
<div class="explore-style-one flex-stretch">
|
||||||
|
<div class="thumb">
|
||||||
|
<a href="/podcast/{{ $episode->podcast->slug }}/episode/{{ $episode->slug }}">
|
||||||
|
<img src="{{ 'http://'
|
||||||
|
. config('app.static_asset_url')
|
||||||
|
. '/thumbnails/'
|
||||||
|
. $episode->artwork->filename ?? '#'}}"
|
||||||
|
alt="{{ $episode->title }}, {{ $episode->podcast->name }} Episode {{ number_format($episode->episode_number + 0) }}">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="header d-flex-between pt-4 pb-1">
|
||||||
|
<h3 class="title">"{{ $episode->title }}"</h3>
|
||||||
|
</div>
|
||||||
|
<div class="product-owner py-0 pb-2 d-flex-between">
|
||||||
|
<h4>{{ $episode->podcast->name }}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="product-owner py-0 d-flex-between">
|
||||||
|
<span class="bid-owner">Episode {{ number_format($episode->episode_number + 0) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="product-owner py-0 pb-4 d-flex-between">
|
||||||
|
<span class="bid-owner"><em>{{ $episode->episode_date->format('D, M j') }}<sup>{{ $episode->episode_date->format('S') }}</sup>{{ $episode->episode_date->format(', Y') }}</em></span>
|
||||||
|
</div>
|
||||||
|
<div class="action-wrapper py-1 mt-4 d-flex-between">
|
||||||
|
<span class="bid-owner">Artwork By<br><strong><a
|
||||||
|
href="/artist/{{ $episode->artwork->artist->slug }}">{{ $episode->artwork->artist->name ?? 'Unknown' }}</a></strong></span>
|
||||||
|
<span class="profile-share d-flex-center"><a href="/artist/{{ $episode->artwork->artist->slug }}"
|
||||||
|
class="avatar" data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
title="{{ $episode->artwork->artist->name }}">
|
||||||
|
<img src="{{ Vite::asset($episode->artwork->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
||||||
|
alt="{{ $episode->artwork->artist->name }}"></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="action-wrapper py-1 mb-1 d-flex-between">
|
||||||
|
<span class="bid-owner">{{ number_format($episode->artworks->count()) }} Artworks Submitted</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $episodes->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
80
site/resources/views/profile/artist.blade.php
Normal file
80
site/resources/views/profile/artist.blade.php
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', 'Artists')
|
||||||
|
|
||||||
|
@section('page-top')
|
||||||
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
|
<h1 class="title">{{ $artist->name }}</h1>
|
||||||
|
<nav class="mt-4">
|
||||||
|
<ol class="breadcrumb justify-content-center">
|
||||||
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="/artists">Artists</a></li>
|
||||||
|
<li class="breadcrumb-item active">Artist</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
@section('page-content')
|
||||||
|
<section class="pt-120 pb-90">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $artworks->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xxl-3 col-xl-4 col-lg-4 mb-6">
|
||||||
|
<div class="single-author profile">
|
||||||
|
<div class="thumb">
|
||||||
|
<img src="{{ Vite::asset($artist->header ?? 'resources/img/artist-dark-banner-default.png') }}" alt="{{ $artist->name }}'s Cover Photo" />
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<img class="author-thumb" src="{{ Vite::asset($artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
||||||
|
alt="{{ $artist->name }}" />
|
||||||
|
<h4 class="title">{{ $artist->name }}</h4>
|
||||||
|
<p class="title">{{ $artist->location ?? 'No Agenda Nation' }}</p>
|
||||||
|
<p class="title">Artist For {{ $artist->artworks->sortBy('created_at')->first()->created_at->diffForHumans(now(), Carbon\CarbonInterface::DIFF_ABSOLUTE) }}</p>
|
||||||
|
@if ($artist->bio)
|
||||||
|
<h4>Bio:</h4>
|
||||||
|
<p>{{ nl2br($artist->bio) }}</p>
|
||||||
|
@endif
|
||||||
|
<div class="social size-small justify-content-center mb-4">
|
||||||
|
@if ($artist->website)
|
||||||
|
<a href="{{ $artist->website }}" title="website"><i class="ri-pages-line"></i></a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- end bio sidebar --}}
|
||||||
|
<div class="col-xxl-9 col-xl-8 col-lg-8">
|
||||||
|
<div class="container">
|
||||||
|
<div class="grid-filter-wrapper masonry-list">
|
||||||
|
<div class="resizer"></div>
|
||||||
|
@foreach ($artworks as $artwork)
|
||||||
|
@php
|
||||||
|
$thisArtwork = $artwork;
|
||||||
|
$thisPodcast = $artwork->podcast;
|
||||||
|
$thisEpisode = $artwork->episode;
|
||||||
|
@endphp
|
||||||
|
<div class="grid-item podcast--{{ $artwork->podcast->slug }}">
|
||||||
|
@include('artworks.card')
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- end artist content --}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $artworks->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
43
site/resources/views/profile/artists.blade.php
Normal file
43
site/resources/views/profile/artists.blade.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
@extends('layouts.master')
|
||||||
|
|
||||||
|
@section('page-title', 'Artists')
|
||||||
|
|
||||||
|
@section('page-top')
|
||||||
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
|
<h1 class="title">Artists</h1>
|
||||||
|
<nav class="mt-4">
|
||||||
|
<ol class="breadcrumb justify-content-center">
|
||||||
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
|
<li class="breadcrumb-item active"><a href="/artists">Artists</a></li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
@section('page-content')
|
||||||
|
<section class="pt-120 pb-90 masonary-wrapper-activation">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $artists->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="grid-filter-wrapper masonry-list">
|
||||||
|
<div class="resizer"></div>
|
||||||
|
@foreach ($artists as $artist)
|
||||||
|
<div class="grid-item">
|
||||||
|
@include('profile.partials.single-artist-card')
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
{{ $artists->links() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
@ -0,0 +1,24 @@
|
|||||||
|
<div class="single-author profile flex-stretch">
|
||||||
|
<div class="thumb">
|
||||||
|
<img src="{{ Vite::asset($artist->header ?? 'resources/img/artist-dark-banner-default.png') }}" alt="{{ $artist->name }}'s Cover Photo" />
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<a href="/artist/{{ $artist->slug }}"><img class="author-thumb" src="{{ Vite::asset($artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
||||||
|
alt="{{ $artist->name }}" /></a>
|
||||||
|
<h4 class="title"><a href="/artists/{{ $artist->slug }}">{{ $artist->name }}</a></h4>
|
||||||
|
<p class="title">{{ $artist->location ?? 'No Agenda Nation' }}</p>
|
||||||
|
<p class="title">Artist for {{ $artist->created_at->diffForHumans() }}</p>
|
||||||
|
@if ($artist->bio)
|
||||||
|
<h4>Bio:</h4>
|
||||||
|
<p>{{ nl2br($artist->bio) }}</p>
|
||||||
|
@endif
|
||||||
|
<div class="social size-small justify-content-center mb-4">
|
||||||
|
@if ($artist->website)
|
||||||
|
<a href="{{ $artist->website }}" title="website"><i class="ri-pages-line"></i></a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
<div class="size-small justify-content-center mb-4">
|
||||||
|
{{ number_format($artist->artworks->count()) }} Submitted Artworks
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -3,6 +3,9 @@
|
|||||||
use App\Http\Controllers\ProfileController;
|
use App\Http\Controllers\ProfileController;
|
||||||
use App\Http\Controllers\PageController;
|
use App\Http\Controllers\PageController;
|
||||||
use App\Http\Controllers\ArtworkController;
|
use App\Http\Controllers\ArtworkController;
|
||||||
|
use App\Http\Controllers\ArtistController;
|
||||||
|
use App\Http\Controllers\PodcastController;
|
||||||
|
use App\Http\Controllers\EpisodeController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Livewire\Counter;
|
use App\Livewire\Counter;
|
||||||
|
|
||||||
@ -20,11 +23,15 @@
|
|||||||
Route::get('/', [PageController::class, 'landing'])->name('home');
|
Route::get('/', [PageController::class, 'landing'])->name('home');
|
||||||
Route::get('/artworks', [ArtworkController::class, 'index']);
|
Route::get('/artworks', [ArtworkController::class, 'index']);
|
||||||
Route::get('/artworks/{id}', [ArtworkController::class, 'show']);
|
Route::get('/artworks/{id}', [ArtworkController::class, 'show']);
|
||||||
|
Route::get('/artist/{slug}', [ArtistController::class, 'show']);
|
||||||
|
Route::get('/artists', [ArtistController::class, 'index']);
|
||||||
|
Route::get('/podcasts/{slug}', [PodcastController::class, 'show']);
|
||||||
|
Route::get('/podcast/{any}/episode/{slug}', [EpisodeController::class, 'show']);
|
||||||
Route::get('/dashboard', function () {
|
Route::get('/dashboard', function () {
|
||||||
return view('dashboard');
|
return view('dashboard');
|
||||||
})->middleware(['auth', 'verified'])->name('dashboard');
|
})->middleware(['auth', 'verified'])->name('dashboard');
|
||||||
|
|
||||||
|
|
||||||
Route::middleware(['auth', 'verified'])->group(function () {
|
Route::middleware(['auth', 'verified'])->group(function () {
|
||||||
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||||
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||||
|
@ -501,6 +501,13 @@ glob@7.1.6:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
guillotine@^1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/guillotine/-/guillotine-1.3.1.tgz#03bffb09659026eda81491551ea282e57b2cda95"
|
||||||
|
integrity sha512-nJx8bglgxYgcAgahBddDsrGEhGXDuyYT4vIc7Aghs9HBF+50Maix5AbAwEfhkV59EQ/GvSOVIfftNvRz7DqyaA==
|
||||||
|
dependencies:
|
||||||
|
jquery ">= 1.8.0"
|
||||||
|
|
||||||
has@^1.0.3:
|
has@^1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||||
@ -580,6 +587,11 @@ jquery-nice-select@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
jquery "^2.2.3"
|
jquery "^2.2.3"
|
||||||
|
|
||||||
|
"jquery@>= 1.8.0":
|
||||||
|
version "3.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
|
||||||
|
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
|
||||||
|
|
||||||
jquery@^2.2.3:
|
jquery@^2.2.3:
|
||||||
version "2.2.4"
|
version "2.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
|
||||||
|
Loading…
Reference in New Issue
Block a user