mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-14 09:01:42 -04:00
332 lines
12 KiB
PHP
332 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Modules\StudioPlus\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Str;
|
|
use Modules\StudioPlus\Entities\ColumnPreset;
|
|
use Modules\StudioPlus\Entities\StudioPlusChannel;
|
|
use Modules\StudioPlus\Entities\StudioPlusVideo;
|
|
use Modules\StudioPlus\Services\AmazonProductService;
|
|
use Modules\StudioPlus\Services\AugmentationService;
|
|
use Modules\StudioPlus\Services\ProductBarcodeService;
|
|
use Modules\Language\Repositories\LanguageRepository;
|
|
|
|
class StudioPlusController extends Controller
|
|
{
|
|
protected $languagesRepository;
|
|
|
|
public function __construct(LanguageRepository $languagesRepository)
|
|
{
|
|
(new AugmentationService);
|
|
$this->languagesRepository = $languagesRepository;
|
|
}
|
|
/**
|
|
* Display a listing of the resource.
|
|
* @return Renderable
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$studioPlusChannel = StudioPlusChannel::query()
|
|
->where('user_id', auth()->id())
|
|
->first();
|
|
|
|
if (!$studioPlusChannel) {
|
|
$studioPlusChannel = StudioPlusChannel::create([
|
|
'user_id' => auth()->id(),
|
|
'name' => Str::random(30)
|
|
]);
|
|
}
|
|
|
|
return redirect()->route('studio-plus.channel', [
|
|
'studioPlusChannel' => $studioPlusChannel->name
|
|
]);
|
|
}
|
|
|
|
public function show(StudioPlusChannel $studioPlusChannel)
|
|
{
|
|
$videos = $this->getInitialVideos();
|
|
|
|
return view('studioplus::show', [
|
|
'channel' => $studioPlusChannel,
|
|
'videos' => $videos
|
|
]);
|
|
}
|
|
|
|
public function studio(StudioPlusChannel $studioPlusChannel)
|
|
{
|
|
$columns = ColumnPreset::where('user_id', auth()->id())->first();
|
|
$videos = [];//$this->getInitialVideos();
|
|
$start_date = null;
|
|
$end_date = null;
|
|
$filters = json_decode(\Cache::get('creator_studio_filters_'.auth()->id()));
|
|
if($filters && isset($filters->start_date) && isset($filters->end_date) && strtotime($filters->start_date) && strtotime($filters->end_date)){
|
|
$start_date = Carbon::createFromFormat('Y-m-d', $filters->start_date)->startOfDay()->format('Y-m-d');
|
|
$end_date = Carbon::createFromFormat('Y-m-d', $filters->end_date)->endOfDay()->format('Y-m-d');
|
|
}
|
|
|
|
$languages = $this->languagesRepository->getActiveAll();
|
|
|
|
return view('studioplus::studio', [
|
|
'channel' => $studioPlusChannel,
|
|
'videos' => $videos,
|
|
'columns' => $columns,
|
|
'start_date' => $start_date,
|
|
'end_date' => $end_date,
|
|
'languages' => $languages
|
|
]);
|
|
}
|
|
|
|
public function videos()
|
|
{
|
|
return view('studioplus::video');
|
|
}
|
|
|
|
public function watch(Request $request, StudioPlusVideo $video)
|
|
{
|
|
$original = false;
|
|
|
|
if ($request->has('original')) {
|
|
$original = true;
|
|
}
|
|
|
|
return view('studioplus::watch', [
|
|
'video' => $video->load('comments'),
|
|
'channel' => $video->channel,
|
|
'original' => $original
|
|
]);
|
|
}
|
|
|
|
public function getProductDetails(Request $request)
|
|
{
|
|
$code = $request->asin;
|
|
|
|
if (preg_match('/^[A-Z0-9]{10}$/', $code)) {
|
|
$service = new AmazonProductService();
|
|
}
|
|
else {
|
|
$service = new ProductBarcodeService();
|
|
}
|
|
|
|
return $service->getProductDetails($request->asin);
|
|
}
|
|
|
|
public function getInitialVideos($user_id = null)
|
|
{
|
|
$studioPlusChannel = StudioPlusChannel::query()
|
|
->where('user_id', auth()->id())
|
|
->first();
|
|
|
|
$query = auth()->user()->role->type === 'superadmin' || permissionCheck('studioplus.manage.videos')
|
|
? StudioPlusVideo::query()
|
|
: StudioPlusVideo::query()
|
|
->where(
|
|
fn ($query) =>
|
|
$query->where('studio_plus_channel_id', $studioPlusChannel->id)
|
|
);
|
|
|
|
$filters = json_decode(\Cache::get('creator_studio_filters_'.auth()->id()));
|
|
$videos = $query->with([
|
|
'thumbnail',
|
|
'category',
|
|
'asinData',
|
|
'videoType',
|
|
'otts.links',
|
|
'channel.user.staff',
|
|
'urls',
|
|
])
|
|
//->filter($filters)
|
|
->when(isset($filters->category_id), fn ($query) => $query->where('studio_plus_category_id', $filters->category_id))
|
|
->when(isset($filters->status) && $filters->status !== 'All' && $filters->status !== 'MVL', fn ($query) => $query->where('status', $filters->status))
|
|
->when(isset($filters->start_date) && strtotime($filters->start_date) && isset($filters->end_date) && strtotime($filters->end_date), function($query) use($filters) {
|
|
$startDate = Carbon::createFromFormat('Y-m-d', $filters->start_date)->startOfDay();
|
|
$endDate = Carbon::createFromFormat('Y-m-d', $filters->end_date)->endOfDay();
|
|
|
|
if(isset($filters->tracks)){
|
|
$query->whereHas('tracks', function($query) use($startDate,$endDate) {
|
|
$query->where('name', $filters->tracks);
|
|
$query->whereBetween('created_at', [$startDate, $endDate]);
|
|
});
|
|
} else {
|
|
$query->whereBetween('created_at', [$startDate, $endDate]);
|
|
}
|
|
})
|
|
->when(isset($filters->user_id), function($query) use($filters) {
|
|
$query->whereHas('channel.user', function($query) use($filters) {
|
|
$query->where('id', $filters->user_id);
|
|
});
|
|
})
|
|
->when(isset($filters->team_leader_id), fn ($query) =>
|
|
$query->whereHas('channel.user', fn ($query) =>
|
|
$query->where('parent_id', $filters->team_leader_id)->orWhere('id', $filters->team_leader_id)
|
|
)
|
|
)
|
|
->when(isset($filters->keyword) && !empty($filters->keyword), function($query) use($filters) {
|
|
$keyword = $filters->keyword;
|
|
|
|
$query->where(function($query) use($keyword) {
|
|
$query
|
|
->where('title', 'LIKE', "%{$keyword}%")
|
|
->orWhere('description', 'LIKE', "%{$keyword}%")
|
|
->orWhere('asin', 'LIKE', "%{$keyword}%")
|
|
->orWhere('product_name', 'LIKE', "%{$keyword}%")
|
|
->orWhere('brand', 'LIKE', "%{$keyword}%")
|
|
->orWhere('id', $keyword);
|
|
});
|
|
})
|
|
->when(isset($filters->leaders), function($query) use($filters) {
|
|
$query->whereHas('channel.user', function($query) use($filters) {
|
|
$query->whereIn('parent_id', $filters->leaders);
|
|
});
|
|
})
|
|
->when(isset($filters->users), function($query) use($filters) {
|
|
$query->whereHas('channel.user', function($query) use($filters) {
|
|
$query->whereIn('id', $filters->users);
|
|
});
|
|
})
|
|
->when(isset($filters->categories), function($query) use($filters) {
|
|
$query->whereIn('studio_plus_category_id', $filters->categories);
|
|
})
|
|
->when(isset($filters->types), function($query) use($filters) {
|
|
$query->whereIn('studio_plus_video_type_id', $filters->types);
|
|
})
|
|
->when(isset($filters->tracks), function($query) use($filters) {
|
|
$query->whereHas('tracks', function($query) use($filters) {
|
|
$query->where('name', $filters->tracks);
|
|
});
|
|
})
|
|
->when(isset($filters->asins), function($query) use($filters) {
|
|
$query->whereIn('studio_plus_asin_id', $filters->asins);
|
|
})
|
|
->when(isset($filters->labels), function($query) use($filters) {
|
|
$labels = $filters->labels;
|
|
|
|
foreach ($labels as $item) {
|
|
if ($item['include'] == 'true') {
|
|
$query->whereHas('urls', function ($query) use ($item) {
|
|
$query->where('label', $item['label']);
|
|
});
|
|
} else if ($item['include'] == 'false') {
|
|
$query->whereDoesntHave('urls', function ($query) use ($item) {
|
|
$query->where('label', $item['label']);
|
|
});
|
|
}
|
|
}
|
|
})
|
|
->when(isset($filters->ratings), function($query) use($filters) {
|
|
$ratings = $filters->ratings;
|
|
$min = $ratings[0]['min'];
|
|
$max = 0;
|
|
|
|
foreach ($ratings as $rating) {
|
|
if ($rating['min'] < $min) {
|
|
$min = $rating['min'];
|
|
}
|
|
|
|
if ($rating['max'] > $max) {
|
|
$max = $rating['max'];
|
|
}
|
|
}
|
|
|
|
$query->whereBetween('amazon_total_reviews', [$min, $max]);
|
|
})
|
|
->when(isset($filters->type), function($query) use($filters) {
|
|
if ($filters->type == 'SHORTS') {
|
|
$query->where('is_short', true);
|
|
} else {
|
|
$query->whereJsonContains('types', [$filters->type]);
|
|
}
|
|
})
|
|
->when(isset($filters->tags), function($query) use($filters) {
|
|
$tags = $filters->tags;
|
|
|
|
$query->where(function($query) use($tags) {
|
|
for ($i = 0; $i < count($tags); $i++) {
|
|
$tag = $tags[$i];
|
|
|
|
switch ($tag['code']) {
|
|
case 'has-youtube':
|
|
$query->where('in_youtube', true)->whereHas('urls', function ($query) {
|
|
$query->where('label', 'Youtube');
|
|
});
|
|
break;
|
|
case 'has-ott':
|
|
$query->where('in_ott', true)->whereHas('urls', function ($query) {
|
|
$query->where('label', 'OTT');
|
|
});
|
|
break;
|
|
case 'no-youtube':
|
|
$query->where('in_youtube', false);
|
|
break;
|
|
case 'no-ott':
|
|
$query->where('in_ott', false);
|
|
break;
|
|
case 'has-watermark':
|
|
$query->where('upload_status', 'COMPLETE');
|
|
break;
|
|
case 'no-watermark':
|
|
$query->where('upload_status', '<>', 'COMPLETE');
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
})
|
|
->when(isset($filters->customTags), function ($query) use ($filters) {
|
|
$tags = $filters->customTags;
|
|
$query->where('tags', '<>', 'null')->whereNotNull('tags')->where(function ($query) use ($tags) {
|
|
foreach ($tags as $tag) {
|
|
$query->orWhereJsonContains('tags', $tag);
|
|
}
|
|
});
|
|
})
|
|
->orderBy('id','DESC')
|
|
->take(25)
|
|
->get();
|
|
|
|
return $videos;
|
|
}
|
|
|
|
public function viewUserChannel(Request $request, StudioPlusChannel $channel)
|
|
{
|
|
$columns = ColumnPreset::where('user_id', auth()->id())->first();
|
|
$videos = [];
|
|
|
|
$current_month = Carbon::now()->month;
|
|
$current_year = Carbon::now()->year;
|
|
|
|
$start_date = Carbon::create($current_year, $current_month, 1)->startOfDay();
|
|
$end_date = $start_date->copy()->endOfMonth();
|
|
|
|
$languages = $this->languagesRepository->getActiveAll();
|
|
|
|
return view('studioplus::studio', [
|
|
'channel' => $channel,
|
|
'videos' => $videos,
|
|
'columns' => $columns,
|
|
'start_date' => $start_date,
|
|
'end_date' => $end_date,
|
|
'user_id' => $request->has('user_id') ? $request->user_id : null,
|
|
'languages' => $languages
|
|
]);
|
|
}
|
|
|
|
public function studioSettings()
|
|
{
|
|
return view('studioplus::settings');
|
|
}
|
|
|
|
public function urlLabelsManager()
|
|
{
|
|
return view('studioplus::studio-url-labels-manager');
|
|
}
|
|
|
|
public function resolutionsManager()
|
|
{
|
|
return view('studioplus::studio-video-resolutions-manager');
|
|
}
|
|
}
|