Compare commits

..
Author SHA1 Message Date
Nabeel Shahzad aa8cda89d6 Change model 2020-10-29 12:06:20 -04:00
Nabeel Shahzad 5ba65cf2d1 Initial pirep fares changes #903 2020-10-28 17:11:05 -04:00
97 changed files with 1265 additions and 1561 deletions
-36
View File
@@ -1,36 +0,0 @@
#!/usr/bin/env bash
if test "$GIT_TAG_NAME"; then
export VERSION=$GIT_TAG_NAME
# Pass in the tag as the version to write out
php artisan phpvms:version --write --write-full-version "${VERSION}"
export FULL_VERSION=$(php artisan phpvms:version)
else
export BRANCH=${GITHUB_REF##*/}
echo "On branch $BRANCH"
# Write the version out but place the branch ID in there
# This is only for the dev branch
export BASE_VERSION=$(php artisan phpvms:version --base-only)
# This now includes the pre-release version, so "-dev" by default
export VERSION=${BASE_VERSION}
# Don't pass in a version here, just write out the latest hash
php artisan phpvms:version --write "${VERSION}"
export FULL_VERSION=$(php artisan phpvms:version)
fi
export FILE_NAME="phpvms-${VERSION}"
export TAR_NAME="$FILE_NAME.tar.gz"
export ZIP_NAME="$FILE_NAME.zip"
export BASE_DIR=`pwd`
# https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#environment-files
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV
echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
echo "TAR_NAME=${TAR_NAME}" >> $GITHUB_ENV
echo "ZIP_NAME=${ZIP_NAME}" >> $GITHUB_ENV
echo "BASE_DIR=${BASE_DIR}" >> $GITHUB_ENV
echo "DISCORD_MSG=A new build is available at http://downloads.phpvms.net/$TAR_NAME (${FULL_VERSION})" >> $GITHUB_ENV
-252
View File
@@ -1,252 +0,0 @@
name: 'Build'
on: ['push', 'pull_request', 'workflow_dispatch', 'release']
jobs:
build:
runs-on: ubuntu-18.04
if: github.repository == 'nabeelio/phpvms'
strategy:
fail-fast: true
matrix:
php-versions: ['7.3', '7.4']
name: PHP ${{ matrix.php-versions }}
env:
extensions: intl, pcov, mbstring
key: cache-v1
steps:
- name: Checkout
uses: actions/checkout@v2
# Configure Caching
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v1
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
# Configure PHP
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
- name: Shutdown Ubuntu MySQL
run: sudo service mysql stop
- name: Install MariaDB
uses: getong/mariadb-action@v1.1
with:
character set server: 'utf8'
collation server: 'utf8_general_ci'
mysql database: 'phpvms'
mysql root password: ''
mysql user: ''
mysql password: ''
- name: Configure Environment
run: |
php --version
mysql --version
# Downgrade composer version to 1.x
composer self-update --1
composer install --dev --no-interaction --verbose
cp .github/scripts/env.php env.php
cp .github/scripts/phpunit.xml phpunit.xml
php artisan database:create --reset
php artisan migrate:refresh --seed
- name: Run Tests
run: |
vendor/bin/php-cs-fixer fix --config=.php_cs -v --dry-run --diff --using-cache=no
vendor/bin/phpunit --debug --verbose
# This runs after all of the tests, run have run. Creates a cleaned up version of the
# distro, and then creates the artifact to push up to S3 or wherever
artifacts:
name: 'Create dev build'
needs: build
runs-on: 'ubuntu-18.04'
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
- uses: olegtarasov/get-tag@v2.1
id: tagName
# Configure Caching
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
# Dependencies
- name: 'Install Release Dependencies'
run: |
rm -rf vendor
sudo npm i tar-to-zip -g
composer self-update --1
composer install --no-dev --prefer-dist --no-interaction --verbose
sudo chmod +x ./.github/scripts/*
- name: Get version
run: .github/scripts/version.sh
- name: Build Distro
run: .github/scripts/build.sh
- name: Upload S3
uses: shallwefootball/s3-upload-action@v1.1.3
with:
aws_key_id: ${{ secrets.S3_BUILD_ARTIFACTS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.S3_BUILD_ARTIFACTS_SECRET_ACCESS_KEY}}
aws_bucket: ${{ secrets.S3_BUCKET_NAME }}
source_dir: 'dist'
destination_dir: ''
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.0
with:
# DISCORD_MSG is defined in versions.sh
args: '{{ DISCORD_MSG }}'
# This runs after all of the tests, run have run. Creates a cleaned up version of the
# distro, and then creates the artifact to push up to S3 or wherever
# https://github.com/actions/create-release
release:
name: 'Create Release'
needs: build
runs-on: 'ubuntu-18.04'
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
- uses: olegtarasov/get-tag@v2.1
id: tagName
# Configure Caching
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
# Dependencies
- name: 'Install Release Dependencies'
run: |
rm -rf vendor
sudo npm i tar-to-zip -g
composer self-update --1
composer install --no-dev --prefer-dist --no-interaction --verbose
sudo chmod +x ./.github/scripts/*
- name: Get version
run: .github/scripts/version.sh
- name: Build Distro
run: .github/scripts/build.sh
- name: Upload S3
uses: shallwefootball/s3-upload-action@v1.1.3
with:
aws_key_id: ${{ secrets.S3_BUILD_ARTIFACTS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.S3_BUILD_ARTIFACTS_SECRET_ACCESS_KEY}}
aws_bucket: ${{ secrets.S3_BUCKET_NAME }}
source_dir: 'dist'
destination_dir: ''
- name: Checkout code
uses: actions/checkout@v2
- name: Get version
run: .github/scripts/version.sh
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: true
prerelease: false
# Upload the tar file to the release
- name: Upload Tar Asset
id: upload-tar-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: dist/{{TAR_NAME}}
asset_name: '{{ TAR_NAME }}'
asset_content_type: application/gzip
# upload the zip file to the release
- name: Upload Zip Asset
id: upload-zip-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: dist/{{ZIP_NAME}}
asset_name: '{{ ZIP_NAME }}'
asset_content_type: application/zip
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.0
with:
# DISCORD_MSG is defined in versions.sh
args: '{{ DISCORD_MSG }}'
+160
View File
@@ -0,0 +1,160 @@
#
# Travis CI config file
#
language: php
php:
- '7.4'
- '7.3'
#env:
# - DB=mysql
# - DB=mariadb
cache:
# Cache lives for 10 min
# Default of 3m might not be long enough for all the runs
timeout: 600
directories:
- "$HOME/.composer/cache"
- "$HOME/.npm"
services:
- mysql
#addons:
# mariadb: '10.2'
install:
- php --version
- mysql --version
- composer install --dev --no-interaction --verbose
- npm i tar-to-zip -g
- cp .travis/env.travis.php env.php
- cp .travis/phpunit.travis.xml phpunit.xml
before_script:
- php artisan database:create --reset
- php artisan migrate:refresh --seed
script:
- vendor/bin/php-cs-fixer fix --config=.php_cs -v --dry-run --diff --using-cache=no
- vendor/bin/phpunit --debug --verbose
after_failure:
- cat storage/logs/*.log
# Refer to: https://github.com/doctrine/dbal/blob/master/.travis.yml#L39
jobs:
include:
# Different test stages
# - stage: Test
# name: PHP 7.2 + MySQL 5.7
# php: 7.2
# env: DB=mysql
# services:
# - mysql
# - stage: Test
# name: PHP 7.3 + MySQL 5.7
# php: 7.3
# env: DB=mysql
# services:
# - mysql
# - stage: Test
# name: PHP 7.4 + MySQL 5.7
# php: 7.4
# env: DB=mysql
# services:
# - mysql
# - stage: Test
# name: PHP 7.2 + MariaDB 10.1
# php: 7.2
# env: DB=mariadb
# addons:
# mariadb: '10.1'
# - stage: Test
# name: PHP 7.3 + MariaDB 10.1
# php: 7.3
# env: DB=mariadb
# addons:
# mariadb: '10.1'
# - stage: Test
# name: PHP 7.4 + MariaDB 10.1
# php: 7.4
# env: DB=mariadb MARIADB_VERSION=10.1
# addons:
# mariadb: '10.1'
# - stage: Test
# name: PHP 7.2 + MariaDB 10.2
# php: 7.2
# env: DB=mariadb
# addons:
# mariadb: '10.2'
# - stage: Test
# name: PHP 7.3 + MariaDB 10.3
# php: 7.3
# env: DB=mariadb
# addons:
# mariadb: '10.2'
# - stage: Test
# name: PHP 7.4 + MariaDB 10.2
# php: 7.4
# env: DB=mariadb
# addons:
# mariadb: '10.2'
# - stage: Test
# name: PHP 7.2 + MariaDB 10.3
# php: 7.2
# env: DB=mariadb
# addons:
# mariadb: '10.3'
# - stage: Test
# name: PHP 7.3 + MariaDB 10.3
# php: 7.3
# env: DB=mariadb
# addons:
# mariadb: '10.3'
# - stage: Test
# name: PHP 7.4 + MariaDB 10.3
# php: 7.4
# env: DB=mariadb
# addons:
# mariadb: '10.3'
# Just packages up a release
- stage: package
script: skip
before_deploy:
- curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/6b10798/install | bash
# Configure the conditional deployment
# https://docs.travis-ci.com/user/deployment/#examples-of-conditional-deployment
deploy:
- provider: script
skip_cleanup: true
script: ./.travis/deploy_script.sh
on:
all_branches: true
repo: nabeelio/phpvms
php: '7.4'
tags: false
# RELEASE STAGE
# Only runs when there's a tag applied to this release (tag should be the version)
# This uses Github Releases and posts it there (provider: releases)
# https://docs.travis-ci.com/user/deployment/releases
- stage: release
script: skip
before_deploy:
- curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/6b10798/install | bash
- ./.travis/deploy_script.sh
deploy:
provider: releases
skip_cleanup: true
api_key: $GITHUB_TOKEN
file_glob: true
file: build/*
on:
tags: true
repo: nabeelio/phpvms
php: '7.4'
+71 -7
View File
@@ -1,12 +1,52 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [ "$TRAVIS" != "true" ]; then
exit 0
fi
cd $TRAVIS_BUILD_DIR
if test "$TRAVIS_TAG"; then
VERSION=$TRAVIS_TAG
# Pass in the tag as the version to write out
php artisan phpvms:version --write --write-full-version "${VERSION}"
FULL_VERSION=$(php artisan phpvms:version)
else
echo "On branch $TRAVIS_BRANCH"
if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
echo "Not on valid branch, exiting"
exit 0
fi
# Write the version out but place the branch ID in there
# This is only for the dev branch
BASE_VERSION=$(php artisan phpvms:version --base-only)
# This now includes the pre-release version, so "-dev" by default
VERSION=${BASE_VERSION}
# Don't pass in a version here, just write out the latest hash
php artisan phpvms:version --write "${VERSION}"
FULL_VERSION=$(php artisan phpvms:version)
fi
FILE_NAME="phpvms-${VERSION}"
TAR_NAME="$FILE_NAME.tar.gz"
ZIP_NAME="$FILE_NAME.zip"
echo "Version: ${VERSION}" echo "Version: ${VERSION}"
echo "Full Version: ${FULL_VERSION}" echo "Full Version: ${FULL_VERSION}"
echo "Package name: ${TAR_NAME}" echo "Package name: ${TAR_NAME}"
echo "Current directory: ${BASE_DIR}"
echo "==========================="
echo "Cleaning files" echo "Cleaning files"
rm -rf vendor
composer install --no-dev --prefer-dist --no-interaction --verbose
# Leftover individual files to delete # Leftover individual files to delete
declare -a remove_files=( declare -a remove_files=(
.git .git
@@ -67,20 +107,44 @@ mkdir -p storage/framework/cache
mkdir -p storage/framework/sessions mkdir -p storage/framework/sessions
mkdir -p storage/framework/views mkdir -p storage/framework/views
# Regenerate the autoloader and classes
composer dump-autoload
make clean
cd /tmp cd /tmp
ls -al $TRAVIS_BUILD_DIR/../
ls -al $BASE_DIR/../ tar -czf $TAR_NAME -C $TRAVIS_BUILD_DIR .
tar -czf $TAR_NAME -C $BASE_DIR .
sha256sum $TAR_NAME >"$TAR_NAME.sha256" sha256sum $TAR_NAME >"$TAR_NAME.sha256"
tar2zip $TAR_NAME tar2zip $TAR_NAME
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256" sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
ls -al /tmp ls -al /tmp
echo "Moving to dist" echo "Uploading to S3"
mkdir -p $BASE_DIR/dist mkdir -p $TRAVIS_BUILD_DIR/build
cd $BASE_DIR/dist cd $TRAVIS_BUILD_DIR/build
mv "/tmp/$TAR_NAME" "/tmp/$ZIP_NAME" "/tmp/$TAR_NAME.sha256" "/tmp/$ZIP_NAME.sha256" . mv "/tmp/$TAR_NAME" "/tmp/$ZIP_NAME" "/tmp/$TAR_NAME.sha256" "/tmp/$ZIP_NAME.sha256" .
artifacts upload --target-paths "/" $ZIP_NAME $TAR_NAME $TRAVIS_BUILD_DIR/VERSION $TAR_NAME.sha256 $ZIP_NAME.sha256
# Upload the version for a tagged release. Move to a version file in different
# tags. Within phpVMS, we have an option of which version to track in the admin
if test "$TRAVIS_TAG"; then
echo "Uploading release version file"
cp "$TRAVIS_BUILD_DIR/VERSION" release_version
artifacts upload --target-paths "/" release_version
else
echo "Uploading ${TRAVIS_BRANCH}_version file"
cp $TRAVIS_BUILD_DIR/VERSION ${TRAVIS_BRANCH}_version
artifacts upload --target-paths "/" ${TRAVIS_BRANCH}_version
fi
#if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
# echo "Skipping Discord branch update broadcast"
#else
curl -X POST \
--data "{\"content\": \"A new build is available at http://downloads.phpvms.net/$TAR_NAME (${FULL_VERSION})\"}" \
-H "Content-Type: application/json" \
$DISCORD_WEBHOOK_URL
#fi
+13 -10
View File
@@ -1,15 +1,18 @@
# phpVMS <sup>7</sup> # phpvms <sup>7</sup>
[![Build](https://github.com/nabeelio/phpvms/workflows/Build/badge.svg?branch=dev)](https://github.com/nabeelio/phpvms/actions) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/d668bebb0a3c46bda381af16ce3d9450)](https://www.codacy.com/app/nabeelio/phpvms?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nabeelio/phpvms&amp;utm_campaign=Badge_Grade) [![Latest Stable Version](https://poser.pugx.org/nabeel/phpvms/v/stable)](https://packagist.org/packages/nabeel/phpvms) ![StyleCI](https://github.styleci.io/repos/93688482/shield?branch=dev) [![License](https://poser.pugx.org/nabeel/phpvms/license)](https://packagist.org/packages/nabeel/phpvms) [![Build Status](https://travis-ci.org/nabeelio/phpvms.svg)](https://travis-ci.org/nabeelio/phpvms) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/d668bebb0a3c46bda381af16ce3d9450)](https://www.codacy.com/app/nabeelio/phpvms?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nabeelio/phpvms&amp;utm_campaign=Badge_Grade) [![Latest Stable Version](https://poser.pugx.org/nabeel/phpvms/v/stable)](https://packagist.org/packages/nabeel/phpvms) ![StyleCI](https://github.styleci.io/repos/93688482/shield?branch=dev) [![License](https://poser.pugx.org/nabeel/phpvms/license)](https://packagist.org/packages/nabeel/phpvms)
The next phpvms version built on the laravel framework. work in progress. The latest documentation, with installation instructions is available [on the phpVMS documentation](https://docs.phpvms.net/) page. The next phpvms version built on the laravel framework. work in progress. The latest documentation, with installation instructions is available
[on the phpVMS documentation](http://docs.phpvms.net/) page.
## Installation # installation
A full distribution, with all of the composer dependencies, is available at this A full distribution, with all of the composer dependencies, is available at this
[GitHub Releases](https://github.com/nabeelio/phpvms/releases) link. [GitHub Releases](https://github.com/nabeelio/phpvms/releases) link.
### Requirements
## Requirements
- PHP 7.3+, extensions: - PHP 7.3+, extensions:
- cURL - cURL
@@ -21,16 +24,16 @@ A full distribution, with all of the composer dependencies, is available at this
- Database: - Database:
- MySQL 5.5+ (or MySQL variant, including MariaDB and Percona) - MySQL 5.5+ (or MySQL variant, including MariaDB and Percona)
[View more details on requirements](https://docs.phpvms.net/requirements) [View more details on requirements](http://docs.phpvms.net/setup/requirements)
### Installer ## Installer
1. Upload to your server 1. Upload to your server
1. Visit the site, and follow the link to the installer 1. Visit the site, and follow the link to the installer
[View installation details](https://docs.phpvms.net/installation/installation) [View installation details](http://docs.phpvms.net/setup/installation)
## Development Environment # development environment
A full development environment can be brought up using Docker: A full development environment can be brought up using Docker:
@@ -47,7 +50,7 @@ Then go to `http://localhost`. If you're using dnsmasq, the `app` container is l
127.0.0.1 phpvms.test 127.0.0.1 phpvms.test
``` ```
### Building JS/CSS assets ## Building JS/CSS assets
Yarn is required, run: Yarn is required, run:
+1 -1
View File
@@ -3,7 +3,7 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Contracts\Command; use App\Contracts\Command;
use App\Services\Installer\ConfigService; use Modules\Installer\Services\ConfigService;
/** /**
* Create a fresh development install * Create a fresh development install
+1
View File
@@ -2,6 +2,7 @@
namespace App\Contracts; namespace App\Contracts;
use App\Models\Module;
use App\Support\Database; use App\Support\Database;
use Exception; use Exception;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@@ -5,6 +5,11 @@ use Illuminate\Database\Schema\Blueprint;
class RolesPermissionsTables extends Migration class RolesPermissionsTables extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
// Create table for storing roles // Create table for storing roles
@@ -74,6 +79,11 @@ class RolesPermissionsTables extends Migration
$this->addData('roles', $roles); $this->addData('roles', $roles);
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('permission_user'); Schema::dropIfExists('permission_user');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration class CreatePasswordResetsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('password_resets', function (Blueprint $table) { Schema::create('password_resets', function (Blueprint $table) {
@@ -15,6 +20,11 @@ class CreatePasswordResetsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('password_resets'); Schema::dropIfExists('password_resets');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateSessionsTable extends Migration class CreateSessionsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('sessions', function (Blueprint $table) { Schema::create('sessions', function (Blueprint $table) {
@@ -18,6 +23,11 @@ class CreateSessionsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('sessions'); Schema::dropIfExists('sessions');
@@ -5,6 +5,11 @@ use Illuminate\Database\Schema\Blueprint;
class CreateAirlinesTable extends Migration class CreateAirlinesTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('airlines', function (Blueprint $table) { Schema::create('airlines', function (Blueprint $table) {
@@ -27,6 +32,11 @@ class CreateAirlinesTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('airlines'); Schema::dropIfExists('airlines');
@@ -5,6 +5,11 @@ use Illuminate\Database\Schema\Blueprint;
class CreateFaresTable extends Migration class CreateFaresTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('fares', function (Blueprint $table) { Schema::create('fares', function (Blueprint $table) {
@@ -20,6 +25,11 @@ class CreateFaresTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('fares'); Schema::dropIfExists('fares');
@@ -7,6 +7,11 @@ use Illuminate\Database\Schema\Blueprint;
class CreateFlightTables extends Migration class CreateFlightTables extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('flights', function (Blueprint $table) { Schema::create('flights', function (Blueprint $table) {
@@ -5,6 +5,11 @@ use Illuminate\Database\Schema\Blueprint;
class CreateRanksTable extends Migration class CreateRanksTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('ranks', function (Blueprint $table) { Schema::create('ranks', function (Blueprint $table) {
@@ -25,6 +30,11 @@ class CreateRanksTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('ranks'); Schema::dropIfExists('ranks');
@@ -3,6 +3,9 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
/**
* Class CreateSubfleetTables
*/
class CreateSubfleetTables extends Migration class CreateSubfleetTables extends Migration
{ {
public function up() public function up()
@@ -45,6 +48,11 @@ class CreateSubfleetTables extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('subfleets'); Schema::dropIfExists('subfleets');
@@ -7,6 +7,11 @@ use Illuminate\Support\Facades\Schema;
class CreateBidsTable extends Migration class CreateBidsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('bids', function (Blueprint $table) { Schema::create('bids', function (Blueprint $table) {
@@ -20,6 +25,11 @@ class CreateBidsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('bids'); Schema::dropIfExists('bids');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateJobsTable extends Migration class CreateJobsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('jobs', function (Blueprint $table) { Schema::create('jobs', function (Blueprint $table) {
@@ -19,6 +24,11 @@ class CreateJobsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('jobs'); Schema::dropIfExists('jobs');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration class CreateFailedJobsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('failed_jobs', function (Blueprint $table) { Schema::create('failed_jobs', function (Blueprint $table) {
@@ -18,6 +23,11 @@ class CreateFailedJobsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('failed_jobs'); Schema::dropIfExists('failed_jobs');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateNavdataTables extends Migration class CreateNavdataTables extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
/* /*
@@ -26,6 +31,11 @@ class CreateNavdataTables extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('navdata'); Schema::dropIfExists('navdata');
@@ -7,6 +7,11 @@ use Illuminate\Support\Facades\Schema;
class CreateAcarsTables extends Migration class CreateAcarsTables extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('acars', function (Blueprint $table) { Schema::create('acars', function (Blueprint $table) {
@@ -39,6 +44,11 @@ class CreateAcarsTables extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('acars'); Schema::dropIfExists('acars');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateStatsTable extends Migration class CreateStatsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('stats', function (Blueprint $table) { Schema::create('stats', function (Blueprint $table) {
@@ -20,6 +25,11 @@ class CreateStatsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('stats'); Schema::dropIfExists('stats');
@@ -17,6 +17,11 @@ class CreateNewsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::drop('news'); Schema::drop('news');
@@ -7,6 +7,13 @@ use Modules\Awards\Awards\PilotFlightAwards;
class CreateAwardsTable extends Migration class CreateAwardsTable extends Migration
{ {
/**
* Run the migrations.
*
* @throws \Illuminate\Validation\ValidationException
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('awards', function (Blueprint $table) { Schema::create('awards', function (Blueprint $table) {
@@ -47,6 +54,11 @@ class CreateAwardsTable extends Migration
$this->addAward($award); $this->addAward($award);
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('awards'); Schema::dropIfExists('awards');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateJournalTransactionsTable extends Migration class CreateJournalTransactionsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('journal_transactions', function (Blueprint $table) { Schema::create('journal_transactions', function (Blueprint $table) {
@@ -29,6 +34,11 @@ class CreateJournalTransactionsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('journal_transactions'); Schema::dropIfExists('journal_transactions');
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateJournalsTable extends Migration class CreateJournalsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('journals', function (Blueprint $table) { Schema::create('journals', function (Blueprint $table) {
@@ -19,6 +24,11 @@ class CreateJournalsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('journals'); Schema::dropIfExists('journals');
@@ -1,7 +1,6 @@
<?php <?php
use App\Contracts\Migration; use App\Contracts\Migration;
use App\Contracts\Model;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -15,7 +14,7 @@ class CreateFilesTable extends Migration
public function up() public function up()
{ {
Schema::create('files', function (Blueprint $table) { Schema::create('files', function (Blueprint $table) {
$table->string('id', Model::ID_MAX_LENGTH); $table->string('id', \App\Contracts\Model::ID_MAX_LENGTH);
$table->string('name'); $table->string('name');
$table->string('description')->nullable(); $table->string('description')->nullable();
$table->string('disk')->nullable(); $table->string('disk')->nullable();
@@ -1,12 +1,17 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
class AddReadonlyToRoles extends Migration class AddReadonlyToRoles extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up(): void public function up(): void
{ {
Schema::table('roles', static function (Blueprint $table) { Schema::table('roles', static function (Blueprint $table) {
@@ -19,6 +24,11 @@ class AddReadonlyToRoles extends Migration
->update(['read_only' => true]); ->update(['read_only' => true]);
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void public function down(): void
{ {
Schema::table('roles', static function (Blueprint $table) { Schema::table('roles', static function (Blueprint $table) {
@@ -1,19 +1,21 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Kinda of gross operations to change the pilot ID column
* 1. Add an `pilot_id` column, which will get populated with the current ID
* 2. Drop the `id` column, and then recreate it as a string field
* 3. Iterate through all of the users and set their `id` to the `pilot_id`
* 4. Change the other tables column types that reference `user_id`
*/
class UsersAddPilotId extends Migration class UsersAddPilotId extends Migration
{ {
/**
* Kinda of gross operations to change the pilot ID column
* 1. Add an `pilot_id` column, which will get populated with the current ID
* 2. Drop the `id` column, and then recreate it as a string field
* 3. Iterate through all of the users and set their `id` to the `pilot_id`
* 4. Change the other tables column types that reference `user_id`
*
* @return void
*/
public function up() public function up()
{ {
Schema::table('users', static function (Blueprint $table) { Schema::table('users', static function (Blueprint $table) {
@@ -27,6 +29,11 @@ class UsersAddPilotId extends Migration
DB::table('users')->update(['pilot_id' => DB::raw('`id`')]); DB::table('users')->update(['pilot_id' => DB::raw('`id`')]);
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::table('users', function (Blueprint $table) { Schema::table('users', function (Blueprint $table) {
@@ -1,11 +1,16 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
class CreateNotificationsTable extends Migration class CreateNotificationsTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('notifications', function (Blueprint $table) { Schema::create('notifications', function (Blueprint $table) {
@@ -18,6 +23,11 @@ class CreateNotificationsTable extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('notifications'); Schema::dropIfExists('notifications');
@@ -1,16 +1,18 @@
<?php <?php
use App\Contracts\Migration;
use App\Models\Enums\PirepState; use App\Models\Enums\PirepState;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Change the PIREP state column to be a TINYINT
*/
class PirepsChangeStateType extends Migration class PirepsChangeStateType extends Migration
{ {
/**
* Change the PIREP state column to be a TINYINT
*
* @return void
*/
public function up() public function up()
{ {
// Migrate the old rejected state // Migrate the old rejected state
@@ -23,4 +25,13 @@ class PirepsChangeStateType extends Migration
$table->unsignedSmallInteger('state')->change(); $table->unsignedSmallInteger('state')->change();
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
} }
@@ -5,15 +5,27 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `flight_id` column to the PIREPs table
*/
class PirepsAddFlightId extends Migration class PirepsAddFlightId extends Migration
{ {
/**
* Add a `flight_id` column to the PIREPs table
*/
public function up() public function up()
{ {
Schema::table('pireps', function (Blueprint $table) { Schema::table('pireps', function (Blueprint $table) {
$table->string('flight_id', Model::ID_MAX_LENGTH)->nullable()->after('aircraft_id'); $table->string('flight_id', Model::ID_MAX_LENGTH)->nullable()->after('aircraft_id');
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('pireps', function (Blueprint $table) {
$table->dropColumn('flight_id');
});
}
} }
@@ -4,11 +4,11 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `flight_type` column to the expenses table
*/
class ExpensesAddFlightType extends Migration class ExpensesAddFlightType extends Migration
{ {
/**
* Add a `flight_type` column to the expenses table
*/
public function up() public function up()
{ {
Schema::table('expenses', function (Blueprint $table) { Schema::table('expenses', function (Blueprint $table) {
@@ -18,6 +18,11 @@ class ExpensesAddFlightType extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::table('expenses', function (Blueprint $table) { Schema::table('expenses', function (Blueprint $table) {
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/** /**
@@ -25,4 +25,13 @@ class ModifyAirportsCoordinates extends Migration
$table->decimal('lon', 11, 5)->change()->default(0.0)->nullable(); $table->decimal('lon', 11, 5)->change()->default(0.0)->nullable();
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/** /**
@@ -8,10 +8,24 @@ use Illuminate\Support\Facades\Schema;
*/ */
class FlightFieldNullable extends Migration class FlightFieldNullable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::table('flight_field_values', function ($table) { Schema::table('flight_field_values', function ($table) {
$table->text('value')->change()->nullable(); $table->text('value')->change()->nullable();
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
} }
@@ -1,14 +1,14 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `load_factor` and `load_factor_variance` columns to the expenses table
*/
class FlightsAddLoadFactor extends Migration class FlightsAddLoadFactor extends Migration
{ {
/**
* Add a `load_factor` and `load_factor_variance` columns to the expenses table
*/
public function up() public function up()
{ {
Schema::table('flights', function (Blueprint $table) { Schema::table('flights', function (Blueprint $table) {
@@ -22,6 +22,11 @@ class FlightsAddLoadFactor extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::table('flights', function (Blueprint $table) { Schema::table('flights', function (Blueprint $table) {
@@ -1,14 +1,14 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
class FlightsAddPilotPay extends Migration class FlightsAddPilotPay extends Migration
{ {
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
public function up() public function up()
{ {
Schema::table('flights', function (Blueprint $table) { Schema::table('flights', function (Blueprint $table) {
@@ -18,6 +18,11 @@ class FlightsAddPilotPay extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::table('flights', function (Blueprint $table) { Schema::table('flights', function (Blueprint $table) {
@@ -1,15 +1,15 @@
<?php <?php
use App\Contracts\Migration;
use App\Models\Enums\FareType; use App\Models\Enums\FareType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
class FaresAddType extends Migration class FaresAddType extends Migration
{ {
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
public function up() public function up()
{ {
Schema::table('fares', function (Blueprint $table) { Schema::table('fares', function (Blueprint $table) {
@@ -19,4 +19,16 @@ class FaresAddType extends Migration
->after('capacity'); ->after('capacity');
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('fares', function (Blueprint $table) {
$table->dropColumn('type');
});
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -33,4 +33,13 @@ class IncreaseIdLengths extends Migration
}); });
} }
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -15,4 +15,13 @@ class RemoveSubfleetTypeIndex extends Migration
$table->dropUnique(['type']); $table->dropUnique(['type']);
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -1,7 +1,7 @@
<?php <?php
use App\Contracts\Migration;
use App\Models\Enums\PageType; use App\Models\Enums\PageType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -11,6 +11,11 @@ use Illuminate\Support\Facades\Schema;
*/ */
class CreatePages extends Migration class CreatePages extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('pages', function (Blueprint $table) { Schema::create('pages', function (Blueprint $table) {
@@ -28,6 +33,11 @@ class CreatePages extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('pages'); Schema::dropIfExists('pages');
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -9,7 +9,11 @@ class AirlineRemoveNullable extends Migration
public function up() public function up()
{ {
Schema::table('airlines', function (Blueprint $table) { Schema::table('airlines', function (Blueprint $table) {
$table->dropUnique(['iata']); $table->dropUnique('airlines_iata_unique');
}); });
} }
public function down()
{
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -12,4 +12,8 @@ class PageIconNullable extends Migration
$table->string('icon')->change()->nullable(); $table->string('icon')->change()->nullable();
}); });
} }
public function down()
{
}
} }
@@ -1,15 +1,15 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add a `link` column and make the body optional. Also add a "new_window" bool
* which determines if we open this link in a new window or not
*/
class PagesAddLink extends Migration class PagesAddLink extends Migration
{ {
/**
* Add a `link` column and make the body optional. Also add a "new_window" bool
* which determines if we open this link in a new window or not
*/
public function up() public function up()
{ {
Schema::table('pages', function (Blueprint $table) { Schema::table('pages', function (Blueprint $table) {
@@ -23,6 +23,9 @@ class PagesAddLink extends Migration
}); });
} }
/**
* @return void
*/
public function down() public function down()
{ {
Schema::table('fares', function (Blueprint $table) { Schema::table('fares', function (Blueprint $table) {
@@ -5,11 +5,11 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
/**
* Add two tables for holding user fields and the values
*/
class CreateUserFields extends Migration class CreateUserFields extends Migration
{ {
/**
* Add two tables for holding user fields and the values
*/
public function up() public function up()
{ {
/* /*
@@ -39,4 +39,11 @@ class CreateUserFields extends Migration
$table->index(['user_field_id', 'user_id']); $table->index(['user_field_id', 'user_id']);
}); });
} }
/**
* @return void
*/
public function down()
{
}
} }
@@ -1,6 +1,6 @@
<?php <?php
use App\Contracts\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -19,6 +19,11 @@ class AircraftAddMtow extends Migration
}); });
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::table('aircraft', function (Blueprint $table) { Schema::table('aircraft', function (Blueprint $table) {
@@ -6,6 +6,11 @@ use Illuminate\Support\Facades\Schema;
class CreateModulesTable extends Migration class CreateModulesTable extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up() public function up()
{ {
Schema::create('modules', function (Blueprint $table) { Schema::create('modules', function (Blueprint $table) {
@@ -22,6 +27,11 @@ class CreateModulesTable extends Migration
$this->addModule(['name' => 'TestModule']); $this->addModule(['name' => 'TestModule']);
} }
/**
* Reverse the migrations.
*
* @return void
*/
public function down() public function down()
{ {
Schema::dropIfExists('modules'); Schema::dropIfExists('modules');
@@ -0,0 +1,52 @@
<?php
use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class ModifyPirepFares extends Migration
{
/**
* Modify the PIREP fares table so that we can save all of the fares for that particular PIREP
* Basically copy all of those fields over, and then use this table directly, instead of the
* relationship to the fares table
*
* @return void
*/
public function up()
{
/*
* Add the columns we need from the fares table so then this is now "fixed" in time
*/
Schema::table('pirep_fares', function (Blueprint $table) {
$table->unsignedInteger('fare_id')->change()->nullable()->default(0);
$table->string('code', 50);
$table->string('name', 50);
// count is already there
$table->unsignedDecimal('price')->nullable()->default(0.00);
$table->unsignedDecimal('cost')->nullable()->default(0.00);
$table->unsignedInteger('capacity')->nullable()->default(0);
});
/**
* Now iterate through the existing table and copy/update everything
* Some fares might already have been removed deleted so just insert some null/errored
* values for those
*/
$parent_fares = [];
$fares = DB::table('pirep_fares')->get();
foreach ($fares as $fare) {
if (empty($parent_fares[$fare->fare_id])) {
$parent_fares[$fare->fare_id] = DB::table('fares')->where('id', $fare->fare_id)->first();
}
}
}
public function down()
{
}
}
@@ -1,18 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Change the pages body column type to a Medium Text, max size of 16MB
*/
class ModifyPagesSize extends Migration
{
public function up()
{
Schema::table('pages', function (Blueprint $table) {
$table->mediumText('body')->change()->nullable();
});
}
}
@@ -1,19 +0,0 @@
<?php
use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Change the downloads link size
*/
class ModifyDownloadLinkSize extends Migration
{
public function up()
{
Schema::table('files', function (Blueprint $table) {
$table->mediumText('disk')->change()->nullable();
$table->mediumText('path')->change()->nullable();
});
}
}
@@ -1,20 +0,0 @@
<?php
use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Add a hub to the subfleet is
*/
class AddHubToSubfleets extends Migration
{
public function up()
{
Schema::table('subfleets', function (Blueprint $table) {
$table->string('hub_id', 4)
->nullable()
->after('airline_id');
});
}
}
@@ -18,7 +18,7 @@ class ValidationException extends AbstractHttpException
parent::__construct( parent::__construct(
400, 400,
'Validation Error' 'Validation exception'
); );
} }
@@ -160,7 +160,6 @@ class AircraftController extends Controller
*/ */
public function update($id, UpdateAircraftRequest $request) public function update($id, UpdateAircraftRequest $request)
{ {
/** @var \App\Models\Aircraft $aircraft */
$aircraft = $this->aircraftRepo->findWithoutFail($id); $aircraft = $this->aircraftRepo->findWithoutFail($id);
if (empty($aircraft)) { if (empty($aircraft)) {
@@ -172,7 +171,7 @@ class AircraftController extends Controller
$this->aircraftRepo->update($attrs, $id); $this->aircraftRepo->update($attrs, $id);
Flash::success('Aircraft updated successfully.'); Flash::success('Aircraft updated successfully.');
return redirect(route('admin.aircraft.index').'?subfleet='.$aircraft->subfleet_id); return redirect(route('admin.aircraft.index'));
} }
/** /**
@@ -184,7 +183,6 @@ class AircraftController extends Controller
*/ */
public function destroy($id) public function destroy($id)
{ {
/** @var \App\Models\Aircraft $aircraft */
$aircraft = $this->aircraftRepo->findWithoutFail($id); $aircraft = $this->aircraftRepo->findWithoutFail($id);
if (empty($aircraft)) { if (empty($aircraft)) {
@@ -7,7 +7,6 @@ use App\Http\Controllers\Admin\Traits\Importable;
use App\Http\Requests\CreateSubfleetRequest; use App\Http\Requests\CreateSubfleetRequest;
use App\Http\Requests\UpdateSubfleetRequest; use App\Http\Requests\UpdateSubfleetRequest;
use App\Models\Airline; use App\Models\Airline;
use App\Models\Airport;
use App\Models\Enums\FareType; use App\Models\Enums\FareType;
use App\Models\Enums\FuelType; use App\Models\Enums\FuelType;
use App\Models\Enums\ImportExportType; use App\Models\Enums\ImportExportType;
@@ -134,7 +133,6 @@ class SubfleetController extends Controller
{ {
return view('admin.subfleets.create', [ return view('admin.subfleets.create', [
'airlines' => Airline::all()->pluck('name', 'id'), 'airlines' => Airline::all()->pluck('name', 'id'),
'hubs' => Airport::where('hub', 1)->pluck('name', 'id'),
'fuel_types' => FuelType::labels(), 'fuel_types' => FuelType::labels(),
]); ]);
} }
@@ -205,7 +203,6 @@ class SubfleetController extends Controller
return view('admin.subfleets.edit', [ return view('admin.subfleets.edit', [
'airlines' => Airline::all()->pluck('name', 'id'), 'airlines' => Airline::all()->pluck('name', 'id'),
'hubs' => Airport::where('hub', 1)->pluck('name', 'id'),
'fuel_types' => FuelType::labels(), 'fuel_types' => FuelType::labels(),
'avail_fares' => $avail_fares, 'avail_fares' => $avail_fares,
'avail_ranks' => $avail_ranks, 'avail_ranks' => $avail_ranks,
@@ -42,14 +42,7 @@ class DownloadController extends Controller
$category = explode('\\', $class); $category = explode('\\', $class);
$category = end($category); $category = end($category);
if ($category == 'Aircraft') { $group_name = $category.' - '.$obj->name;
$group_name = $category.' > '.$obj->icao.' '.$obj->registration;
} elseif ($category == 'Airport') {
$group_name = $category.' > '.$obj->icao.' : '.$obj->name.' ('.$obj->country.')';
} else {
$group_name = $category.' > '.$obj->name;
}
$regrouped_files[$group_name] = $files; $regrouped_files[$group_name] = $files;
} }
@@ -120,7 +120,6 @@ class FlightController extends Controller
'saved' => $saved_flights, 'saved' => $saved_flights,
'subfleets' => $this->subfleetRepo->selectBoxList(true), 'subfleets' => $this->subfleetRepo->selectBoxList(true),
'flight_number' => $request->input('flight_number'), 'flight_number' => $request->input('flight_number'),
'flight_type' => $request->input('flight_type'),
'arr_icao' => $request->input('arr_icao'), 'arr_icao' => $request->input('arr_icao'),
'dep_icao' => $request->input('dep_icao'), 'dep_icao' => $request->input('dep_icao'),
'subfleet_id' => $request->input('subfleet_id'), 'subfleet_id' => $request->input('subfleet_id'),
@@ -196,7 +196,6 @@ class ProfileController extends Controller
}); });
$canvas->insert($image); $canvas->insert($image);
Log::info('Uploading avatar into folder '.public_path('uploads/avatars'));
$canvas->save(public_path('uploads/avatars/'.$file_name)); $canvas->save(public_path('uploads/avatars/'.$file_name));
$req_data['avatar'] = $path; $req_data['avatar'] = $path;
@@ -80,29 +80,6 @@ class SimBriefController
]); ]);
} }
/**
* Remove the flight_id from the SimBrief Briefing (to a create a new one)
* or if no pirep_id is attached to the briefing delete it completely
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function remove(Request $request)
{
$sb_pack = SimBrief::find($request->id);
if ($sb_pack) {
if (!$sb_pack->pirep_id) {
$sb_pack->delete();
} else {
$sb_pack->flight_id = null;
$sb_pack->save();
}
}
return redirect(route('frontend.flights.index'));
}
/** /**
* Create a prefile of this PIREP with a given OFP. Then redirect the * Create a prefile of this PIREP with a given OFP. Then redirect the
* user to the newly prefiled PIREP * user to the newly prefiled PIREP
+4 -4
View File
@@ -18,17 +18,17 @@ class Flight extends Resource
private function setFields() private function setFields()
{ {
/** @var \Illuminate\Support\Collection $field_values */ /** @var \Illuminate\Support\Collection $field_values */
$return_values = new stdClass();
$field_values = $this->field_values; $field_values = $this->field_values;
if (empty($field_values) || $field_values->count() === 0) { if (empty($field_values) || $field_values->count() === 0) {
return $return_values; return new stdClass();
} }
$fields = [];
foreach ($field_values as $field) { foreach ($field_values as $field) {
$return_values->{$field->name} = $field->value; $fields[$field->name] = $field->value;
} }
return $return_values; return $fields;
} }
/** /**
-1
View File
@@ -16,7 +16,6 @@ class User extends Resource
'pilot_id' => $this->pilot_id, 'pilot_id' => $this->pilot_id,
'ident' => $this->ident, 'ident' => $this->ident,
'name' => $this->name, 'name' => $this->name,
'name_private' => $this->name_private,
'email' => $this->email, 'email' => $this->email,
'avatar' => $this->resolveAvatarUrl(), 'avatar' => $this->resolveAvatarUrl(),
'rank_id' => $this->rank_id, 'rank_id' => $this->rank_id,
-5
View File
@@ -97,11 +97,6 @@ class Airline extends Model
$this->attributes['icao'] = strtoupper($icao); $this->attributes['icao'] = strtoupper($icao);
} }
public function subfleets()
{
return $this->hasMany(Subfleet::class, 'airline_id');
}
public function flights() public function flights()
{ {
return $this->belongsTo(Flight::class, 'airline_id'); return $this->belongsTo(Flight::class, 'airline_id');
-1
View File
@@ -75,7 +75,6 @@ class Pirep extends Model
'flight_number', 'flight_number',
'route_code', 'route_code',
'route_leg', 'route_leg',
'flight_id',
'dpt_airport_id', 'dpt_airport_id',
'arr_airport_id', 'arr_airport_id',
'alt_airport_id', 'alt_airport_id',
+17 -10
View File
@@ -4,6 +4,14 @@ namespace App\Models;
use App\Contracts\Model; use App\Contracts\Model;
/**
* @property int code
* @property string name
* @property float cost
* @property float price
* @property int capacity
* @property int count
*/
class PirepFare extends Model class PirepFare extends Model
{ {
public $table = 'pirep_fares'; public $table = 'pirep_fares';
@@ -11,26 +19,25 @@ class PirepFare extends Model
protected $fillable = [ protected $fillable = [
'pirep_id', 'pirep_id',
'fare_id', 'code',
'name',
'count', 'count',
'price',
'cost',
'capacity',
]; ];
protected $casts = [ protected $casts = [
'count' => 'integer', 'count' => 'integer',
'price' => 'float',
'cost' => 'float',
'capacity' => 'integer',
]; ];
public static $rules = [ public static $rules = [
'count' => 'required', 'count' => 'required',
]; ];
/**
* Relationships
*/
public function fare()
{
return $this->belongsTo(Fare::class, 'fare_id');
}
public function pirep() public function pirep()
{ {
return $this->belongsTo(Pirep::class, 'pirep_id'); return $this->belongsTo(Pirep::class, 'pirep_id');
+6 -12
View File
@@ -8,28 +8,30 @@ use App\Models\Traits\ExpensableTrait;
use App\Models\Traits\FilesTrait; use App\Models\Traits\FilesTrait;
/** /**
* Class Subfleet
*
* @property int id * @property int id
* @property string type * @property string type
* @property string name * @property string name
* @property int airline_id
* @property int hub_id
* @property string ground_handling_multiplier * @property string ground_handling_multiplier
* @property Fare[] fares * @property Fare[] fares
* @property float cost_block_hour * @property float cost_block_hour
* @property float cost_delay_minute * @property float cost_delay_minute
* @property Airline airline * @property Airline airline
* @property Airport hub * @property int airline_id
*/ */
class Subfleet extends Model class Subfleet extends Model
{ {
use ExpensableTrait; use ExpensableTrait;
use FilesTrait; use FilesTrait;
public $table = 'subfleets';
public $fillable = [ public $fillable = [
'airline_id', 'airline_id',
'hub_id',
'type', 'type',
'name', 'name',
'turn_time',
'fuel_type', 'fuel_type',
'cost_block_hour', 'cost_block_hour',
'cost_delay_minute', 'cost_delay_minute',
@@ -39,8 +41,6 @@ class Subfleet extends Model
'gross_weight', 'gross_weight',
]; ];
public $table = 'subfleets';
public $casts = [ public $casts = [
'airline_id' => 'integer', 'airline_id' => 'integer',
'turn_time' => 'integer', 'turn_time' => 'integer',
@@ -56,7 +56,6 @@ class Subfleet extends Model
public static $rules = [ public static $rules = [
'type' => 'required', 'type' => 'required',
'name' => 'required', 'name' => 'required',
'hub_id' => 'nullable',
'ground_handling_multiplier' => 'nullable|numeric', 'ground_handling_multiplier' => 'nullable|numeric',
]; ];
@@ -83,11 +82,6 @@ class Subfleet extends Model
return $this->belongsTo(Airline::class, 'airline_id'); return $this->belongsTo(Airline::class, 'airline_id');
} }
public function hub()
{
return $this->hasOne(Airport::class, 'id', 'hub_id');
}
public function fares() public function fares()
{ {
return $this->belongsToMany(Fare::class, 'subfleet_fare') return $this->belongsToMany(Fare::class, 'subfleet_fare')
-1
View File
@@ -147,7 +147,6 @@ class RouteServiceProvider extends ServiceProvider
Route::get('simbrief/{id}', 'SimBriefController@briefing')->name('simbrief.briefing'); Route::get('simbrief/{id}', 'SimBriefController@briefing')->name('simbrief.briefing');
Route::get('simbrief/{id}/prefile', 'SimBriefController@prefile')->name('simbrief.prefile'); Route::get('simbrief/{id}/prefile', 'SimBriefController@prefile')->name('simbrief.prefile');
Route::get('simbrief/{id}/cancel', 'SimBriefController@cancel')->name('simbrief.cancel'); Route::get('simbrief/{id}/cancel', 'SimBriefController@cancel')->name('simbrief.cancel');
Route::get('simbrief/{id}/remove', 'SimBriefController@remove')->name('simbrief.remove');
}); });
Route::group([ Route::group([
-5
View File
@@ -20,7 +20,6 @@ class FlightRepository extends Repository implements CacheableInterface
'arr_airport_id', 'arr_airport_id',
'distance', 'distance',
'dpt_airport_id', 'dpt_airport_id',
'flight_type',
'flight_number' => 'like', 'flight_number' => 'like',
'route_code' => 'like', 'route_code' => 'like',
'route_leg' => 'like', 'route_leg' => 'like',
@@ -94,10 +93,6 @@ class FlightRepository extends Repository implements CacheableInterface
$where['flight_number'] = $request->input('flight_number'); $where['flight_number'] = $request->input('flight_number');
} }
if ($request->filled('flight_type')) {
$where['flight_type'] = $request->input('flight_type');
}
if ($request->filled('route_code')) { if ($request->filled('route_code')) {
$where['route_code'] = $request->input('route_code'); $where['route_code'] = $request->input('route_code');
} }
+3 -3
View File
@@ -147,7 +147,7 @@ class FareService extends Service
{ {
if (filled($pivot->price)) { if (filled($pivot->price)) {
if (strpos($pivot->price, '%', -1) !== false) { if (strpos($pivot->price, '%', -1) !== false) {
$fare->price = Math::getPercent($fare->price, $pivot->price); $fare->price = Math::addPercent($fare->price, $pivot->price);
} else { } else {
$fare->price = $pivot->price; $fare->price = $pivot->price;
} }
@@ -155,7 +155,7 @@ class FareService extends Service
if (filled($pivot->cost)) { if (filled($pivot->cost)) {
if (strpos($pivot->cost, '%', -1) !== false) { if (strpos($pivot->cost, '%', -1) !== false) {
$fare->cost = Math::getPercent($fare->cost, $pivot->cost); $fare->cost = Math::addPercent($fare->cost, $pivot->cost);
} else { } else {
$fare->cost = $pivot->cost; $fare->cost = $pivot->cost;
} }
@@ -163,7 +163,7 @@ class FareService extends Service
if (filled($pivot->capacity)) { if (filled($pivot->capacity)) {
if (strpos($pivot->capacity, '%', -1) !== false) { if (strpos($pivot->capacity, '%', -1) !== false) {
$fare->capacity = floor(Math::getPercent($fare->capacity, $pivot->capacity)); $fare->capacity = floor(Math::addPercent($fare->capacity, $pivot->capacity));
} else { } else {
$fare->capacity = floor($pivot->capacity); $fare->capacity = floor($pivot->capacity);
} }
+1 -1
View File
@@ -152,7 +152,7 @@ class PirepFinanceService extends Service
public function payFuelCosts(Pirep $pirep): void public function payFuelCosts(Pirep $pirep): void
{ {
$ap = $pirep->dpt_airport; $ap = $pirep->dpt_airport;
$fuel_used = $pirep->fuel_used; $fuel_used = $pirep->block_fuel;
$debit = Money::createFromAmount($fuel_used * $ap->fuel_jeta_cost); $debit = Money::createFromAmount($fuel_used * $ap->fuel_jeta_cost);
Log::info('Finance: Fuel cost, (fuel='.$fuel_used.', cost='.$ap->fuel_jeta_cost.') D=' Log::info('Finance: Fuel cost, (fuel='.$fuel_used.', cost='.$ap->fuel_jeta_cost.') D='
+4 -11
View File
@@ -19,17 +19,10 @@ class SubfleetImporter extends ImportExport
* Should match the database fields, for the most part * Should match the database fields, for the most part
*/ */
public static $columns = [ public static $columns = [
'airline' => 'required', 'airline' => 'required',
'type' => 'required', 'type' => 'required',
'name' => 'required', 'name' => 'required',
'fuel_type' => 'nullable', 'fares' => 'nullable',
'cost_block_hour' => 'nullable',
'cost_delay_minute' => 'nullable',
'ground_handling_multiplier' => 'nullable',
'cargo_capacity' => 'nullable',
'fuel_capacity' => 'nullable',
'gross_weight' => 'nullable',
'fares' => 'nullable',
]; ];
private $fareSvc; private $fareSvc;
+2 -6
View File
@@ -6,9 +6,6 @@ use App\Contracts\ImportExport;
use App\Contracts\Service; use App\Contracts\Service;
use App\Models\Airport; use App\Models\Airport;
use App\Models\Expense; use App\Models\Expense;
use App\Models\Fare;
use App\Models\Flight;
use App\Models\FlightFieldValue;
use App\Repositories\FlightRepository; use App\Repositories\FlightRepository;
use App\Services\ImportExport\AircraftImporter; use App\Services\ImportExport\AircraftImporter;
use App\Services\ImportExport\AirportImporter; use App\Services\ImportExport\AirportImporter;
@@ -212,7 +209,7 @@ class ImportService extends Service
public function importFares($csv_file, bool $delete_previous = true) public function importFares($csv_file, bool $delete_previous = true)
{ {
if ($delete_previous) { if ($delete_previous) {
Fare::truncate(); // TODO: Delete all from: fares
} }
$importer = new FareImporter(); $importer = new FareImporter();
@@ -232,8 +229,7 @@ class ImportService extends Service
public function importFlights($csv_file, bool $delete_previous = true) public function importFlights($csv_file, bool $delete_previous = true)
{ {
if ($delete_previous) { if ($delete_previous) {
Flight::truncate(); // TODO: Delete all from: flights, flight_field_values
FlightFieldValue::truncate();
} }
$importer = new FlightImporter(); $importer = new FlightImporter();
+4 -7
View File
@@ -27,19 +27,18 @@ class Math
return $override_rate; return $override_rate;
} }
// It is a percent, so apply it return static::addPercent($base_rate, $override_rate);
return static::getPercent($base_rate, $override_rate);
} }
/** /**
* Apply a percentage to a number * Add/subtract a percentage to a number
* *
* @param $number * @param $number
* @param $percent * @param $percent
* *
* @return float * @return float
*/ */
public static function getPercent($number, $percent): float public static function addPercent($number, $percent): float
{ {
if (!is_numeric($number)) { if (!is_numeric($number)) {
$number = (float) $number; $number = (float) $number;
@@ -49,8 +48,6 @@ class Math
$percent = (float) $percent; $percent = (float) $percent;
} }
$val = $number * ($percent / 100); return $number + ($number * ($percent / 100));
return $val;
} }
} }
+5 -8
View File
@@ -172,11 +172,11 @@ class Metar implements \ArrayAccess
'NSW' => 'no significant weather are observed', 'NSW' => 'no significant weather are observed',
'NSC' => 'no significant clouds are observed', 'NSC' => 'no significant clouds are observed',
'NCD' => 'nil cloud detected', 'NCD' => 'nil cloud detected',
'SKC' => 'sky is clear', 'SKC' => 'no significant changes expected',
'CLR' => 'clear skies', 'CLR' => 'clear skies',
'NOBS' => 'no observation', 'NOBS' => 'no observation',
// //
'FEW' => 'few', 'FEW' => 'a few',
'SCT' => 'scattered', 'SCT' => 'scattered',
'BKN' => 'broken sky', 'BKN' => 'broken sky',
'OVC' => 'overcast sky', 'OVC' => 'overcast sky',
@@ -523,8 +523,6 @@ class Metar implements \ArrayAccess
// Finally determine if it's VFR or IFR conditions // Finally determine if it's VFR or IFR conditions
// https://www.aviationweather.gov/cva/help // https://www.aviationweather.gov/cva/help
// https://www.skybrary.aero/index.php/Visual_Meteorological_Conditions_(VMC)
// This may be changed to ICAO standards as VMC and IMC
$this->result['category'] = 'VFR'; $this->result['category'] = 'VFR';
if (array_key_exists('cavok', $this->result) && $this->result['cavok']) { if (array_key_exists('cavok', $this->result) && $this->result['cavok']) {
@@ -533,7 +531,7 @@ class Metar implements \ArrayAccess
/* @noinspection NestedPositiveIfStatementsInspection */ /* @noinspection NestedPositiveIfStatementsInspection */
if (array_key_exists('cloud_height', $this->result) && $this->result['cloud_height'] !== null) { if (array_key_exists('cloud_height', $this->result) && $this->result['cloud_height'] !== null) {
if ($this->result['cloud_height']['ft'] > 3000 if ($this->result['cloud_height']['ft'] > 3000
&& (empty($this->result['visibility']) || $this->result['visibility']['km'] > 5)) { && (empty($this->result['visibility']) || $this->result['visibility']['nmi'] > 5)) {
$this->result['category'] = 'VFR'; $this->result['category'] = 'VFR';
} else { } else {
$this->result['category'] = 'IFR'; $this->result['category'] = 'IFR';
@@ -1233,11 +1231,10 @@ class Metar implements \ArrayAccess
$pressure = (int) $found[2]; $pressure = (int) $found[2];
if ($found[1] === 'A') { if ($found[1] === 'A') {
$pressure /= 100; $pressure /= 100;
$this->set_result_value('barometer', $this->createPressure($pressure, 'inHg'));
} else {
$this->set_result_value('barometer', $this->createPressure($pressure, 'hPa'));
} }
$this->set_result_value('barometer', $this->createPressure($pressure, 'hPa'));
$this->method++; $this->method++;
return true; return true;
} }
-1
View File
@@ -14,7 +14,6 @@ class LiveMap extends Widget
protected $config = [ protected $config = [
'height' => '800px', 'height' => '800px',
'width' => '100%', 'width' => '100%',
'table' => true,
]; ];
/** /**
-48
View File
@@ -1,7 +1,6 @@
<?php <?php
use App\Exceptions\SettingNotFound; use App\Exceptions\SettingNotFound;
use App\Repositories\KvpRepository;
use App\Repositories\SettingRepository; use App\Repositories\SettingRepository;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\Factory;
@@ -187,53 +186,6 @@ if (!function_exists('setting_save')) {
} }
} }
/*
* Shortcut for retrieving a KVP
*/
if (!function_exists('kvp')) {
/**
* Read a setting from the KVP repository
*
* @param string $key
* @param string|null $default
*
* @return mixed|null
*/
function kvp(string $key, $default = null)
{
/** @var KvpRepository $kvpRepo */
$kvpRepo = app(KvpRepository::class);
try {
$value = $kvpRepo->get($key, $default);
} catch (Exception $e) {
return $default;
}
return $value;
}
}
/*
* Shortcut for retrieving a KVP
*/
if (!function_exists('kvp_save')) {
/**
* Read a setting from the KVP repository
*
* @param string $key
* @param string $value
*
* @return mixed|null
*/
function kvp_save(string $key, string $value)
{
/** @var KvpRepository $kvpRepo */
$kvpRepo = app(KvpRepository::class);
$kvpRepo->save($key, $value);
}
}
/* /*
* Wrap the asset URL in the publicBaseUrl that's been * Wrap the asset URL in the publicBaseUrl that's been
* set * set
+6 -6
View File
@@ -73,7 +73,6 @@ class application extends Illuminate\Foundation\Application
public function setPublicPath($publicDirPath) public function setPublicPath($publicDirPath)
{ {
$this->publicDirPath = $publicDirPath; $this->publicDirPath = $publicDirPath;
$this->instance('path.public', $publicDirPath);
} }
/** /**
@@ -104,6 +103,11 @@ class application extends Illuminate\Foundation\Application
return $this->basePath.DS.'config'.($path ? DS.$path : $path); return $this->basePath.DS.'config'.($path ? DS.$path : $path);
} }
/*public function environmentPath()
{
return $this->environmentPath ?: $this->basePath;
}*/
public function langPath() public function langPath()
{ {
return $this->resourcePath().DS.'lang'; return $this->resourcePath().DS.'lang';
@@ -111,11 +115,7 @@ class application extends Illuminate\Foundation\Application
public function publicPath() public function publicPath()
{ {
if (empty($this->publicDirPath)) { return $this->publicDirPath ?: $this->basePath.DS.'public';
return $this->basePath.DS.'public';
}
return $this->publicDirPath;
} }
public function resourcePath($path = '') public function resourcePath($path = '')
+303 -666
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -13,7 +13,7 @@
"@turf/center": "^6.0.1", "@turf/center": "^6.0.1",
"acorn": "^7.4.1", "acorn": "^7.4.1",
"animate.css": "~3.6", "animate.css": "~3.6",
"axios": "^0.21.1", "axios": "^0.18.1",
"bootstrap": "~4.3", "bootstrap": "~4.3",
"bootstrap-sass": "^3.4.1", "bootstrap-sass": "^3.4.1",
"bootstrap3": "npm:bootstrap@~3.4", "bootstrap3": "npm:bootstrap@~3.4",
@@ -46,7 +46,7 @@
"select2": "^4.0.13", "select2": "^4.0.13",
"ssri": "^5.3.0", "ssri": "^5.3.0",
"tar": ">=4.4.2", "tar": ">=4.4.2",
"webpack": "^5.0.0", "webpack": "^4.44.2",
"webpack-cli": "^3.3.12", "webpack-cli": "^3.3.12",
"x-editable": "1.5.1" "x-editable": "1.5.1"
}, },
@@ -96,6 +96,7 @@
<div class="form-group col-sm-12"> <div class="form-group col-sm-12">
<div class="pull-right"> <div class="pull-right">
{{ Form::button('Save', ['type' => 'submit', 'class' => 'btn btn-success']) }} {{ Form::button('Save', ['type' => 'submit', 'class' => 'btn btn-success']) }}
<a href="{{ route('admin.aircraft.index') }}" class="btn btn-default">Cancel</a>
</div> </div>
</div> </div>
</div> </div>
@@ -3,9 +3,7 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div class="form-group"> <div class="form-group">
{{ Form::open(['route' => 'admin.flights.index', 'method' => 'GET', 'class'=>'form-inline pull-right']) }} {{ Form::open(['route' => 'admin.flights.index', 'method' => 'GET', 'class'=>'form-inline pull-right']) }}
&nbsp;&nbsp;
{{ Form::label('airlines', 'Airline:') }}
{{ Form::select('airline_id', $airlines, null , ['class' => 'form-control select2']) }}
{{ Form::label('flight_number', 'Flight Number:') }} {{ Form::label('flight_number', 'Flight Number:') }}
{{ Form::text('flight_number', null, ['class' => 'form-control']) }} {{ Form::text('flight_number', null, ['class' => 'form-control']) }}
&nbsp; &nbsp;
+9 -11
View File
@@ -2,18 +2,16 @@
@section('title', 'Pilot Reports') @section('title', 'Pilot Reports')
@section('actions') @section('actions')
<li><a href="{{ route('admin.pirepfields.index') }}"><i class="ti-menu-alt"></i>PIREP Fields</a></li> <li><a href="{{ route('admin.pirepfields.index') }}"><i class="ti-menu-alt"></i>PIREP Fields</a></li>
<li><a href="{{ route('admin.pireps.index') }}?search=state:{{ \App\Models\Enums\PirepState::PENDING }}"><i class="ti-plus"></i>Pending</a></li> <li><a href="{{ route('admin.pireps.index') }}?search=status:{{ \App\Models\Enums\PirepState::PENDING }}"><i class="ti-plus"></i>Pending</a></li>
<li><a href="{{ route('admin.pireps.index') }}?search=state:{{ \App\Models\Enums\PirepState::REJECTED }}"><i class="ti-plus"></i>Rejected</a></li> <li><a href="{{ route('admin.pireps.index') }}"><i class="ti-plus"></i>View All</a></li>
<li><a href="{{ route('admin.pireps.index') }}?search=state:{{ \App\Models\Enums\PirepState::ACCEPTED }}"><i class="ti-plus"></i>Accepted</a></li>
<li><a href="{{ route('admin.pireps.index') }}"><i class="ti-plus"></i>View All</a></li>
@endsection @endsection
@section('content') @section('content')
<div class="row" style="width: 100%"> @include('admin.pireps.table')
@include('admin.pireps.table') <div class="row">
</div> <div class="col-12 text-center">
<div class="row text-center" style="width: 100%"> {{ $pireps->links('admin.pagination.default') }}
{{ $pireps->links('admin.pagination.default') }} </div>
</div> </div>
@endsection @endsection
@include('admin.pireps.scripts') @include('admin.pireps.scripts')
@@ -1,67 +1,87 @@
<div id="pirep_{{ $pirep->id }}_container" class="card border-blue-bottom pirep_card_container"> <div id="pirep_{{ $pirep->id }}_container">
<div class="card-block" style="min-height: 0px"> <div class="card border-blue-bottom pirep_card_container">
<div class="row"> <div class="card-block" style="min-height: 0px">
<div class="col-sm-2 text-center"> <div class="row">
<h5><a class="text-c" href="{{ route('admin.pireps.edit', [$pirep->id]) }}">{{ $pirep->airline->code }}{{ $pirep->ident }}</a></h5> <div class="col-sm-2 text-center">
<div id="pirep_{{ $pirep->id }}_status_container"> <h5>
@php <a class="text-c"
$PirepStateClass = "badge badge-info" ; href="{{ route('admin.pireps.edit', [$pirep->id]) }}">
if($pirep->state === PirepState::PENDING ) { $PirepStateClass = "badge badge-warning" ; } {{ $pirep->airline->code }}{{ $pirep->ident }}
if($pirep->state === PirepState::ACCEPTED ) { $PirepStateClass = "badge badge-success" ; } </a>
if($pirep->state === PirepState::REJECTED ) { $PirepStateClass = "badge badge-danger" ; } </h5>
@endphp <div id="pirep_{{ $pirep->id }}_status_container">
<div class="{{ $PirepStateClass }}">{{ PirepState::label($pirep->state) }}</div> @if($pirep->state === PirepState::PENDING)
<div class="badge badge-warning">
@elseif($pirep->state === PirepState::ACCEPTED)
<div class="badge badge-success">
@elseif($pirep->state === PirepState::REJECTED)
<div class="badge badge-danger">
@else
<div class="badge badge-info">
@endif
{{ PirepState::label($pirep->state) }}</div>
</div>
</div>
<div class="col-sm-10">
<div class="row">
<div class="col-sm-6">
<div>
<span class="description">
<b>DEP</b>&nbsp;
{{ $pirep->dpt_airport_id }}&nbsp;
<b>ARR</b>&nbsp;
{{ $pirep->arr_airport_id }}&nbsp;
</span>
</div>
<div>
<span class="description"><b>Flight Time</b>&nbsp;
@minutestotime($pirep->flight_time)
</span>
</div>
@if($pirep->aircraft)
<div><span class="description"><b>Aircraft</b>&nbsp;
{{ $pirep->aircraft->registration }}
({{ $pirep->aircraft->name }})
</span>
</div>
@endif
@if(filled($pirep->level))
<div>
<span class="description"><b>Flight Level</b>&nbsp;
{{ $pirep->level }}
</span>
</div>
@endif
<div>
<span class="description"><b>Filed Using</b>&nbsp;
{{ PirepSource::label($pirep->source) }}
@if(filled($pirep->source_name))
({{ $pirep->source_name }})
@endif
</span>
</div>
<div>
<span class="description"><b>File Date</b>&nbsp;
{{ show_datetime($pirep->created_at) }}
</span>
</div>
</div>
<div class="col-sm-6">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div id="pirep_{{ $pirep->id }}_actionbar" class="pull-right">
@include('admin.pireps.actions', ['pirep' => $pirep, 'on_edit_page' => false])
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
<div class="col-sm-10"> </div>
<div class="row"> </div>
<div class="col-sm-6">
<div>
<span class="description">
<b>DEP</b>&nbsp;{{ $pirep->dpt_airport_id }}&nbsp;
<b>ARR</b>&nbsp;{{ $pirep->arr_airport_id }}&nbsp;
</span>
</div>
<div>
<span class="description">
<b>Flight Time</b>&nbsp; @minutestotime($pirep->flight_time)
</span>
</div>
@if($pirep->aircraft)
<div>
<span class="description">
<b>Aircraft</b>&nbsp;{{ $pirep->aircraft->registration }} ({{ $pirep->aircraft->name }})
</span>
</div>
@endif
@if(filled($pirep->level))
<div>
<span class="description">
<b>Flight Level</b>&nbsp;{{ $pirep->level }}
</span>
</div>
@endif
<div>
<span class="description">
<b>Filed Using</b>&nbsp; {{ PirepSource::label($pirep->source) }}
@if(filled($pirep->source_name)) ({{ $pirep->source_name }}) @endif
</span>
</div>
<div>
<span class="description">
<b>File Date</b>&nbsp; {{ show_datetime($pirep->created_at) }}
</span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div id="pirep_{{ $pirep->id }}_actionbar" class="pull-right">
@include('admin.pireps.actions', ['pirep' => $pirep, 'on_edit_page' => false])
</div>
</div>
</div>
</div>
</div> </div>
@@ -12,25 +12,19 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="form-group col-sm-3"> <div class="form-group col-sm-4">
{{ Form::label('airline_id', 'Airline:') }} {{ Form::label('airline_id', 'Airline:') }}
{{ Form::select('airline_id', $airlines, null , ['class' => 'form-control select2']) }} {{ Form::select('airline_id', $airlines, null , ['class' => 'form-control select2']) }}
<p class="text-danger">{{ $errors->first('airline_id') }}</p> <p class="text-danger">{{ $errors->first('airline_id') }}</p>
</div> </div>
<div class="form-group col-sm-3"> <div class="form-group col-sm-4">
{{ Form::label('hub_id', 'Main Hub:') }}
{{ Form::select('hub_id', $hubs, null , ['class' => 'form-control select2']) }}
<p class="text-danger">{{ $errors->first('hub_id') }}</p>
</div>
<div class="form-group col-sm-3">
{{ Form::label('type', 'Type:') }} {{ Form::label('type', 'Type:') }}
{{ Form::text('type', null, ['class' => 'form-control']) }} {{ Form::text('type', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('type') }}</p> <p class="text-danger">{{ $errors->first('type') }}</p>
</div> </div>
<div class="form-group col-sm-3"> <div class="form-group col-sm-4">
{{ Form::label('name', 'Name:') }} {{ Form::label('name', 'Name:') }}
{{ Form::text('name', null, ['class' => 'form-control']) }} {{ Form::text('name', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('name') }}</p> <p class="text-danger">{{ $errors->first('name') }}</p>
@@ -1,4 +1,4 @@
@foreach (collect(session('flash_notification', collect()))->toArray() as $message) @foreach (session('flash_notification', collect())->toArray() as $message)
@if ($message['overlay']) @if ($message['overlay'])
@include('flash::modal', [ @include('flash::modal', [
'modalClass' => 'flash-modal', 'modalClass' => 'flash-modal',
@@ -7,33 +7,6 @@
'method' => 'GET', 'method' => 'GET',
'class'=>'form-inline' 'class'=>'form-inline'
]) }} ]) }}
<div class="mt-1">
<p>@lang('common.airline')</p>
{{ Form::select('airline_id', $airlines, null , ['class' => 'form-control select2']) }}
</div>
<div class="form-group">
<label>@lang('flights.flighttype')</label>
<select id="flight_type" name="flight_type" class="custom-select select2">
<option value=""></option>
<option value="J">@lang('flights.type.pass_scheduled')</option>
<option value="G">@lang('flights.type.pass_addtl')</option>
<option value="C">@lang('flights.type.charter_pass_only')</option>
<option value="O">@lang('flights.type.charter_special')</option>
<option value="E">@lang('flights.type.special_vip')</option>
<option value="F">@lang('flights.type.cargo_scheduled')</option>
<option value="A">@lang('flights.type.addtl_cargo_mail')</option>
<option value="H">@lang('flights.type.charter_cargo')</option>
<option value="M">@lang('flights.type.mail_service')</option>
<option value="I">@lang('flights.type.ambulance')</option>
<option value="K">@lang('flights.type.training_flight')</option>
<option value="P">@lang('flights.type.positioning')</option>
<option value="T">@lang('flights.type.technical_test')</option>
<option value="X">@lang('flights.type.technical_stop')</option>
<option value="W">@lang('flights.type.military')</option>
</select>
</div>
<div> <div>
<p>@lang('flights.flightnumber')</p> <p>@lang('flights.flightnumber')</p>
{{ Form::text('flight_number', null, ['class' => 'form-control']) }} {{ Form::text('flight_number', null, ['class' => 'form-control']) }}
@@ -3,7 +3,7 @@
@section('content') @section('content')
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-9">
<h2>{{ $simbrief->xml->general->icao_airline }}{{ $simbrief->xml->general->flight_number }} <h2>{{ $simbrief->xml->general->icao_airline }}{{ $simbrief->xml->general->flight_number }}
: {{ $simbrief->xml->origin->icao_code }} to {{ $simbrief->xml->destination->icao_code }}</h2> : {{ $simbrief->xml->origin->icao_code }} to {{ $simbrief->xml->destination->icao_code }}</h2>
</div> </div>
@@ -14,11 +14,6 @@
href="{{ url(route('frontend.simbrief.prefile', [$simbrief->id])) }}">Prefile PIREP</a> href="{{ url(route('frontend.simbrief.prefile', [$simbrief->id])) }}">Prefile PIREP</a>
@endif @endif
</div> </div>
<div class="col-sm-3">
<a class="btn btn-primary pull-right btn-lg"
style="margin-top: -10px;margin-bottom: 5px"
href="{{ url(route('frontend.simbrief.remove', [$simbrief->id])) }}">Generate New OFP</a>
</div>
</div> </div>
<div class="row"> <div class="row">
@@ -129,29 +124,22 @@
</div> </div>
<div class="form-container"> <div class="form-container">
<h6><i class="fas fa-info-circle"></i>&nbsp;Weather</h6> <h6><i class="fas fa-info-circle"></i>
&nbsp;Weather
</h6>
<div class="form-container-body"> <div class="form-container-body">
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Departure METAR</p> <div><p class="small text-uppercase pb-sm-0 mb-sm-1">Departure METAR</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->orig_metar }}</p> <p class="border border-dark rounded p-1 small text-monospace">
</div> {{ $simbrief->xml->weather->orig_metar }}</p>
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Departure TAF</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->orig_taf }}</p>
</div> </div>
<hr/> <hr/>
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Destination METAR</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->dest_metar }}</p> <div><p class="small text-uppercase pb-sm-0 mb-sm-1">Arrival METAR</p>
</div> <p class="border border-dark rounded p-1 small text-monospace">
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Destination TAF</p> {{ $simbrief->xml->weather->dest_metar }}</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->dest_taf }}</p>
</div>
<hr/>
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Alternate METAR</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->altn_metar }}</p>
</div>
<div><p class="small text-uppercase pb-sm-0 mb-sm-1">Alternate TAF</p>
<p class="border border-dark rounded p-1 small text-monospace">{{ $simbrief->xml->weather->altn_taf }}</p>
</div> </div>
</div> </div>
</div> </div>
@@ -181,72 +169,12 @@
</div> </div>
</div> </div>
</div> </div>
<div class="form-container">
<h6><i class="fas fa-info-circle"></i>&nbsp;Prefile ATC Flight Plan</h6>
<div class="form-container-body">
<div class="row">
<div class="col-4" align="center">
@php
$str = $simbrief->xml->aircraft->equip ;
$wc = stripos($str,"-");
$tr = stripos($str,"/");
$wakecat = substr($str,0,$wc);
$equipment = substr($str,$wc+1,$tr-2);
$transponder = substr($str,$tr+1);
function secstohhmm($seconds) {
$seconds = round($seconds);
$hhmm = sprintf('%02d%02d', ($seconds/ 3600),($seconds/ 60 % 60));
echo $hhmm ;
}
@endphp
<form action="https://fpl.ivao.aero/api/fp/load" method="POST" target="_blank">
<input type="hidden" name="CALLSIGN" value="{{ $simbrief->xml->atc->callsign }}" />
<input type="hidden" name="RULES" value="I" />
<input type="hidden" name="FLIGHTTYPE" value="N" />
<input type="hidden" name="NUMBER" value="1" />
<input type="hidden" name="ACTYPE" value="{{ $simbrief->xml->aircraft->icaocode }}" />
<input type="hidden" name="WAKECAT" value="{{ $wakecat }}" />
<input type="hidden" name="EQUIPMENT" value="{{ $equipment }}" />
<input type="hidden" name="TRANSPONDER" value="{{ $transponder }}" />
<input type="hidden" name="DEPICAO" value="{{ $simbrief->xml->origin->icao_code}}" />
<input type="hidden" name="DEPTIME" value="{{ date('Hi', $simbrief->xml->times->est_out->__toString())."" }}" />
<input type="hidden" name="SPEEDTYPE" value="{{ $simbrief->xml->atc->initial_spd_unit }}" />
<input type="hidden" name="SPEED" value="{{ $simbrief->xml->atc->initial_spd }}" />
<input type="hidden" name="LEVELTYPE" value="{{ $simbrief->xml->atc->initial_alt_unit }}" />
<input type="hidden" name="LEVEL" value="{{ $simbrief->xml->atc->initial_alt }}" />
<input type="hidden" name="ROUTE" value="{{ $simbrief->xml->general->route_ifps }}" />
<input type="hidden" name="DESTICAO" value="{{ $simbrief->xml->destination->icao_code }}" />
<input type="hidden" name="EET" value="@php secstohhmm($simbrief->xml->times->est_time_enroute) @endphp" />
<input type="hidden" name="ALTICAO" value="{{ $simbrief->xml->alternate->icao_code}}" />
<input type="hidden" name="ALTICAO2" value="{{ $simbrief->xml->alternate2->icao_code}}" />
<input type="hidden" name="OTHER" value="{{ $simbrief->xml->atc->section18 }}" />
<input type="hidden" name="ENDURANCE" value="@php secstohhmm($simbrief->xml->times->endurance) @endphp" />
<input type="hidden" name="POB" value="{{ $simbrief->xml->weights->pax_count }}" />
<input id="ivao_prefile" type="submit" class="btn btn-primary" value="File ATC on IVAO" />
</form>
</div>
<div class="col-4" align="center">
<form action="https://my.vatsim.net/pilots/flightplan" method="GET" target="_blank">
<input type="hidden" name="raw" value="{{ $simbrief->xml->atc->flightplan_text }}">
<input type="hidden" name="fuel_time" value="@php secstohhmm($simbrief->xml->times->endurance) @endphp">
<input type="hidden" name="speed" value="{{ $simbrief->xml->atc->initial_spd }}">
<input type="hidden" name="altitude" value="{{ $simbrief->xml->atc->initial_alt }}">
<input id="vatsim_prefile" type="submit" class="btn btn-primary" value="File ATC on VATSIM"/>
</form>
</div>
<div class="col-4" align="center">
<a href="http://skyvector.com/?chart=304&amp;fpl={{ $simbrief->xml->origin->icao_code}} {{ $simbrief->xml->general->route }} {{ $simbrief->xml->destination->icao_code}}" target="_blank" class="btn btn-info">View Route At SkyVector</a>
</div>
</div>
</div>
</div>
<div class="form-container"> <div class="form-container">
<h6><i class="fas fa-info-circle"></i> <h6><i class="fas fa-info-circle"></i>
&nbsp;OFP &nbsp;OFP
</h6> </h6>
<div class="form-container-body border border-dark"> <div class="form-container-body border border-dark">
<div class="overflow-auto" style="height: 750px;"> <div class="overflow-auto" style="height: 600px;">
{!! $simbrief->xml->text->plan_html !!} {!! $simbrief->xml->text->plan_html !!}
</div> </div>
</div> </div>
@@ -2,14 +2,14 @@
@foreach($pireps as $p) @foreach($pireps as $p)
<tr> <tr>
<td style="padding-right: 10px;"> <td style="padding-right: 10px;">
<span class="title">{{ $p->airline->code }} {{ $p->flight_number }}</span> <span class="title">{{ $p->airline->code }}</span>
</td> </td>
<td> <td>
<a href="{{route('frontend.airports.show', [$p->dpt_airport_id])}}">{{$p->dpt_airport_id}}</a> <a href="{{route('frontend.airports.show', [$p->dpt_airport_id])}}">{{$p->dpt_airport_id}}</a>
&nbsp;-&nbsp; &nbsp;-&nbsp;
<a href="{{route('frontend.airports.show', [$p->arr_airport_id])}}">{{$p->arr_airport_id}}</a>&nbsp; <a href="{{route('frontend.airports.show', [$p->arr_airport_id])}}">{{$p->arr_airport_id}}</a>&nbsp;
@if(!empty($p->aircraft)) @if(!empty($p->aircraft))
{{ optional($p->aircraft)->registration }} ({{ $p->aircraft->icao }}) {{ optional($p->aircraft)->name }}
@endif @endif
</td> </td>
</tr> </tr>
@@ -64,7 +64,6 @@
</div> </div>
</div> </div>
@if($config['table'] === true)
<div class="clearfix" style="padding-top: 25px"></div> <div class="clearfix" style="padding-top: 25px"></div>
{{-- {{--
@@ -96,7 +95,7 @@ and being mindful of the rivets bindings
{{-- Show the full airport name on hover --}} {{-- Show the full airport name on hover --}}
<td><span rv-title="pirep.dpt_airport.name">{ pirep.dpt_airport.icao }</span></td> <td><span rv-title="pirep.dpt_airport.name">{ pirep.dpt_airport.icao }</span></td>
<td><span rv-title="pirep.arr_airport.name">{ pirep.arr_airport.icao }</span></td> <td><span rv-title="pirep.arr_airport.name">{ pirep.arr_airport.icao }</span></td>
<td>{ pirep.aircraft.registration }</td> <td>{ pirep.aircraft.name }</td>
<td>{ pirep.position.altitude }</td> <td>{ pirep.position.altitude }</td>
<td>{ pirep.position.gs }</td> <td>{ pirep.position.gs }</td>
<td>{ pirep.position.distance.{{setting('units.distance')}} | fallback 0 } / <td>{ pirep.position.distance.{{setting('units.distance')}} | fallback 0 } /
@@ -108,7 +107,6 @@ and being mindful of the rivets bindings
</table> </table>
</div> </div>
</div> </div>
@endif
@section('scripts') @section('scripts')
<script> <script>
@@ -10,87 +10,71 @@ https://api.checkwx.com/#metar-decoded
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
<td>@lang('widgets.weather.conditions')</td> <td>@lang('widgets.weather.conditions')</td>
<td>{{ $metar['category'] }}</td> <td>
{{ $metar['category'] }}
{{ $metar['temperature'][$unit_temp] }}
°{{strtoupper($unit_temp)}}
@if($metar['visibility'])
, @lang('widgets.weather.visibility') {{ $metar['visibility'][$unit_dist] }} {{$unit_dist}}
@endif
@if($metar['humidity'])
, {{ $metar['humidity'] }}% @lang('widgets.weather.humidity')
@endif
@if($metar['dew_point'])
, @lang('widgets.weather.dewpoint')
{{ $metar['dew_point'][$unit_temp] }}
°{{strtoupper($unit_temp)}}
@endif
</td>
</tr> </tr>
<tr>
<td>@lang('widgets.weather.barometer')</td>
<td>
{{ number_format($metar['barometer']['hPa'], 2) }} hPa
/ {{ number_format($metar['barometer']['inHg'], 2) }} inHg
</td>
</tr>
@if($metar['clouds'])
<tr>
<td>@lang('widgets.weather.clouds')</td>
<td>
@if($unit_alt === 'ft')
{{$metar['clouds_report_ft']}}
@else
{{ $metar['clouds_report'] }}
@endif
</td>
</tr>
@endif
<tr> <tr>
<td>@lang('widgets.weather.wind')</td> <td>@lang('widgets.weather.wind')</td>
<td> <td>
@if($metar['wind_speed'] < '1') Calm @else {{ $metar['wind_speed'] }} kts @lang('common.from') {{ $metar['wind_direction_label'] }} ({{ $metar['wind_direction']}}°) @endif {{$metar['wind_speed']}} kts @lang('common.from') {{$metar['wind_direction_label']}}
@if($metar['wind_gust_speed']) @lang('widgets.weather.guststo') {{ $metar['wind_gust_speed'] }} @endif ({{$metar['wind_direction']}}°)
@if($metar['wind_gust_speed'])
@lang('widgets.weather.guststo') {{ $metar['wind_gust_speed'] }}
@endif
</td> </td>
</tr> </tr>
@if($metar['visibility'])
<tr> <tr>
<td>Visibility</td> <td>@lang('common.metar')</td>
<td>{{ $metar['visibility'][$unit_dist] }} {{$unit_dist}}</td> <td>
<div style="line-height:1.5em;min-height: 3em;">
{{ $metar['raw'] }}
</div>
</td>
</tr> </tr>
@endif
@if($metar['runways_visual_range'])
<tr>
<td>Runway Visual Range</td>
<td>
@foreach($metar['runways_visual_range'] as $rvr)
<b>RWY{{ $rvr['runway'] }}</b>; {{ $rvr['report'] }}<br>
@endforeach
</td>
</tr>
@endif
@if($metar['present_weather_report'] <> 'Dry')
<tr>
<td>Phenomena</td>
<td>{{ $metar['present_weather_report'] }}</td>
</tr>
@endif
@if($metar['clouds'] || $metar['cavok'])
<tr>
<td>@lang('widgets.weather.clouds')</td>
<td>
@if($unit_alt === 'ft') {{ $metar['clouds_report_ft'] }} @else {{ $metar['clouds_report'] }} @endif
@if($metar['cavok'] == 1) Ceiling and Visibility OK @endif
</td>
</tr>
@endif
<tr>
<td>Temperature</td>
<td>
@if($metar['temperature'][$unit_temp]) {{ $metar['temperature'][$unit_temp] }} @else 0 @endif °{{strtoupper($unit_temp)}}
@if($metar['dew_point']), @lang('widgets.weather.dewpoint') @if($metar['dew_point'][$unit_temp]) {{ $metar['dew_point'][$unit_temp] }} @else 0 @endif °{{strtoupper($unit_temp)}} @endif
@if($metar['humidity']), @lang('widgets.weather.humidity') {{ $metar['humidity'] }}% @endif
</td>
</tr>
<tr>
<td>@lang('widgets.weather.barometer')</td>
<td>{{ number_format($metar['barometer']['hPa']) }} hPa / {{ number_format($metar['barometer']['inHg'], 2) }} inHg</td>
</tr>
@if($metar['recent_weather_report'])
<tr>
<td>Recent Phenomena</td>
<td>{{ $metar['recent_weather_report'] }}</td>
</tr>
@endif
@if($metar['runways_report'])
<tr>
<td>Runway Condition</td>
<td>
@foreach($metar['runways_report'] as $runway)
<b>RWY{{ $runway['runway'] }}</b>; {{ $runway['report'] }}<br>
@endforeach
</td>
</tr>
@endif
@if($metar['remarks']) @if($metar['remarks'])
<tr> <tr>
<td>@lang('widgets.weather.remarks')</td> <td>@lang('widgets.weather.remarks')</td>
<td>{{ $metar['remarks'] }}</td> <td>
{{ $metar['remarks'] }}
</td>
</tr> </tr>
@endif @endif
<tr> <tr>
<td>@lang('widgets.weather.updated')</td> <td>@lang('widgets.weather.updated')</td>
<td>{{$metar['observed_time']}} ({{$metar['observed_age']}})</td> <td>{{$metar['observed_time']}} ({{$metar['observed_age']}})</td>
</tr> </tr>
<tr>
<td>@lang('common.metar')</td>
<td>{{ $metar['raw'] }}</td>
</tr>
</table> </table>
@endif @endif
+44 -13
View File
@@ -165,6 +165,37 @@ class FinanceTest extends TestCase
return [$user, $pirep, $fares]; return [$user, $pirep, $fares];
} }
/*public function testFlightFaresNoOverride()
{
$flight = factory(Flight::class)->create();
$fare = factory(Fare::class)->create();
$this->fareSvc->setForFlight($flight, $fare);
$subfleet_fares = $this->fareSvc->get($flight);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals($fare->price, $subfleet_fares->get(0)->price);
$this->assertEquals($fare->capacity, $subfleet_fares->get(0)->capacity);
//
// set an override now
//
$this->fareSvc->setForFlight($flight, $fare, [
'price' => 50, 'capacity' => 400,
]);
// look for them again
$subfleet_fares = $this->fareSvc->getForFlight($flight);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals(50, $subfleet_fares[0]->price);
$this->assertEquals(400, $subfleet_fares[0]->capacity);
// delete
$this->fareSvc->delFareFromFlight($flight, $fare);
$this->assertCount(0, $this->fareSvc->getForFlight($flight));
}*/
/** /**
* Make sure that the API is returning the fares properly for a subfleet on a flight * Make sure that the API is returning the fares properly for a subfleet on a flight
* https://github.com/nabeelio/phpvms/issues/899 * https://github.com/nabeelio/phpvms/issues/899
@@ -324,13 +355,13 @@ class FinanceTest extends TestCase
$subfleet = factory(Subfleet::class)->create(); $subfleet = factory(Subfleet::class)->create();
$this->fleetSvc->addSubfleetToFlight($subfleet, $flight); $this->fleetSvc->addSubfleetToFlight($subfleet, $flight);
$percent_incr = '120%'; $percent_incr = '20%';
$percent_decr = '80%'; $percent_decr = '-20%';
$percent_200 = '200%'; $percent_200 = '200%';
$new_price = Math::getPercent($fare->price, $percent_incr); $new_price = Math::addPercent($fare->price, $percent_incr);
$new_cost = Math::getPercent($fare->cost, $percent_decr); $new_cost = Math::addPercent($fare->cost, $percent_decr);
$new_capacity = Math::getPercent($fare->capacity, $percent_200); $new_capacity = Math::addPercent($fare->capacity, $percent_200);
$this->fareSvc->setForFlight($flight, $fare, [ $this->fareSvc->setForFlight($flight, $fare, [
'price' => $percent_incr, 'price' => $percent_incr,
@@ -424,9 +455,9 @@ class FinanceTest extends TestCase
$percent_decr = '-20%'; $percent_decr = '-20%';
$percent_200 = '200%'; $percent_200 = '200%';
$new_price = Math::getPercent($fare->price, $percent_incr); $new_price = Math::addPercent($fare->price, $percent_incr);
$new_cost = Math::getPercent($fare->cost, $percent_decr); $new_cost = Math::addPercent($fare->cost, $percent_decr);
$new_capacity = Math::getPercent($fare->capacity, $percent_200); $new_capacity = Math::addPercent($fare->capacity, $percent_200);
$this->fareSvc->setForSubfleet($subfleet, $fare, [ $this->fareSvc->setForSubfleet($subfleet, $fare, [
'price' => $percent_incr, 'price' => $percent_incr,
@@ -468,7 +499,7 @@ class FinanceTest extends TestCase
'cost' => 250, 'cost' => 250,
]); ]);
$fare3_price = Math::getPercent($fare3->price, 300); $fare3_price = Math::addPercent($fare3->price, 300);
// Assign another one to the flight, that's not on the subfleet // Assign another one to the flight, that's not on the subfleet
// This one should NOT be returned in the list of fares // This one should NOT be returned in the list of fares
@@ -592,7 +623,7 @@ class FinanceTest extends TestCase
// Change to a percentage // Change to a percentage
$manual_pay_rate = '50%'; $manual_pay_rate = '50%';
$manual_pay_adjusted = Math::getPercent( $manual_pay_adjusted = Math::addPercent(
$rank->manual_base_pay_rate, $rank->manual_base_pay_rate,
$manual_pay_rate $manual_pay_rate
); );
@@ -900,7 +931,7 @@ class FinanceTest extends TestCase
// $this->assertCount(9, $transactions['transactions']); // $this->assertCount(9, $transactions['transactions']);
$this->assertEquals(3020, $transactions['credits']->getValue()); $this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2040, $transactions['debits']->getValue()); $this->assertEquals(2060, $transactions['debits']->getValue());
// Check that all the different transaction types are there // Check that all the different transaction types are there
// test by the different groups that exist // test by the different groups that exist
@@ -956,7 +987,7 @@ class FinanceTest extends TestCase
// $this->assertCount(9, $transactions['transactions']); // $this->assertCount(9, $transactions['transactions']);
$this->assertEquals(3020, $transactions['credits']->getValue()); $this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2040, $transactions['debits']->getValue()); $this->assertEquals(2060, $transactions['debits']->getValue());
// Check that all the different transaction types are there // Check that all the different transaction types are there
// test by the different groups that exist // test by the different groups that exist
@@ -995,7 +1026,7 @@ class FinanceTest extends TestCase
$transactions = $journalRepo->getAllForObject($pirep2); $transactions = $journalRepo->getAllForObject($pirep2);
$this->assertEquals(3020, $transactions['credits']->getValue()); $this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2140, $transactions['debits']->getValue()); $this->assertEquals(2160, $transactions['debits']->getValue());
// Check that all the different transaction types are there // Check that all the different transaction types are there
// test by the different groups that exist // test by the different groups that exist
-8
View File
@@ -113,20 +113,12 @@ class FlightTest extends TestCase
*/ */
public function testSearchFlight() public function testSearchFlight()
{ {
/** @var \App\Models\User user */
$this->user = factory(User::class)->create(); $this->user = factory(User::class)->create();
$flight = $this->addFlight($this->user); $flight = $this->addFlight($this->user);
/** @var \App\Services\FlightService $flightSvc */
$flightSvc = app(FlightService::class);
$flightSvc->updateCustomFields($flight, [
['name' => '0', 'value' => 'value'],
]);
// search specifically for a flight ID // search specifically for a flight ID
$query = 'flight_id='.$flight->id; $query = 'flight_id='.$flight->id;
$req = $this->get('/api/flights/search?'.$query); $req = $this->get('/api/flights/search?'.$query);
$body = $req->json(['data']);
$req->assertStatus(200); $req->assertStatus(200);
} }
+10 -10
View File
@@ -13,16 +13,16 @@ class MathTest extends TestCase
public function testAddPercent() public function testAddPercent()
{ {
$tests = [ $tests = [
['expected' => 112, 'fn' => Math::getPercent(100, 112)], ['expected' => 112, 'fn' => Math::addPercent(100, 12)],
['expected' => 112, 'fn' => Math::getPercent(100, '112')], ['expected' => 112, 'fn' => Math::addPercent(100, '12')],
['expected' => 112, 'fn' => Math::getPercent(100, '112%')], ['expected' => 112, 'fn' => Math::addPercent(100, '12%')],
['expected' => 112, 'fn' => Math::getPercent(100, '112%')], ['expected' => 112, 'fn' => Math::addPercent(100, '12 %')],
['expected' => 112, 'fn' => Math::getPercent('100 ', '112')], ['expected' => 112, 'fn' => Math::addPercent('100 ', '12')],
['expected' => 112.5, 'fn' => Math::getPercent('100', '112.5')], ['expected' => 112.5, 'fn' => Math::addPercent('100', '12.5')],
['expected' => 88, 'fn' => Math::getPercent('100', 88)], ['expected' => 88, 'fn' => Math::addPercent('100', -12)],
['expected' => 88, 'fn' => Math::getPercent('100', '88')], ['expected' => 88, 'fn' => Math::addPercent('100', '-12')],
['expected' => 88, 'fn' => Math::getPercent('100', '88 %')], ['expected' => 88, 'fn' => Math::addPercent('100', '-12 %')],
['expected' => 88, 'fn' => Math::getPercent('100', '88%')], ['expected' => 88, 'fn' => Math::addPercent('100', '-12%')],
]; ];
foreach ($tests as $test) { foreach ($tests as $test) {
+4 -4
View File
@@ -64,7 +64,7 @@ class MetarTest extends TestCase
$this->assertCount(4, $parsed['clouds']); $this->assertCount(4, $parsed['clouds']);
$this->assertEquals( $this->assertEquals(
'Few at 1676 meters; scattered at 2896 meters; broken sky at 3353 meters; broken sky at 7010 meters', 'A few at 1676 meters; scattered at 2896 meters; broken sky at 3353 meters; broken sky at 7010 meters',
$parsed['clouds_report'] $parsed['clouds_report']
); );
$this->assertEquals(1676.4, $parsed['cloud_height']['m']); $this->assertEquals(1676.4, $parsed['cloud_height']['m']);
@@ -77,7 +77,7 @@ class MetarTest extends TestCase
$this->assertEquals(24.8, $parsed['dew_point']['f']); $this->assertEquals(24.8, $parsed['dew_point']['f']);
$this->assertEquals(33, $parsed['humidity']); $this->assertEquals(33, $parsed['humidity']);
$this->assertEquals(29.58, $parsed['barometer']['inHg']); $this->assertEquals(29.58, $parsed['barometer']['hPa']);
$this->assertEquals('AO2 PK WND 27045/2128 PRESRR SLP018 T01221044', $parsed['remarks']); $this->assertEquals('AO2 PK WND 27045/2128 PRESRR SLP018 T01221044', $parsed['remarks']);
} }
@@ -147,8 +147,8 @@ class MetarTest extends TestCase
$metar = Metar::parse($metar); $metar = Metar::parse($metar);
$this->assertEquals(2, count($metar['clouds'])); $this->assertEquals(2, count($metar['clouds']));
$this->assertEquals('Few at 457 meters; few at 7620 meters', $metar['clouds_report']); $this->assertEquals('A few at 457 meters; a few at 7620 meters', $metar['clouds_report']);
$this->assertEquals('Few at 1500 feet; few at 25000 feet', $metar['clouds_report_ft']); $this->assertEquals('A few at 1500 feet; a few at 25000 feet', $metar['clouds_report_ft']);
} }
/** /**
+3 -3
View File
@@ -1,3 +1,3 @@
airline,type,name,fuel_type,cost_block_hour,cost_delay_minute,ground_handling_multiplier,cargo_capacity,fuel_capacity,gross_weight,fares airline,type,name,fares
VMS,A32X,"Airbus A320",,1000,0,200,,,,Y;B?capacity=100&price=500% VMS,A32X,Airbus A320,Y;B?capacity=100&price=500%
VMS, ,"Boeing 747-400",,1000,0,200,,,,Y;B?capacity=100&price=500% VMS, ,Boeing 747-400,Y;B?capacity=100&price=500%
1 airline type name fuel_type fares cost_block_hour cost_delay_minute ground_handling_multiplier cargo_capacity fuel_capacity gross_weight
2 VMS A32X Airbus A320 Y;B?capacity=100&price=500% 1000 0 200
3 VMS Boeing 747-400 Y;B?capacity=100&price=500% 1000 0 200