trs_matrimony/app/Http/Controllers/Api/HomeController.php
2024-08-22 09:31:12 +05:30

494 lines
22 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Models\User;
use App\Models\Blog;
use App\Models\Package;
use App\Models\ContactUs;
use App\Models\HappyStory;
use App\Models\IgnoredUser;
use App\Models\ProfileMatch;
use Illuminate\Http\Request;
use App\Http\Resources\BlogResource;
use App\Http\Resources\MemberResource;
use App\Http\Requests\ContactUsRequest;
use App\Http\Resources\PackageResource;
use App\Http\Controllers\Api\Controller;
use App\Http\Resources\GalleryImageResource;
use App\Notifications\EmailNotification;
use App\Http\Resources\HappyStoryResource;
use App\Http\Resources\HowItWorksResource;
use Illuminate\Support\Facades\Notification;
use App\Http\Resources\MatchedProfileResource;
use App\Models\Setting;
use ArrayIterator;
use MultipleIterator;
use Laravel\Sanctum\PersonalAccessToken;
class HomeController extends Controller
{
public function home_slider()
{
// Slider images
$slider_images = array();
$sliders = get_setting('show_homepage_slider') == 'on' && get_setting('home_slider_images') != null ?
json_decode(get_setting('home_slider_images'), true) : [];
foreach ($sliders as $key => $slider) {
$slider_data = array(
'image' => get_setting('home_slider_images_small') != null
? uploaded_asset(json_decode(get_setting('home_slider_images_small'), true)[$key])
: uploaded_asset($slider)
);
$slider_images[] = $slider_data;
}
return $this->response_data($slider_images);
}
public function home_banner()
{
// banner
$banner = array();
$banner_imags = get_setting('show_home_banner1_section') == 'on' && get_setting('home_banner1_images') != null ?
json_decode(get_setting('home_banner1_images')) : [];
foreach ($banner_imags as $key => $value) {
$banner_data = array(
'link' => json_decode(get_setting('home_banner1_links'), true)[$key],
'image' => uploaded_asset($value)
);
$banner[] = $banner_data;
}
$data['banner'] = $banner;
return $this->response_data($banner);
}
public function home_how_it_works()
{
// How It Works
$how_it_works = array();
if (get_setting('show_how_it_works_section') == 'on' && get_setting('how_it_works_steps_titles') != null) {
$how_it_works_title = get_setting('how_it_works_title') ?? '';
$how_it_works_sub_title = get_setting('how_it_works_sub_title') ?? '';
$how_it_works_steps_titles = array();
$how_it_works_steps_titles = json_decode(get_setting('how_it_works_steps_titles'));
foreach ($how_it_works_steps_titles as $key => $how_it_works_steps_title) {
$how_it_works_data = array(
'step' => $key + 1,
'title' => $how_it_works_steps_title,
'subtitle' => json_decode(get_setting('how_it_works_steps_sub_titles'), true)[$key],
'icon' => uploaded_asset(json_decode(get_setting('how_it_works_steps_icons'), true)[$key]),
);
$how_it_works[] = $how_it_works_data;
}
return HowItWorksResource::collection($how_it_works)->additional([
'how_it_works_title' => $how_it_works_title,
'how_it_works_sub_title' => $how_it_works_sub_title
]);
}
return $this->failure_data($how_it_works);
}
public function home_trusted_by_millions()
{
// trusted by millions
$trusted_by_millions = array();
$homepage_best_features = get_setting('show_trusted_by_millions_section') == 'on' ?
json_decode(get_setting('homepage_best_features')) : [];
foreach ($homepage_best_features as $key => $homepage_best_feature) {
$homepage_best_feature_data = array(
'title' => $homepage_best_feature,
'icon' => uploaded_asset(json_decode(get_setting('homepage_best_features_icons'), true)[$key]),
);
$trusted_by_millions[] = $homepage_best_feature_data;
}
return $this->response_data($trusted_by_millions);
}
public function home_happy_stories()
{
// Happy Stories
$stories = HappyStory::where('approved', '1')
->latest()
->limit(get_setting('max_happy_story_show_homepage'))
->get();
$happy_stories = get_setting('show_happy_story_section') == 'on' ? (HappyStoryResource::collection($stories)) : [];
return $this->response_data($happy_stories);
}
public function home_packages()
{
// packages
$packages = get_setting('show_homapege_package_section') == 'on' ? (PackageResource::collection(Package::where('active', '1')->get())) : [];
return $this->response_data($packages);
}
public function home_reviews()
{
// reviews
$reviews = array();
$homepage_reviews = get_setting('show_homepage_review_section') == 'on' && get_setting('homepage_reviews') != null ?
json_decode(get_setting('homepage_reviews')) : [];
if (count($homepage_reviews) > 0) {
$reviews['bg_image'] = uploaded_asset(get_setting('homepage_review_section_background_image'));
$reviews['items'] = array();
foreach ($homepage_reviews as $key => $review) {
$review_data = array(
'image' => uploaded_asset(json_decode(get_setting('homepage_reviewers_images'), true)[$key]) ?? static_asset('assets/img/placeholder.jpg'),
'review' => $review
);
$reviews['items'][] = $review_data;
}
}
return $reviews ? $this->response_data($reviews) : $this->failure_data(null);
}
public function home_blogs()
{
// blogs
$blogs = get_setting('show_blog_section') == 'on' ?
(BlogResource::collection(Blog::latest()->active()->limit(get_setting('max_blog_show_homepage'))->get())) : [];
return $this->response_data($blogs);
}
public function home_premium_members()
{
$token = PersonalAccessToken::findToken(request()->bearerToken());
$user = null;
if ($token) {
$user = $token->tokenable;
}
// new members & premium members
$members = User::where('user_type', 'member')
->where('approved', 1)
->where('blocked', 0)
->where('deactivated', 0);
if ($token && $user->user_type == 'member') {
$members = $members->where('id', '!=', $user->id)
->whereIn("id", function ($query) use ($user) {
$query->select('user_id')
->from('members')
->where('gender', '!=', $user->member->gender);
});
$ignored_to = IgnoredUser::where('ignored_by', $user->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$members = $members->whereNotIn('id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', $user->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$members = $members->whereNotIn('id', $ignored_by_ids);
}
}
$premium_members = $members->where('membership', 2)->inRandomOrder()->limit(get_setting('max_premium_member_homepage'))->get();
$premium_members = MemberResource::collection($premium_members);
return get_setting('show_premium_member_section') == 'on' ? $this->response_data($premium_members) : $this->response_data([]);
}
public function home_new_members()
{
$token = PersonalAccessToken::findToken(request()->bearerToken());
$user = null;
if ($token) {
$user = $token->tokenable;
}
// new members & premium members
$members = User::where('user_type', 'member')
->where('approved', 1)
->where('blocked', 0)
->where('deactivated', 0);
if ($user && $user->user_type == 'member') {
$members = $members->where('id', '!=', $user->id)
->whereIn("id", function ($query) use ($user) {
$query->select('user_id')
->from('members')
->where('gender', '!=', $user->member->gender);
});
$ignored_to = IgnoredUser::where('ignored_by', $user->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$members = $members->whereNotIn('id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', $user->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$members = $members->whereNotIn('id', $ignored_by_ids);
}
}
$new_members = $members->orderBy('id', 'desc')->limit(get_setting('max_new_member_show_homepage'))->get()->shuffle();
$new_members = MemberResource::collection($new_members);
return get_setting('show_new_member_section') == 'on' ? $this->response_data($new_members) : $this->response_data([]);
}
public function home()
{
// Slider images
$slider_images = array();
$sliders = get_setting('show_homepage_slider') == 'on' && get_setting('home_slider_images') != null ?
json_decode(get_setting('home_slider_images'), true) : [];
foreach ($sliders as $key => $slider) {
$slider_data = array(
'image' => uploaded_asset($slider)
);
$slider_images[] = $slider_data;
}
$data['slider_images'] = $slider_images;
// new members & premium members
$members = User::where('user_type', 'member')
->where('approved', 1)
->where('blocked', 0)
->where('deactivated', 0);
if (auth()->user() && auth()->user()->user_type == 'member') {
$members = $members->where('id', '!=', auth()->user()->id)
->whereIn("id", function ($query) {
$query->select('user_id')
->from('members')
->where('gender', '!=', auth()->user()->member->gender);
});
$ignored_to = IgnoredUser::where('ignored_by', auth()->user()->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$members = $members->whereNotIn('id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', auth()->user()->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$members = $members->whereNotIn('id', $ignored_by_ids);
}
}
$premium_members = $members;
$new_members = $members;
$new_members = $new_members->orderBy('id', 'desc')->limit(get_setting('max_new_member_show_homepage'))->get()->shuffle();
$premium_members = $premium_members->where('membership', 2)->inRandomOrder()->limit(get_setting('max_premium_member_homepage'))->get();
$data['new_members'] = MemberResource::collection($new_members);
$data['premium_members'] = MemberResource::collection($premium_members);
// banner
$banner = array();
$banner_imags = get_setting('show_home_banner1_section') == 'on' && get_setting('home_banner1_images') != null ?
json_decode(get_setting('home_banner1_images')) : [];
foreach ($banner_imags as $key => $value) {
$banner_data = array(
'link' => json_decode(get_setting('home_banner1_links'), true)[$key],
'photo' => uploaded_asset($value)
);
$banner[] = $banner_data;
}
$data['banner'] = $banner;
// How It Works
$how_it_works = array();
$how_it_works_steps_titles = get_setting('show_how_it_works_section') == 'on' && get_setting('how_it_works_steps_titles') != null ?
json_decode(get_setting('how_it_works_steps_titles')) : [];
if (count($how_it_works_steps_titles) > 0) {
$how_it_works['how_it_works_title'] = get_setting('how_it_works_title');
$how_it_works['how_it_works_sub_title'] = get_setting('how_it_works_sub_title');
$how_it_works['items'] = array();
foreach ($how_it_works_steps_titles as $key => $how_it_works_steps_title) {
$how_it_works_data = array(
'step' => $key + 1,
'title' => $how_it_works_steps_title,
'subtitle' => json_decode(get_setting('how_it_works_steps_sub_titles'), true)[$key],
'icon' => uploaded_asset(json_decode(get_setting('how_it_works_steps_icons'), true)[$key]),
);
$how_it_works['items'][] = $how_it_works_data;
}
}
$data['how_it_works'] = $how_it_works;
// trusted by millions
$trusted_by_millions = array();
$homepage_best_features = get_setting('show_trusted_by_millions_section') == 'on' ?
json_decode(get_setting('homepage_best_features')) : [];
foreach ($homepage_best_features as $key => $homepage_best_feature) {
$homepage_best_feature_data = array(
'title' => $homepage_best_feature,
'icon' => uploaded_asset(json_decode(get_setting('homepage_best_features_icons'), true)[$key]),
);
$trusted_by_millions[] = $homepage_best_feature_data;
}
$data['trusted_by_millions'] = $trusted_by_millions;
// Happy Stories
$stories = HappyStory::where('approved', '1')
->latest()
->limit(get_setting('max_happy_story_show_homepage'))
->get();
$happy_stories = get_setting('show_happy_story_section') == 'on' ? (HappyStoryResource::collection($stories)) : [];
$data['happy_stories'] = $happy_stories;
// packages
$packages = get_setting('show_homapege_package_section') == 'on' ? (PackageResource::collection(Package::where('active', '1')->get())) : [];
$data['packages'] = $packages;
// reviews
$reviews = array();
$homepage_reviews = get_setting('show_homepage_review_section') == 'on' && get_setting('homepage_reviews') != null ?
json_decode(get_setting('homepage_reviews')) : [];
if (count($homepage_reviews) > 0) {
$reviews['bg_image'] = uploaded_asset(get_setting('homepage_review_section_background_image'));
$reviews['items'] = array();
foreach ($homepage_reviews as $key => $review) {
$review_data = array(
'image' => uploaded_asset(json_decode(get_setting('homepage_reviewers_images'), true)[$key]),
'review' => $review
);
$reviews['items'][] = $review_data;
}
}
$data['reviews'] = $reviews;
// blogs
$blogs = get_setting('show_homapege_package_section') == 'on' ?
(BlogResource::collection(Blog::latest()->active()->limit(get_setting('max_blog_show_homepage'))->get())) : [];
$data['blogs'] = $blogs;
return $this->response_data($data);
}
public function home_with_login()
{
$members = User::query();
$members->where('user_type', 'member')
->where('approved', 1)
->where('blocked', 0)
->where('deactivated', 0);
if (auth()->user() && auth()->user()->user_type == 'member') {
$members->where('id', '!=', auth()->user()->id)
->whereIn("id", function ($query) {
$query->select('user_id')
->from('members')
->where('gender', '!=', auth()->user()->member->gender);
});
$ignored_to = IgnoredUser::where('ignored_by', auth()->user()->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$members->whereNotIn('id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', auth()->user()->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$members->whereNotIn('id', $ignored_by_ids);
}
}
$members = $members->orderBy('id', 'desc')->limit(15)->get()->shuffle();
return MemberResource::collection($members)->additional([
'result' => true
]);
}
// app_info
public function app_info()
{
$how_it_works_steps = json_decode(get_setting('how_it_works_steps_titles'));
$step = 1;
foreach ($how_it_works_steps as $key => $how_it_works_steps_title) {
$steps[] = $step++;
$how_it_works_steps_titles[] = $how_it_works_steps_title;
$how_it_works_steps_sub_titles[] = json_decode(get_setting('how_it_works_steps_sub_titles'), true)[$key];
$how_it_works_steps_icons[] = uploaded_asset(json_decode(get_setting('how_it_works_steps_icons'), true)[$key]);
}
#Combine multiple arrays into single array
$keys = array("steps", "how_it_works_steps_titles", "how_it_works_steps_sub_titles", "how_it_works_steps_icons");
$how_it_works = array();
$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($steps));
$mi->attachIterator(new ArrayIterator($how_it_works_steps_titles));
$mi->attachIterator(new ArrayIterator($how_it_works_steps_sub_titles));
$mi->attachIterator(new ArrayIterator($how_it_works_steps_icons));
foreach ($mi as $value) {
$how_it_works[] = array_combine($keys, $value);
}
$data['website_name'] = get_setting('website_name');
$data['system_logo'] = uploaded_asset(get_setting('system_logo'));
$data['how_it_works_title'] = get_setting('how_it_works_title');
$data['how_it_works_sub_title'] = get_setting('how_it_works_sub_title');
$data['how_it_works'] = $how_it_works;
return $this->response_data($data);
}
//Member Dashboard
public function member_dashboard()
{
$user = auth()->user();
$data['member_name'] = auth()->user()->first_name . ' ' . auth()->user()->last_name;
$data['member_email'] = auth()->user()->email;
$data['member_photo'] = uploaded_asset(auth()->user()->photo) !== null ? uploaded_asset(auth()->user()->photo) : static_asset('assets/img/avatar-place.png');
$data['remaining_interest'] = get_remaining_package_value($user->id, 'remaining_interest');
$data['remaining_contact_view'] = get_remaining_package_value($user->id, 'remaining_contact_view');
$data['remaining_photo_gallery'] = get_remaining_package_value($user->id, 'remaining_photo_gallery');
$data['remaining_profile_image_view'] = (get_setting('profile_picture_privacy') == 'only_me') ? get_remaining_package_value($user->id, 'remaining_profile_image_view') : '';
$data['remaining_gallery_image_view'] = (get_setting('gallery_image_privacy') == 'only_me') ? get_remaining_package_value($user->id, 'remaining_gallery_image_view') : '';
$current_package_info = array(
'package_id' => $user->member->package->id,
'package_name' => $user->member->package->name,
'package_expiry' => package_validity($user->id) ? date('d.m.Y', strtotime($user->member->package_validity)) : translate('Expired'),
);
$data['current_package_info'] = $current_package_info;
return $this->response_data($data);
}
public function addon_check()
{
$addons = array();
$addons['otp_system'] = addon_activation('otp_system') ? true : false;
$addons['referral_system'] = addon_activation('referral_system') ? true : false;
$addons['support_tickets'] = addon_activation('support_tickets') ? true : false;
return $this->response_data($addons);
}
public function feature_check()
{
/*
$features['google_login'] = get_setting('google_login_activation') == 1 ? true : false;
$features['facebook_login'] = get_setting('facebook_login_activation') == 1 ? true : false;
$features['twitter_login'] = get_setting('twitter_login_activation') == 1 ? true : false;
$features['apple_login'] = get_setting('apple_login_activation') == 1 ? true : false;
$features['force_https'] = get_setting('FORCE_HTTPS') == 1 ? true : false;
$features['maintenance_mode'] = get_setting('maintenance_mode') == 1 ? true : false;
$features['wallet_system'] = get_setting('wallet_system') == 1 ? true : false;
$features['full_profile_show'] = get_setting('full_profile_show_according_to_membership') == 1 ? true : false;
$features['profile_picture_approval'] = get_setting('profile_picture_approval_by_admin') == 1 ? true : false;
$features['gallery_image_privacy'] = get_setting('gallery_image_privacy');
$features['profile_picture_privacy'] = get_setting('profile_picture_privacy');
$features['email_verification'] = get_setting('email_verification') == 1 ? true : false;
$features['member_approval_by_admin'] = get_setting('member_approval_by_admin') == 1 ? true : false;
$features['member_min_age'] = get_setting('member_min_age') ?? "";
$features['default_currency'] = \App\Models\Currency::findOrFail(get_setting('system_default_currency'))->symbol;
*/
$features = Setting::all();
$temp_array = [];
foreach ($features as $feature) {
$new_array[$feature->type] = $feature->value;
}
// dd($temp_array);
return $this->response_data($new_array);
}
public function contact_us(ContactUsRequest $request)
{
try {
ContactUs::create($request->validated());
$users = User::where('user_type', 'admin')->get();
Notification::send($users, new EmailNotification($request->subject, $request->description));
return $this->success_message('Your query has been sent successfully');
} catch (\Throwable $th) {
return $this->failure_message('Something went wrong');
}
}
}