Compare commits

..

No commits in common. "master" and "v3.0.0" have entirely different histories.

35 changed files with 2007 additions and 2255 deletions

View File

@ -23,7 +23,6 @@ class ArtistController extends Controller
$user = auth()->user();
$artists = Artist::whereHas('artworks')
->withCount('artworks')
->withCount('episodes')
->orderBy('artworks_count', 'desc')
->paginate(100);
$podcasts = Podcast::where('published', true)->get();
@ -66,8 +65,6 @@ class ArtistController extends Controller
{
$user = auth()->user();
$artist = Artist::where('slug', $slug)
->withCount('episodes')
->withCount('artworks')
->firstOrFail();
$artworks = Artwork::where('artist_id', $artist->id)
->with('episode')

View File

@ -90,9 +90,6 @@ class ArtworkController extends Controller
'artwork_id' => 'required|exists:artworks,id'
]);
$artwork = Artwork::find($request->artwork_id);
if ($artwork->artist_id == $user->artists->first()->id) {
return redirect('/approve-artwork');
}
if (is_null($artwork->approved_by)) {
$artwork->approved_by = $user->artists->first()->id;
$artwork->save();
@ -126,20 +123,9 @@ class ArtworkController extends Controller
$episode = $podcast->episodes->first();
$artist = auth()->user()->artists()->first();
$rawFile = $request->file('file');
$yearDirectory = now()->format('Y');
$monthDirectory = now()->format('m');
$indexPath = $yearDirectory . '/' . $monthDirectory . '/index.htm';
$imgDirExists = Storage::disk('static')->exists('artworks/' . $indexPath);
$thumbDirExists = Storage::disk('static')->exists('thumbnails/' . $indexPath);
if (!$imgDirExists) {
Storage::disk('static')->put('artworks/' . $indexPath, '');
}
if (!$thumbDirExists) {
Storage::disk('static')->put('thumbnails/' . $indexPath, '');
}
$filename = $yearDirectory
$filename = now()->format('Y')
. '/'
. $monthDirectory
. now()->format('m')
. '/'
. Str::slug($artist->name)
. '-'
@ -154,16 +140,17 @@ class ArtworkController extends Controller
'overlay_id' => null,
'podcast_id' => $podcast->id,
'episode_id' => $episode->id,
//'approved_by' => 4,
'filename' => $filename,
'created_at' => now(),
'updated_at' => now(),
])->create();
$img = Image::make($rawFile)->resize(3000, null, function($constraint) {
$img = Image::make($rawFile)->resize(3000, null, function($constraint){
$constraint->aspectRatio();
})
->encode('jpg', 100)
->save(Storage::disk('static')->path('/artworks') . '/' . $artwork->filename);
$thumbImg = Image::make($request->file('file'))->resize(512, null, function($constraint) {
$thumbImg = Image::make($request->file('file'))->resize(512, null, function($constraint){
$constraint->aspectRatio();
})
->encode('jpg', 100)

View File

@ -52,9 +52,10 @@ class EpisodeController extends Controller
{
$user = auth()->user();
$episode = Episode::where('slug', $slug)
->with('approvedArtworks')
->with('artworks')
->with('artwork')
->with('podcast')
->whereNotNull('artworks.approved_by')
->firstOrFail();
$podcasts = Podcast::where('published', true)->with('episodes', function ($query) {
$query->orderBy('episode_number', 'desc');
@ -66,7 +67,6 @@ class EpisodeController extends Controller
'pageTitle' => '"' . $episode->title . '" ' . $episode->podcast->name . ' Episode ' . number_format($episode->episode_number + 0),
'podcast' => $episode->podcast,
'episode' => $episode,
'artworks' => $episode->approvedArtworks,
'podcasts' => $podcasts,
]);
}

View File

@ -21,7 +21,7 @@ class PodcastController extends Controller
$episodes = Episode::where('published', true)
->whereNotNull('artwork_id')
->with('artwork')
->with('approvedArtworks')
->with('artworks')
->where('podcast_id', $podcast->id)
->orderBy('episode_number', 'desc')->paginate(100);
$podcasts = Podcast::where('published', true)->with('episodes')->get();

View File

@ -1,36 +0,0 @@
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use ImageOptimizer;
use Illuminate\Support\Facades\Log;
class OptimizeArtistHeaderJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $path;
/**
* Create a new job instance.
*/
public function __construct($path)
{
$this->path = $path;
}
/**
* Execute the job.
*/
public function handle(): void
{
Log::info('Header: Optimizing ' . $this->path);
ImageOptimizer::optimize($this->path);
}
}

View File

@ -1,36 +0,0 @@
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use ImageOptimizer;
use Illuminate\Support\Facades\Log;
class OptimizeAvatarJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $path;
/**
* Create a new job instance.
*/
public function __construct($path)
{
$this->path = $path;
}
/**
* Execute the job.
*/
public function handle(): void
{
Log::info('Avatar: Optimizing ' . $this->path);
ImageOptimizer::optimize($this->path);
}
}

View File

@ -11,8 +11,6 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rules\File;
use Illuminate\Http\RedirectResponse;
use Livewire\Attributes\Validate;
use Illuminate\Support\Facades\Log;
use App\Jobs\OptimizeAvatarJob;
class Avatar extends Component
{
@ -34,6 +32,7 @@ class Avatar extends Component
{
$disk = Storage::disk('static');
$avatar = $this->avatar->store('avatars', 'static');
Image::load($disk->path($avatar))
->manualCrop($this->width, $this->height, $this->x, $this->y)
->save();
@ -41,9 +40,7 @@ class Avatar extends Component
->width(350)
->height(350)
->save();
Log::info('Avatar: Optimizing ' . $disk->path($avatar));
OptimizeAvatarJob::dispatchSync($disk->path($avatar));
//ImageOptimizer::optimize($disk->path($avatar));
ImageOptimizer::optimize($disk->path($avatar));
auth()->user()->artists()->first()->update(compact('avatar'));
$this->avatar = null;
return redirect(request()->header('Referer'));

View File

@ -11,8 +11,6 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rules\File;
use Illuminate\Http\RedirectResponse;
use Livewire\Attributes\Validate;
use Illuminate\Support\Facades\Log;
use App\Jobs\OptimizeArtistHeaderJob;
class Header extends Component
{
@ -34,6 +32,7 @@ class Header extends Component
{
$disk = Storage::disk('static');
$header = $this->header->store('artist_headers', 'static');
Image::load($disk->path($header))
->manualCrop($this->width, $this->height, $this->x, $this->y)
->save();
@ -41,8 +40,7 @@ class Header extends Component
->width(270)
->height(185)
->save();
Log::info('Avatar: Optimizing ' . $disk->path($header));
OptimizeArtistHeaderJob::dispatchSync($disk->path($header));
ImageOptimizer::optimize($disk->path($header));
auth()->user()->artists()->first()->update(compact('header'));
$this->header = null;
return redirect(request()->header('Referer'));

View File

@ -31,11 +31,6 @@ class Episode extends Model
return $this->hasOne(Artwork::class, 'id', 'artwork_id');
}
public function approvedArtworks()
{
return $this->hasMany(Artwork::class)->whereNotNull('artworks.approved_by');
}
public function artworks()
{
return $this->hasMany(Artwork::class);

1750
site/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -347,11 +347,11 @@ td{
border-bottom: 1px solid rgba(255, 255, 255, .1);
}
.odds tbody tr:nth-child(2n) th{
.odd th{
background: #222;
}
.odds tbody tr:nth-child(2n) td{
.odd td{
background: #000;
}
@ -442,13 +442,6 @@ td textarea
border-radius: 0;
}
th input::placeholder,
td input::placeholder
{
color: #fff;
}
th input:hover,
th select:hover,
td input:hover,
@ -664,14 +657,6 @@ legend{
color: #999;
}
.footer {
border-image: linear-gradient(rgba(0, 0, 0, .2), #000) 100% 0;
}
.footer > div{
background: #000;
}
/* menu
----------------------------------------------------------------------- */
@ -707,6 +692,12 @@ legend{
font-size: inherit;
}
/* db select */
#dbs select{
width: 228px;
margin-left: 8px;
}
/* links */
#menu .links{
padding-top: 0;
@ -994,11 +985,6 @@ code.jush-sql ~ a:first-of-type::before{
/* logout form
----------------------------------------------------------------------- */
.logout {
z-index: 10;
}
#logout {
margin-right: 0;
margin-left: 10px;
body > form{
position: absolute;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
function c(){return{collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,init:function(){this.$wire.$on("deselectAllTableRecords",()=>this.deselectAllRecords()),this.$watch("selectedRecords",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1})},mountAction:function(e,s=null){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableAction(e,s)},mountBulkAction:function(e){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){if(this.isLoading=!0,this.areRecordsSelected(this.getRecordsInGroupOnPage(e))){this.deselectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e));return}this.selectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e)),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let s=[];for(let t of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])t.dataset.group===e&&s.push(t.value);return s},getRecordsOnPage:function(){let e=[];for(let s of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])e.push(s.value);return e},selectRecords:function(e){for(let s of e)this.isRecordSelected(s)||this.selectedRecords.push(s)},deselectRecords:function(e){for(let s of e){let t=this.selectedRecords.indexOf(s);t!==-1&&this.selectedRecords.splice(t,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(s=>this.isRecordSelected(s))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]}}}export{c as default};
function c(){return{collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,init:function(){this.$wire.$on("deselectAllTableRecords",()=>this.deselectAllRecords()),this.$watch("selectedRecords",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1})},mountBulkAction:function(e){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){if(this.isLoading=!0,this.areRecordsSelected(this.getRecordsInGroupOnPage(e))){this.deselectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e));return}this.selectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e)),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let s=[];for(let t of this.$root.getElementsByClassName("fi-ta-record-checkbox"))t.dataset.group===e&&s.push(t.value);return s},getRecordsOnPage:function(){let e=[];for(let s of this.$root.getElementsByClassName("fi-ta-record-checkbox"))e.push(s.value);return e},selectRecords:function(e){for(let s of e)this.isRecordSelected(s)||this.selectedRecords.push(s)},deselectRecords:function(e){for(let s of e){let t=this.selectedRecords.indexOf(s);t!==-1&&this.selectedRecords.splice(t,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(s=>this.isRecordSelected(s))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]}}}export{c as default};

