139 lines
4.1 KiB
PHP
139 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\VacancyRequest;
|
|
use App\Http\Requests\VacancyEditRequest;
|
|
|
|
use App\Vacancy;
|
|
use App\User;
|
|
use App\Form;
|
|
|
|
use App\Notifications\VacancyClosed;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
|
|
class VacancyController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$this->authorize('viewAny', Vacancy::class);
|
|
return view('dashboard.administration.positions')
|
|
->with([
|
|
'forms' => Form::all(),
|
|
'vacancies' => Vacancy::all()
|
|
]);
|
|
}
|
|
|
|
public function store(VacancyRequest $request)
|
|
{
|
|
$this->authorize('create', Vacancy::class);
|
|
$form = Form::find($request->vacancyFormID);
|
|
|
|
if (!is_null($form))
|
|
{
|
|
/* note: since we can't convert HTML back to Markdown, we'll have to do the converting when the user requests a page,
|
|
* and leave the database with Markdown only so it can be used and edited everywhere.
|
|
* for several vacancies, this would require looping through all of them and replacing MD with HTML, which is obviously not the most clean solution;
|
|
* however, the Model can be configured to return MD instead of HTML on that specific field saving us from looping.
|
|
*/
|
|
Vacancy::create([
|
|
|
|
'vacancyName' => $request->vacancyName,
|
|
'vacancyDescription' => $request->vacancyDescription,
|
|
'vacancyFullDescription' => $request->vacancyFullDescription,
|
|
'vacancySlug' => Str::slug($request->vacancyName),
|
|
'permissionGroupName' => $request->permissionGroup,
|
|
'discordRoleID' => $request->discordRole,
|
|
'vacancyFormID' => $request->vacancyFormID,
|
|
'vacancyCount' => $request->vacancyCount
|
|
|
|
]);
|
|
|
|
$request->session()->flash('success', 'Vacancy successfully opened. It will now show in the home page.');
|
|
}
|
|
else
|
|
{
|
|
$request->session()->flash('error', 'You cannot create a vacancy without a valid form.');
|
|
}
|
|
|
|
return redirect()->back();
|
|
|
|
}
|
|
|
|
public function updatePositionAvailability(Request $request, $status, Vacancy $vacancy)
|
|
{
|
|
|
|
$this->authorize('update', $vacancy);
|
|
|
|
if (!is_null($vacancy))
|
|
{
|
|
$type = 'success';
|
|
|
|
switch ($status)
|
|
{
|
|
case 'open':
|
|
$vacancy->open();
|
|
$message = "Position successfully opened!";
|
|
|
|
break;
|
|
|
|
case 'close':
|
|
$vacancy->close();
|
|
$message = "Position successfully closed!";
|
|
|
|
foreach(User::all() as $user)
|
|
{
|
|
if ($user->isStaffMember())
|
|
{
|
|
$user->notify(new VacancyClosed($vacancy));
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
$message = "Please do not tamper with the button's URLs. To report a bug, please contact an administrator.";
|
|
$type = 'error';
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$message = "The position you're trying to update doesn't exist!";
|
|
$type = "error";
|
|
}
|
|
|
|
$request->session()->flash($type, $message);
|
|
return redirect()->back();
|
|
}
|
|
|
|
|
|
public function edit(Request $request, Vacancy $position)
|
|
{
|
|
$this->authorize('update', $position);
|
|
return view('dashboard.administration.editposition')
|
|
->with('vacancy', $position);
|
|
}
|
|
|
|
|
|
|
|
public function update(VacancyEditRequest $request, Vacancy $position)
|
|
{
|
|
$this->authorize('update', $vacancy);
|
|
|
|
$position->vacancyFullDescription = $request->vacancyFullDescription;
|
|
$position->vacancyDescription = $request->vacancyDescription;
|
|
$position->vacancyCount = $request->vacancyCount;
|
|
|
|
$position->save();
|
|
|
|
$request->session()->flash('success', 'Vacancy successfully updated.');
|
|
return redirect()->back();
|
|
|
|
}
|
|
|
|
}
|