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'); } }