Compare commits
23 Commits
Author | SHA1 | Date |
---|---|---|
Miguel Nogueira | 1aee4c053f | |
Miguel Nogueira | a880eb65b0 | |
Miguel Nogueira | 2ddef6058d | |
Miguel Nogueira | 41d86de5b0 | |
Miguel Nogueira | 427c9d1c57 | |
Miguel Nogueira | 64d8ffa9d9 | |
Miguel Nogueira | 4594973a21 | |
Miguel Nogueira | fc6d7d2b18 | |
Miguel Nogueira | 42178e26de | |
Miguel Nogueira | b2b29382bf | |
Miguel Nogueira | 92679e94d5 | |
Miguel Nogueira | d8e836980a | |
Miguel Nogueira | 8d1e39c43c | |
Miguel Nogueira | a3d0730808 | |
Miguel Nogueira | d876dd6055 | |
Miguel Nogueira | 521810c23c | |
Miguel Nogueira | e6f84cd09a | |
Miguel Nogueira | 85c719c24d | |
Miguel Nogueira | 5df3f965ef | |
Miguel Nogueira | 4eb115d165 | |
Miguel Nogueira | 0433ce7693 | |
Miguel Nogueira | 773ec570d9 | |
Miguel Nogueira | 53c23f3698 |
|
@ -18,7 +18,7 @@ DEMO_MODE=false
|
||||||
LOG_CHANNEL=daily
|
LOG_CHANNEL=daily
|
||||||
|
|
||||||
DB_CONNECTION=mysql
|
DB_CONNECTION=mysql
|
||||||
DB_HOST=127.0.0.1
|
DB_HOST=z
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=laravel
|
DB_DATABASE=laravel
|
||||||
DB_USERNAME=root
|
DB_USERNAME=root
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
# THIS IS A DEVELOPMENT BUILD. USE OF THIS BRANCH IS NOT SUPPORTED.
|
|
||||||
|
|
||||||
## RB Recruiter - The Simple Staff Application Manager v 0.6.2 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager)
|
# RB Recruiter v 0.6.2 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager)
|
||||||
|
## The quick and pain-free form management solution for communities
|
||||||
|
|
||||||
## The quick and pain-free staff application manager
|
Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username?
|
||||||
|
|
||||||
Have you ever gotten tired of managing your community's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username?
|
|
||||||
|
|
||||||
|
|
||||||
Wish you had a better application managemet strategy? Well, then RB Recruiter is for you!
|
Wish you had a better application managemet strategy? Well, then Raspberry Teams is for you! It was originally designed and developed for internal use for a gameserver network, but sharing is caring!
|
||||||
|
|
||||||
|
|
||||||
# Features (not exhaustive)
|
# Features (not exhaustive)
|
||||||
|
@ -33,60 +31,56 @@ Wish you had a better application managemet strategy? Well, then RB Recruiter is
|
||||||
# Roadmap
|
# Roadmap
|
||||||
|
|
||||||
Many other features are currently planned for this app, such as:
|
Many other features are currently planned for this app, such as:
|
||||||
- Customisable front page
|
- Discord role management (approved applicants)
|
||||||
- REST API (underway)
|
- Luckperms/PEX integration - For now, you'll have to promote users manually in-game
|
||||||
- Support more game servers and communities
|
- Flexibility - This app is built on a flexible concept! It will be able to be used for other purposes other than MC staff members.
|
||||||
- Editable homepage
|
- Customisable front page (**priority**)
|
||||||
- CKEditor 5 for all text fields
|
- Auto provisioning - Sign up on a website and get your instance of Raspberry Teams up and running in no time
|
||||||
- More form field types
|
- Suggestions accepted!
|
||||||
- Check out this [pull request](https://code.spacejewel-hosting.com/spacejewelhosting/staffmanager/pulls/1) for more planned features.
|
|
||||||
- ~~Web installer~~
|
|
||||||
|
|
||||||
Next release: v0.7.0, which brings a number of fixes and a REST API to the table.
|
|
||||||
|
|
||||||
# Technical overview
|
# Technical overview
|
||||||
|
|
||||||
Tech stack:
|
Tech stack:
|
||||||
- [Laravel 8](https://laravel.com/)
|
- [Laravel 8](https://laravel.com/)
|
||||||
- [Eloquent ORM](https://laravel.com/docs/5.0/eloquent)
|
- [Eloquent ORM](https://laravel.com/docs/5.0/eloquent)
|
||||||
- [AdminLTE](https://adminlte.io/) / [Bootstrap 4](https://getbootstrap.com/docs/4.0/getting-started/introduction/)
|
- [AdminLTE](https://adminlte.io/) /
|
||||||
|
- [Bootstrap 4](https://getbootstrap.com/docs/4.0/getting-started/introduction/)
|
||||||
- [jQuery](https://jquery.com/)
|
- [jQuery](https://jquery.com/)
|
||||||
- [Bootstrap 4](https://getbootstrap.com/)
|
- [Bootstrap 4](https://getbootstrap.com/)
|
||||||
- [Icons by FontAwesome](https://fontawesome.com/)
|
- [Icons by FontAwesome](https://fontawesome.com/)
|
||||||
|
|
||||||
# Stability
|
# Stability
|
||||||
|
|
||||||
Currently, the ``master`` branch is unusable. It's currently broken and bug-ridden, and it's also protected to prevent more broken commits. The development branch is currently the stable enough branch to be used, however, please note that it's still actively updated, albeit with less frequency. Rest assured that no broken commits will be uploaded to develop without testing first.
|
Currently, the ``master`` branch is highly unstable, since it's under active development. Expect it to break with each commit. Even though I make an effort to make sure each commit is good to go before pushing, things might still break unexpectedly, and you may find a lot of bugs (which you should report).
|
||||||
|
|
||||||
After 1.0.0, master will be used as the main branch, receiving new, tested features from develop as pull requests. The master branch will only be usable and fixed after it's merged with develop.
|
Every released version is currently pre-release. If you really want to run this before version ``1.0.0`` comes out, always stay on the latest version, as those will always be tested before release, ensuring less chaos.
|
||||||
|
|
||||||
*Note: This application is NOT production ready! It won't be until the first stable release comes out, which might take a bit longer, due to me having other responsabilities outside this project.
|
*Note: This application is NOT production ready! It won't be until the first stable release comes out, which might take a bit longer.
|
||||||
|
|
||||||
# Operating System Requirements
|
# Operating System Requirements
|
||||||
|
|
||||||
Currently, this application is only supported on Linux (any distro). No support will be provided for Windows installs. Sorry!
|
Currently, this application is only supported on Linux environments (Ubuntu 20.04 or derivatives are recommended).
|
||||||
|
|
||||||
|
# Software Requirements
|
||||||
# Currently broken features
|
- ``composer`` (min version: 1.8.4)
|
||||||
- User deletion is not working at the moment.
|
- ``npm`` (tested w/ v 5.8.0)
|
||||||
- Notifications are semi-broken; Sometimes they work, sometimes they don't. Scheduled to be fixed on next release.
|
- ``php`` (required PHP 8 or newer - lower versions unsupported!)
|
||||||
|
|
||||||
# PHP Extension Requirements
|
# PHP Extension Requirements
|
||||||
|
|
||||||
- ImageMagick (imagick) for 2FA support
|
- JSON
|
||||||
|
- Curl (highly recommended)
|
||||||
Most of these extensions are already enabled by default so you don't need to worry.
|
- Image Magick (imagick) for 2FA support
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
The automatic installer may not work, but it's still worth to give it a try. If after the installation you find errors, clear the config cache. This is something the installer doesn't do correctly yet.
|
Make sure all prerequisites are installed. Afterwards, clone this repository, make ``install.sh``executable and run it.
|
||||||
|
|
||||||
If errors presist, please install the app the traditional Laravel way. Execute the install script to start.
|
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
Configuration is currently done via the installer. Alternatively, you may also edit the ``.env`` file directly.
|
Configuration is currently done via the installer. Alternatively, you may also edit the ``.env`` file directly.
|
||||||
~~This process will be moved to the browser later.~~
|
This process will be moved to the browser later.
|
||||||
|
|
||||||
# Bug reports
|
# Bug reports
|
||||||
|
|
||||||
Please report any bugs you find to the issues section. Since this project is being tracked on JIRA Software, the issue tracker will be moved to JIRA Service Desk. Atlassian has a great suite of products for software developers and RB Recruiter could benefit from this workflow, especially when more developers are added down the line.
|
Please report any bugs you find to the issues section here! It'd be immensely helpful. PRs are also accepted.
|
||||||
|
|
|
@ -1,24 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright © 2020 Miguel Nogueira
|
|
||||||
*
|
|
||||||
* This file is part of Raspberry Staff Manager.
|
|
||||||
*
|
|
||||||
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Raspberry Staff Manager is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
@ -58,12 +39,17 @@ class Install extends Command
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
$basePath = base_path();
|
$basePath = base_path();
|
||||||
if (Storage::disk('local')->missing('INSTALLED')) {
|
if (Storage::disk('local')->missing('INSTALLED'))
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
$this->info('[!! Welcome to Rasberry Teams !!]');
|
$this->info('[!! Welcome to Rasberry Teams !!]');
|
||||||
$this->info('>> Installing...');
|
$this->info('>> Installing...');
|
||||||
$this->call('down');
|
$this->call('down', [
|
||||||
|
'--message' => 'Down for maintenance. We\'ll be right back!'
|
||||||
|
]);
|
||||||
|
|
||||||
copy($basePath.'/.env.example', $basePath.'/.env');
|
copy($basePath . '/.env.example', $basePath . '/.env');
|
||||||
$this->call('key:generate');
|
$this->call('key:generate');
|
||||||
|
|
||||||
$this->info('>> Installing and preparing dependencies. This may take a while, depending on your computer.');
|
$this->info('>> Installing and preparing dependencies. This may take a while, depending on your computer.');
|
||||||
|
@ -74,20 +60,25 @@ class Install extends Command
|
||||||
$npmBuildOut = 0;
|
$npmBuildOut = 0;
|
||||||
$npmBuildMessages = [];
|
$npmBuildMessages = [];
|
||||||
|
|
||||||
exec('cd '.$basePath.' && npm install --silent', $npmBuildOut, $npmOut);
|
exec('cd ' . $basePath . ' && npm install --silent', $npmBuildOut, $npmOut);
|
||||||
exec('cd '.$basePath.'&& npm run dev --silent', $npmBuildMessages, $npmBuildOut);
|
exec('cd ' . $basePath . '&& npm run dev --silent', $npmBuildMessages, $npmBuildOut);
|
||||||
|
|
||||||
if ($npmOut !== 0 && $npmBuildOut !== 0) {
|
|
||||||
|
if($npmOut !== 0 && $npmBuildOut !== 0)
|
||||||
|
{
|
||||||
$this->error('[!] One or more errors have ocurred whilst attempting to install dependencies.');
|
$this->error('[!] One or more errors have ocurred whilst attempting to install dependencies.');
|
||||||
$this->error('[!] It is recommended to run this command again, and report a bug if it keeps happening.');
|
$this->error('[!] It is recommended to run this command again, and report a bug if it keeps happening.');
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$settings = [];
|
$settings = [];
|
||||||
|
|
||||||
$this->info('>> Configuring application - We\'re going to ask a few questions here!');
|
$this->info('>> Configuring application - We\'re going to ask a few questions here!');
|
||||||
do {
|
do
|
||||||
|
{
|
||||||
$this->info('== Database Settings (1/6) ==');
|
$this->info('== Database Settings (1/6) ==');
|
||||||
|
|
||||||
$settings['DB_USERNAME'] = $this->ask('Database username');
|
$settings['DB_USERNAME'] = $this->ask('Database username');
|
||||||
|
@ -108,7 +99,7 @@ class Install extends Command
|
||||||
$settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen)');
|
$settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen)');
|
||||||
$settings['MAIL_PORT'] = $this->ask('SMTP Server Port');
|
$settings['MAIL_PORT'] = $this->ask('SMTP Server Port');
|
||||||
$settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname');
|
$settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname');
|
||||||
$settings['MAIL_FROM'] = $this->ask('E-mail address to send from: ');
|
$settings['MAIL_FROM_ADDRESS'] = $this->ask('E-mail address to send from');
|
||||||
|
|
||||||
$this->info('== Notification Settings (5/6) (Slack) ==');
|
$this->info('== Notification Settings (5/6) (Slack) ==');
|
||||||
$settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL');
|
$settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL');
|
||||||
|
@ -117,12 +108,15 @@ class Install extends Command
|
||||||
$settings['APP_URL'] = $this->ask('Application\'s URL (ex. https://where.you.installed.theapp.com): ');
|
$settings['APP_URL'] = $this->ask('Application\'s URL (ex. https://where.you.installed.theapp.com): ');
|
||||||
$settings['APP_LOGO'] = $this->ask('App logo (Link to an image): ');
|
$settings['APP_LOGO'] = $this->ask('App logo (Link to an image): ');
|
||||||
$settings['APP_SITEHOMEPAGE'] = $this->ask('Site homepage (appears in the main header): ');
|
$settings['APP_SITEHOMEPAGE'] = $this->ask('Site homepage (appears in the main header): ');
|
||||||
} while (! $this->confirm('Are you sure you want to save these settings? You can always go back and try again.'));
|
|
||||||
|
|
||||||
foreach ($settings as $keyname => $value) {
|
|
||||||
|
} while(!$this->confirm('Are you sure you want to save these settings? You can always go back and try again.'));
|
||||||
|
|
||||||
|
foreach($settings as $keyname => $value)
|
||||||
|
{
|
||||||
$this->call('environment:modify', [
|
$this->call('environment:modify', [
|
||||||
'key' => $keyname,
|
'key' => $keyname,
|
||||||
'value' => $value,
|
'value' => $value
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,11 +127,14 @@ class Install extends Command
|
||||||
$this->call('migrate');
|
$this->call('migrate');
|
||||||
$this->call('db:seed');
|
$this->call('db:seed');
|
||||||
|
|
||||||
touch($basePath.'/INSTALLED');
|
touch($basePath . '/INSTALLED');
|
||||||
|
|
||||||
$this->call('up');
|
$this->call('up');
|
||||||
$this->info('>> All done! Visit '.$basePath.' to start using your brand new installation of Raspberry Teams!');
|
$this->info('>> All done! Visit ' . $basePath . ' to start using your brand new installation of Raspberry Teams!');
|
||||||
} else {
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->error('[!] The application is already installed!');
|
$this->error('[!] The application is already installed!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,7 @@ class LoginController extends Controller
|
||||||
|
|
||||||
public function authenticated(Request $request, User $user)
|
public function authenticated(Request $request, User $user)
|
||||||
{
|
{
|
||||||
|
if (!config('demo.is_enabled')) {
|
||||||
if ($user->originalIP !== $request->ip())
|
if ($user->originalIP !== $request->ip())
|
||||||
{
|
{
|
||||||
Log::alert('User IP address changed from last login. Updating.', [
|
Log::alert('User IP address changed from last login. Updating.', [
|
||||||
|
@ -91,4 +92,5 @@ class LoginController extends Controller
|
||||||
$user->save();
|
$user->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,7 @@ class TeamController extends Controller
|
||||||
public function update(EditTeamRequest $request, Team $team): RedirectResponse
|
public function update(EditTeamRequest $request, Team $team): RedirectResponse
|
||||||
{
|
{
|
||||||
$this->authorize('update', $team);
|
$this->authorize('update', $team);
|
||||||
$team = $this->teamService->updateTeam($team, $request->teamDescription, $team->joinType);
|
$team = $this->teamService->updateTeam($team, $request->teamDescription, $request->joinType);
|
||||||
|
|
||||||
|
|
||||||
if ($team) {
|
if ($team) {
|
||||||
|
|
|
@ -1,32 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright © 2020 Miguel Nogueira
|
|
||||||
*
|
|
||||||
* This file is part of Raspberry Staff Manager.
|
|
||||||
*
|
|
||||||
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Raspberry Staff Manager is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use GuzzleHttp\Exception\ConnectException;
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\View;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\View;
|
||||||
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
|
|
||||||
class MojangStatusProvider extends ServiceProvider
|
class MojangStatusProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
@ -47,16 +28,26 @@ class MojangStatusProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
// TODO: (IMPORTANT) Switch this to Middleware
|
$unknown_status = '[{"minecraft.net":"red"},{"session.minecraft.net":"red"},{"account.mojang.com":"red"},{"authserver.mojang.com":"red"},{"sessionserver.mojang.com":"red"},{"api.mojang.com":"red"},{"textures.minecraft.net":"red"},{"mojang.com":"red"}]';
|
||||||
if (! Cache::has('mojang_status')) {
|
|
||||||
Log::info('Mojang Status Provider: Mojang Status not found in the cache; Sending new request.');
|
|
||||||
|
|
||||||
try {
|
// TODO: (IMPORTANT) Switch this to Middleware
|
||||||
|
if (!Cache::has('mojang_status'))
|
||||||
|
{
|
||||||
|
Log::info("Mojang Status Provider: Mojang Status not found in the cache; Sending new request.");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
$mcstatus = Http::get(config('general.urls.mojang.statuscheck'));
|
$mcstatus = Http::get(config('general.urls.mojang.statuscheck'));
|
||||||
Cache::put('mojang_status', base64_encode($mcstatus->body()), now()->addDays(3));
|
Cache::put('mojang_status', base64_encode($mcstatus->body()), now()->addDays(3));
|
||||||
} catch (ConnectException $connectException) {
|
}
|
||||||
|
catch(ConnectionException $connectException)
|
||||||
|
{
|
||||||
|
// Shorter TTL because mojang status server might have recovered
|
||||||
|
Cache::put('mojang_status', base64_encode($unknown_status), now()->addMinutes(60));
|
||||||
|
|
||||||
|
Log::alert('Writing unknown Mojang status placeholder to cache');
|
||||||
Log::critical('Could not connect to Mojang servers: Cannot check/refresh status', [
|
Log::critical('Could not connect to Mojang servers: Cannot check/refresh status', [
|
||||||
'message' => $connectException->getMessage(),
|
'message' => $connectException->getMessage()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,10 @@
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.3.4",
|
"php": "^8.0",
|
||||||
"ext-imagick": "*",
|
"ext-imagick": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"arcanedev/log-viewer": "^8.0",
|
"arcanedev/log-viewer": "^8.1.0",
|
||||||
"awssat/discord-notification-channel": "^1.4",
|
|
||||||
"berkayk/onesignal-laravel": "^1.0",
|
|
||||||
"doctrine/dbal": "^2.10",
|
"doctrine/dbal": "^2.10",
|
||||||
"fideloper/proxy": "^4.2",
|
"fideloper/proxy": "^4.2",
|
||||||
"fruitcake/laravel-cors": "^1.0",
|
"fruitcake/laravel-cors": "^1.0",
|
||||||
|
@ -22,14 +20,13 @@
|
||||||
"guzzlehttp/guzzle": "^7.0.1",
|
"guzzlehttp/guzzle": "^7.0.1",
|
||||||
"jeroennoten/laravel-adminlte": "^3.2",
|
"jeroennoten/laravel-adminlte": "^3.2",
|
||||||
"laravel/framework": "^8.0",
|
"laravel/framework": "^8.0",
|
||||||
"laravel/sanctum": "^2.8",
|
|
||||||
"laravel/slack-notification-channel": "^2.0",
|
"laravel/slack-notification-channel": "^2.0",
|
||||||
"laravel/tinker": "^2.0",
|
"laravel/tinker": "^2.0",
|
||||||
"laravel/ui": "^3.0",
|
"laravel/ui": "^3.0",
|
||||||
"mcamara/laravel-localization": "^1.5",
|
"mcamara/laravel-localization": "^1.5",
|
||||||
"mpociot/teamwork": "^6.0",
|
"mpociot/teamwork": "^6.1",
|
||||||
"pragmarx/google2fa-laravel": "^1.3",
|
"pragmarx/google2fa-laravel": "^1.3",
|
||||||
"sentry/sentry-laravel": "2.1.1",
|
"sentry/sentry-laravel": "2.9.0",
|
||||||
"spatie/laravel-permission": "^3.13"
|
"spatie/laravel-permission": "^3.13"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
@ -38,7 +35,7 @@
|
||||||
"fzaninotto/faker": "^1.9.1",
|
"fzaninotto/faker": "^1.9.1",
|
||||||
"mockery/mockery": "^1.3.1",
|
"mockery/mockery": "^1.3.1",
|
||||||
"nunomaduro/collision": "^5.0",
|
"nunomaduro/collision": "^5.0",
|
||||||
"phpunit/phpunit": "^9.0"
|
"phpunit/phpunit": "^9.3"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -578,22 +578,6 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'name' => 'BootstrapToggleButton',
|
|
||||||
'active' => true,
|
|
||||||
'files' => [
|
|
||||||
[
|
|
||||||
'type' => 'css',
|
|
||||||
'asset' => false,
|
|
||||||
'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'type' => 'js',
|
|
||||||
'asset' => false,
|
|
||||||
'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'name' => 'BootstrapMultiselectDropdown',
|
'name' => 'BootstrapMultiselectDropdown',
|
||||||
'active' => true,
|
'active' => true,
|
||||||
|
@ -626,6 +610,22 @@ return [
|
||||||
'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css'
|
'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css'
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
[
|
||||||
|
'name' => 'BootstrapToggleButton',
|
||||||
|
'active' => true,
|
||||||
|
'files' => [
|
||||||
|
[
|
||||||
|
'type' => 'css',
|
||||||
|
'asset' => false,
|
||||||
|
'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type' => 'js',
|
||||||
|
'asset' => false,
|
||||||
|
'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use Faker\Generator as Faker;
|
use Faker\Generator as Faker;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2020 Miguel Nogueira
|
* Copyright © 2020 Miguel Nogueira
|
||||||
*
|
*
|
||||||
|
@ -21,6 +20,7 @@
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
|
@ -32,10 +32,10 @@ class DatabaseSeeder extends Seeder
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
$this->call(PermissionSeeder::class);
|
$this->call(\Database\Seeders\PermissionSeeder::class);
|
||||||
$this->call(UserSeeder::class);
|
$this->call(\Database\Seeders\UserSeeder::class);
|
||||||
$this->call(DefaultOptionsSeeder::class);
|
$this->call(\Database\Seeders\DefaultOptionsSeeder::class);
|
||||||
$this->call(NewPermissions::class);
|
$this->call(\Database\Seeders\NewPermissions::class);
|
||||||
$this->call(TeamSeeder::class);
|
$this->call(\Database\Seeders\TeamSeeder::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use App\Facades\Options;
|
use App\Facades\Options;
|
||||||
|
@ -34,14 +35,12 @@ class DefaultOptionsSeeder extends Seeder
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through', 'notifications'); // done
|
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through', 'notifications'); // done
|
||||||
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application' , 'notifications'); // done
|
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application', 'notifications'); // done
|
||||||
Options::setOption('notify_new_user', true, 'Notify when someone signs up'); // done
|
Options::setOption('notify_new_user', true, 'Notify when someone signs up', 'notifications'); // done
|
||||||
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status' , 'notifications'); // done
|
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status', 'notifications'); // done
|
||||||
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved' , 'notifications'); // done
|
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved', 'notifications'); // done
|
||||||
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes' , 'notifications'); // done
|
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes', 'notifications'); // done
|
||||||
|
|
||||||
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications' , 'notifications');
|
|
||||||
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications' , 'notifications');
|
|
||||||
|
|
||||||
// added in 0.6.2
|
// added in 0.6.2
|
||||||
Options::setOption('pw_security_policy', 'low', 'Describes the current password security policy.', 'app_security');
|
Options::setOption('pw_security_policy', 'low', 'Describes the current password security policy.', 'app_security');
|
||||||
|
@ -53,5 +52,9 @@ class DefaultOptionsSeeder extends Seeder
|
||||||
|
|
||||||
Options::setOption('currentGame', 'MINECRAFT', 'Defines what game we\'re working with', 'app_integration');
|
Options::setOption('currentGame', 'MINECRAFT', 'Defines what game we\'re working with', 'app_integration');
|
||||||
|
|
||||||
|
|
||||||
|
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications', 'notifications');
|
||||||
|
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications', 'notifications');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2020 Miguel Nogueira
|
* Copyright © 2020 Miguel Nogueira
|
||||||
*
|
*
|
||||||
|
@ -35,7 +34,7 @@ class NewPermissions extends Seeder
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
$developer = Role::create([
|
$developer = Role::create([
|
||||||
'name' => 'developer',
|
'name' => 'developer'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$admin = Role::where('name', 'admin')->first();
|
$admin = Role::where('name', 'admin')->first();
|
||||||
|
@ -46,5 +45,7 @@ class NewPermissions extends Seeder
|
||||||
$developer->givePermissionTo('admin.developertools.use');
|
$developer->givePermissionTo('admin.developertools.use');
|
||||||
$admin->givePermissionTo('admin.settings.view');
|
$admin->givePermissionTo('admin.settings.view');
|
||||||
$admin->givePermissionTo('admin.settings.edit');
|
$admin->givePermissionTo('admin.settings.edit');
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2020 Miguel Nogueira
|
* Copyright © 2020 Miguel Nogueira
|
||||||
*
|
*
|
||||||
|
@ -36,27 +35,27 @@ class PermissionSeeder extends Seeder
|
||||||
{
|
{
|
||||||
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
|
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
|
||||||
|
|
||||||
|
//
|
||||||
$user = Role::create(
|
$user = Role::create(
|
||||||
[
|
[
|
||||||
'name' => 'user',
|
'name' => 'user'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$reviewer = Role::create(
|
$reviewer = Role::create(
|
||||||
[
|
[
|
||||||
'name' => 'reviewer',
|
'name' => 'reviewer'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$hiringManager = Role::create(
|
$hiringManager = Role::create(
|
||||||
[
|
[
|
||||||
'name' => 'hiringManager',
|
'name' => 'hiringManager'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$admin = Role::create([
|
$admin = Role::create([
|
||||||
'name' => 'admin',
|
'name' => 'admin'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Spatie wildcard permissions (same concept of MC permissions)
|
// Spatie wildcard permissions (same concept of MC permissions)
|
||||||
|
@ -99,13 +98,13 @@ class PermissionSeeder extends Seeder
|
||||||
$user->givePermissionTo([
|
$user->givePermissionTo([
|
||||||
'applications.submit',
|
'applications.submit',
|
||||||
'applications.view.own',
|
'applications.view.own',
|
||||||
'profiles.view.others',
|
'profiles.view.others'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Able to view applications and vote on them once they reach the right stage, but not approve applications up to said stage
|
// Able to view applications and vote on them once they reach the right stage, but not approve applications up to said stage
|
||||||
$reviewer->givePermissionTo([
|
$reviewer->givePermissionTo([
|
||||||
'applications.view.all',
|
'applications.view.all',
|
||||||
'applications.vote',
|
'applications.vote'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$hiringManager->givePermissionTo('appointments.*', 'applications.*', 'admin.hiring.*');
|
$hiringManager->givePermissionTo('appointments.*', 'applications.*', 'admin.hiring.*');
|
||||||
|
@ -118,7 +117,7 @@ class PermissionSeeder extends Seeder
|
||||||
'admin.notificationsettings.*',
|
'admin.notificationsettings.*',
|
||||||
'profiles.view.others',
|
'profiles.view.others',
|
||||||
'profiles.edit.others',
|
'profiles.edit.others',
|
||||||
'admin.maintenance.logs.view',
|
'admin.maintenance.logs.view'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright © 2020 Miguel Nogueira
|
* Copyright © 2020 Miguel Nogueira
|
||||||
*
|
*
|
||||||
|
@ -36,15 +35,6 @@ class UserSeeder extends Seeder
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* Rationale:
|
|
||||||
* A ghost account is an account used by deleted users.
|
|
||||||
* Essentially, when users are deleted, their content is re-assigned to the
|
|
||||||
* ghost account.
|
|
||||||
* Also used by one-off apps.
|
|
||||||
*
|
|
||||||
* The ghost account was inspired by Github's ghost account.
|
|
||||||
*/
|
|
||||||
$ghostAccount = User::create([
|
$ghostAccount = User::create([
|
||||||
'uuid' => 'b741345057274a519144881927be0290', // Ghost
|
'uuid' => 'b741345057274a519144881927be0290', // Ghost
|
||||||
'name' => 'Ghost (deleted account)',
|
'name' => 'Ghost (deleted account)',
|
||||||
|
@ -55,49 +45,133 @@ class UserSeeder extends Seeder
|
||||||
'password' => 'locked'
|
'password' => 'locked'
|
||||||
])->assignRole('user'); // There can't be role-less users
|
])->assignRole('user'); // There can't be role-less users
|
||||||
|
|
||||||
|
$staffUsers = [
|
||||||
|
|
||||||
$admin = User::create([
|
[
|
||||||
'uuid' => '069a79f444e94726a5befca90e38aaf5', // Notch
|
'uuid' => 'd2b321b56ff1445db9d7794701983cad',
|
||||||
'name' => 'Admin',
|
'name' => 'Robot 1',
|
||||||
'email' => 'admin@example.com',
|
'email' => 'tester1@example.com',
|
||||||
'email_verified_at' => now(),
|
'username' => 'tester1',
|
||||||
'username' => 'admin',
|
'originalIP' => '99.18.146.235',
|
||||||
'originalIP' => '0.0.0.0',
|
'password' => Hash::make('password')
|
||||||
'password' => Hash::make('password'),
|
],
|
||||||
|
[
|
||||||
|
'uuid' => 'ab22b5da02644953ace969fce85c0819',
|
||||||
|
'name' => 'Robot 2',
|
||||||
|
'email' => 'tester2@example.com',
|
||||||
|
'username' => 'tester2',
|
||||||
|
'originalIP' => '141.239.229.53',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => 'df38e6bf762944d3a600ded59a693ad1',
|
||||||
|
'name' => 'Robot 3',
|
||||||
|
'email' => 'tester3@example.com',
|
||||||
|
'username' => 'tester3',
|
||||||
|
'originalIP' => '25.63.20.97',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => '689e446484824f6bad5064e3df0aaa96',
|
||||||
|
'name' => 'Robot 4',
|
||||||
|
'email' => 'tester4@example.com',
|
||||||
|
'username' => 'tester4',
|
||||||
|
'originalIP' => '220.105.223.142',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => '172391f917bf418ab1c40ebc041ed5ba',
|
||||||
|
'name' => 'Robot 5',
|
||||||
|
'email' => 'tester5@example.com',
|
||||||
|
'username' => 'tester5',
|
||||||
|
'originalIP' => '224.66.76.60',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => '371f34dcce2a4457bf385ab9417a2345',
|
||||||
|
'name' => 'Robot 6',
|
||||||
|
'email' => 'tester6@example.com',
|
||||||
|
'username' => 'tester6',
|
||||||
|
'originalIP' => '97.113.131.0',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => '89aa5222855542bebe7a7780248ef5f9',
|
||||||
|
'name' => 'Robot 7',
|
||||||
|
'email' => 'tester7@example.com',
|
||||||
|
'username' => 'tester7',
|
||||||
|
'originalIP' => '15.160.137.222',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
|
||||||
])->assignRole([ // all privileges
|
];
|
||||||
'user',
|
|
||||||
'reviewer',
|
$regularUsers = [
|
||||||
'admin',
|
|
||||||
'hiringManager',
|
[
|
||||||
|
'uuid' => '20f69f47e72f463493b5b91d1c05452f',
|
||||||
|
'name' => 'User 1',
|
||||||
|
'email' => 'user1@example.com',
|
||||||
|
'username' => 'user1',
|
||||||
|
'originalIP' => '253.25.237.78',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => '5f900018241e4aaba7883f2d5c5c2357',
|
||||||
|
'name' => 'User 2',
|
||||||
|
'email' => 'user2@example.com',
|
||||||
|
'username' => 'user2',
|
||||||
|
'originalIP' => '82.92.156.176',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'uuid' => 'ba9780c3270745c6840eaabe1bf8aa14',
|
||||||
|
'name' => 'User 3',
|
||||||
|
'email' => 'user3@example.com',
|
||||||
|
'username' => 'user3',
|
||||||
|
'originalIP' => '224.123.129.17',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
]
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($regularUsers as $regularUser)
|
||||||
|
{
|
||||||
|
$user = User::create($regularUser);
|
||||||
|
Profile::create([
|
||||||
|
'profileShortBio' => 'Random data ' . rand(0,1000),
|
||||||
|
'profileAboutMe' => 'Random data ' . rand(0, 1000),
|
||||||
|
'socialLinks' => "[]", // empty json set, not an array
|
||||||
|
'avatarPreference' => 'gravatar',
|
||||||
|
'userID' => $user->id
|
||||||
]);
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$staffmember = User::create([
|
foreach($staffUsers as $staffUser)
|
||||||
'uuid' => '853c80ef3c3749fdaa49938b674adae6', // Jeb__
|
{
|
||||||
'name' => 'Staff Member',
|
$user = User::create($staffUser);
|
||||||
'email' => 'staffmember@example.com',
|
Profile::create([
|
||||||
'email_verified_at' => now(),
|
'profileShortBio' => 'Random data ' . rand(0,1000),
|
||||||
'username' => 'staffmember',
|
'profileAboutMe' => 'Random data ' . rand(0, 1000),
|
||||||
'originalIP' => '0.0.0.0',
|
'socialLinks' => "[]",
|
||||||
'password' => Hash::make('password'),
|
'avatarPreference' => 'gravatar',
|
||||||
|
'userID' => $user->id
|
||||||
])->assignRole([ // all privileges
|
|
||||||
'user',
|
|
||||||
'reviewer',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$user = User::create([
|
|
||||||
'uuid' => 'f7c77d999f154a66a87dc4a51ef30d19', // hypixel
|
|
||||||
'name' => 'End User',
|
|
||||||
'email' => 'enduser@example.com',
|
|
||||||
'email_verified_at' => now(),
|
|
||||||
'username' => 'enduser',
|
|
||||||
'originalIP' => '0.0.0.0',
|
|
||||||
'password' => Hash::make('password'),
|
|
||||||
|
|
||||||
])->assignRole([ // all privileges
|
|
||||||
'user',
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
User::create([
|
||||||
|
'uuid' => '6102256abd284dd7b68e4c96ef313734',
|
||||||
|
'name' => 'Admin',
|
||||||
|
'email' => 'admin@example.com',
|
||||||
|
'username' => 'admin',
|
||||||
|
'originalIP' => '192.168.1.2',
|
||||||
|
'password' => Hash::make('password')
|
||||||
|
]);
|
||||||
|
|
||||||
|
foreach (User::all() as $user)
|
||||||
|
{
|
||||||
|
$user->assignRole('reviewer', 'user');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,10 @@
|
||||||
|
|
||||||
define('LARAVEL_START', microtime(true));
|
define('LARAVEL_START', microtime(true));
|
||||||
|
|
||||||
|
if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
|
||||||
|
require __DIR__.'/../storage/framework/maintenance.php';
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Check If Application Is Under Maintenance
|
| Check If Application Is Under Maintenance
|
||||||
|
|
|
@ -77256,30 +77256,31 @@ __webpack_require__(/*! chart.js */ "./node_modules/chart.js/dist/Chart.js");
|
||||||
__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
|
__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
|
||||||
|
|
||||||
|
|
||||||
flatpickr__WEBPACK_IMPORTED_MODULE_0___default()("#appointmentDateTime", {
|
$(document).ready(function () {
|
||||||
|
flatpickr__WEBPACK_IMPORTED_MODULE_0___default()("#appointmentDateTime", {
|
||||||
enableTime: true,
|
enableTime: true,
|
||||||
dateFormat: "Y-m-d H:i",
|
dateFormat: "Y-m-d H:i",
|
||||||
"static": false
|
"static": false
|
||||||
});
|
});
|
||||||
$("#banAccountTrigger").on("click", function (event) {
|
$("#banAccountTrigger").on("click", function (event) {
|
||||||
$("#banAccountModal").modal('show');
|
$("#banAccountModal").modal('show');
|
||||||
});
|
});
|
||||||
$("#durationDropdown").dropdown();
|
$("#durationDropdown").dropdown();
|
||||||
$(".dropdown-menu a").on("click", function (e) {
|
$(".dropdown-menu a").on("click", function (e) {
|
||||||
$(".duration-btn").text(this.innerHTML);
|
$(".duration-btn").text(this.innerHTML);
|
||||||
$("#operator").val(this.innerHTML);
|
$("#operator").val(this.innerHTML);
|
||||||
});
|
});
|
||||||
$("#banAccountButton").on("click", function () {
|
$("#banAccountButton").on("click", function () {
|
||||||
$("#banAccountForm").submit();
|
$("#banAccountForm").submit();
|
||||||
});
|
});
|
||||||
$("#comment").keyup(function () {
|
$("#comment").keyup(function () {
|
||||||
$("#charcount").text($("#comment").val().length);
|
$("#charcount").text($("#comment").val().length);
|
||||||
});
|
});
|
||||||
$("#submitComment").on('click', function () {
|
$("#submitComment").on('click', function () {
|
||||||
$("#newComment").submit();
|
$("#newComment").submit();
|
||||||
|
});
|
||||||
|
$("#jointype").bootstrapToggle();
|
||||||
});
|
});
|
||||||
$("#jointype").bootstrapToggle();
|
|
||||||
$("#associatedVacancies").multiselect();
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
|
@ -77375,7 +77376,7 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||||
// broadcaster: 'pusher',
|
// broadcaster: 'pusher',
|
||||||
// key: process.env.MIX_PUSHER_APP_KEY,
|
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||||
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||||
// encrypted: true
|
// forceTLS: true
|
||||||
// });
|
// });
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
@ -77409,10 +77410,10 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||||
/*! no static exports found */
|
/*! no static exports found */
|
||||||
/***/ (function(module, exports, __webpack_require__) {
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
__webpack_require__(/*! /home/miguel456/Desktop/Projects/staffmanager/resources/js/app.js */"./resources/js/app.js");
|
__webpack_require__(/*! /home/miguel456/Desktop/Projects/rbrecruiter/resources/js/app.js */"./resources/js/app.js");
|
||||||
__webpack_require__(/*! /home/miguel456/Desktop/Projects/staffmanager/resources/js/application_charts.js */"./resources/js/application_charts.js");
|
__webpack_require__(/*! /home/miguel456/Desktop/Projects/rbrecruiter/resources/js/application_charts.js */"./resources/js/application_charts.js");
|
||||||
__webpack_require__(/*! /home/miguel456/Desktop/Projects/staffmanager/resources/js/calendar.js */"./resources/js/calendar.js");
|
__webpack_require__(/*! /home/miguel456/Desktop/Projects/rbrecruiter/resources/js/calendar.js */"./resources/js/calendar.js");
|
||||||
module.exports = __webpack_require__(/*! /home/miguel456/Desktop/Projects/staffmanager/resources/sass/app.scss */"./resources/sass/app.scss");
|
module.exports = __webpack_require__(/*! /home/miguel456/Desktop/Projects/rbrecruiter/resources/sass/app.scss */"./resources/sass/app.scss");
|
||||||
|
|
||||||
|
|
||||||
/***/ })
|
/***/ })
|
||||||
|
|
|
@ -10,39 +10,42 @@ require('./bootstrap');
|
||||||
import flatpickr from "flatpickr";
|
import flatpickr from "flatpickr";
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
flatpickr("#appointmentDateTime", {
|
flatpickr("#appointmentDateTime", {
|
||||||
enableTime: true,
|
enableTime: true,
|
||||||
dateFormat: "Y-m-d H:i",
|
dateFormat: "Y-m-d H:i",
|
||||||
static: false
|
static: false
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#banAccountTrigger").on("click", function(event){
|
$("#banAccountTrigger").on("click", function(event){
|
||||||
|
|
||||||
$("#banAccountModal").modal('show');
|
$("#banAccountModal").modal('show');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#durationDropdown").dropdown();
|
$("#durationDropdown").dropdown();
|
||||||
|
|
||||||
$(".dropdown-menu a").on("click", function(e){
|
$(".dropdown-menu a").on("click", function(e){
|
||||||
|
|
||||||
$(".duration-btn").text(this.innerHTML);
|
$(".duration-btn").text(this.innerHTML);
|
||||||
$("#operator").val(this.innerHTML);
|
$("#operator").val(this.innerHTML);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#banAccountButton").on("click", function(){
|
$("#banAccountButton").on("click", function(){
|
||||||
$("#banAccountForm").submit();
|
$("#banAccountForm").submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#comment").keyup(function(){
|
$("#comment").keyup(function(){
|
||||||
$("#charcount").text($("#comment").val().length);
|
$("#charcount").text($("#comment").val().length);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#submitComment").on('click', function(){
|
$("#submitComment").on('click', function(){
|
||||||
$("#newComment").submit();
|
$("#newComment").submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#jointype").bootstrapToggle();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#jointype").bootstrapToggle();
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="description" content="{{ config('app.name') }} Staff Member Management Tool">
|
<meta name="description" content="{{ config('app.name') }} Staff Member Management Tool">
|
||||||
<meta name="author" content="Miguel Nogueira">
|
<meta name="author" content="Miguel N.">
|
||||||
<meta name="tags" content="minecraft, minecraft server staff, minecraft staff, minecraft servers">
|
<meta name="tags" content="minecraft, minecraft server staff, minecraft staff, minecraft servers">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
let mix = require('laravel-mix');
|
||||||
|
|
||||||
mix.js(['resources/js/app.js', 'resources/js/application_charts.js', 'resources/js/calendar.js'], 'public/js')
|
mix.js(['resources/js/app.js', 'resources/js/application_charts.js', 'resources/js/calendar.js'], 'public/js')
|
||||||
.sass('resources/sass/app.scss', 'public/css');
|
.sass('resources/sass/app.scss', 'public/css');
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue