forked from miguel456/rbrecruiter
Miguel Nogueira
5f1f92a9ce
This commit fixes some superficial instances of Broken Access Control (https://owasp.org/www-project-top-ten/OWASP_Top_Ten_2017/Top_10-2017_A5-Broken_Access_Control). There may be some more instances of this, as authorization was only done after most of the controllers were done (big mistake). Some refactoring was also performed, where Route Model Binding with DI (dependency injection) was used whenever possible, to increase testability of the codebase. Some reused code was also moved to Helper classes as to enforce DRY; There may be some lines of code that are still copy-pasted from other parts of the codebase for reuse. Non-breaking refactoring changes were made, but the app as a whole still needs full manual testing, and customised responses to HTTP 500 responses. Some errors are also not handled gracefully and this wasn't checked in this commit.
311 lines
9.7 KiB
PHP
311 lines
9.7 KiB
PHP
@extends('breadcrumbs.app')
|
|
|
|
@section('content')
|
|
|
|
@if(!$positions->isEmpty())
|
|
|
|
<!-- todo: details component -->
|
|
|
|
@foreach($positions as $position)
|
|
<x-modal id="{{ $position->vacancySlug . '-details' }}" modal-label="{{ $position->vacancySlug . '-details-label' }}" modal-title="Opening details" include-close-button="true">
|
|
|
|
@if (is_null($position->vacancyFullDescription))
|
|
|
|
<div class="alert alert-warning">
|
|
|
|
<h3><i class="fas fa-question-circle"></i> There don't seem to be any details</h3>
|
|
<p>
|
|
This opening does not have any details yet.
|
|
</p>
|
|
|
|
</div>
|
|
@else
|
|
|
|
{!! $position->vacancyFullDescription !!}
|
|
<p class="text-sm text-muted">
|
|
Last updated @ {{ $position->updated_at }}
|
|
</p>
|
|
@endif
|
|
|
|
<x-slot name="modalFooter"></x-slot>
|
|
|
|
</x-modal>
|
|
|
|
@endforeach
|
|
|
|
|
|
@endif
|
|
|
|
<!--Main Layout-->
|
|
<main class="py-5">
|
|
|
|
<div class="container-fluid">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col text-center">
|
|
|
|
<h3>Open Positions</h3>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row mt-5 mb-5">
|
|
|
|
@if (!$positions->isEmpty())
|
|
|
|
@foreach($positions as $position)
|
|
|
|
<div class="col-md-4">
|
|
|
|
<div class="card mt-3">
|
|
|
|
<div class="card-header text-center">
|
|
|
|
<h4 class="card-title">{{$position->vacancyName}}</h4>
|
|
@if ($position->vacancyCount == 1)
|
|
<p class="card-subtitle">There is <span class="badge badge-success">{{$position->vacancyCount}}</span> open position!</p>
|
|
@else
|
|
<p class="card-subtitle">There are <span class="badge badge-success">{{$position->vacancyCount}}</span> open positions!</p>
|
|
@endif
|
|
|
|
|
|
</div>
|
|
|
|
<div class="card-body text-center">
|
|
|
|
<p class="card-text">
|
|
{{$position->vacancyDescription}}
|
|
</p>
|
|
|
|
</div>
|
|
|
|
<div class="card-footer text-center">
|
|
@auth
|
|
<button {{($isEligibleForApplication) ? '' : 'disabled'}} type="button" class="btn btn-success" onclick="window.location.href='{{route('renderApplicationForm', ['vacancySlug' => $position->vacancySlug])}}'">Apply</button>
|
|
@if(!$isEligibleForApplication)
|
|
<span class="badge-warning badge"><i class="fa fa-info"></i> Ineligible ({{$eligibilityDaysRemaining}} days remaining)</span>
|
|
@endif
|
|
@endauth
|
|
|
|
@guest
|
|
<button type="button" class="btn btn-success" onclick="window.location.href='{{route('renderApplicationForm', ['vacancySlug' => $position->vacancySlug])}}'">Apply</button>
|
|
<button type="button" class="btn btn-info" onclick="$('#{{ $position->vacancySlug }}-details').modal('show')">Learn more</button>
|
|
@endguest
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
@endforeach
|
|
|
|
@else
|
|
|
|
<div class="col-md-4 offset-md-4">
|
|
|
|
<div class="card">
|
|
|
|
<div class="card-header">
|
|
|
|
<div class="card-title"><h4>Applications Closed</h4></div>
|
|
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
|
|
<div class="alert alert-info">
|
|
|
|
<p><b>Hello there!</b></p>
|
|
<p>
|
|
We are currently not hiring any new staff members at the moment. If you'd like to apply, check out our Discord's
|
|
announcement channel for news when a new position opens.
|
|
Our application cycle usually lasts two weeks, so if you're seeing this, it's because it finished, and new one will begin soon.
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
@endif
|
|
|
|
</div>
|
|
|
|
<div class="row mt-5 mb-5">
|
|
|
|
<div class="col text-center">
|
|
|
|
<h3>Where you'll work</h3>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row mt-5 mb-5">
|
|
|
|
<div id="carouselControls" class="carousel slide" data-ride="carousel">
|
|
<div class="carousel-inner">
|
|
<div class="carousel-item active">
|
|
<img class="d-block w-100" src="/slides/01.png"
|
|
alt="Hub Side View">
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" src="/slides/02.png"
|
|
alt="Hub Top View">
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" src="/slides/03.png"
|
|
alt="Network Servers">
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" src="/slides/04.png"
|
|
alt="Prison Mines">
|
|
</div>
|
|
<div class="carousel-item">
|
|
<img class="d-block w-100" src="/slides/05.png"
|
|
alt="Modified Survival">
|
|
</div>
|
|
</div>
|
|
<a class="carousel-control-prev" href="#carouselControls" role="button" data-slide="prev">
|
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
|
<span class="sr-only">Previous</span>
|
|
</a>
|
|
<a class="carousel-control-next" href="#carouselControls" role="button" data-slide="next">
|
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
|
<span class="sr-only">Next</span>
|
|
</a>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="row mt-5 mb-5">
|
|
|
|
<div class="col text-center">
|
|
|
|
<h3>Join The Team</h3>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row">
|
|
|
|
<div class="col text-center">
|
|
<p>
|
|
Join the team today and help out network grow and prosper!
|
|
</p>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="row text-center mt-5 mb-4">
|
|
|
|
<div class="col">
|
|
|
|
<h3>Any questions? Leave a message!</h3>
|
|
<p class="text-muted">*This is not an application form. Any applications sent here will be ignored.</p>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row text-center">
|
|
|
|
<div class="col">
|
|
|
|
|
|
|
|
<form method="POST" action="{{route('sendSubmission')}}" id="contactForm">
|
|
@csrf
|
|
|
|
<!-- Tamper warning: Your captcha will fail if you modify this value programmatically/manually. -->
|
|
<input type="hidden" name="captcha" id="captcha">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-md-6">
|
|
<div class="md-form">
|
|
|
|
<input type="text" name="name" class="form-control" id="firstName">
|
|
<label for="firstName">Name</label>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
|
|
<div class="md-form">
|
|
|
|
<input type="email" name="email" class="form-control" id="email">
|
|
<label for="email">E-mail</label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
<div class="md-form">
|
|
|
|
<input type="text" name="subject" id="subject" class="form-control">
|
|
<label for="subject">Subject (ex. Suggestion)</label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="col-md-12">
|
|
|
|
<div class="md-form">
|
|
|
|
<textarea rows="3" name="msg" id="message" class="md-textarea form-control"></textarea>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row text-center">
|
|
|
|
<div class="col">
|
|
|
|
<script>
|
|
function gcallback(response)
|
|
{
|
|
document.getElementById('captcha').value = response
|
|
}
|
|
</script>
|
|
|
|
<!-- align: deprecated cheap hack, but quick -->
|
|
<div align="center" class="g-recaptcha pb-3" data-callback="gcallback" data-sitekey="{{config('recaptcha.keys.sitekey')}}"></div>
|
|
|
|
<button type="button" class="btn btn-info" onclick="document.getElementById('contactForm').submit()">Send</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</main>
|
|
<!--Main Layout-->
|
|
|
|
@stop
|