File diff suppressed because one or more lines are too long

View File

@ -68,15 +68,11 @@
</div>
{{-- End .product-owner --}}
<div class="action-wrapper py-5 d-flex align-items-center justify-content-center">
@if (auth()->user()->artists->first()->id != $thisArtwork->artist_id)
<form action="/approve-artworks" method="POST" class="approve-artwork-form" name="approve-artwork-{{ $thisArtwork->id}}" enctype="multipart/form-data">
@csrf
<input name="artwork_id" type="hidden" value="{{ $thisArtwork->id }}">
<button type="submit" class="btn btn-gradient btn-medium justify-content-center"><span>Approve and Publish</span></button>
</form>
@else
<p>You cannot approve your own</p>
@endif
</div>
</div>
</div>

View File

@ -2,9 +2,7 @@
@section('page-title', $pageTitle)
@if (!is_null($episode->artwork))
@section('meta_og_img', config('app.static_asset_url') . '/thumbnails/' . $episode->artwork->filename)
@endif
@section('meta_description', 'Artwork for the ' . $episode->podcast->name . ' podcast, episode ' . $episode->episode_number + 0 . ' by ' . $episode->artwork->artist->name)
@ -46,7 +44,7 @@
{{ $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($artworks->count()) }} Artworks Submitted.
{{ number_format($episode->artworks->count()) }} Artworks Submitted.
</p>
<div class="container">
<div class="row">
@ -90,14 +88,14 @@
<div class="container">
<div class="section-title">
<span class="subtitle">Other Submitted Artworks</span>
<h3>{{ number_format($artworks->count() - 1) }} other art pieces submitted</h3>
<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 ($artworks as $recent)
@foreach ($episode->artworks as $recent)
@if ($recent->id != $episode->artwork_id)
@php
$thisArtwork = $recent;

