user()->role->type, ['superadmin', 'admin'])) { $type_ids = []; $categories = Cache::remember('categories', 300, function() { return JobRequestCategory::where('active',1)->get(); }); foreach ($categories as $key => $category) { if($category->route_permission != null && permissionCheck($category->route_permission)){ array_push($type_ids, $category->id); } } $items = $items->whereIn('type', $type_ids)->where('status','publish')->whereNull('deleted_at'); } //dont show draft job request and deleted $items = $items->where('status','publish')->whereNull('deleted_at'); } else { $items = JobRequest::with(['source', 'category.badge', 'video.ottUrl', 'video.urls', 'product', 'socialMediaPosts.site', 'tracks.status', 'tracks.metas', 'shipment', 'pov_video.videoType']); if (permissionCheck('job_board.creator.index')) { $items = $items->where('is_approved', true)->where(function($query) { $query->whereDoesntHave('applications', function($query) { $query->where('is_hired', true); })->orWhereHas('applications', function($query) { $query->where('is_hired', true)->where('applicant_id', auth()->id()); }); })->whereHas('category', function ($query) { $query->where('will_be_shipped', 1); })->where('status','publish')->whereNull('deleted_at'); // $type_ids = []; // $staff_badges = (array)json_decode(auth()->user()->staff->badges); // $badges = \Modules\WTIJobBoard\Entities\JobRequestBadge::whereIn('id',$staff_badges)->get(); // foreach ($badges as $key => $badge) { // if($badge->categories != null){ // array_push($type_ids, $badge->categories[0]); // } // } // $items = $items->whereIn('type', $type_ids); } else { $items = $items->where('client_id', auth()->id())->whereNull('deleted_at'); } } if (isset($data['filter'])) { $filter = $data['filter']; $items = $items->where(function($query) use($filter) { if(isset($filter['job_types'])){ $job_types = $filter['job_types']; $query->whereIn('type', $job_types); } if(isset($filter['job_status'])){ $job_status = $filter['job_status']; $query->whereIn('job_status', $job_status); } if(isset($filter['creator_status'])){ $creator_status = $filter['creator_status']; if (in_array("Available", $creator_status)){ $query->whereDoesntHave('applications', function($query) { $query->where('applicant_id', auth()->id()); }); } if (in_array("Applied", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 0); }); } if (in_array("In Progress", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 1); })->where('job_status','!=','Completed'); } if (in_array("Completed", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 1); })->where('job_status','Completed'); } } if(isset($filter['source_id'])){ $sources = $filter['source_id']; $query->whereIn('source_id', $sources); } if(isset($filter['client'])){ $client = $filter['client']; $query->whereHas('client', function($query) use($client) { $query->whereIn('id', $client); }); } if(isset($filter['product_brand'])){ $product_brand = $filter['product_brand']; $query->whereHas('product', function($query) use($product_brand) { $query->whereIn('brand', $product_brand); }); } if(isset($filter['track_package'])){ $track_package = $filter['track_package']; $query->whereIn('track_package_status', $track_package); } if(isset($filter['order_date'][0])){ $startDate = Carbon::parse($filter['order_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['order_date'][1]) ? Carbon::parse($filter['order_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); } if(isset($filter['shipped_date'][0])){ $startDate = Carbon::parse($filter['shipped_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['shipped_date'][1]) ? Carbon::parse($filter['shipped_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereHas('tracks', function($query) use($startDate,$endDate) { $query->where('status_id', 3)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); }); } if(isset($filter['received_date'][0])){ $startDate = Carbon::parse($filter['received_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['received_date'][1]) ? Carbon::parse($filter['received_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereHas('tracks', function($query) use($startDate,$endDate) { $query->where('status_id', 4)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); }); } if(isset($filter['search'])){ $search = $filter['search']; $query->where('id', 'like', '%' . $search . '%'); $query->orWhere('title', 'like', '%' . $search . '%'); $query->orWhere('asin', 'like', '%' . $search . '%'); // $query->orWhereHas('client', function ($query) use($search) { // $query->where('name', 'like', '%' . $search . '%'); // }); } }); } $items = $items->orderBy('created_at', $data['ascending'] === 'true' ? 'ASC' : 'DESC')->paginate($data['pagination']); return $items; } public function counts($data) { if (permissionCheck('job_board.admin.index')) { $items = JobRequest::query(); if (!in_array(auth()->user()->role->type, ['superadmin', 'admin'])) { $type_ids = []; $categories = Cache::remember('categories', 300, function() { return JobRequestCategory::where('active',1)->get(); }); foreach ($categories as $key => $category) { if($category->route_permission != null && permissionCheck($category->route_permission)){ array_push($type_ids, $category->id); } } $items = $items->whereIn('type', $type_ids)->where('status','publish')->whereNull('deleted_at'); } //dont show draft job request and deleted $items = $items->where('status','publish')->whereNull('deleted_at'); } else { $items = JobRequest::query(); if (permissionCheck('job_board.creator.index')) { $items = $items->where('is_approved', true)->where(function($query) { $query->whereDoesntHave('applications', function($query) { $query->where('is_hired', true); })->orWhereHas('applications', function($query) { $query->where('is_hired', true)->where('applicant_id', auth()->id()); }); })->whereHas('category', function ($query) { $query->where('will_be_shipped', 1); })->where('status','publish')->whereNull('deleted_at'); // $type_ids = []; // $staff_badges = (array)json_decode(auth()->user()->staff->badges); // $badges = \Modules\WTIJobBoard\Entities\JobRequestBadge::whereIn('id',$staff_badges)->get(); // foreach ($badges as $key => $badge) { // if($badge->categories != null){ // array_push($type_ids, $badge->categories[0]); // } // } // $items = $items->whereIn('type', $type_ids); } else { $items = $items->where('client_id', auth()->id())->whereNull('deleted_at'); } } if (isset($data['filter'])) { $filter = $data['filter']; $items = $items->where(function($query) use($filter) { if(isset($filter['job_types'])){ $job_types = $filter['job_types']; $query->whereIn('type', $job_types); } if(isset($filter['job_status'])){ $job_status = $filter['job_status']; $query->whereIn('job_status', $job_status); } if(isset($filter['creator_status'])){ $creator_status = $filter['creator_status']; if (in_array("Available", $creator_status)){ $query->whereDoesntHave('applications', function($query) { $query->where('applicant_id', auth()->id()); }); } if (in_array("Applied", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 0); }); } if (in_array("In Progress", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 1); })->where('job_status','!=','Completed'); } if (in_array("Completed", $creator_status)){ $query->orWhereHas('applications', function ($query) { $query->where('applicant_id', auth()->id())->where('is_hired', 1); })->where('job_status','Completed'); } } if(isset($filter['source_id'])){ $sources = $filter['source_id']; $query->whereIn('source_id', $sources); } if(isset($filter['client'])){ $client = $filter['client']; $query->whereHas('client', function($query) use($client) { $query->whereIn('id', $client); }); } if(isset($filter['product_brand'])){ $product_brand = $filter['product_brand']; $query->whereHas('product', function($query) use($product_brand) { $query->whereIn('brand', $product_brand); }); } if(isset($filter['track_package'])){ $track_package = $filter['track_package']; $query->whereIn('track_package_status', $track_package); } if(isset($filter['order_date'][0])){ $startDate = Carbon::parse($filter['order_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['order_date'][1]) ? Carbon::parse($filter['order_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); } if(isset($filter['shipped_date'][0])){ $startDate = Carbon::parse($filter['shipped_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['shipped_date'][1]) ? Carbon::parse($filter['shipped_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereHas('tracks', function($query) use($startDate,$endDate) { $query->where('status_id', 3)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); }); } if(isset($filter['received_date'][0])){ $startDate = Carbon::parse($filter['received_date'][0])->addDay()->format('Y-m-d'); $endDate = isset($filter['received_date'][1]) ? Carbon::parse($filter['received_date'][1])->addDay()->format('Y-m-d') : $startDate; $query->whereHas('tracks', function($query) use($startDate,$endDate) { $query->where('status_id', 4)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); }); } if(isset($filter['search'])){ $search = $filter['search']; $query->where('id', 'like', '%' . $search . '%'); $query->orWhere('title', 'like', '%' . $search . '%'); $query->orWhere('asin', 'like', '%' . $search . '%'); // $query->orWhereHas('client', function ($query) use($search) { // $query->where('name', 'like', '%' . $search . '%'); // }); } }); } return $items->get()->countBy(function ($item) { return permissionCheck('job_board.admin.index') ? strtolower(str_replace(' ', '_', $item->client_status)) : ( permissionCheck('job_board.creator.index') ? strtolower(str_replace(' ', '_', $item->creator_status)) : strtolower(str_replace(' ', '_', $item->client_status))); }); } public function create($data) { $category = JobRequestCategory::find($data['category']['id']); if($category){ $job_request = new JobRequest(); if($data['client_id'] == null){ $credits = auth()->user()->credit_points_status; if($data['status'] == 'publish' && auth()->user()->role->type == 'customer'){ if($data['credit_type'] == 'subscription' && $credits['total_available_credits']['subscription'] < $category->credits ){ $data['status'] == 'draft'; } else if($data['credit_type'] == 'alacarte' && $credits['total_available_credits']['alacarte'] < $category->credits ){ $data['status'] == 'draft'; } } } else { $credits = (new CustomerService())->credits($data['client_id']); } $data['credits'] = $category->credits; $data['source_id'] = $data['source']['id']; $data['type'] = $data['category']['id']; $data['post_to'] = $data['category']['will_be_posted'] ? $data['post_to'] : null; $job_request->fill($data); if($data['client_id'] == null){ $job_request->client_id = auth()->id(); } $job_request->save(); if($category->will_be_posted && $job_request->post_to != null){ foreach ($job_request->post_to as $key => $site) { JobRequestSocialMediaPost::create([ 'job_request_id' => $job_request->id, 'social_media_site_id' => $site, 'handle' => $data['handles'][$site] ]); } } if($data['source']['has_product']){ $product = $data['product']; $job_request->product()->create([ 'asin' => $data['asin'], 'name' => $product['name'] != null ? $product['name'] : $data['title'], 'store' => isset($product['store']) ? $product['store'] : null, 'brand' => isset($product['brand']) ? $product['brand'] : null, 'store' => isset($product['store']) ? $product['store'] : null, 'category' => isset($product['category']['name']) ? $product['category']['name'] : null, 'price' => isset($product['price']) ? $product['price'] : null, 'reviews' => isset($product['reviews']) ? $product['reviews'] : null, 'image' => isset($product['image']['link']) ? $product['image']['link'] : null, 'link' => isset($product['link']) ? $product['link'] : null, ]); } $status_ordered = JobRequestStatus::where('name', 'ordered')->first(); if ($status_ordered) { $track = new JobRequestTrack(); $track->job_request_id = $job_request->id; $track->status_id = $status_ordered->id; $track->save(); } if($job_request->status == 'publish' && $job_request->category->credits > 0){ UserCreditHistory::create([ 'user_id' => $job_request->client_id, 'subscription_credits_from' => $credits['total_available_credits']['subscription'], 'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] - (int)$job_request->credits : $credits['total_available_credits']['subscription'], 'alacarte_credits_from' => $credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] - (int)$job_request->credits : $credits['total_available_credits']['alacarte'], 'details' => 'Job ID: '.$job_request->id.' ('.$job_request->category->label.')' ]); } // if($job_request->status == 'publish'){ // $this->sendJobRequestUpdate($job_request->category->support_email, 'Pending', $data['asin']); // } return $job_request; } else { return false; } } public function update($data) { $job_request = JobRequest::with(['client.company','category'])->find($data['id']); if ($job_request) { $category = JobRequestCategory::find($data['category']['id']); $old_status = $job_request->status; if (auth()->user()->role->type == 'customer') { $data['is_approved'] = 0; $data['job_status'] = 'Pending'; } if($data['status'] == 'publish' && auth()->user()->role->type == 'customer'){ $credits = auth()->user()->credit_points_status; if($data['credit_type'] == 'subscription' && $credits['total_available_credits']['subscription'] < $category->credits ){ $data['status'] == 'draft'; } else if($data['credit_type'] == 'alacarte' && $credits['total_available_credits']['alacarte'] < $category->credits ){ $data['status'] == 'draft'; } } $data['credits'] = $category->credits; $data['type'] = $data['category']['id']; $data['post_to'] = $data['category']['will_be_posted'] ? $data['post_to'] : null; $data['studio_plus_videos_id'] = $data['category']['video_types'] == null ? null : $data['studio_plus_videos_id']; if($old_status == 'draft' && $data['status'] == 'publish'){ $data['created_at'] = \Carbon\Carbon::now()->format('Y-m-d H:i:s'); $credits = (new CustomerService())->credits($job_request->client_id); UserCreditHistory::create([ 'user_id' => $job_request->client_id, 'subscription_credits_from' => $credits['total_available_credits']['subscription'], 'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] - (int)$job_request->credits : $credits['total_available_credits']['subscription'], 'alacarte_credits_from' => $credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] - (int)$job_request->credits : $credits['total_available_credits']['alacarte'], 'details' => 'Job ID: '.$job_request->id.' ('.$job_request->category->label.')' ]); } else if($old_status == 'publish' && $data['status'] == 'draft'){ $credits = (new CustomerService())->credits($job_request->client_id); UserCreditHistory::create([ 'user_id' => $job_request->client_id, 'subscription_credits_from' => $credits['total_available_credits']['subscription'], 'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] + (int)$job_request->credits : $credits['total_available_credits']['subscription'], 'alacarte_credits_from' => $credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] + (int)$job_request->credits : $credits['total_available_credits']['alacarte'], 'details' => 'Reset to Draft Job ID: '.$job_request->id.' ('.$job_request->category->label.')' ]); } $job_request->fill($data); $job_request->update(); if($category->will_be_posted && $job_request->post_to != null){ $job_request->socialMediaPosts()->whereNotIn('social_media_site_id', $job_request->post_to)->delete(); foreach ($job_request->post_to as $key => $site) { JobRequestSocialMediaPost::updateOrCreate( ['job_request_id' => $job_request->id, 'social_media_site_id' => $site], ['handle' => isset($data['handles'][$site]) ? $data['handles'][$site] : null] ); } } $product = $data['product']; $job_request->product()->update([ 'asin' => $data['asin'], 'name' => $product['name'] != null ? $product['name'] : $data['title'], 'store' => isset($product['store']) ? $product['store'] : null, 'brand' => isset($product['brand']) ? $product['brand'] : null, 'store' => isset($product['store']) ? $product['store'] : null, 'category' => isset($product['category']['name']) ? $product['category']['name'] : null, 'price' => isset($product['price']) ? $product['price'] : null, 'reviews' => isset($product['reviews']) ? $product['reviews'] : null, 'image' => isset($product['image']['link']) ? $product['image']['link'] : null, 'link' => isset($product['link']) ? $product['link'] : null, ]); return $job_request; } return false; } public function approve($id,$credits) { $user = auth()->user(); if ($user) { $role = $user->role->type; if (permissionCheck('job_request.approve')) { $job_request = JobRequest::find($id); if ($job_request) { $job_request->job_status = 'Approved'; $job_request->track_package_status = 'Approved'; $job_request->is_approved = true; $job_request->is_rejected = false; if($job_request->category->credits == 0){ $user_credits = (new CustomerService())->credits($job_request->client_id); if($job_request->credit_type == 'subscription' && $user_credits['total_available_credits']['subscription'] < $credits){ return false; } else if($job_request->credit_type == 'alacarte' && $user_credits['total_available_credits']['alacarte'] < $credits){ return false; } UserCreditHistory::create([ 'user_id' => $job_request->client_id, 'subscription_credits_from' => $user_credits['total_available_credits']['subscription'], 'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $user_credits['total_available_credits']['subscription'] - (int)$credits : $user_credits['total_available_credits']['subscription'], 'alacarte_credits_from' => $user_credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $user_credits['total_available_credits']['alacarte'] - (int)$credits : $user_credits['total_available_credits']['alacarte'], 'details' => 'Job ID: '.$job_request->id.' ('.$job_request->category->label.')' ]); $job_request->credits = $credits; } $job_request->update(); $processing_status = JobRequestStatus::where('name', 'processing')->first(); $track = new JobRequestTrack(); $track->job_request_id = $job_request->id; $track->status_id = $processing_status->id; $track->save(); //complete the job after approve for purchase video and access video if($job_request->type == 10 || $job_request->type == 12){ $this->fulfilled(['id' => $job_request->id]); } //$this->sendJobRequestUpdate($job_request->client->email, 'Approved', $job_request->asin); return true; } } } return false; } public function reject($id) { $user = auth()->user(); if ($user) { $role = $user->role->type; if (permissionCheck('job_request.reject')) { $job_request = JobRequest::find($id); if ($job_request) { $credits = (new CustomerService())->credits($job_request->client_id); UserCreditHistory::create([ 'user_id' => $job_request->client_id, 'subscription_credits_from' => $credits['total_available_credits']['subscription'], 'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] + (int)$job_request->credits : $credits['total_available_credits']['subscription'], 'alacarte_credits_from' => $credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] + (int)$job_request->credits : $credits['total_available_credits']['alacarte'], 'details' => 'Rejected Job ID: '.$job_request->id.' ('.$job_request->category->label.')' ]); $job_request->job_status = 'Denied'; $job_request->track_package_status = 'Rejected'; $job_request->is_rejected = true; $job_request->is_approved = false; $job_request->update(); $processing_status = JobRequestStatus::where('name', 'rejected')->first(); $track = new JobRequestTrack(); $track->job_request_id = $job_request->id; $track->status_id = $processing_status->id; $track->save(); $setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first(); $this->sendJobRequestUpdate($setting ? $setting->email : $job_request->client->email, 'Rejected', $job_request->asin); return true; } } } return false; } public function incomplete($id) { if (permissionCheck('job_request.incomplete')) { $job_request = JobRequest::find($id); if ($job_request) { $last_track = $job_request->tracks()->where('status_id','!=',5)->latest()->first(); $job_request->job_status = 'In Progress'; $job_request->track_package_status = $last_track->status->label; $job_request->update(); $processing_status = JobRequestStatus::where('name', 'incomplete')->first(); $track = new JobRequestTrack(); $track->job_request_id = $job_request->id; $track->status_id = $processing_status->id; $track->save(); return true; } } return false; } public function delete($id) { $job_request = JobRequest::find($id); if ($job_request) { if ($job_request->client_id != auth()->id() && !permissionCheck('job_request.delete')) { return false; } $job_request->delete(); $job_request->product()->delete(); $job_request->applications()->delete(); $job_request->shipment()->delete(); $job_request->tracks()->delete(); return true; } return false; } public function fulfilled($data) { $current_track = JobRequestTrack::where('job_request_id',$data['id'])->latest()->first(); $track_exist = JobRequestTrack::where('job_request_id',$data['id'])->where('status_id',5)->first(); if(!$track_exist || $current_track->status_id == 11) { $track = new JobRequestTrack(); $track->job_request_id = $data['id']; $track->status_id = 5; $track->save(); $meta = new JobRequestTrackMeta(); $meta->track_id = $track->id; $meta->name = 'fulfilled_at'; $meta->value = $data['fulfilled_at'] ?? \Carbon\Carbon::now()->format('Y-m-d H:i:s'); $meta->save(); } $job_request = JobRequest::find($data['id']); if($job_request->job_status != 'Completed'){ $job_request->job_status = 'Completed'; $job_request->track_package_status = 'Completed'; $job_request->save(); $setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first(); $this->sendJobRequestUpdate((object)['email' => $setting ? $setting->email : $job_request->client->email, 'first_name' => $job_request->client->first_name], 'Completed', $job_request->asin); } return true; } public function winner($data) { $job_request = JobRequest::find($data['id']); if ($job_request) { $winner_selected_status = JobRequestStatus::where('name', 'winner-selected')->first(); $track_exist = JobRequestTrack::where('job_request_id',$job_request->id)->where('status_id',$winner_selected_status->id)->first(); if(!$track_exist) { $track = new JobRequestTrack(); $track->job_request_id = $job_request->id; $track->status_id = $winner_selected_status->id; $track->save(); } $job_request->track_package_status = 'Winner Selected'; $job_request->others = [ 'winner_name' => $data['winner_name'], 'winner_phone' => $data['winner_phone'], 'winner_shipping_address' => $data['winner_shipping_address'], ]; $job_request->save(); $setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first(); $this->sendJobRequestUpdate($setting ? $setting->email : $job_request->client->email, 'Winner Selected', $job_request->id); return true; } return false; } public function deliverable($data) { $deliverable_status = JobRequestStatus::where('name', 'deliverable')->first(); $track = new JobRequestTrack(); $track->job_request_id = $data['id']; $track->status_id = $deliverable_status->id; $track->save(); $meta = new JobRequestTrackMeta(); $meta->track_id = $track->id; $meta->name = 'deliverable_at'; $meta->value = $data['deliverable_at']; $meta->save(); $job_request = JobRequest::find($data['id']); $job_request->job_status = 'In Progress'; $job_request->track_package_status = 'Scheduled'; $job_request->save(); return true; } public function deliverableUpdate($data) { $meta = JobRequestTrackMeta::where('track_id', $data['track_id'])->first(); if($meta){ $meta->value = $data['deliverable_at']; $meta->update(); return true; } return false; } public function postedLinks($data) { $job_request = JobRequest::find($data['id']); foreach ($data['links'] as $id => $value) { $post = JobRequestSocialMediaPost::where('job_request_id', $job_request->id)->where('id', $id)->first(); if($post){ $post->url = $value; $post->save(); } } $this->fulfilled($data); return true; } public function adminNotes($data) { $job_request = JobRequest::find($data['id']); if($job_request){ $job_request->admin_notes = $data['admin_notes']; $job_request->save(); return true; } return false; } public function url($data) { if (permissionCheck('job_request.pictures-manager') || permissionCheck('job_request.pov-manager') || permissionCheck('job_request.livestream.url') || permissionCheck('job_board.livestream-manager') || permissionCheck('job_board.ott-app-manager') || permissionCheck('job_board.giveaway-manager')) { $job_request = JobRequest::find($data['id']); if ($job_request) { if($job_request->category->name == 'pov_video'){ $amazon = $job_request->video->urls->where('label','Amazon')->first(); if($amazon){ $amazon->url = $data['url']; $amazon->save(); } } else { $job_request->fill($data); $job_request->update(); } return $this->fulfilled($data); } } return false; } public function downloadVideo($id) { $job_request = JobRequest::find($id); $video_id = $job_request->pov_video != null ? $job_request->pov_video->id : ($job_request->video != null ? $job_request->video->id : false ); if(!$video_id) return false; $video = \Modules\StudioPlus\Entities\StudioPlusVideo::with('channel')->find($video_id); if($video){ //$token = \Cache::remember('user-token-'.auth()->user()->id, 300, function () { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://wtisv.com/api/studio/get-token'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); $headers = array(); $headers[] = 'Authorization: Bearer ooVeuWUlukjmsHSc26yVqlVT4BG7Ii9P'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = json_decode(curl_exec($ch)); curl_close($ch); $token = $result->token; //}); if($token){ //for purchase video only should not have watermarks if($job_request->type == 10){ $video_url = $video->original_video_url; } else { $video_url = $video->video_url; } $video_url = \Str::remove(\Config::get('studioplus.google_api_endpoint'). "/" , $video_url); $video_url = \Str::remove(\Config::get('studioplus.bucket_name'). "/", $video_url); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://wtisv.com/api/studio/generate-video-link'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "user_id=".$video->channel->user_id."&video_id=".$video->id."&video_url=".$video_url); $headers = array(); $headers[] = 'Authorization: Bearer '.$token; $headers[] = 'Content-Type: application/x-www-form-urlencoded'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = json_decode(curl_exec($ch)); curl_close($ch); return isset($result->link) ? $result->link : false; } } return false; } public function searchPOV($asin, $type) { $query = \Modules\StudioPlus\Entities\StudioPlusVideo::query()->with('urls')->where('asin', 'LIKE', "%{$asin}%"); $category = JobRequestCategory::find($type); if($category && $category->video_types != null){ $query = $query->whereIn('studio_plus_video_type_id', $category->video_types); } $videos = $query->get(); $pov_videos = []; foreach ($videos as $key => $video) { $alread_purchased = false; if($type == 10){ $job = JobRequest::where('studio_plus_videos_id',$video->id)->where('type',10)->first() ?? false; } $data = [ 'id' => $video->id, 'title' => $video->title, 'type' => $video->videoType->name, 'status' => $video->status, 'urls' => $video->urls, 'alread_purchased' => isset($job) ? ($job && $job->job_status != 'Pending' ? true : false) : false ]; array_push($pov_videos,$data); } return collect($pov_videos); } }