|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/lecturebazaar.com/app/Http/Controllers/Web/ |
Upload File : |
<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Web\traits\InstallmentsTrait;
use App\Http\Controllers\Web\traits\UserFormFieldsTrait;
use App\Mixins\Installment\InstallmentPlans;
use App\Mixins\RegistrationPackage\UserPackage;
use App\Models\BecomeInstructor;
use App\Models\Category;
use App\Models\RegistrationPackage;
use App\Models\Role;
use App\Models\UserBank;
use App\Models\UserOccupation;
use App\Models\UserSelectedBank;
use App\Models\UserSelectedBankSpecification;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class BecomeInstructorController extends Controller
{
use InstallmentsTrait;
use UserFormFieldsTrait;
public function index(Request $request)
{
$user = auth()->user();
if ($user->isUser()) {
$categories = Category::where('parent_id', null)
->with('subCategories')
->get();
$occupations = $user->occupations->pluck('category_id')->toArray();
$lastRequest = BecomeInstructor::where('user_id', $user->id)
->where('status', 'pending')
->first();
$isOrganizationRole = (!empty($lastRequest) and $lastRequest->role == Role::$organization);
$isInstructorRole = (empty($lastRequest) or $lastRequest->role == Role::$teacher);
$userBanks = UserBank::query()
->with([
'specifications'
])
->orderBy('created_at', 'desc')
->get();
$formFields = $this->getFormFieldsByUserType($request, 'become_instructor', true, null, $lastRequest);
$data = [
'pageTitle' => trans('site.become_instructor'),
'user' => $user,
'lastRequest' => $lastRequest,
'categories' => $categories,
'occupations' => $occupations,
'isOrganizationRole' => $isOrganizationRole,
'isInstructorRole' => $isInstructorRole,
'userBanks' => $userBanks,
'formFields' => $formFields
];
return view('web.default.user.become_instructor.index', $data);
}
abort(404);
}
public function store(Request $request)
{
$user = auth()->user();
if ($user->isUser()) {
$hasLastRequest = BecomeInstructor::where('user_id', $user->id)
->whereIn('status', ['pending', 'accept'])
->first();
$data = $request->all();
$rules = [
'role' => 'required',
'occupations' => 'required',
'certificate' => 'nullable|string',
'bank_id' => 'required',
'identity_scan' => 'required',
'description' => 'nullable|string',
];
$validate = Validator::make($data, $rules);
if ($validate->fails()) {
$errors = $validate->errors();
$type = ($data['role'] == "teacher") ? "become_instructor" : "become_organization";
$form = $this->getFormFieldsByType($type);
if (!empty($form)) {
$fieldErrors = $this->checkFormRequiredFields($request, $form);
if (!empty($fieldErrors) and count($fieldErrors)) {
foreach ($fieldErrors as $id => $error) {
$errors->add($id, $error);
}
}
}
throw new ValidationException($validate);
} else {
$type = ($data['role'] == "teacher") ? "become_instructor" : "become_organization";
$form = $this->getFormFieldsByType($type);
$errors = [];
if (!empty($form)) {
$fieldErrors = $this->checkFormRequiredFields($request, $form);
if (!empty($fieldErrors) and count($fieldErrors)) {
foreach ($fieldErrors as $id => $error) {
$errors[$id] = $error;
}
}
}
if (count($errors)) {
return back()->withErrors($errors)->withInput($request->all());
}
}
$lastRequest = BecomeInstructor::query()->updateOrCreate([
'user_id' => $user->id,
], [
'role' => $data['role'],
'certificate' => $data['certificate'],
'description' => $data['description'],
'created_at' => time()
]);
$user->update([
'identity_scan' => $data['identity_scan'],
'certificate' => $data['certificate'],
]);
UserSelectedBank::query()->where('user_id', $user->id)->delete();
$userSelectedBank = UserSelectedBank::query()->create([
'user_id' => $user->id,
'user_bank_id' => $data['bank_id']
]);
if (!empty($data['bank_specifications'])) {
$specificationInsert = [];
foreach ($data['bank_specifications'] as $specificationId => $specificationValue) {
if (!empty($specificationValue)) {
$specificationInsert[] = [
'user_selected_bank_id' => $userSelectedBank->id,
'user_bank_specification_id' => $specificationId,
'value' => $specificationValue
];
}
}
UserSelectedBankSpecification::query()->insert($specificationInsert);
}
if (!empty($data['occupations'])) {
UserOccupation::where('user_id', $user->id)->delete();
foreach ($data['occupations'] as $category_id) {
UserOccupation::create([
'user_id' => $user->id,
'category_id' => $category_id
]);
}
}
if (empty($hasLastRequest)) {
$notifyOptions = [
'[u.name]' => $user->full_name,
'[time.date]' => dateTimeFormat(time(), 'j M Y H:i'),
];
sendNotification("new_become_instructor_request", $notifyOptions, 1);
}
if ((!empty(getRegistrationPackagesGeneralSettings('show_packages_during_registration')) and getRegistrationPackagesGeneralSettings('show_packages_during_registration'))) {
return redirect(route('becomeInstructorPackages'));
}
// Extra Form
$this->storeBecomeInstructorFormFields($data, $lastRequest);
$toastData = [
'title' => trans('public.request_success'),
'msg' => trans('site.become_instructor_success_request'),
'status' => 'success'
];
return back()->with(['toast' => $toastData]);
}
abort(404);
}
public function packages()
{
$user = auth()->user();
$role = 'instructors';
if (!empty($user) and $user->isUser()) {
$becomeInstructor = BecomeInstructor::where('user_id', $user->id)->first();
if (!empty($becomeInstructor) and $becomeInstructor->role == Role::$organization) {
$role = 'organizations';
}
$packages = RegistrationPackage::where('role', $role)
->where('status', 'active')
->get();
$userPackage = new UserPackage();
$defaultPackage = $userPackage->getDefaultPackage($role);
$data = [
'pageTitle' => trans('update.registration_packages'),
'packages' => $packages,
'defaultPackage' => $defaultPackage,
'becomeInstructor' => $becomeInstructor ?? null,
'selectedRole' => $role
];
return view('web.default.user.become_instructor.packages', $data);
}
abort(404);
}
public function checkPackageHasInstallment($id)
{
$user = auth()->user();
if (!empty($user) and $user->isUser()) {
$package = RegistrationPackage::where('id', $id)
->where('status', 'active')
->first();
if (!empty($package) and $package->price > 0 and getInstallmentsSettings('status') and (empty($user) or $user->enable_installments)) {
$installmentPlans = new InstallmentPlans($user);
$installments = $installmentPlans->getPlans('registration_packages', $package->id);
return response()->json([
'has_installment' => (!empty($installments) and count($installments))
]);
}
}
return response()->json([
'has_installment' => false
]);
}
}