View File

@ -4,8 +4,8 @@
</h1>
<p data-aos="fade-up" data-aos-delay="100">
A community collaboration producing the best podcast album art in the universe!<br>
Once discussed on <em>The Joe Rogan Experience</em>, sadly, young Jamie was not<br>
asked to pull this up.
Once discussed on <em>The Joe Rogan Experience</em>, sadly,<br>
Young Jamie was not asked to pull this up.
</p>
<div class="group-btn mt-8" data-aos="fade-up" data-aos-delay="200">
<a href="/artworks" class="btn btn-gradient">

View File

@ -106,9 +106,7 @@
<div class="inner">
<ul>
<li><a class="d-block" href="http://dvorak.org/NA">Support the Show</a><span class="cate small">First and Foremost, support our boys.</span></li>
<li><a class="d-block" href="https://paypal.me/uncappedturtle">PayPal Me</a><span class="cate small">@UncappedTurtle and buy me a coffee - or twelve.</span></li>
<li><a class="d-block" href="https://venmo.com/ucturtle">Venmo</a><span class="cate small">@ucturtle if you would like.</span></li>
<li><a class="d-block" href="https://cash.app/$ucturtle">Cash App</a><span class="cate small">if you would that is your preference.</span></li>
<li><a class="d-block" href="https://paypal.me/caincouture">PayPal Me</a><span class="cate small">@CainCouture and buy me a coffee - or twelve.</span></li>
<li><a class="d-block" href="https://getalby.com/p/pcouture">V4V: ⚡pcouture@getalby.com</a><span class="cate small">Use the lightning network.</span></li>
<li><a class="d-block" href="https://static.noagendaartgenerator.com/assets/img/btc-naart-qr.png">Crypto: <i class="ri-btc-line"></i> Old School BTC</a><span class="cate small">bc1qvkm9fpycc8q99kudqwukd8cf8xgxdrhp6a5zl8</span></li>
</ul>

