File: /home/imensosw/www/amanda/app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Auth;
use App\User;
use Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
use Mail;
class UserController extends Controller
{
public function index(Request $request)
{
$limit = config('constants.limit');
$search = $request->search;
$sortBy = "id";
if($request->sortBy!=""){
$sortBy = $request->sortBy;
}
$sortDir="desc";
if($request->sortDir!=""){
$sortDir = $request->sortDir;
}
if($sortBy=="name"){
$sortBy = 'users.name';
}
else if($sortBy=="email"){
$sortBy = 'users.email';
}
else{
$sortBy = 'users.id';
}
$user = User::with(['orders'])
->whereNotIn('is_admin',[1])
->where(function($q) use ($search)
{
$q->orWhere('users.name', 'like', '%' . $search . '%');
$q->orWhere('users.email', 'like', '%' . $search . '%');
})
// ->orderBy('users.id','desc')
->orderBy($sortBy,$sortDir)
->paginate($limit);
return response()->json($user,200);
}
public function userSearch(Request $request)
{
$limit = config('constants.limit');
$search = $request->search;
$user = User::with(['orders'])
->where(function($q) use ($search)
{
$q->orWhere('users.name', 'like', '%' . $search . '%');
$q->orWhere('users.email', 'like', '%' . $search . '%');
})
->orderBy('users.id','desc')
->paginate($limit);
return response()->json($user);
}
public function login(Request $request)
{
$status = 401;
$response = ['error' => 'Username or password does not match.'];
$validator = Validator::make($request->all(), [
'email'=>'required|email',
'password'=>'required'
]);
/* if($validator->fails()) {
return response()->json(['error' => $validator->errors()], 401);
}*/
$checkStatus=User::Where(array('email'=>$request->email))->first();
if(empty($checkStatus)){
return response()->json(['error' => "Username or password dose not match."], 401);
}
else
{
if($checkStatus->status=="active"){
if (Auth::attempt($request->only(['email', 'password']))) {
$status = 200;
$response = [
'user' => Auth::user(),
'token' => Auth::user()->createToken('bigStore')->accessToken,
];
}
}
else{
return response()->json(['error' => "Your account has been deactived by the admin."], 401);
}
}
return response()->json($response, $status);
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|max:50',
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
'confirm_password' => 'required|same:password',
'gender'=> 'required|in:male,female'
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 401);
}
$data = $request->only(['name', 'email', 'password','gender']);
$data['password'] = bcrypt($data['password']);
$user = User::create($data);
$user->is_admin = 0;
$to_name = $request->name;
$to_email = $request->email;
$data = array('name'=>$to_name);
Mail::send('emails.welcome', $data, function($message) use ($to_name, $to_email) {
$message->to($to_email, $to_name)->subject('Welcome to SweManda');
$message->from(config('constants.admin_email'),'SWEMANDA');
});
return response()->json([
'user' => $user,
'token' => $user->createToken('bigStore')->accessToken,
]);
}
public function show(User $user)
{
return response()->json($user);
}
public function showOrders(User $user)
{
return response()->json($user->orders()->with(['product'])->get());
}
public function changeStatus(Request $request)
{
if(!empty($request->id)){
$user = User::find($request->id);
// $user->status =
if($user->status=="active"){
$user->status="deactive";
} else if($user->status=="deactive"){
$user->status="active";
}
$user->save();
}
return response()->json($user);
}
public function resetPasswordLink(Request $request)
{
$checkUser = \DB::table('users')->where(array('email'=>$request->email, 'status'=>'active'))->first();
if(empty($checkUser)){
return response()->json([
'status' => false,
'message' => "We can't find a user with that e-mail address.",
]);
}
else{
$check = \DB::table('password_resets')->where(array('email'=>$request->email))->first();
$token = Str::random(60);
if(!empty($check))
{
\DB::table('password_resets')
->where('email', $request->email)
->update(['token' => $token, 'created_at'=>date('Y-m-d h:i:s')]);
}
else{
$values = array('email' => $request->email,'token' => $token, 'created_at'=>date('Y-m-d h:i:s'));
\DB::table('password_resets')->insert($values);
}
$resetLink = url('/').'/password/reset/'.$token;
$to_name = $checkUser->name;
$to_email = $request->email;
$data = array('name'=>$to_name, 'resetLink'=>$resetLink);
Mail::send('emails.reset_password_link', $data, function($message) use ($to_name, $to_email) {
$message->to($to_email, $to_name)->subject('Forgot Password Link');
$message->from(config('constants.admin_email'),'SWEMANDA');
});
return response()->json([
'status' => true,
'data' => 'test',
'message' => "Send reset password link.",
]);
}
}
public function resetPasswordUpdate(Request $request)
{
$request->validate ([
'email' => 'required|email',
'password' => 'required|same:password|min:6',
'confirm_password' => 'required|same:password|min:6',
]);
$checkUser = \DB::table('password_resets')->where(array('email'=>$request->email))->first();
if($checkUser->token!=$request->resettoken){
return response()->json([
'status' => false,
'message' => "This password reset token is invalid.",
]);
}
else{
$password = Hash::make($request->password);
\DB::table('users')
->where(array('email'=>$request->email, 'status'=>'active'))
->update(['password' => $password, 'updated_at'=>date('Y-m-d h:i:s')]);
return response()->json([
'status' => true,
'message' => "Password reset successfully",
]);
}
}
}