840 lines
33 KiB
PHP
840 lines
33 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Application;
|
|
use App\Models\Course;
|
|
use App\Models\Enrollment;
|
|
use App\Models\Instructors;
|
|
use App\Models\FileUploader;
|
|
use App\Models\Payout;
|
|
use App\Models\Permission;
|
|
use App\Models\Setting;
|
|
use App\Models\Message;
|
|
use App\Models\MessageThread;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Session;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
class UsersController extends Controller
|
|
{
|
|
|
|
public function admin_index(Request $request)
|
|
{
|
|
$query = User::where('role', 'admin');
|
|
if (isset($_GET['search']) && $_GET['search'] != '') {
|
|
$query = $query->where('name', 'LIKE', '%' . $_GET['search'] . '%')
|
|
->orWhere('email', 'LIKE', '%' . $_GET['search'] . '%');
|
|
}
|
|
$page_data['admins'] = $query->paginate(10);
|
|
return view('admin.admin.index', $page_data);
|
|
}
|
|
|
|
public function admin_create()
|
|
{
|
|
return view('admin.admin.create_admin');
|
|
}
|
|
public function admin_store(Request $request)
|
|
{
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => "required|max:255",
|
|
'email' => 'required|email|unique:users',
|
|
'password' => "required|min:8",
|
|
], [
|
|
'name.required' => get_phrase('Name is required'),
|
|
'name.string' => get_phrase('Name must be a valid text'),
|
|
'name.max' => get_phrase('Name may not be greater than 255 characters'),
|
|
'email.required' => get_phrase('Email is required'),
|
|
'email.string' => get_phrase('Email must be a valid text'),
|
|
'email.email' => get_phrase('Please enter a valid email address'),
|
|
'email.unique' => get_phrase('This email is already registered. Please use a different email.'),
|
|
'password.required' => get_phrase('Password is required'),
|
|
'password.min' => get_phrase('Password must be at least 8 characters'),
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
$firstError = $validator->errors()->first();
|
|
Session::flash('error', $firstError);
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['password'] = Hash::make($request->password);
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
$data['role'] = 'admin';
|
|
$data['status'] = '1';
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
$path = "uploads/users/instructor/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
$done = User::insert($data);
|
|
|
|
if ($done) {
|
|
$admin_id = User::latest('id')->first();
|
|
Permission::insert(['admin_id' => $admin_id->id]);
|
|
}
|
|
Session::flash('success', get_phrase('Admin add successfully'));
|
|
return redirect()->route('admin.admins.index');
|
|
}
|
|
|
|
public function admin_edit($id)
|
|
{
|
|
$page_data['admin'] = User::where('id', $id)->first();
|
|
return view('admin.admin.edit_admin', $page_data);
|
|
}
|
|
public function admin_update(Request $request, $id)
|
|
{
|
|
|
|
$validated = $request->validate([
|
|
'name' => 'required|max:255',
|
|
'email' => "required|email|unique:users,email,$id",
|
|
]);
|
|
|
|
$data = [];
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
remove_file(User::where('id', $id)->first()->photo);
|
|
$path = "uploads/users/instructor/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
User::where('id', $request->id)->update($data);
|
|
Session::flash('success', get_phrase('Admin update successfully'));
|
|
return redirect()->route('admin.admins.index');
|
|
}
|
|
|
|
public function admin_delete($id)
|
|
{
|
|
$threads = MessageThread::where('contact_one', $id)
|
|
->orWhere('contact_two', $id)
|
|
->pluck('id');
|
|
|
|
if ($threads->isNotEmpty()) {
|
|
Message::whereIn('thread_id', $threads)->delete();
|
|
MessageThread::whereIn('id', $threads)->delete();
|
|
}
|
|
|
|
$done = User::where('id', $id)->delete();
|
|
if ($done) {
|
|
Permission::where('admin_id', $id)->delete();
|
|
}
|
|
Session::flash('success', get_phrase('Admin delete successfully'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function admin_permission($user_id)
|
|
{
|
|
$page_data['admin'] = User::where('id', $user_id)->firstOrNew();
|
|
return view('admin.admin.permission', $page_data);
|
|
}
|
|
public function admin_permission_store(Request $request)
|
|
{
|
|
$user_id = $request->user_id;
|
|
|
|
$permission = Permission::where('admin_id', $user_id)->first();
|
|
|
|
if ($permission) {
|
|
$set_permission = json_decode($permission->permissions, true) ?? [];
|
|
if (in_array($request->permission, $set_permission)) {
|
|
$pos = array_search($request->permission, $set_permission);
|
|
array_splice($set_permission, $pos, 1);
|
|
} else {
|
|
array_push($set_permission, $request->permission);
|
|
}
|
|
Permission::where('admin_id', $user_id)->update(['permissions' => $set_permission]);
|
|
return true;
|
|
} else {
|
|
$set_per = json_encode([$request->permission]);
|
|
Permission::insert(['admin_id' => $user_id, 'permissions' => $set_per]);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public function instructor_index()
|
|
{
|
|
$query = User::where('role', 'instructor');
|
|
if (isset($_GET['search']) && $_GET['search'] != '') {
|
|
$query = $query->where('name', 'LIKE', '%' . $_GET['search'] . '%')
|
|
->orWhere('email', 'LIKE', '%' . $_GET['search'] . '%');
|
|
}
|
|
$page_data['instructors'] = $query->paginate(10);
|
|
return view('admin.instructor.index', $page_data);
|
|
}
|
|
|
|
public function instructor_create()
|
|
{
|
|
return view('admin.instructor.create_instructor');
|
|
}
|
|
public function instructor_edit($id = '')
|
|
{
|
|
$page_data['instructor'] = User::where('users.id', $id)
|
|
->leftJoin('instructors', 'users.id', '=', 'instructors.user_id')
|
|
->select('users.*', 'instructors.nidn', 'instructors.status', 'instructors.id_sdm', 'instructors.id_sms', 'instructors.id_pt')
|
|
->first();
|
|
|
|
if (!$page_data['instructor']) {
|
|
Session::flash('error', get_phrase('Instructor not found'));
|
|
return redirect()->route('admin.instructor.index');
|
|
}
|
|
|
|
return view('admin.instructor.edit_instructor', $page_data);
|
|
}
|
|
public function instructor_store(Request $request, $id = '')
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => "required|max:255",
|
|
'email' => 'required|email|unique:users',
|
|
'password' => "required|min:8",
|
|
'nidn' => "required"
|
|
], [
|
|
'name.required' => get_phrase('Name is required'),
|
|
'name.string' => get_phrase('Name must be a valid text'),
|
|
'name.max' => get_phrase('Name may not be greater than 255 characters'),
|
|
'email.required' => get_phrase('Email is required'),
|
|
'email.string' => get_phrase('Email must be a valid text'),
|
|
'email.email' => get_phrase('Please enter a valid email address'),
|
|
'email.unique' => get_phrase('This email is already registered. Please use a different email.'),
|
|
'password.required' => get_phrase('Password is required'),
|
|
'password.min' => get_phrase('Password must be at least 8 characters'),
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
$firstError = $validator->errors()->first();
|
|
Session::flash('error', $firstError);
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
if(get_settings('student_email_verification') != 1){
|
|
$data['email_verified_at'] = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
$data = [];
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
$data['paymentkeys'] = json_encode($request->paymentkeys);
|
|
$data['status'] = '1';
|
|
|
|
$data['password'] = Hash::make($request->password);
|
|
$data['role'] = 'instructor';
|
|
|
|
$data['email_verified_at'] = $request->email_verified == 1 ? now() : null;
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
$path = "uploads/users/instructor/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
// Check if NIDN already exists in Instructors table with status = 1 (active)
|
|
$nidn = $request->nidn;
|
|
$existingInstructor = Instructors::where('nidn', $nidn)
|
|
->where('status', 1)
|
|
->first();
|
|
|
|
if ($existingInstructor) {
|
|
Session::flash('error', get_phrase('This NIDN is already registered as an active instructor.'));
|
|
return redirect()->back()->withInput();
|
|
}
|
|
|
|
try {
|
|
$api_url = "https://sindig.unesa.ac.id/apipddikti/api?nidn={$nidn}&auto=1";
|
|
|
|
$response = Http::timeout(30)->get($api_url);
|
|
$apiResponse = $response->json();
|
|
|
|
Log::info('API Response for NIDN: ' . $nidn, ['response' => $apiResponse]);
|
|
|
|
// Extract matched dosen data
|
|
$matched_dosen = $apiResponse['matched_dosen'][0];
|
|
Log::info('Instructor data to be saved:', $matched_dosen);
|
|
|
|
if (!isset($apiResponse['ok']) || !isset($apiResponse['matched_dosen']) || count($apiResponse['matched_dosen']) == 0) {
|
|
Session::flash('error', get_phrase('NIDN not found in the system. Please check your NIDN.'));
|
|
return redirect()->back()->withInput();
|
|
}else if (strtolower($matched_dosen['nama']) != strtolower($request->name)) {
|
|
Session::flash('error', get_phrase('Name does not match PDDikti records. Please check your name.'));
|
|
return redirect()->back()->withInput();
|
|
}
|
|
$user = User::create($data);
|
|
// Prepare instructor data - adjust fields according to your database
|
|
$instructor = [
|
|
'user_id' => $user->id,
|
|
'nidn' => $nidn,
|
|
'name' => $matched_dosen['nama'] ?? null,
|
|
'id_sdm' => $matched_dosen['id'] ?? null,
|
|
'id_sms' => $matched_dosen['nama_prodi'] ?? null,
|
|
'id_pt' => $matched_dosen['nama_pt'] ?? null
|
|
];
|
|
|
|
Log::info('Instructor data to be saved:', $instructor);
|
|
|
|
Instructors::create($instructor);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error storing NIDN for admin: ' . $e->getMessage());
|
|
Session::flash('error', get_phrase('There was an error processing the NIDN. Please try again.'));
|
|
return redirect()->back()->withInput();
|
|
}
|
|
|
|
if(get_settings('student_email_verification') == 1) {
|
|
$user->sendEmailVerificationNotification();
|
|
}
|
|
|
|
Session::flash('success', get_phrase('Instructor add successfully'));
|
|
|
|
return redirect()->route('admin.instructor.index');
|
|
}
|
|
|
|
public function instructor_update(Request $request, $id = '')
|
|
{
|
|
|
|
$validated = $request->validate([
|
|
'name' => 'required|max:255',
|
|
'email' => "required|email|unique:users,email,$id",
|
|
]);
|
|
|
|
$data = [];
|
|
$data_instructor = [];
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
$data['paymentkeys'] = json_encode($request->paymentkeys);
|
|
|
|
$data_instructor['nidn'] = $request->nidn;
|
|
$data_instructor['status'] = $request->status ?? 0;
|
|
$data_instructor['id_sdm'] = $request->id_sdm;
|
|
$data_instructor['id_sms'] = $request->id_sms;
|
|
$data_instructor['id_pt'] = $request->id_pt;
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
remove_file(User::where('id', $id)->first()->photo);
|
|
$path = "uploads/users/instructor/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
User::where('id', $id)->update($data);
|
|
Instructors::where('user_id', $id)->update($data_instructor);
|
|
Session::flash('success', get_phrase('Instructor update successfully'));
|
|
return redirect()->route('admin.instructor.index');
|
|
}
|
|
|
|
public function instructor_delete($id)
|
|
{
|
|
$threads = MessageThread::where('contact_one', $id)
|
|
->orWhere('contact_two', $id)
|
|
->pluck('id');
|
|
|
|
if ($threads->isNotEmpty()) {
|
|
Message::whereIn('thread_id', $threads)->delete();
|
|
MessageThread::whereIn('id', $threads)->delete();
|
|
}
|
|
|
|
User::where('id', $id)->delete();
|
|
Session::flash('success', get_phrase('Instructor delete successfully'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function instructor_view_course(Request $request)
|
|
{
|
|
$course = Course::where('user_id', $request->id)->get();
|
|
}
|
|
|
|
public function instructor_payout(Request $request)
|
|
{
|
|
$start_date = strtotime('first day of this month');
|
|
$end_date = strtotime('last day of this month');
|
|
$page_data['start_date'] = $start_date;
|
|
$page_data['end_date'] = $end_date;
|
|
$page_data['instructor_payout_complete'] = Payout::where('status', 1)->where('created_at', '>=', date('Y-m-d H:i:s', $start_date))
|
|
->where('created_at', '<=', date('Y-m-d H:i:s', $end_date))->paginate(10);
|
|
$page_data['instructor_payout_incomplete'] = Payout::where('status', 0)->where('created_at', '>=', date('Y-m-d H:i:s', $start_date))
|
|
->where('created_at', '<=', date('Y-m-d H:i:s', $end_date))->paginate(10);
|
|
return view('admin.instructor.payout', $page_data);
|
|
}
|
|
public function instructor_payout_filter(Request $request)
|
|
{
|
|
|
|
$date = explode('-', $request->eDateRange);
|
|
$start_date = strtotime($date[0] . ' 00:00:00');
|
|
$end_date = strtotime($date[1] . ' 23:59:59');
|
|
$page_data['start_date'] = $start_date;
|
|
$page_data['end_date'] = $end_date;
|
|
|
|
$page_data['instructor_payout_complete'] = Payout::where('status', 1)->where('created_at', '>=', date('Y-m-d H:i:s', $start_date))
|
|
->where('created_at', '<=', date('Y-m-d H:i:s', $end_date))->paginate(10);
|
|
$page_data['instructor_payout_incomplete'] = Payout::where('status', 0)->paginate(10);
|
|
|
|
return view('admin.instructor.payout', $page_data);
|
|
}
|
|
|
|
public function instructor_payout_invoice($id = '')
|
|
{
|
|
if ($id != '') {
|
|
$page_data['invoice_info'] = Payout::where('status', 1)->first();
|
|
$page_data['invoice_data'] = Payout::where('status', 1)->get();
|
|
$page_data['invoice_id'] = $id;
|
|
|
|
return view('admin.instructor.instructor_invoice', $page_data);
|
|
}
|
|
}
|
|
|
|
public function instructor_payment(Request $request)
|
|
{
|
|
$id = $request->user_id;
|
|
$payable_amount = $request->amount;
|
|
$start_timestamp = time();
|
|
$end_timestamp = time();
|
|
|
|
$payment_details = [
|
|
'items' => [
|
|
[
|
|
'id' => $id,
|
|
'title' => get_phrase('Pay for instructor payout'),
|
|
'subtitle' => get_phrase(''),
|
|
'price' => $payable_amount,
|
|
'discount_price' => $payable_amount,
|
|
'discount_percentage' => 0,
|
|
],
|
|
],
|
|
'custom_field' => [
|
|
'start_date' => date('Y-m-d H:i:s', $start_timestamp),
|
|
'end_date' => date('Y-m-d H:i:s', $end_timestamp),
|
|
'user_id' => auth()->user()->id,
|
|
'payout_id' => $request->payout_id,
|
|
|
|
],
|
|
'success_method' => [
|
|
'model_name' => 'InstructorPayment',
|
|
'function_name' => 'instructor_payment',
|
|
],
|
|
'tax' => 0,
|
|
'coupon' => null,
|
|
'payable_amount' => $payable_amount,
|
|
'cancel_url' => route('admin.instructor.payout'),
|
|
'success_url' => route('payment.success'),
|
|
];
|
|
session(['payment_details' => $payment_details]);
|
|
return redirect()->route('payment');
|
|
}
|
|
|
|
public function instructor_setting()
|
|
{
|
|
$page_data['allow_instructor'] = Setting::where('type', 'allow_instructor')->first();
|
|
$page_data['application_note'] = Setting::where('type', 'instructor_application_note')->first();
|
|
$page_data['instructor_revenue'] = Setting::where('type', 'instructor_revenue')->first();
|
|
return view('admin.instructor.instructor_setting', $page_data);
|
|
}
|
|
|
|
public function instructor_setting_store(Request $request)
|
|
{
|
|
|
|
if ($request->first == 'item_1') {
|
|
|
|
$key_found = Setting::where('type', 'instructor_application_note')->exists();
|
|
if ($key_found) {
|
|
$data['description'] = $request->instructor_application_note;
|
|
|
|
Setting::where('type', 'instructor_application_note')->update($data);
|
|
} else {
|
|
$data['type'] = 'instructor_application_note';
|
|
$data['description'] = $request->instructor_application_note;
|
|
|
|
Setting::insert($data);
|
|
}
|
|
|
|
$key_founds = Setting::where('type', 'allow_instructor')->exists();
|
|
if ($key_founds) {
|
|
$data['description'] = $request->allow_instructor;
|
|
|
|
Setting::where('type', 'allow_instructor')->update($data);
|
|
} else {
|
|
|
|
$data['type'] = 'allow_instructor';
|
|
$data['description'] = $request->allow_instructor;
|
|
|
|
Setting::insert($data);
|
|
}
|
|
}
|
|
if ($request->second == 'item_2') {
|
|
|
|
$key_found = Setting::where('type', 'instructor_revenue')->exists();
|
|
if ($key_found) {
|
|
$data['description'] = $request->instructor_revenue;
|
|
|
|
Setting::where('type', 'instructor_revenue')->update($data);
|
|
} else {
|
|
$data['type'] = 'instructor_revenue';
|
|
$data['description'] = $request->instructor_revenue;
|
|
|
|
Setting::insert($data);
|
|
}
|
|
}
|
|
|
|
Session::flash('success', get_phrase('Instructor setting updated'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function instructor_application()
|
|
{
|
|
return view('admin.instructor.application');
|
|
}
|
|
|
|
public function instructor_application_approve($id)
|
|
{
|
|
$application = Application::find($id);
|
|
|
|
if (!$application) {
|
|
Session::flash('error', get_phrase('Application not found'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
// Update application status
|
|
$application->status = 1;
|
|
$application->save();
|
|
|
|
$user_id = $application->user_id;
|
|
|
|
// Update user role to instructor
|
|
User::where('id', $user_id)->update(['role' => 'instructor']);
|
|
|
|
// Update instructor status to 1 (active)
|
|
Instructors::where('user_id', $user_id)->update(['status' => 1]);
|
|
|
|
DB::commit();
|
|
Session::flash('success', get_phrase('Application approved successfully'));
|
|
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
Log::error('Application approval error:', ['error' => $e->getMessage()]);
|
|
Session::flash('error', get_phrase('Failed to approve application'));
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
public function instructor_application_delete($id)
|
|
{
|
|
Application::where('id', $id)->delete();
|
|
Session::flash('success', get_phrase('Application delete successfully'));
|
|
return redirect()->back();
|
|
}
|
|
public function instructor_application_download($id)
|
|
{
|
|
$path = Application::where('id', $id)->first();
|
|
|
|
if (file_exists(public_path($path->document))) {
|
|
return response()->download(public_path($path->document));
|
|
} else {
|
|
Session::flash('error', get_phrase('File does not exists'));
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
public function revokeAccess($id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
|
|
if ($user->role === 'instructor') {
|
|
$user->role = 'student';
|
|
$user->save();
|
|
|
|
Session::flash('success', get_phrase('Instructor has been switched to Student successfully.'));
|
|
} else {
|
|
Session::flash('error', get_phrase('This user is not an instructor.'));
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function student_index()
|
|
{
|
|
$query = User::where('role', 'student');
|
|
if (isset($_GET['search']) && $_GET['search'] != '') {
|
|
$query = $query->where('name', 'LIKE', '%' . $_GET['search'] . '%')
|
|
->orWhere('email', 'LIKE', '%' . $_GET['search'] . '%');
|
|
}
|
|
$page_data['students'] = $query->paginate(10);
|
|
return view('admin.student.index', $page_data);
|
|
}
|
|
|
|
public function student_create()
|
|
{
|
|
return view('admin.student.create_student');
|
|
}
|
|
public function student_edit($id = '')
|
|
{
|
|
$page_data['student'] = User::where('id', $id)->first();
|
|
return view('admin.student.edit_student', $page_data);
|
|
}
|
|
public function student_store(Request $request, $id = '')
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => "required|max:255",
|
|
'email' => 'required|email|unique:users',
|
|
'password' => "required|min:8",
|
|
], [
|
|
'name.required' => get_phrase('Name is required'),
|
|
'name.string' => get_phrase('Name must be a valid text'),
|
|
'name.max' => get_phrase('Name may not be greater than 255 characters'),
|
|
'email.required' => get_phrase('Email is required'),
|
|
'email.string' => get_phrase('Email must be a valid text'),
|
|
'email.email' => get_phrase('Please enter a valid email address'),
|
|
'email.unique' => get_phrase('This email is already registered. Please use a different email.'),
|
|
'password.required' => get_phrase('Password is required'),
|
|
'password.min' => get_phrase('Password must be at least 8 characters'),
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
$firstError = $validator->errors()->first();
|
|
Session::flash('error', $firstError);
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
if(get_settings('student_email_verification') != 1){
|
|
$data['email_verified_at'] = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
$data['paymentkeys'] = json_encode($request->paymentkeys);
|
|
$data['status'] = '1';
|
|
|
|
$data['password'] = Hash::make($request->password);
|
|
$data['role'] = 'student';
|
|
|
|
$data['email_verified_at'] = $request->email_verified == 1 ? now() : null;
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
$path = "uploads/users/student/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
$user = User::create($data);
|
|
|
|
if(get_settings('student_email_verification') == 1) {
|
|
$user->sendEmailVerificationNotification();
|
|
}
|
|
|
|
Session::flash('success', get_phrase('Student add successfully'));
|
|
|
|
return redirect()->route('admin.student.index');
|
|
}
|
|
|
|
public function student_update(Request $request, $id = '')
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => 'required|max:255',
|
|
'email' => "required|email|unique:users,email,$id",
|
|
]);
|
|
|
|
$data['name'] = $request->name;
|
|
$data['about'] = $request->about;
|
|
$data['phone'] = $request->phone;
|
|
$data['address'] = $request->address;
|
|
$data['email'] = $request->email;
|
|
$data['facebook'] = $request->facebook;
|
|
$data['twitter'] = $request->twitter;
|
|
$data['website'] = $request->website;
|
|
$data['linkedin'] = $request->linkedin;
|
|
$data['paymentkeys'] = json_encode($request->paymentkeys);
|
|
|
|
if (isset($request->photo) && $request->hasFile('photo')) {
|
|
remove_file(User::where('id', $id)->first()->photo);
|
|
$path = "uploads/users/student/" . nice_file_name($request->name, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $path, 400, null, 200, 200);
|
|
$data['photo'] = $path;
|
|
}
|
|
|
|
User::where('id', $id)->update($data);
|
|
Session::flash('success', get_phrase('Student update successfully'));
|
|
return redirect()->route('admin.student.index');
|
|
}
|
|
|
|
public function student_delete($id)
|
|
{
|
|
$threads = MessageThread::where('contact_one', $id)
|
|
->orWhere('contact_two', $id)
|
|
->pluck('id');
|
|
|
|
if ($threads->isNotEmpty()) {
|
|
Message::whereIn('thread_id', $threads)->delete();
|
|
MessageThread::whereIn('id', $threads)->delete();
|
|
}
|
|
|
|
$query = User::where('id', $id);
|
|
remove_file($query->first()->photo);
|
|
$query->delete();
|
|
return redirect(route('admin.student.index'))->with('success', get_phrase('User deleted successfully'));
|
|
}
|
|
|
|
public function student_enrol()
|
|
{
|
|
return view('admin.enroll.course_enrollment');
|
|
}
|
|
public function student_get(Request $request)
|
|
{
|
|
|
|
$user = User::where('role', 'student')->where('name', 'LIKE', '%' . $request->searchVal . '%')->get();
|
|
|
|
foreach ($user as $row) {
|
|
$response[] = ['id' => $row->id, 'text' => $row->name];
|
|
}
|
|
return json_encode($response);
|
|
}
|
|
|
|
public function student_post(Request $request)
|
|
{
|
|
for ($i = 0; $i < count($request->user_id); $i++) {
|
|
for ($j = 0; $j < count($request->course_id); $j++) {
|
|
$data['user_id'] = $request->user_id[$i];
|
|
$data['course_id'] = $request->course_id[$j];
|
|
$data['entry_date'] = time();
|
|
|
|
$course_details = $course_details = get_course_info($request->course_id[$j]);
|
|
|
|
if ($course_details->expiry_period > 0) {
|
|
$days = $course_details->expiry_period * 30;
|
|
$data['expiry_date'] = strtotime("+" . $days . " days");
|
|
} else {
|
|
$data['expiry_date'] = null;
|
|
}
|
|
|
|
$user = Enrollment::where('user_id', $request->user_id[$i])->where('course_id', $request->course_id[$j])->exists();
|
|
if (!$user) {
|
|
|
|
Enrollment::insert($data);
|
|
}
|
|
}
|
|
}
|
|
|
|
Session::flash('success', get_phrase('Student add successfully'));
|
|
return redirect()->route('admin.enroll.history');
|
|
}
|
|
|
|
public function enroll_history(Request $request)
|
|
{
|
|
if ($request->eDateRange) {
|
|
$date = explode('-', $request->eDateRange);
|
|
$start_date = strtotime($date[0] . ' 00:00:00');
|
|
$end_date = strtotime($date[1] . ' 23:59:59');
|
|
$page_data['start_date'] = $start_date;
|
|
$page_data['end_date'] = $end_date;
|
|
$page_data['enroll_history'] = Enrollment::where('entry_date', '>=', $start_date)
|
|
->where('entry_date', '<=', $end_date)
|
|
->paginate(10)->appends($request->query());
|
|
} else {
|
|
$start_date = strtotime('first day of this month ');
|
|
$end_date = strtotime('last day of this month');
|
|
$page_data['start_date'] = $start_date;
|
|
$page_data['end_date'] = $end_date;
|
|
$page_data['enroll_history'] = Enrollment::where('entry_date', '>=', $start_date)
|
|
->where('entry_date', '<=', $end_date)->paginate(10);
|
|
}
|
|
return view('admin.enroll.enroll_history', $page_data);
|
|
}
|
|
|
|
public function enroll_history_delete($id)
|
|
{
|
|
|
|
Enrollment::where('id', $id)->delete();
|
|
Session::flash('success', get_phrase('Enroll delete successfully'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function manage_profile()
|
|
{
|
|
return view('admin.profile.index');
|
|
}
|
|
public function manage_profile_update(Request $request)
|
|
{
|
|
if ($request->type == 'general') {
|
|
$profile['name'] = $request->name;
|
|
$profile['facebook'] = $request->facebook;
|
|
$profile['linkedin'] = $request->linkedin;
|
|
$profile['twitter'] = $request->twitter;
|
|
$profile['about'] = $request->about;
|
|
$profile['skills'] = $request->skills;
|
|
$profile['biography'] = $request->biography;
|
|
|
|
if ($request->photo) {
|
|
if (isset($request->photo) && $request->photo != '') {
|
|
$profile['photo'] = "uploads/users/admin/" . nice_file_name($request->title, $request->photo->extension());
|
|
FileUploader::upload($request->photo, $profile['photo'], 400, null, 200, 200);
|
|
}
|
|
}
|
|
User::where('id', auth()->user()->id)->update($profile);
|
|
} else {
|
|
$old_pass_check = Auth::attempt(['email' => auth()->user()->email, 'password' => $request->current_password]);
|
|
|
|
if (!$old_pass_check) {
|
|
Session::flash('error', get_phrase('Current password wrong.'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
if ($request->new_password != $request->confirm_password) {
|
|
Session::flash('error', get_phrase('Confirm password not same'));
|
|
return redirect()->back();
|
|
}
|
|
|
|
$password = Hash::make($request->new_password);
|
|
User::where('id', auth()->user()->id)->update(['password' => $password]);
|
|
}
|
|
Session::flash('success', get_phrase('Your changes has been saved.'));
|
|
return redirect()->back();
|
|
}
|
|
}
|