View File

@ -25,7 +25,7 @@
<h4>Community</h4>
<ul class="footer-list-widget">
<li><a href="https://noagendashow.net">No Agenda Show</a></li>
<li><a href="https://noauthority.social/">No Authority Social</a></li>
<li><a href="https://noagendasocial.com/">No Agenda Social</a></li>
<li><a href="https://noagendastream.com">No Agenda Stream</a></li>
<li><a href="http://listen.noagendastream.com/">Alternate Stream Link</a></li>
<li><a href="http://noagendanation.com/">No Agenda Nation</a></li>
@ -51,7 +51,7 @@
<ul class="footer-list-widget">
<li><a href="https://dvorak.org/na">Donate to the No Agenda Podcast</a></li>
<li><a rel="me" href="/support-development">Support The Generator</a></li>
<li><a rel="me" href="https://noauthority.social/@SirPaulCouture">Argue with me on NA Social</a></li>
<li><a rel="me" href="https://noagendasocial.com/@SirPaulCouture">Argue with me on NA Social</a></li>
</ul>
</div>
</div>

View File

@ -70,7 +70,7 @@
</span>
</div>
<div class="action-wrapper py-1 mb-1 d-flex-between">
<span class="bid-owner">{{ number_format($episode->approvedArtworks->count()) }} Artworks Submitted</span>
<span class="bid-owner">{{ number_format($episode->artworks->count()) }} Artworks Submitted</span>
</span>
</div>
</div>

View File

@ -7,9 +7,7 @@
alt="{{ $artist->name }}" /></a>
<h4 class="title"><a href="/artist/{{ $artist->slug }}">{{ $artist->name }}</a></h4>
<p class="title">{{ $artist->location ?? 'No Agenda Nation' }}</p>
@if ($artist->artworks->count())
<p class="title">Artist For {{ $artist->artworks->sortBy('created_at')->first()->created_at->diffForHumans(now(), Carbon\CarbonInterface::DIFF_ABSOLUTE) }}</p>
@endif
@if ($artist->bio)
<h4>Bio:</h4>
<p>{{ nl2br($artist->bio) }}</p>
@ -23,8 +21,7 @@
@endif
</div>
<div class="size-small justify-content-center mb-4">
{{ number_format($artist->artworks_count) }} Submitted Artworks<br>
{{ number_format($artist->episodes_count) }} Artworks Selected
{{ number_format($artist->artworks->count()) }} Submitted Artworks
</div>
</div>
</div>

View File

@ -29,7 +29,7 @@
<x-input-error class="mt-2" :messages="$errors->get('alby')" />
</div>
<div class="mt-1">
<x-input-label for="nasocial" :value="__('No Authority Social Account')" />
<x-input-label for="nasocial" :value="__('No Agenda Social Account')" />
<x-text-input id="nasocial" name="nasocial" type="text" class="mt-1 block w-full" :value="old('nasocial', $user->artists->first()->nasocial)" required autocomplete="naasocial" />
<x-input-error class="mt-2" :messages="$errors->get('nasocial')" />
</div>